From a74d3214d8a0923c7e0d5bcf0f7cbc9104c0801e Mon Sep 17 00:00:00 2001 From: Metaphysiker Date: Sat, 18 Jun 2022 11:05:06 +0200 Subject: [PATCH] precompile --- ...fest-07430103a8793b54bb97ca8f29a0f87d.json | 1 + ...642b10865865e6eb660a6f5896b0666038899c.css | 1 + ...b10865865e6eb660a6f5896b0666038899c.css.gz | Bin 0 -> 3384 bytes ...a7a6fe6af44a59079ac627bd23fb53e8178565.css | 1 + ...6fe6af44a59079ac627bd23fb53e8178565.css.gz | Bin 0 -> 4486 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...7139a315c1dd8fe1683e1cd1d567e6a33ea28e.css | 1 + ...9a315c1dd8fe1683e1cd1d567e6a33ea28e.css.gz | Bin 0 -> 646 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...94cd00883793c1c37c5e5aea3ef6749b4f6d92b.js | 2 + ...d00883793c1c37c5e5aea3ef6749b4f6d92b.js.gz | Bin 0 -> 22 bytes ...ffe6bd18558e812cbca0e6680212b583776cfe.css | 1 + ...6bd18558e812cbca0e6680212b583776cfe.css.gz | Bin 0 -> 754 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...2caec97a8f3e296895064f010ae89541df69849.js | 30169 ++++++++++++++++ ...ec97a8f3e296895064f010ae89541df69849.js.gz | Bin 0 -> 213272 bytes ...b3c1361c0583026cdf35d6a2921bccaea835331.js | 3 + ...1361c0583026cdf35d6a2921bccaea835331.js.gz | Bin 0 -> 23 bytes ...06fa27587b5c76ba1598ef53ffc24ecb6b134ab.js | 1 + ...a27587b5c76ba1598ef53ffc24ecb6b134ab.js.gz | Bin 0 -> 14922 bytes public/assets/tinymce/icons/default/icons.js | 1 + .../assets/tinymce/icons/default/icons.js.gz | 1 + ...6c3080cc77f7a98cf6f76c09d5fd87ac5717060.js | 92 + ...080cc77f7a98cf6f76c09d5fd87ac5717060.js.gz | Bin 0 -> 2919 bytes public/assets/tinymce/jquery.tinymce.js | 1 + public/assets/tinymce/jquery.tinymce.js.gz | 1 + ...0e2feca230c0cd2b8baec69654a05afc55307ce.js | 9 + ...feca230c0cd2b8baec69654a05afc55307ce.js.gz | Bin 0 -> 1632 bytes .../assets/tinymce/plugins/advlist/plugin.js | 1 + .../tinymce/plugins/advlist/plugin.js.gz | 1 + ...01ccba90e0dc57a86514785aa6a2973c3c6a4ef.js | 9 + ...cba90e0dc57a86514785aa6a2973c3c6a4ef.js.gz | Bin 0 -> 1369 bytes .../assets/tinymce/plugins/anchor/plugin.js | 1 + .../tinymce/plugins/anchor/plugin.js.gz | 1 + ...90cb2d1e72484032e13534567908d5ea4a5f0cd.js | 9 + ...b2d1e72484032e13534567908d5ea4a5f0cd.js.gz | Bin 0 -> 1191 bytes .../assets/tinymce/plugins/autolink/plugin.js | 1 + .../tinymce/plugins/autolink/plugin.js.gz | 1 + ...7e5e7b2e6829c84fb951cae557bf9bc537c0daf.js | 9 + ...e7b2e6829c84fb951cae557bf9bc537c0daf.js.gz | Bin 0 -> 1095 bytes .../tinymce/plugins/autoresize/plugin.js | 1 + .../tinymce/plugins/autoresize/plugin.js.gz | 1 + ...d399e02b4c916696d58ba1fddf137c8e956aea5.js | 9 + ...9e02b4c916696d58ba1fddf137c8e956aea5.js.gz | Bin 0 -> 1274 bytes .../assets/tinymce/plugins/autosave/plugin.js | 1 + .../tinymce/plugins/autosave/plugin.js.gz | 1 + ...2f9d3b6cd91b7fefe81c8a8cc09e9e3a63bf603.js | 9 + ...d3b6cd91b7fefe81c8a8cc09e9e3a63bf603.js.gz | Bin 0 -> 997 bytes .../assets/tinymce/plugins/bbcode/plugin.js | 1 + .../tinymce/plugins/bbcode/plugin.js.gz | 1 + ...d75124a7bc8371551475c6f679389428ee80583.js | 9 + ...124a7bc8371551475c6f679389428ee80583.js.gz | Bin 0 -> 4665 bytes .../assets/tinymce/plugins/charmap/plugin.js | 1 + .../tinymce/plugins/charmap/plugin.js.gz | 1 + ...2a95874fc3e025d91d6e77aebf510a33ac6ab3a.js | 9 + ...5874fc3e025d91d6e77aebf510a33ac6ab3a.js.gz | Bin 0 -> 627 bytes public/assets/tinymce/plugins/code/plugin.js | 1 + .../assets/tinymce/plugins/code/plugin.js.gz | 1 + ...74d0725bc50071adb6769547003a39ef6e1a3e3.js | 9 + ...0725bc50071adb6769547003a39ef6e1a3e3.js.gz | Bin 0 -> 14867 bytes .../tinymce/plugins/codesample/plugin.js | 1 + .../tinymce/plugins/codesample/plugin.js.gz | 1 + ...1e2df5be1e69f6108c6897dc564067666beb3a0.js | 9 + ...df5be1e69f6108c6897dc564067666beb3a0.js.gz | Bin 0 -> 349 bytes .../tinymce/plugins/colorpicker/plugin.js | 1 + .../tinymce/plugins/colorpicker/plugin.js.gz | 1 + ...0d88f42476f32ee3c2180ca89137bf07e3a251f.js | 9 + ...8f42476f32ee3c2180ca89137bf07e3a251f.js.gz | Bin 0 -> 349 bytes .../tinymce/plugins/contextmenu/plugin.js | 1 + .../tinymce/plugins/contextmenu/plugin.js.gz | 1 + ...2678446401d1df666a3eb80aad22eb969f2ede1.js | 9 + ...8446401d1df666a3eb80aad22eb969f2ede1.js.gz | Bin 0 -> 1659 bytes .../tinymce/plugins/directionality/plugin.js | 1 + .../plugins/directionality/plugin.js.gz | 1 + ...5f08ad07db747166ce3af67fa8108289e88564d.js | 3 + ...8ad07db747166ce3af67fa8108289e88564d.js.gz | Bin 0 -> 36788 bytes .../plugins/emoticons/js/emojiimages.js | 1 + .../plugins/emoticons/js/emojiimages.js.gz | 1 + ...cc5523af58362fbd5759350b5f217f3f20c7236.js | 2 + ...523af58362fbd5759350b5f217f3f20c7236.js.gz | Bin 0 -> 29374 bytes .../tinymce/plugins/emoticons/js/emojis.js | 1 + .../tinymce/plugins/emoticons/js/emojis.js.gz | 1 + ...0bebb4185f34a9ddb5a6b1a8203ae2f2a43e96f.js | 9 + ...bb4185f34a9ddb5a6b1a8203ae2f2a43e96f.js.gz | Bin 0 -> 2908 bytes .../tinymce/plugins/emoticons/plugin.js | 1 + .../tinymce/plugins/emoticons/plugin.js.gz | 1 + ...4c37e55e6b1ece541b8149427285bbe4731f67e.js | 9 + ...7e55e6b1ece541b8149427285bbe4731f67e.js.gz | Bin 0 -> 2977 bytes .../assets/tinymce/plugins/fullpage/plugin.js | 1 + .../tinymce/plugins/fullpage/plugin.js.gz | 1 + ...a0847dd2d5ecb8657d108c9a08462f9e3b933a3.js | 9 + ...47dd2d5ecb8657d108c9a08462f9e3b933a3.js.gz | Bin 0 -> 4522 bytes .../tinymce/plugins/fullscreen/plugin.js | 1 + .../tinymce/plugins/fullscreen/plugin.js.gz | 1 + ...9e65bc00b7f8b3d949bdffe4392efc9ca251e78.js | 9 + ...5bc00b7f8b3d949bdffe4392efc9ca251e78.js.gz | Bin 0 -> 4846 bytes public/assets/tinymce/plugins/help/plugin.js | 1 + .../assets/tinymce/plugins/help/plugin.js.gz | 1 + ...78dac74447db0707b150a6d82150ad60874ce78.js | 9 + ...ac74447db0707b150a6d82150ad60874ce78.js.gz | Bin 0 -> 428 bytes public/assets/tinymce/plugins/hr/plugin.js | 1 + public/assets/tinymce/plugins/hr/plugin.js.gz | 1 + ...0a69d05cad12e1284666ddad51213c64ca97b39.js | 9 + ...9d05cad12e1284666ddad51213c64ca97b39.js.gz | Bin 0 -> 7256 bytes public/assets/tinymce/plugins/image/plugin.js | 1 + .../assets/tinymce/plugins/image/plugin.js.gz | 1 + ...11cdb80ce4a107d42cb07b2cff4049110e831f8.js | 9 + ...db80ce4a107d42cb07b2cff4049110e831f8.js.gz | Bin 0 -> 6331 bytes .../tinymce/plugins/imagetools/plugin.js | 1 + .../tinymce/plugins/imagetools/plugin.js.gz | 1 + ...461d6cea877764480feb6062dd7f12fd31d3370.js | 9 + ...d6cea877764480feb6062dd7f12fd31d3370.js.gz | Bin 0 -> 1874 bytes .../tinymce/plugins/importcss/plugin.js | 1 + .../tinymce/plugins/importcss/plugin.js.gz | 1 + ...9701dd39d7eca515955af1ce0e677212e4dde61.js | 9 + ...1dd39d7eca515955af1ce0e677212e4dde61.js.gz | Bin 0 -> 1290 bytes .../tinymce/plugins/insertdatetime/plugin.js | 1 + .../plugins/insertdatetime/plugin.js.gz | 1 + ...9b4ad6b58e2bb8a711144abeb22cd61f9bce541.js | 9 + ...ad6b58e2bb8a711144abeb22cd61f9bce541.js.gz | Bin 0 -> 1269 bytes .../tinymce/plugins/legacyoutput/plugin.js | 1 + .../tinymce/plugins/legacyoutput/plugin.js.gz | 1 + ...8c5013203ff7a610f19fd9c5faa7dadd1f1e81c.js | 9 + ...013203ff7a610f19fd9c5faa7dadd1f1e81c.js.gz | Bin 0 -> 5874 bytes public/assets/tinymce/plugins/link/plugin.js | 1 + .../assets/tinymce/plugins/link/plugin.js.gz | 1 + ...116fa98b18afb64668cd306c4e18e3938a371b9.js | 9 + ...fa98b18afb64668cd306c4e18e3938a371b9.js.gz | Bin 0 -> 9927 bytes public/assets/tinymce/plugins/lists/plugin.js | 1 + .../assets/tinymce/plugins/lists/plugin.js.gz | 1 + ...25989b082ca58b71976aa2bc19a798ab4a7a675.js | 9 + ...89b082ca58b71976aa2bc19a798ab4a7a675.js.gz | Bin 0 -> 6615 bytes public/assets/tinymce/plugins/media/plugin.js | 1 + .../assets/tinymce/plugins/media/plugin.js.gz | 1 + ...fc47b35842c7fe94a3d45c087b620cd0fe4ca8e.js | 9 + ...7b35842c7fe94a3d45c087b620cd0fe4ca8e.js.gz | Bin 0 -> 746 bytes .../tinymce/plugins/nonbreaking/plugin.js | 1 + .../tinymce/plugins/nonbreaking/plugin.js.gz | 1 + ...090005634f24783e9801666e44beb74805cc5fd.js | 9 + ...005634f24783e9801666e44beb74805cc5fd.js.gz | Bin 0 -> 887 bytes .../tinymce/plugins/noneditable/plugin.js | 1 + .../tinymce/plugins/noneditable/plugin.js.gz | 1 + ...66f9bab10a7002478fbd45d33ba0168ea9a3466.js | 9 + ...9bab10a7002478fbd45d33ba0168ea9a3466.js.gz | Bin 0 -> 897 bytes .../tinymce/plugins/pagebreak/plugin.js | 1 + .../tinymce/plugins/pagebreak/plugin.js.gz | 1 + ...f4dc38baf14e85697f2954277b79bec78311745.js | 9 + ...c38baf14e85697f2954277b79bec78311745.js.gz | Bin 0 -> 8970 bytes public/assets/tinymce/plugins/paste/plugin.js | 1 + .../assets/tinymce/plugins/paste/plugin.js.gz | 1 + ...67157639888c0c40d8531deeff6aeab5cfe6f4d.js | 9 + ...57639888c0c40d8531deeff6aeab5cfe6f4d.js.gz | Bin 0 -> 1100 bytes .../assets/tinymce/plugins/preview/plugin.js | 1 + .../tinymce/plugins/preview/plugin.js.gz | 1 + ...f91e9064d0b7009796b0246282ea2b6c260f2c7.js | 9 + ...e9064d0b7009796b0246282ea2b6c260f2c7.js.gz | Bin 0 -> 464 bytes public/assets/tinymce/plugins/print/plugin.js | 1 + .../assets/tinymce/plugins/print/plugin.js.gz | 1 + ...58f88738672db7b7744eecee28b23c06171982b.js | 9 + ...88738672db7b7744eecee28b23c06171982b.js.gz | Bin 0 -> 2670 bytes .../tinymce/plugins/quickbars/plugin.js | 1 + .../tinymce/plugins/quickbars/plugin.js.gz | 1 + ...5775e247e11106967e2c09db6d0bf4d98300522.js | 9 + ...5e247e11106967e2c09db6d0bf4d98300522.js.gz | Bin 0 -> 798 bytes public/assets/tinymce/plugins/save/plugin.js | 1 + .../assets/tinymce/plugins/save/plugin.js.gz | 1 + ...4578e5fa57260364dbb26170b0875c2e856c044.js | 9 + ...8e5fa57260364dbb26170b0875c2e856c044.js.gz | Bin 0 -> 5919 bytes .../tinymce/plugins/searchreplace/plugin.js | 1 + .../plugins/searchreplace/plugin.js.gz | 1 + ...fb40270e94727138f8d9ce1e6d3640a16dadad0.js | 9 + ...0270e94727138f8d9ce1e6d3640a16dadad0.js.gz | Bin 0 -> 3964 bytes .../tinymce/plugins/spellchecker/plugin.js | 1 + .../tinymce/plugins/spellchecker/plugin.js.gz | 1 + ...94638df151957dfd3249b8575079070839350b2.js | 9 + ...38df151957dfd3249b8575079070839350b2.js.gz | Bin 0 -> 954 bytes .../assets/tinymce/plugins/tabfocus/plugin.js | 1 + .../tinymce/plugins/tabfocus/plugin.js.gz | 1 + ...f25f1c28b9a15a9dd3285f1c6794cc322ace474.js | 9 + ...f1c28b9a15a9dd3285f1c6794cc322ace474.js.gz | Bin 0 -> 40192 bytes public/assets/tinymce/plugins/table/plugin.js | 1 + .../assets/tinymce/plugins/table/plugin.js.gz | 1 + ...2886d85953b3fcf8c6cc08a54cb506f785d8a45.js | 9 + ...6d85953b3fcf8c6cc08a54cb506f785d8a45.js.gz | Bin 0 -> 3378 bytes .../assets/tinymce/plugins/template/plugin.js | 1 + .../tinymce/plugins/template/plugin.js.gz | 1 + ...7d2029d2f7b977f5d53321c8db480bcf33f4d5b.js | 9 + ...029d2f7b977f5d53321c8db480bcf33f4d5b.js.gz | Bin 0 -> 346 bytes .../tinymce/plugins/textcolor/plugin.js | 1 + .../tinymce/plugins/textcolor/plugin.js.gz | 1 + ...9ece6f1f7eb4a5d05720009098f4d87134948c6.js | 9 + ...e6f1f7eb4a5d05720009098f4d87134948c6.js.gz | Bin 0 -> 6083 bytes .../tinymce/plugins/textpattern/plugin.js | 1 + .../tinymce/plugins/textpattern/plugin.js.gz | 1 + ...80c4220ca6dcf7845a3ab94dae8d778349ef11a.js | 9 + ...4220ca6dcf7845a3ab94dae8d778349ef11a.js.gz | Bin 0 -> 1517 bytes public/assets/tinymce/plugins/toc/plugin.js | 1 + .../assets/tinymce/plugins/toc/plugin.js.gz | 1 + ...d4301e3aa71f484a8900c37389b8c32a47d494c.js | 9 + ...01e3aa71f484a8900c37389b8c32a47d494c.js.gz | Bin 0 -> 680 bytes .../tinymce/plugins/visualblocks/plugin.js | 1 + .../tinymce/plugins/visualblocks/plugin.js.gz | 1 + ...8a54c9169605c877cac621ecae4b8bb68c331ff.js | 9 + ...4c9169605c877cac621ecae4b8bb68c331ff.js.gz | Bin 0 -> 2507 bytes .../tinymce/plugins/visualchars/plugin.js | 1 + .../tinymce/plugins/visualchars/plugin.js.gz | 1 + ...7621ab2e9c2254b87b3304ea2ce746f943bbf34.js | 9 + ...1ab2e9c2254b87b3304ea2ce746f943bbf34.js.gz | Bin 0 -> 5313 bytes .../tinymce/plugins/wordcount/plugin.js | 1 + .../tinymce/plugins/wordcount/plugin.js.gz | 1 + ...1643167dffab7a473d1a133f59a245ce2bb03e.css | 1 + ...3167dffab7a473d1a133f59a245ce2bb03e.css.gz | Bin 0 -> 501 bytes .../tinymce/skins/content/dark/content.css | 1 + .../tinymce/skins/content/dark/content.css.gz | 1 + ...1643167dffab7a473d1a133f59a245ce2bb03e.css | 1 + ...3167dffab7a473d1a133f59a245ce2bb03e.css.gz | Bin 0 -> 501 bytes .../skins/content/dark/content.min.css | 1 + .../skins/content/dark/content.min.css.gz | 1 + ...da3dfe3cf5bfa1bc1295157bf2a7c472bc6ded.css | 1 + ...dfe3cf5bfa1bc1295157bf2a7c472bc6ded.css.gz | Bin 0 -> 470 bytes .../tinymce/skins/content/default/content.css | 1 + .../skins/content/default/content.css.gz | 1 + ...da3dfe3cf5bfa1bc1295157bf2a7c472bc6ded.css | 1 + ...dfe3cf5bfa1bc1295157bf2a7c472bc6ded.css.gz | Bin 0 -> 470 bytes .../skins/content/default/content.min.css | 1 + .../skins/content/default/content.min.css.gz | 1 + ...89e0bdfb6f3da4c4c2fd2aa94cb1b7991ac9b9.css | 1 + ...0bdfb6f3da4c4c2fd2aa94cb1b7991ac9b9.css.gz | Bin 0 -> 534 bytes .../skins/content/document/content.css | 1 + .../skins/content/document/content.css.gz | 1 + ...89e0bdfb6f3da4c4c2fd2aa94cb1b7991ac9b9.css | 1 + ...0bdfb6f3da4c4c2fd2aa94cb1b7991ac9b9.css.gz | Bin 0 -> 534 bytes .../skins/content/document/content.min.css | 1 + .../skins/content/document/content.min.css.gz | 1 + ...1f91902b7fff8d5b8f7028c7ba4bf1c6b7e1ed.css | 1 + ...1902b7fff8d5b8f7028c7ba4bf1c6b7e1ed.css.gz | Bin 0 -> 482 bytes .../tinymce/skins/content/writer/content.css | 1 + .../skins/content/writer/content.css.gz | 1 + ...1f91902b7fff8d5b8f7028c7ba4bf1c6b7e1ed.css | 1 + ...1902b7fff8d5b8f7028c7ba4bf1c6b7e1ed.css.gz | Bin 0 -> 482 bytes .../skins/content/writer/content.min.css | 1 + .../skins/content/writer/content.min.css.gz | 1 + ...1df9acb0fb5e52a3ea9d3ea5efdc22436e2131.css | 1 + ...9acb0fb5e52a3ea9d3ea5efdc22436e2131.css.gz | Bin 0 -> 5333 bytes .../tinymce/skins/ui/oxide-dark/content.css | 1 + .../skins/ui/oxide-dark/content.css.gz | 1 + ...2a6e90568c903dac8841b59c6af9664a716ca6.css | 1 + ...e90568c903dac8841b59c6af9664a716ca6.css.gz | Bin 0 -> 5356 bytes .../skins/ui/oxide-dark/content.inline.css | 1 + .../skins/ui/oxide-dark/content.inline.css.gz | 1 + ...2a6e90568c903dac8841b59c6af9664a716ca6.css | 1 + ...e90568c903dac8841b59c6af9664a716ca6.css.gz | Bin 0 -> 5356 bytes .../ui/oxide-dark/content.inline.min.css | 1 + .../ui/oxide-dark/content.inline.min.css.gz | 1 + ...1df9acb0fb5e52a3ea9d3ea5efdc22436e2131.css | 1 + ...9acb0fb5e52a3ea9d3ea5efdc22436e2131.css.gz | Bin 0 -> 5333 bytes .../skins/ui/oxide-dark/content.min.css | 1 + .../skins/ui/oxide-dark/content.min.css.gz | 1 + ...cff16dfc5be961d3ffebd1641c0a6066f85608.css | 1 + ...16dfc5be961d3ffebd1641c0a6066f85608.css.gz | Bin 0 -> 200 bytes .../skins/ui/oxide-dark/content.mobile.css | 1 + .../skins/ui/oxide-dark/content.mobile.css.gz | 1 + ...cff16dfc5be961d3ffebd1641c0a6066f85608.css | 1 + ...16dfc5be961d3ffebd1641c0a6066f85608.css.gz | Bin 0 -> 200 bytes .../ui/oxide-dark/content.mobile.min.css | 1 + .../ui/oxide-dark/content.mobile.min.css.gz | 1 + ...8b214166265f10763acebdf53af93713ef664.woff | Bin 0 -> 4624 bytes .../ui/oxide-dark/fonts/tinymce-mobile.woff | 1 + ...0588b58b77afddc3812967ad4204728dd97fc5.css | 1 + ...8b58b77afddc3812967ad4204728dd97fc5.css.gz | Bin 0 -> 9670 bytes .../tinymce/skins/ui/oxide-dark/skin.css | 1 + .../tinymce/skins/ui/oxide-dark/skin.css.gz | 1 + ...0588b58b77afddc3812967ad4204728dd97fc5.css | 1 + ...8b58b77afddc3812967ad4204728dd97fc5.css.gz | Bin 0 -> 9670 bytes .../tinymce/skins/ui/oxide-dark/skin.min.css | 1 + .../skins/ui/oxide-dark/skin.min.css.gz | 1 + ...e1760fa6f6ddb8604d5448dda4a2a206c95bac.css | 1 + ...60fa6f6ddb8604d5448dda4a2a206c95bac.css.gz | Bin 0 -> 2786 bytes .../skins/ui/oxide-dark/skin.mobile.css | 1 + .../skins/ui/oxide-dark/skin.mobile.css.gz | 1 + ...e1760fa6f6ddb8604d5448dda4a2a206c95bac.css | 1 + ...60fa6f6ddb8604d5448dda4a2a206c95bac.css.gz | Bin 0 -> 2786 bytes .../skins/ui/oxide-dark/skin.mobile.min.css | 1 + .../ui/oxide-dark/skin.mobile.min.css.gz | 1 + ...1b443e8e5317010b2e92a9bc133da9431fa80b.css | 1 + ...43e8e5317010b2e92a9bc133da9431fa80b.css.gz | Bin 0 -> 275 bytes .../skins/ui/oxide-dark/skin.shadowdom.css | 1 + .../skins/ui/oxide-dark/skin.shadowdom.css.gz | 1 + ...1b443e8e5317010b2e92a9bc133da9431fa80b.css | 1 + ...43e8e5317010b2e92a9bc133da9431fa80b.css.gz | Bin 0 -> 275 bytes .../ui/oxide-dark/skin.shadowdom.min.css | 1 + .../ui/oxide-dark/skin.shadowdom.min.css.gz | 1 + ...b760b966148873e452c1b6085f367ef3d63400.css | 1 + ...0b966148873e452c1b6085f367ef3d63400.css.gz | Bin 0 -> 5376 bytes .../assets/tinymce/skins/ui/oxide/content.css | 1 + .../tinymce/skins/ui/oxide/content.css.gz | 1 + ...2a6e90568c903dac8841b59c6af9664a716ca6.css | 1 + ...e90568c903dac8841b59c6af9664a716ca6.css.gz | Bin 0 -> 5356 bytes .../tinymce/skins/ui/oxide/content.inline.css | 1 + .../skins/ui/oxide/content.inline.css.gz | 1 + ...2a6e90568c903dac8841b59c6af9664a716ca6.css | 1 + ...e90568c903dac8841b59c6af9664a716ca6.css.gz | Bin 0 -> 5356 bytes .../skins/ui/oxide/content.inline.min.css | 1 + .../skins/ui/oxide/content.inline.min.css.gz | 1 + ...b760b966148873e452c1b6085f367ef3d63400.css | 1 + ...0b966148873e452c1b6085f367ef3d63400.css.gz | Bin 0 -> 5376 bytes .../tinymce/skins/ui/oxide/content.min.css | 1 + .../tinymce/skins/ui/oxide/content.min.css.gz | 1 + ...cff16dfc5be961d3ffebd1641c0a6066f85608.css | 1 + ...16dfc5be961d3ffebd1641c0a6066f85608.css.gz | Bin 0 -> 200 bytes .../tinymce/skins/ui/oxide/content.mobile.css | 1 + .../skins/ui/oxide/content.mobile.css.gz | 1 + ...cff16dfc5be961d3ffebd1641c0a6066f85608.css | 1 + ...16dfc5be961d3ffebd1641c0a6066f85608.css.gz | Bin 0 -> 200 bytes .../skins/ui/oxide/content.mobile.min.css | 1 + .../skins/ui/oxide/content.mobile.min.css.gz | 1 + ...8b214166265f10763acebdf53af93713ef664.woff | Bin 0 -> 4624 bytes .../skins/ui/oxide/fonts/tinymce-mobile.woff | 1 + ...2be1bd9fc48aed59a15011aeec9b7a9aa331bf.css | 1 + ...1bd9fc48aed59a15011aeec9b7a9aa331bf.css.gz | Bin 0 -> 9658 bytes public/assets/tinymce/skins/ui/oxide/skin.css | 1 + .../assets/tinymce/skins/ui/oxide/skin.css.gz | 1 + ...2be1bd9fc48aed59a15011aeec9b7a9aa331bf.css | 1 + ...1bd9fc48aed59a15011aeec9b7a9aa331bf.css.gz | Bin 0 -> 9658 bytes .../tinymce/skins/ui/oxide/skin.min.css | 1 + .../tinymce/skins/ui/oxide/skin.min.css.gz | 1 + ...e1760fa6f6ddb8604d5448dda4a2a206c95bac.css | 1 + ...60fa6f6ddb8604d5448dda4a2a206c95bac.css.gz | Bin 0 -> 2786 bytes .../tinymce/skins/ui/oxide/skin.mobile.css | 1 + .../tinymce/skins/ui/oxide/skin.mobile.css.gz | 1 + ...e1760fa6f6ddb8604d5448dda4a2a206c95bac.css | 1 + ...60fa6f6ddb8604d5448dda4a2a206c95bac.css.gz | Bin 0 -> 2786 bytes .../skins/ui/oxide/skin.mobile.min.css | 1 + .../skins/ui/oxide/skin.mobile.min.css.gz | 1 + ...1b443e8e5317010b2e92a9bc133da9431fa80b.css | 1 + ...43e8e5317010b2e92a9bc133da9431fa80b.css.gz | Bin 0 -> 275 bytes .../tinymce/skins/ui/oxide/skin.shadowdom.css | 1 + .../skins/ui/oxide/skin.shadowdom.css.gz | 1 + ...1b443e8e5317010b2e92a9bc133da9431fa80b.css | 1 + ...43e8e5317010b2e92a9bc133da9431fa80b.css.gz | Bin 0 -> 275 bytes .../skins/ui/oxide/skin.shadowdom.min.css | 1 + .../skins/ui/oxide/skin.shadowdom.min.css.gz | 1 + ...9b98027dd611126977006e5c449ab05a74f5b0d.js | 9 + ...8027dd611126977006e5c449ab05a74f5b0d.js.gz | Bin 0 -> 52087 bytes public/assets/tinymce/themes/mobile/theme.js | 1 + .../assets/tinymce/themes/mobile/theme.js.gz | 1 + ...9af35f906b30b9085aea2c3397155bbadc54160.js | 9 + ...35f906b30b9085aea2c3397155bbadc54160.js.gz | Bin 0 -> 124904 bytes public/assets/tinymce/themes/silver/theme.js | 1 + .../assets/tinymce/themes/silver/theme.js.gz | 1 + ...d8cd0c5c08472745b3eb3f49461b10704ac2878.js | 9 + ...d0c5c08472745b3eb3f49461b10704ac2878.js.gz | Bin 0 -> 134079 bytes public/assets/tinymce/tinymce.js | 1 + public/assets/tinymce/tinymce.js.gz | 1 + ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes ...3cf35ef376b55d125bb4516cebeb14ce788597.css | 0 ...35ef376b55d125bb4516cebeb14ce788597.css.gz | Bin 0 -> 20 bytes 401 files changed, 30900 insertions(+) create mode 100644 public/assets/.sprockets-manifest-07430103a8793b54bb97ca8f29a0f87d.json create mode 100644 public/assets/actiontext-f1a367c28b0d2ec5aca43ca3a6642b10865865e6eb660a6f5896b0666038899c.css create mode 100644 public/assets/actiontext-f1a367c28b0d2ec5aca43ca3a6642b10865865e6eb660a6f5896b0666038899c.css.gz create mode 100644 public/assets/application-68e4c9cf504edbaa670b008700a7a6fe6af44a59079ac627bd23fb53e8178565.css create mode 100644 public/assets/application-68e4c9cf504edbaa670b008700a7a6fe6af44a59079ac627bd23fb53e8178565.css.gz create mode 100644 public/assets/articles-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/articles-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/bibtex-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/bibtex-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/bibtex_entries-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/bibtex_entries-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/bibtex_files-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/bibtex_files-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/blocked_users-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/blocked_users-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/blog_posts-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/blog_posts-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/codes-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/codes-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/custom-873f1ee6b4f4137809e60fd6a57139a315c1dd8fe1683e1cd1d567e6a33ea28e.css create mode 100644 public/assets/custom-873f1ee6b4f4137809e60fd6a57139a315c1dd8fe1683e1cd1d567e6a33ea28e.css.gz create mode 100644 public/assets/editor-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/editor-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/external_referee_submission-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/external_referee_submission-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/external_referee_submissions-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/external_referee_submissions-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/external_referees-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/external_referees-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/histories-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/histories-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/issues-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/issues-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/jsons-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/jsons-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/manifest-b4bf6e57a53c2bdb55b8998cc94cd00883793c1c37c5e5aea3ef6749b4f6d92b.js create mode 100644 public/assets/manifest-b4bf6e57a53c2bdb55b8998cc94cd00883793c1c37c5e5aea3ef6749b4f6d92b.js.gz create mode 100644 public/assets/markdown-fc5502f8bf675ab6f1c2d569fdffe6bd18558e812cbca0e6680212b583776cfe.css create mode 100644 public/assets/markdown-fc5502f8bf675ab6f1c2d569fdffe6bd18558e812cbca0e6680212b583776cfe.css.gz create mode 100644 public/assets/pages-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/pages-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/pandoc-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/pandoc-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/reports-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/reports-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/requested_reviewers-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/requested_reviewers-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/scaffolds-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/scaffolds-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/static_pages-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/static_pages-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/stuffs-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/stuffs-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/submissions-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/submissions-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/test-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/test-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/tinymce-213f84c2ea0b76dbe066217672caec97a8f3e296895064f010ae89541df69849.js create mode 100644 public/assets/tinymce-213f84c2ea0b76dbe066217672caec97a8f3e296895064f010ae89541df69849.js.gz create mode 100644 public/assets/tinymce-rails.manifest-dad05bf766af0fe3d79dd746db3c1361c0583026cdf35d6a2921bccaea835331.js create mode 100644 public/assets/tinymce-rails.manifest-dad05bf766af0fe3d79dd746db3c1361c0583026cdf35d6a2921bccaea835331.js.gz create mode 100644 public/assets/tinymce/icons/default/icons-a0721895c1cc12748bd1564f906fa27587b5c76ba1598ef53ffc24ecb6b134ab.js create mode 100644 public/assets/tinymce/icons/default/icons-a0721895c1cc12748bd1564f906fa27587b5c76ba1598ef53ffc24ecb6b134ab.js.gz create mode 120000 public/assets/tinymce/icons/default/icons.js create mode 120000 public/assets/tinymce/icons/default/icons.js.gz create mode 100644 public/assets/tinymce/jquery.tinymce-3816ed398fa3cae7cfa3778396c3080cc77f7a98cf6f76c09d5fd87ac5717060.js create mode 100644 public/assets/tinymce/jquery.tinymce-3816ed398fa3cae7cfa3778396c3080cc77f7a98cf6f76c09d5fd87ac5717060.js.gz create mode 120000 public/assets/tinymce/jquery.tinymce.js create mode 120000 public/assets/tinymce/jquery.tinymce.js.gz create mode 100644 public/assets/tinymce/plugins/advlist/plugin-4fa030df2a1a571b367acd30f0e2feca230c0cd2b8baec69654a05afc55307ce.js create mode 100644 public/assets/tinymce/plugins/advlist/plugin-4fa030df2a1a571b367acd30f0e2feca230c0cd2b8baec69654a05afc55307ce.js.gz create mode 120000 public/assets/tinymce/plugins/advlist/plugin.js create mode 120000 public/assets/tinymce/plugins/advlist/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/anchor/plugin-5a93606694b7a0bd66e2f699801ccba90e0dc57a86514785aa6a2973c3c6a4ef.js create mode 100644 public/assets/tinymce/plugins/anchor/plugin-5a93606694b7a0bd66e2f699801ccba90e0dc57a86514785aa6a2973c3c6a4ef.js.gz create mode 120000 public/assets/tinymce/plugins/anchor/plugin.js create mode 120000 public/assets/tinymce/plugins/anchor/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/autolink/plugin-a3a7a374935cef0e281d7fe0d90cb2d1e72484032e13534567908d5ea4a5f0cd.js create mode 100644 public/assets/tinymce/plugins/autolink/plugin-a3a7a374935cef0e281d7fe0d90cb2d1e72484032e13534567908d5ea4a5f0cd.js.gz create mode 120000 public/assets/tinymce/plugins/autolink/plugin.js create mode 120000 public/assets/tinymce/plugins/autolink/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/autoresize/plugin-8f999eb1efa36730560646f2f7e5e7b2e6829c84fb951cae557bf9bc537c0daf.js create mode 100644 public/assets/tinymce/plugins/autoresize/plugin-8f999eb1efa36730560646f2f7e5e7b2e6829c84fb951cae557bf9bc537c0daf.js.gz create mode 120000 public/assets/tinymce/plugins/autoresize/plugin.js create mode 120000 public/assets/tinymce/plugins/autoresize/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/autosave/plugin-3fd90e874fb12511855540e04d399e02b4c916696d58ba1fddf137c8e956aea5.js create mode 100644 public/assets/tinymce/plugins/autosave/plugin-3fd90e874fb12511855540e04d399e02b4c916696d58ba1fddf137c8e956aea5.js.gz create mode 120000 public/assets/tinymce/plugins/autosave/plugin.js create mode 120000 public/assets/tinymce/plugins/autosave/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/bbcode/plugin-218d7766e7fcc1fb224d31eef2f9d3b6cd91b7fefe81c8a8cc09e9e3a63bf603.js create mode 100644 public/assets/tinymce/plugins/bbcode/plugin-218d7766e7fcc1fb224d31eef2f9d3b6cd91b7fefe81c8a8cc09e9e3a63bf603.js.gz create mode 120000 public/assets/tinymce/plugins/bbcode/plugin.js create mode 120000 public/assets/tinymce/plugins/bbcode/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/charmap/plugin-0b32f067c1ea7b80c584da52fd75124a7bc8371551475c6f679389428ee80583.js create mode 100644 public/assets/tinymce/plugins/charmap/plugin-0b32f067c1ea7b80c584da52fd75124a7bc8371551475c6f679389428ee80583.js.gz create mode 120000 public/assets/tinymce/plugins/charmap/plugin.js create mode 120000 public/assets/tinymce/plugins/charmap/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/code/plugin-4b8cf16ed0534566bc6a7056d2a95874fc3e025d91d6e77aebf510a33ac6ab3a.js create mode 100644 public/assets/tinymce/plugins/code/plugin-4b8cf16ed0534566bc6a7056d2a95874fc3e025d91d6e77aebf510a33ac6ab3a.js.gz create mode 120000 public/assets/tinymce/plugins/code/plugin.js create mode 120000 public/assets/tinymce/plugins/code/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/codesample/plugin-58dce15e40cdb579a3a21b9ce74d0725bc50071adb6769547003a39ef6e1a3e3.js create mode 100644 public/assets/tinymce/plugins/codesample/plugin-58dce15e40cdb579a3a21b9ce74d0725bc50071adb6769547003a39ef6e1a3e3.js.gz create mode 120000 public/assets/tinymce/plugins/codesample/plugin.js create mode 120000 public/assets/tinymce/plugins/codesample/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/colorpicker/plugin-fd701e4b52db508ae6794a0811e2df5be1e69f6108c6897dc564067666beb3a0.js create mode 100644 public/assets/tinymce/plugins/colorpicker/plugin-fd701e4b52db508ae6794a0811e2df5be1e69f6108c6897dc564067666beb3a0.js.gz create mode 120000 public/assets/tinymce/plugins/colorpicker/plugin.js create mode 120000 public/assets/tinymce/plugins/colorpicker/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/contextmenu/plugin-466629e42bf8c9385163805640d88f42476f32ee3c2180ca89137bf07e3a251f.js create mode 100644 public/assets/tinymce/plugins/contextmenu/plugin-466629e42bf8c9385163805640d88f42476f32ee3c2180ca89137bf07e3a251f.js.gz create mode 120000 public/assets/tinymce/plugins/contextmenu/plugin.js create mode 120000 public/assets/tinymce/plugins/contextmenu/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/directionality/plugin-bf67abe0d37244a65c89fca222678446401d1df666a3eb80aad22eb969f2ede1.js create mode 100644 public/assets/tinymce/plugins/directionality/plugin-bf67abe0d37244a65c89fca222678446401d1df666a3eb80aad22eb969f2ede1.js.gz create mode 120000 public/assets/tinymce/plugins/directionality/plugin.js create mode 120000 public/assets/tinymce/plugins/directionality/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/emoticons/js/emojiimages-8d59e6cafd8ee4961cd4f31515f08ad07db747166ce3af67fa8108289e88564d.js create mode 100644 public/assets/tinymce/plugins/emoticons/js/emojiimages-8d59e6cafd8ee4961cd4f31515f08ad07db747166ce3af67fa8108289e88564d.js.gz create mode 120000 public/assets/tinymce/plugins/emoticons/js/emojiimages.js create mode 120000 public/assets/tinymce/plugins/emoticons/js/emojiimages.js.gz create mode 100644 public/assets/tinymce/plugins/emoticons/js/emojis-3006b2aae9b4d0b2df2068968cc5523af58362fbd5759350b5f217f3f20c7236.js create mode 100644 public/assets/tinymce/plugins/emoticons/js/emojis-3006b2aae9b4d0b2df2068968cc5523af58362fbd5759350b5f217f3f20c7236.js.gz create mode 120000 public/assets/tinymce/plugins/emoticons/js/emojis.js create mode 120000 public/assets/tinymce/plugins/emoticons/js/emojis.js.gz create mode 100644 public/assets/tinymce/plugins/emoticons/plugin-281a10488cd27bf645f84655f0bebb4185f34a9ddb5a6b1a8203ae2f2a43e96f.js create mode 100644 public/assets/tinymce/plugins/emoticons/plugin-281a10488cd27bf645f84655f0bebb4185f34a9ddb5a6b1a8203ae2f2a43e96f.js.gz create mode 120000 public/assets/tinymce/plugins/emoticons/plugin.js create mode 120000 public/assets/tinymce/plugins/emoticons/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/fullpage/plugin-9922360abd8ce20550ef2271d4c37e55e6b1ece541b8149427285bbe4731f67e.js create mode 100644 public/assets/tinymce/plugins/fullpage/plugin-9922360abd8ce20550ef2271d4c37e55e6b1ece541b8149427285bbe4731f67e.js.gz create mode 120000 public/assets/tinymce/plugins/fullpage/plugin.js create mode 120000 public/assets/tinymce/plugins/fullpage/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/fullscreen/plugin-82a33cc62d1752e94284042a7a0847dd2d5ecb8657d108c9a08462f9e3b933a3.js create mode 100644 public/assets/tinymce/plugins/fullscreen/plugin-82a33cc62d1752e94284042a7a0847dd2d5ecb8657d108c9a08462f9e3b933a3.js.gz create mode 120000 public/assets/tinymce/plugins/fullscreen/plugin.js create mode 120000 public/assets/tinymce/plugins/fullscreen/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/help/plugin-21f93399a4c6379ac6afe1ef49e65bc00b7f8b3d949bdffe4392efc9ca251e78.js create mode 100644 public/assets/tinymce/plugins/help/plugin-21f93399a4c6379ac6afe1ef49e65bc00b7f8b3d949bdffe4392efc9ca251e78.js.gz create mode 120000 public/assets/tinymce/plugins/help/plugin.js create mode 120000 public/assets/tinymce/plugins/help/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/hr/plugin-ef8c674f8aa76387c1d5508e978dac74447db0707b150a6d82150ad60874ce78.js create mode 100644 public/assets/tinymce/plugins/hr/plugin-ef8c674f8aa76387c1d5508e978dac74447db0707b150a6d82150ad60874ce78.js.gz create mode 120000 public/assets/tinymce/plugins/hr/plugin.js create mode 120000 public/assets/tinymce/plugins/hr/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/image/plugin-81b520f6cba4e087d98521c960a69d05cad12e1284666ddad51213c64ca97b39.js create mode 100644 public/assets/tinymce/plugins/image/plugin-81b520f6cba4e087d98521c960a69d05cad12e1284666ddad51213c64ca97b39.js.gz create mode 120000 public/assets/tinymce/plugins/image/plugin.js create mode 120000 public/assets/tinymce/plugins/image/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/imagetools/plugin-5f12b0cffddfd1af1a5ab053111cdb80ce4a107d42cb07b2cff4049110e831f8.js create mode 100644 public/assets/tinymce/plugins/imagetools/plugin-5f12b0cffddfd1af1a5ab053111cdb80ce4a107d42cb07b2cff4049110e831f8.js.gz create mode 120000 public/assets/tinymce/plugins/imagetools/plugin.js create mode 120000 public/assets/tinymce/plugins/imagetools/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/importcss/plugin-ca965b67bec04673901973233461d6cea877764480feb6062dd7f12fd31d3370.js create mode 100644 public/assets/tinymce/plugins/importcss/plugin-ca965b67bec04673901973233461d6cea877764480feb6062dd7f12fd31d3370.js.gz create mode 120000 public/assets/tinymce/plugins/importcss/plugin.js create mode 120000 public/assets/tinymce/plugins/importcss/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/insertdatetime/plugin-b60c2b569baf4f6c5bbb4f2b99701dd39d7eca515955af1ce0e677212e4dde61.js create mode 100644 public/assets/tinymce/plugins/insertdatetime/plugin-b60c2b569baf4f6c5bbb4f2b99701dd39d7eca515955af1ce0e677212e4dde61.js.gz create mode 120000 public/assets/tinymce/plugins/insertdatetime/plugin.js create mode 120000 public/assets/tinymce/plugins/insertdatetime/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/legacyoutput/plugin-c460b8361cb93f80823af1cc29b4ad6b58e2bb8a711144abeb22cd61f9bce541.js create mode 100644 public/assets/tinymce/plugins/legacyoutput/plugin-c460b8361cb93f80823af1cc29b4ad6b58e2bb8a711144abeb22cd61f9bce541.js.gz create mode 120000 public/assets/tinymce/plugins/legacyoutput/plugin.js create mode 120000 public/assets/tinymce/plugins/legacyoutput/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/link/plugin-8ee260979cd6327d7ed1bd3a08c5013203ff7a610f19fd9c5faa7dadd1f1e81c.js create mode 100644 public/assets/tinymce/plugins/link/plugin-8ee260979cd6327d7ed1bd3a08c5013203ff7a610f19fd9c5faa7dadd1f1e81c.js.gz create mode 120000 public/assets/tinymce/plugins/link/plugin.js create mode 120000 public/assets/tinymce/plugins/link/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/lists/plugin-0ae75e7f9b0630c93d30efaa3116fa98b18afb64668cd306c4e18e3938a371b9.js create mode 100644 public/assets/tinymce/plugins/lists/plugin-0ae75e7f9b0630c93d30efaa3116fa98b18afb64668cd306c4e18e3938a371b9.js.gz create mode 120000 public/assets/tinymce/plugins/lists/plugin.js create mode 120000 public/assets/tinymce/plugins/lists/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/media/plugin-1aad849a21686186c2935ca9c25989b082ca58b71976aa2bc19a798ab4a7a675.js create mode 100644 public/assets/tinymce/plugins/media/plugin-1aad849a21686186c2935ca9c25989b082ca58b71976aa2bc19a798ab4a7a675.js.gz create mode 120000 public/assets/tinymce/plugins/media/plugin.js create mode 120000 public/assets/tinymce/plugins/media/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/nonbreaking/plugin-be44fd68bf6f4469172b56508fc47b35842c7fe94a3d45c087b620cd0fe4ca8e.js create mode 100644 public/assets/tinymce/plugins/nonbreaking/plugin-be44fd68bf6f4469172b56508fc47b35842c7fe94a3d45c087b620cd0fe4ca8e.js.gz create mode 120000 public/assets/tinymce/plugins/nonbreaking/plugin.js create mode 120000 public/assets/tinymce/plugins/nonbreaking/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/noneditable/plugin-9c03c06e30f4efcf0e688bd80090005634f24783e9801666e44beb74805cc5fd.js create mode 100644 public/assets/tinymce/plugins/noneditable/plugin-9c03c06e30f4efcf0e688bd80090005634f24783e9801666e44beb74805cc5fd.js.gz create mode 120000 public/assets/tinymce/plugins/noneditable/plugin.js create mode 120000 public/assets/tinymce/plugins/noneditable/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/pagebreak/plugin-8e90262bf60a15a6110ff664066f9bab10a7002478fbd45d33ba0168ea9a3466.js create mode 100644 public/assets/tinymce/plugins/pagebreak/plugin-8e90262bf60a15a6110ff664066f9bab10a7002478fbd45d33ba0168ea9a3466.js.gz create mode 120000 public/assets/tinymce/plugins/pagebreak/plugin.js create mode 120000 public/assets/tinymce/plugins/pagebreak/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/paste/plugin-112f7ce8064e159ecd7450adcf4dc38baf14e85697f2954277b79bec78311745.js create mode 100644 public/assets/tinymce/plugins/paste/plugin-112f7ce8064e159ecd7450adcf4dc38baf14e85697f2954277b79bec78311745.js.gz create mode 120000 public/assets/tinymce/plugins/paste/plugin.js create mode 120000 public/assets/tinymce/plugins/paste/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/preview/plugin-8e20bf167638b33a5bfa78ad467157639888c0c40d8531deeff6aeab5cfe6f4d.js create mode 100644 public/assets/tinymce/plugins/preview/plugin-8e20bf167638b33a5bfa78ad467157639888c0c40d8531deeff6aeab5cfe6f4d.js.gz create mode 120000 public/assets/tinymce/plugins/preview/plugin.js create mode 120000 public/assets/tinymce/plugins/preview/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/print/plugin-a4287d7b3c115aaa79ad5a686f91e9064d0b7009796b0246282ea2b6c260f2c7.js create mode 100644 public/assets/tinymce/plugins/print/plugin-a4287d7b3c115aaa79ad5a686f91e9064d0b7009796b0246282ea2b6c260f2c7.js.gz create mode 120000 public/assets/tinymce/plugins/print/plugin.js create mode 120000 public/assets/tinymce/plugins/print/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/quickbars/plugin-51c2f1f2edde220b7484719d358f88738672db7b7744eecee28b23c06171982b.js create mode 100644 public/assets/tinymce/plugins/quickbars/plugin-51c2f1f2edde220b7484719d358f88738672db7b7744eecee28b23c06171982b.js.gz create mode 120000 public/assets/tinymce/plugins/quickbars/plugin.js create mode 120000 public/assets/tinymce/plugins/quickbars/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/save/plugin-7b963af33781ba2536a8f3f585775e247e11106967e2c09db6d0bf4d98300522.js create mode 100644 public/assets/tinymce/plugins/save/plugin-7b963af33781ba2536a8f3f585775e247e11106967e2c09db6d0bf4d98300522.js.gz create mode 120000 public/assets/tinymce/plugins/save/plugin.js create mode 120000 public/assets/tinymce/plugins/save/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/searchreplace/plugin-dd912aca3c235cee61a8706064578e5fa57260364dbb26170b0875c2e856c044.js create mode 100644 public/assets/tinymce/plugins/searchreplace/plugin-dd912aca3c235cee61a8706064578e5fa57260364dbb26170b0875c2e856c044.js.gz create mode 120000 public/assets/tinymce/plugins/searchreplace/plugin.js create mode 120000 public/assets/tinymce/plugins/searchreplace/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/spellchecker/plugin-31180f2712efef9df656fe514fb40270e94727138f8d9ce1e6d3640a16dadad0.js create mode 100644 public/assets/tinymce/plugins/spellchecker/plugin-31180f2712efef9df656fe514fb40270e94727138f8d9ce1e6d3640a16dadad0.js.gz create mode 120000 public/assets/tinymce/plugins/spellchecker/plugin.js create mode 120000 public/assets/tinymce/plugins/spellchecker/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/tabfocus/plugin-46fd007da8f1c080fe7ac277994638df151957dfd3249b8575079070839350b2.js create mode 100644 public/assets/tinymce/plugins/tabfocus/plugin-46fd007da8f1c080fe7ac277994638df151957dfd3249b8575079070839350b2.js.gz create mode 120000 public/assets/tinymce/plugins/tabfocus/plugin.js create mode 120000 public/assets/tinymce/plugins/tabfocus/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/table/plugin-015f27dd7d71fc28a2862364ff25f1c28b9a15a9dd3285f1c6794cc322ace474.js create mode 100644 public/assets/tinymce/plugins/table/plugin-015f27dd7d71fc28a2862364ff25f1c28b9a15a9dd3285f1c6794cc322ace474.js.gz create mode 120000 public/assets/tinymce/plugins/table/plugin.js create mode 120000 public/assets/tinymce/plugins/table/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/template/plugin-4c467e7314c73b0e1ce480ea42886d85953b3fcf8c6cc08a54cb506f785d8a45.js create mode 100644 public/assets/tinymce/plugins/template/plugin-4c467e7314c73b0e1ce480ea42886d85953b3fcf8c6cc08a54cb506f785d8a45.js.gz create mode 120000 public/assets/tinymce/plugins/template/plugin.js create mode 120000 public/assets/tinymce/plugins/template/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/textcolor/plugin-4fc163cede49b5cc4842c27947d2029d2f7b977f5d53321c8db480bcf33f4d5b.js create mode 100644 public/assets/tinymce/plugins/textcolor/plugin-4fc163cede49b5cc4842c27947d2029d2f7b977f5d53321c8db480bcf33f4d5b.js.gz create mode 120000 public/assets/tinymce/plugins/textcolor/plugin.js create mode 120000 public/assets/tinymce/plugins/textcolor/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/textpattern/plugin-1dfbed698fe1ff37082a577f89ece6f1f7eb4a5d05720009098f4d87134948c6.js create mode 100644 public/assets/tinymce/plugins/textpattern/plugin-1dfbed698fe1ff37082a577f89ece6f1f7eb4a5d05720009098f4d87134948c6.js.gz create mode 120000 public/assets/tinymce/plugins/textpattern/plugin.js create mode 120000 public/assets/tinymce/plugins/textpattern/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/toc/plugin-e042b53251fb67003a171743680c4220ca6dcf7845a3ab94dae8d778349ef11a.js create mode 100644 public/assets/tinymce/plugins/toc/plugin-e042b53251fb67003a171743680c4220ca6dcf7845a3ab94dae8d778349ef11a.js.gz create mode 120000 public/assets/tinymce/plugins/toc/plugin.js create mode 120000 public/assets/tinymce/plugins/toc/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/visualblocks/plugin-8e5a7eb5d68e0a5ae53983298d4301e3aa71f484a8900c37389b8c32a47d494c.js create mode 100644 public/assets/tinymce/plugins/visualblocks/plugin-8e5a7eb5d68e0a5ae53983298d4301e3aa71f484a8900c37389b8c32a47d494c.js.gz create mode 120000 public/assets/tinymce/plugins/visualblocks/plugin.js create mode 120000 public/assets/tinymce/plugins/visualblocks/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/visualchars/plugin-891a9f567dcb8a7247f7a40528a54c9169605c877cac621ecae4b8bb68c331ff.js create mode 100644 public/assets/tinymce/plugins/visualchars/plugin-891a9f567dcb8a7247f7a40528a54c9169605c877cac621ecae4b8bb68c331ff.js.gz create mode 120000 public/assets/tinymce/plugins/visualchars/plugin.js create mode 120000 public/assets/tinymce/plugins/visualchars/plugin.js.gz create mode 100644 public/assets/tinymce/plugins/wordcount/plugin-28e52c6cc673c145fa89864027621ab2e9c2254b87b3304ea2ce746f943bbf34.js create mode 100644 public/assets/tinymce/plugins/wordcount/plugin-28e52c6cc673c145fa89864027621ab2e9c2254b87b3304ea2ce746f943bbf34.js.gz create mode 120000 public/assets/tinymce/plugins/wordcount/plugin.js create mode 120000 public/assets/tinymce/plugins/wordcount/plugin.js.gz create mode 100644 public/assets/tinymce/skins/content/dark/content-e57474b10a25646cb26de224b51643167dffab7a473d1a133f59a245ce2bb03e.css create mode 100644 public/assets/tinymce/skins/content/dark/content-e57474b10a25646cb26de224b51643167dffab7a473d1a133f59a245ce2bb03e.css.gz create mode 120000 public/assets/tinymce/skins/content/dark/content.css create mode 120000 public/assets/tinymce/skins/content/dark/content.css.gz create mode 100644 public/assets/tinymce/skins/content/dark/content.min-e57474b10a25646cb26de224b51643167dffab7a473d1a133f59a245ce2bb03e.css create mode 100644 public/assets/tinymce/skins/content/dark/content.min-e57474b10a25646cb26de224b51643167dffab7a473d1a133f59a245ce2bb03e.css.gz create mode 120000 public/assets/tinymce/skins/content/dark/content.min.css create mode 120000 public/assets/tinymce/skins/content/dark/content.min.css.gz create mode 100644 public/assets/tinymce/skins/content/default/content-36771aef73c0aa7a3dac5782d3da3dfe3cf5bfa1bc1295157bf2a7c472bc6ded.css create mode 100644 public/assets/tinymce/skins/content/default/content-36771aef73c0aa7a3dac5782d3da3dfe3cf5bfa1bc1295157bf2a7c472bc6ded.css.gz create mode 120000 public/assets/tinymce/skins/content/default/content.css create mode 120000 public/assets/tinymce/skins/content/default/content.css.gz create mode 100644 public/assets/tinymce/skins/content/default/content.min-36771aef73c0aa7a3dac5782d3da3dfe3cf5bfa1bc1295157bf2a7c472bc6ded.css create mode 100644 public/assets/tinymce/skins/content/default/content.min-36771aef73c0aa7a3dac5782d3da3dfe3cf5bfa1bc1295157bf2a7c472bc6ded.css.gz create mode 120000 public/assets/tinymce/skins/content/default/content.min.css create mode 120000 public/assets/tinymce/skins/content/default/content.min.css.gz create mode 100644 public/assets/tinymce/skins/content/document/content-5b1de9a30138a2cd53ad09dfe989e0bdfb6f3da4c4c2fd2aa94cb1b7991ac9b9.css create mode 100644 public/assets/tinymce/skins/content/document/content-5b1de9a30138a2cd53ad09dfe989e0bdfb6f3da4c4c2fd2aa94cb1b7991ac9b9.css.gz create mode 120000 public/assets/tinymce/skins/content/document/content.css create mode 120000 public/assets/tinymce/skins/content/document/content.css.gz create mode 100644 public/assets/tinymce/skins/content/document/content.min-5b1de9a30138a2cd53ad09dfe989e0bdfb6f3da4c4c2fd2aa94cb1b7991ac9b9.css create mode 100644 public/assets/tinymce/skins/content/document/content.min-5b1de9a30138a2cd53ad09dfe989e0bdfb6f3da4c4c2fd2aa94cb1b7991ac9b9.css.gz create mode 120000 public/assets/tinymce/skins/content/document/content.min.css create mode 120000 public/assets/tinymce/skins/content/document/content.min.css.gz create mode 100644 public/assets/tinymce/skins/content/writer/content-90028995a30c9a4580260fbf7c1f91902b7fff8d5b8f7028c7ba4bf1c6b7e1ed.css create mode 100644 public/assets/tinymce/skins/content/writer/content-90028995a30c9a4580260fbf7c1f91902b7fff8d5b8f7028c7ba4bf1c6b7e1ed.css.gz create mode 120000 public/assets/tinymce/skins/content/writer/content.css create mode 120000 public/assets/tinymce/skins/content/writer/content.css.gz create mode 100644 public/assets/tinymce/skins/content/writer/content.min-90028995a30c9a4580260fbf7c1f91902b7fff8d5b8f7028c7ba4bf1c6b7e1ed.css create mode 100644 public/assets/tinymce/skins/content/writer/content.min-90028995a30c9a4580260fbf7c1f91902b7fff8d5b8f7028c7ba4bf1c6b7e1ed.css.gz create mode 120000 public/assets/tinymce/skins/content/writer/content.min.css create mode 120000 public/assets/tinymce/skins/content/writer/content.min.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/content-05858f414d87e95ced058681161df9acb0fb5e52a3ea9d3ea5efdc22436e2131.css create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/content-05858f414d87e95ced058681161df9acb0fb5e52a3ea9d3ea5efdc22436e2131.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/content.css create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/content.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/content.inline-965c0ab25123fa4dc5c987969c2a6e90568c903dac8841b59c6af9664a716ca6.css create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/content.inline-965c0ab25123fa4dc5c987969c2a6e90568c903dac8841b59c6af9664a716ca6.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/content.inline.css create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/content.inline.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/content.inline.min-965c0ab25123fa4dc5c987969c2a6e90568c903dac8841b59c6af9664a716ca6.css create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/content.inline.min-965c0ab25123fa4dc5c987969c2a6e90568c903dac8841b59c6af9664a716ca6.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/content.inline.min.css create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/content.inline.min.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/content.min-05858f414d87e95ced058681161df9acb0fb5e52a3ea9d3ea5efdc22436e2131.css create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/content.min-05858f414d87e95ced058681161df9acb0fb5e52a3ea9d3ea5efdc22436e2131.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/content.min.css create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/content.min.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/content.mobile-10aeccf0fe37014c1b0976dd81cff16dfc5be961d3ffebd1641c0a6066f85608.css create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/content.mobile-10aeccf0fe37014c1b0976dd81cff16dfc5be961d3ffebd1641c0a6066f85608.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/content.mobile.css create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/content.mobile.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/content.mobile.min-10aeccf0fe37014c1b0976dd81cff16dfc5be961d3ffebd1641c0a6066f85608.css create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/content.mobile.min-10aeccf0fe37014c1b0976dd81cff16dfc5be961d3ffebd1641c0a6066f85608.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/content.mobile.min.css create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/content.mobile.min.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile-e11d6800d0e2233bb8bd5acbe138b214166265f10763acebdf53af93713ef664.woff create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/skin-9fc9e62b6e002e8d85ed3d27840588b58b77afddc3812967ad4204728dd97fc5.css create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/skin-9fc9e62b6e002e8d85ed3d27840588b58b77afddc3812967ad4204728dd97fc5.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/skin.css create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/skin.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/skin.min-9fc9e62b6e002e8d85ed3d27840588b58b77afddc3812967ad4204728dd97fc5.css create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/skin.min-9fc9e62b6e002e8d85ed3d27840588b58b77afddc3812967ad4204728dd97fc5.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/skin.min.css create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/skin.min.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/skin.mobile-f88bd33c7437e51a2e3fc58ae6e1760fa6f6ddb8604d5448dda4a2a206c95bac.css create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/skin.mobile-f88bd33c7437e51a2e3fc58ae6e1760fa6f6ddb8604d5448dda4a2a206c95bac.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/skin.mobile.css create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/skin.mobile.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/skin.mobile.min-f88bd33c7437e51a2e3fc58ae6e1760fa6f6ddb8604d5448dda4a2a206c95bac.css create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/skin.mobile.min-f88bd33c7437e51a2e3fc58ae6e1760fa6f6ddb8604d5448dda4a2a206c95bac.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/skin.mobile.min.css create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/skin.mobile.min.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/skin.shadowdom-7607e1810029c2191d32d46dc71b443e8e5317010b2e92a9bc133da9431fa80b.css create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/skin.shadowdom-7607e1810029c2191d32d46dc71b443e8e5317010b2e92a9bc133da9431fa80b.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/skin.shadowdom.css create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/skin.shadowdom.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/skin.shadowdom.min-7607e1810029c2191d32d46dc71b443e8e5317010b2e92a9bc133da9431fa80b.css create mode 100644 public/assets/tinymce/skins/ui/oxide-dark/skin.shadowdom.min-7607e1810029c2191d32d46dc71b443e8e5317010b2e92a9bc133da9431fa80b.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css create mode 120000 public/assets/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide/content-63f8955ff68e1122175e8f46d0b760b966148873e452c1b6085f367ef3d63400.css create mode 100644 public/assets/tinymce/skins/ui/oxide/content-63f8955ff68e1122175e8f46d0b760b966148873e452c1b6085f367ef3d63400.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide/content.css create mode 120000 public/assets/tinymce/skins/ui/oxide/content.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide/content.inline-965c0ab25123fa4dc5c987969c2a6e90568c903dac8841b59c6af9664a716ca6.css create mode 100644 public/assets/tinymce/skins/ui/oxide/content.inline-965c0ab25123fa4dc5c987969c2a6e90568c903dac8841b59c6af9664a716ca6.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide/content.inline.css create mode 120000 public/assets/tinymce/skins/ui/oxide/content.inline.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide/content.inline.min-965c0ab25123fa4dc5c987969c2a6e90568c903dac8841b59c6af9664a716ca6.css create mode 100644 public/assets/tinymce/skins/ui/oxide/content.inline.min-965c0ab25123fa4dc5c987969c2a6e90568c903dac8841b59c6af9664a716ca6.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide/content.inline.min.css create mode 120000 public/assets/tinymce/skins/ui/oxide/content.inline.min.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide/content.min-63f8955ff68e1122175e8f46d0b760b966148873e452c1b6085f367ef3d63400.css create mode 100644 public/assets/tinymce/skins/ui/oxide/content.min-63f8955ff68e1122175e8f46d0b760b966148873e452c1b6085f367ef3d63400.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide/content.min.css create mode 120000 public/assets/tinymce/skins/ui/oxide/content.min.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide/content.mobile-10aeccf0fe37014c1b0976dd81cff16dfc5be961d3ffebd1641c0a6066f85608.css create mode 100644 public/assets/tinymce/skins/ui/oxide/content.mobile-10aeccf0fe37014c1b0976dd81cff16dfc5be961d3ffebd1641c0a6066f85608.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide/content.mobile.css create mode 120000 public/assets/tinymce/skins/ui/oxide/content.mobile.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide/content.mobile.min-10aeccf0fe37014c1b0976dd81cff16dfc5be961d3ffebd1641c0a6066f85608.css create mode 100644 public/assets/tinymce/skins/ui/oxide/content.mobile.min-10aeccf0fe37014c1b0976dd81cff16dfc5be961d3ffebd1641c0a6066f85608.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide/content.mobile.min.css create mode 120000 public/assets/tinymce/skins/ui/oxide/content.mobile.min.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide/fonts/tinymce-mobile-e11d6800d0e2233bb8bd5acbe138b214166265f10763acebdf53af93713ef664.woff create mode 120000 public/assets/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff create mode 100644 public/assets/tinymce/skins/ui/oxide/skin-ddd4fd676f75ed761367a072bf2be1bd9fc48aed59a15011aeec9b7a9aa331bf.css create mode 100644 public/assets/tinymce/skins/ui/oxide/skin-ddd4fd676f75ed761367a072bf2be1bd9fc48aed59a15011aeec9b7a9aa331bf.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide/skin.css create mode 120000 public/assets/tinymce/skins/ui/oxide/skin.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide/skin.min-ddd4fd676f75ed761367a072bf2be1bd9fc48aed59a15011aeec9b7a9aa331bf.css create mode 100644 public/assets/tinymce/skins/ui/oxide/skin.min-ddd4fd676f75ed761367a072bf2be1bd9fc48aed59a15011aeec9b7a9aa331bf.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide/skin.min.css create mode 120000 public/assets/tinymce/skins/ui/oxide/skin.min.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide/skin.mobile-f88bd33c7437e51a2e3fc58ae6e1760fa6f6ddb8604d5448dda4a2a206c95bac.css create mode 100644 public/assets/tinymce/skins/ui/oxide/skin.mobile-f88bd33c7437e51a2e3fc58ae6e1760fa6f6ddb8604d5448dda4a2a206c95bac.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide/skin.mobile.css create mode 120000 public/assets/tinymce/skins/ui/oxide/skin.mobile.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide/skin.mobile.min-f88bd33c7437e51a2e3fc58ae6e1760fa6f6ddb8604d5448dda4a2a206c95bac.css create mode 100644 public/assets/tinymce/skins/ui/oxide/skin.mobile.min-f88bd33c7437e51a2e3fc58ae6e1760fa6f6ddb8604d5448dda4a2a206c95bac.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide/skin.mobile.min.css create mode 120000 public/assets/tinymce/skins/ui/oxide/skin.mobile.min.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide/skin.shadowdom-7607e1810029c2191d32d46dc71b443e8e5317010b2e92a9bc133da9431fa80b.css create mode 100644 public/assets/tinymce/skins/ui/oxide/skin.shadowdom-7607e1810029c2191d32d46dc71b443e8e5317010b2e92a9bc133da9431fa80b.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide/skin.shadowdom.css create mode 120000 public/assets/tinymce/skins/ui/oxide/skin.shadowdom.css.gz create mode 100644 public/assets/tinymce/skins/ui/oxide/skin.shadowdom.min-7607e1810029c2191d32d46dc71b443e8e5317010b2e92a9bc133da9431fa80b.css create mode 100644 public/assets/tinymce/skins/ui/oxide/skin.shadowdom.min-7607e1810029c2191d32d46dc71b443e8e5317010b2e92a9bc133da9431fa80b.css.gz create mode 120000 public/assets/tinymce/skins/ui/oxide/skin.shadowdom.min.css create mode 120000 public/assets/tinymce/skins/ui/oxide/skin.shadowdom.min.css.gz create mode 100644 public/assets/tinymce/themes/mobile/theme-76acc51f6652134e2f655a1b29b98027dd611126977006e5c449ab05a74f5b0d.js create mode 100644 public/assets/tinymce/themes/mobile/theme-76acc51f6652134e2f655a1b29b98027dd611126977006e5c449ab05a74f5b0d.js.gz create mode 120000 public/assets/tinymce/themes/mobile/theme.js create mode 120000 public/assets/tinymce/themes/mobile/theme.js.gz create mode 100644 public/assets/tinymce/themes/silver/theme-63c035401f63eb136b0083c369af35f906b30b9085aea2c3397155bbadc54160.js create mode 100644 public/assets/tinymce/themes/silver/theme-63c035401f63eb136b0083c369af35f906b30b9085aea2c3397155bbadc54160.js.gz create mode 120000 public/assets/tinymce/themes/silver/theme.js create mode 120000 public/assets/tinymce/themes/silver/theme.js.gz create mode 100644 public/assets/tinymce/tinymce-60c39b11289948fb90f67e0f0d8cd0c5c08472745b3eb3f49461b10704ac2878.js create mode 100644 public/assets/tinymce/tinymce-60c39b11289948fb90f67e0f0d8cd0c5c08472745b3eb3f49461b10704ac2878.js.gz create mode 120000 public/assets/tinymce/tinymce.js create mode 120000 public/assets/tinymce/tinymce.js.gz create mode 100644 public/assets/tools-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/tools-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz create mode 100644 public/assets/user-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css create mode 100644 public/assets/user-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz diff --git a/public/assets/.sprockets-manifest-07430103a8793b54bb97ca8f29a0f87d.json b/public/assets/.sprockets-manifest-07430103a8793b54bb97ca8f29a0f87d.json new file mode 100644 index 00000000..dccaacf1 --- /dev/null +++ b/public/assets/.sprockets-manifest-07430103a8793b54bb97ca8f29a0f87d.json @@ -0,0 +1 @@ +{"files":{"markdown-fc5502f8bf675ab6f1c2d569fdffe6bd18558e812cbca0e6680212b583776cfe.css":{"logical_path":"markdown.css","mtime":"2022-06-18T11:05:00+02:00","size":3159,"digest":"569a916604582f8dab347a205c58d5ce94ff6e5bac7a0add6ce106724a5ad2ca","integrity":"sha256-VpqRZgRYL42rNHogXFjVzpT/blusegrdbOEGckpa0so="},"manifest-b4bf6e57a53c2bdb55b8998cc94cd00883793c1c37c5e5aea3ef6749b4f6d92b.js":{"logical_path":"manifest.js","mtime":"2022-06-18T11:05:00+02:00","size":2,"digest":"75a11da44c802486bc6f65640aa48a730f0f684c5c07a42ba3cd1735eb3fb070","integrity":"sha256-daEdpEyAJIa8b2VkCqSKcw8PaExcB6Qro80XNes/sHA="},"actiontext-f1a367c28b0d2ec5aca43ca3a6642b10865865e6eb660a6f5896b0666038899c.css":{"logical_path":"actiontext.css","mtime":"2022-06-18T11:05:00+02:00","size":14619,"digest":"a68413811e083db760e176ab6000659d84aac48878eecd62a359d9bbcb0eed57","integrity":"sha256-poQTgR4IPbdg4XarYABlnYSqxIh47s1io1nZu8sO7Vc="},"application-68e4c9cf504edbaa670b008700a7a6fe6af44a59079ac627bd23fb53e8178565.css":{"logical_path":"application.css","mtime":"2022-06-18T11:05:00+02:00","size":19999,"digest":"c4cd351c307c705807a97e3aba0fb0e1a5d67b6645bc6b5f15ca19c2e4e4f560","integrity":"sha256-xM01HDB8cFgHqX46ug+w4aXWe2ZFvGtfFcoZwuTk9WA="},"articles-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"articles.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"bibtex-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"bibtex.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"bibtex_entries-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"bibtex_entries.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"bibtex_files-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"bibtex_files.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"blocked_users-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"blocked_users.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"blog_posts-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"blog_posts.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"codes-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"codes.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"custom-873f1ee6b4f4137809e60fd6a57139a315c1dd8fe1683e1cd1d567e6a33ea28e.css":{"logical_path":"custom.css","mtime":"2022-06-18T11:05:00+02:00","size":2223,"digest":"aae47959f7fa8a6d5b68699b62ed5d4bd811f83f0520144411bd7afa34d0c9a0","integrity":"sha256-quR5Wff6im1baGmbYu1dS9gR+D8FIBREEb16+jTQyaA="},"editor-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"editor.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"external_referee_submission-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"external_referee_submission.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"external_referee_submissions-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"external_referee_submissions.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"external_referees-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"external_referees.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"histories-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"histories.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"issues-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"issues.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"jsons-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"jsons.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"pages-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"pages.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"pandoc-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"pandoc.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"reports-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"reports.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"requested_reviewers-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"requested_reviewers.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"scaffolds-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"scaffolds.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"static_pages-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"static_pages.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"stuffs-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"stuffs.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"submissions-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"submissions.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"test-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"test.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"tools-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"tools.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"user-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css":{"logical_path":"user.css","mtime":"2022-06-18T11:05:00+02:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"tinymce-213f84c2ea0b76dbe066217672caec97a8f3e296895064f010ae89541df69849.js":{"logical_path":"tinymce.js","mtime":"2022-06-18T11:05:00+02:00","size":1080034,"digest":"239daa6e04d5ce4f20ae321557fb7f3adae52c7e55c46cf4bdc01912496fde3b","integrity":"sha256-I52qbgTVzk8grjIVV/t/OtrlLH5VxGz0vcAZEklv3js="},"tinymce-rails.manifest-dad05bf766af0fe3d79dd746db3c1361c0583026cdf35d6a2921bccaea835331.js":{"logical_path":"tinymce-rails.manifest.js","mtime":"2022-06-18T11:05:00+02:00","size":3,"digest":"6a3cf5192354f71615ac51034b3e97c20eda99643fcaf5bbe6d41ad59bd12167","integrity":"sha256-ajz1GSNU9xYVrFEDSz6Xwg7amWQ/yvW75tQa1ZvRIWc="},"tinymce/icons/default/icons-a0721895c1cc12748bd1564f906fa27587b5c76ba1598ef53ffc24ecb6b134ab.js":{"logical_path":"tinymce/icons/default/icons.js","mtime":"2022-06-18T11:05:00+02:00","size":59777,"digest":"ddd17f2284b062bccfd1e7c328a83dcba711c4e5a6d983186d57f8b3f562d1e5","integrity":"sha256-3dF/IoSwYrzP0efDKKg9y6cRxOWm2YMYbVf4s/Vi0eU="},"tinymce/jquery.tinymce-3816ed398fa3cae7cfa3778396c3080cc77f7a98cf6f76c09d5fd87ac5717060.js":{"logical_path":"tinymce/jquery.tinymce.js","mtime":"2022-06-18T11:05:00+02:00","size":6672,"digest":"53f3d77f3bb11c570f09d619c464576ff15d53fa4b873d6b3be64cf4c7d833a3","integrity":"sha256-U/PXfzuxHFcPCdYZxGRXb/FdU/pLhz1rO+ZM9MfYM6M="},"tinymce/plugins/advlist/plugin-4fa030df2a1a571b367acd30f0e2feca230c0cd2b8baec69654a05afc55307ce.js":{"logical_path":"tinymce/plugins/advlist/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":3834,"digest":"4ca7fcb5bd8cde73091bf09a65e30f55a46d67fa2b8e122d7347f323892cf66e","integrity":"sha256-TKf8tb2M3nMJG/CaZeMPVaRtZ/orjhItc0fzI4ks9m4="},"tinymce/plugins/anchor/plugin-5a93606694b7a0bd66e2f699801ccba90e0dc57a86514785aa6a2973c3c6a4ef.js":{"logical_path":"tinymce/plugins/anchor/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":2785,"digest":"2580bb72edfe6610c394f9b64211073ad18a79fd0e330b605536a26145465733","integrity":"sha256-JYC7cu3+ZhDDlPm2QhEHOtGKef0OMwtgVTaiYUVGVzM="},"tinymce/plugins/autolink/plugin-a3a7a374935cef0e281d7fe0d90cb2d1e72484032e13534567908d5ea4a5f0cd.js":{"logical_path":"tinymce/plugins/autolink/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":2432,"digest":"5bcbce008c108295d53e35065d2e430e51ae46db04831d8fee4778fa9cdadcaf","integrity":"sha256-W8vOAIwQgpXVPjUGXS5DDlGuRtsEgx2P7kd4+pza3K8="},"tinymce/plugins/autoresize/plugin-8f999eb1efa36730560646f2f7e5e7b2e6829c84fb951cae557bf9bc537c0daf.js":{"logical_path":"tinymce/plugins/autoresize/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":2207,"digest":"3935f8cbf3435e73b2c1c3744741cd84996620571cdbe7586db734d4f322f04d","integrity":"sha256-OTX4y/NDXnOywcN0R0HNhJlmIFcc2+dYbbc01PMi8E0="},"tinymce/plugins/autosave/plugin-3fd90e874fb12511855540e04d399e02b4c916696d58ba1fddf137c8e956aea5.js":{"logical_path":"tinymce/plugins/autosave/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":3000,"digest":"bdbd60e25a192a0908cd8ebdd35bc2aa56f7c36f3d11bd532a1d268959a04384","integrity":"sha256-vb1g4loZKgkIzY6901vCqlb3w289Eb1TKh0miVmgQ4Q="},"tinymce/plugins/bbcode/plugin-218d7766e7fcc1fb224d31eef2f9d3b6cd91b7fefe81c8a8cc09e9e3a63bf603.js":{"logical_path":"tinymce/plugins/bbcode/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":3106,"digest":"9b5c6882874f1a8b2afb1967335ad837a03a452feeba2e7d386461693d398f28","integrity":"sha256-m1xogodPGosq+xlnM1rYN6A6RS/uui59OGRhaT05jyg="},"tinymce/plugins/charmap/plugin-0b32f067c1ea7b80c584da52fd75124a7bc8371551475c6f679389428ee80583.js":{"logical_path":"tinymce/plugins/charmap/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":11993,"digest":"5366a8b92217a841312addc026c379e0d617b20a7e2d82c43d073cdff3753bc2","integrity":"sha256-U2aouSIXqEExKt3AJsN54NYXsgp+LYLEPQc83/N1O8I="},"tinymce/plugins/code/plugin-4b8cf16ed0534566bc6a7056d2a95874fc3e025d91d6e77aebf510a33ac6ab3a.js":{"logical_path":"tinymce/plugins/code/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":1149,"digest":"436117ad01633153bf84c9776a29cc62be6c42511d29842c275c67481fa861dd","integrity":"sha256-Q2EXrQFjMVO/hMl3ainMYr5sQlEdKYQsJ1xnSB+oYd0="},"tinymce/plugins/codesample/plugin-58dce15e40cdb579a3a21b9ce74d0725bc50071adb6769547003a39ef6e1a3e3.js":{"logical_path":"tinymce/plugins/codesample/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":44694,"digest":"4d34f757a3645cf21a8dc1bf908ba842a96658c91204cb2e5d514df71ee67a48","integrity":"sha256-TTT3V6NkXPIajcG/kIuoQqlmWMkSBMsuXVFN9x7mekg="},"tinymce/plugins/colorpicker/plugin-fd701e4b52db508ae6794a0811e2df5be1e69f6108c6897dc564067666beb3a0.js":{"logical_path":"tinymce/plugins/colorpicker/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":516,"digest":"61239cc7eaa5425bcb9aab84fd03d98851e62ee7ea2c0a0c3974f498fbd629fe","integrity":"sha256-YSOcx+qlQlvLmquE/QPZiFHmLufqLAoMOXT0mPvWKf4="},"tinymce/plugins/contextmenu/plugin-466629e42bf8c9385163805640d88f42476f32ee3c2180ca89137bf07e3a251f.js":{"logical_path":"tinymce/plugins/contextmenu/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":516,"digest":"d805b60cd6d0c88ba4f534ec660fede13e1b2b8a7e8687c179c4b1768b27390d","integrity":"sha256-2AW2DNbQyIuk9TTsZg/t4T4bK4p+hofBecSxdosnOQ0="},"tinymce/plugins/directionality/plugin-bf67abe0d37244a65c89fca222678446401d1df666a3eb80aad22eb969f2ede1.js":{"logical_path":"tinymce/plugins/directionality/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":4084,"digest":"ee31a3165b7a4eed19bf36b16d6372dd332eead90705d5a97635ef55fa8301a1","integrity":"sha256-7jGjFlt6Tu0ZvzaxbWNy3TMu6tkHBdWpdjXvVfqDAaE="},"tinymce/plugins/emoticons/js/emojiimages-8d59e6cafd8ee4961cd4f31515f08ad07db747166ce3af67fa8108289e88564d.js":{"logical_path":"tinymce/plugins/emoticons/js/emojiimages.js","mtime":"2022-06-18T11:05:00+02:00","size":424469,"digest":"5ce0fe8a1253e4cc1dec73b7b0514976f230c737fa3cbbc84369bda0d29b9f63","integrity":"sha256-XOD+ihJT5Mwd7HO3sFFJdvIwxzf6PLvIQ2m9oNKbn2M="},"tinymce/plugins/emoticons/js/emojis-3006b2aae9b4d0b2df2068968cc5523af58362fbd5759350b5f217f3f20c7236.js":{"logical_path":"tinymce/plugins/emoticons/js/emojis.js","mtime":"2022-06-18T11:05:00+02:00","size":201230,"digest":"0945a609768fbab9ead69866d69cfaded544ebdeb92f0c2b478c8e6ab5c9101f","integrity":"sha256-CUWmCXaPurnq1phm1pz63tVE6965LwwrR4yOarXJEB8="},"tinymce/plugins/emoticons/plugin-281a10488cd27bf645f84655f0bebb4185f34a9ddb5a6b1a8203ae2f2a43e96f.js":{"logical_path":"tinymce/plugins/emoticons/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":7065,"digest":"9233d6ca30275a64f8187ddeb8276a6467ddf84711b074d299a8cb3b31337262","integrity":"sha256-kjPWyjAnWmT4GH3euCdqZGfd+EcRsHTSmajLOzEzcmI="},"tinymce/plugins/fullpage/plugin-9922360abd8ce20550ef2271d4c37e55e6b1ece541b8149427285bbe4731f67e.js":{"logical_path":"tinymce/plugins/fullpage/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":7851,"digest":"e700ab21e7a9b856beffefff639aaedd9b08ea00a53c93f18fc4a9b0ed362a7a","integrity":"sha256-5wCrIeepuFa+/+//Y5qu3ZsI6gClPJPxj8SpsO02Kno="},"tinymce/plugins/fullscreen/plugin-82a33cc62d1752e94284042a7a0847dd2d5ecb8657d108c9a08462f9e3b933a3.js":{"logical_path":"tinymce/plugins/fullscreen/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":12737,"digest":"01a0ca880dfe6535e3d6bbe2ef66784d9799739ed34dabe2ffbd2eb90bd32dbb","integrity":"sha256-AaDKiA3+ZTXj1rvi72Z4TZeZc57TTavi/70uuQvTLbs="},"tinymce/plugins/help/plugin-21f93399a4c6379ac6afe1ef49e65bc00b7f8b3d949bdffe4392efc9ca251e78.js":{"logical_path":"tinymce/plugins/help/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":13683,"digest":"194f1f35d8e949580ffe79df8049b6be2849154b5f4bca65d7b15467818cb3ee","integrity":"sha256-GU8fNdjpSVgP/nnfgEm2vihJFUtfS8pl17FUZ4GMs+4="},"tinymce/plugins/hr/plugin-ef8c674f8aa76387c1d5508e978dac74447db0707b150a6d82150ad60874ce78.js":{"logical_path":"tinymce/plugins/hr/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":800,"digest":"bf4ff535210a1ca5d31cbf5b45a89e4457f68a2a038c4401f6f03be5dc5547fe","integrity":"sha256-v0/1NSEKHKXTHL9bRaieRFf2iioDjEQB9vA75dxVR/4="},"tinymce/plugins/image/plugin-81b520f6cba4e087d98521c960a69d05cad12e1284666ddad51213c64ca97b39.js":{"logical_path":"tinymce/plugins/image/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":21268,"digest":"239f23298dc4b8f50adfc3e6efd7e12dc3e518c45df7a2e0ac94f67f4cec34ef","integrity":"sha256-I58jKY3EuPUK38Pm79fhLcPlGMRd96LgrJT2f0zsNO8="},"tinymce/plugins/imagetools/plugin-5f12b0cffddfd1af1a5ab053111cdb80ce4a107d42cb07b2cff4049110e831f8.js":{"logical_path":"tinymce/plugins/imagetools/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":17508,"digest":"b708a8c0b64521ef118d1baa677cfa04ec9ec5d981fdf87894ea2ec1919514ea","integrity":"sha256-twiowLZFIe8RjRuqZ3z6BOyexdmB/fh4lOouwZGVFOo="},"tinymce/plugins/importcss/plugin-ca965b67bec04673901973233461d6cea877764480feb6062dd7f12fd31d3370.js":{"logical_path":"tinymce/plugins/importcss/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":4055,"digest":"abcb79b1cc9eca455f8ffdbdb184c465976715d6eb600a6252d214a8ffeb1e09","integrity":"sha256-q8t5scyeykVfj/29sYTEZZdnFdbrYApiUtIUqP/rHgk="},"tinymce/plugins/insertdatetime/plugin-b60c2b569baf4f6c5bbb4f2b99701dd39d7eca515955af1ce0e677212e4dde61.js":{"logical_path":"tinymce/plugins/insertdatetime/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":2986,"digest":"166c306635e97c896bd0b6473450baa0d270f8d90a9392f1c3bf851bb3f9f066","integrity":"sha256-FmwwZjXpfIlr0LZHNFC6oNJw+NkKk5Lxw7+FG7P58GY="},"tinymce/plugins/legacyoutput/plugin-c460b8361cb93f80823af1cc29b4ad6b58e2bb8a711144abeb22cd61f9bce541.js":{"logical_path":"tinymce/plugins/legacyoutput/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":3058,"digest":"4b6d3b357063b6c06a4d75bf384422ce22319884cfaf5419b6a34548a6bc8da7","integrity":"sha256-S207NXBjtsBqTXW/OEQiziIxmITPr1QZtqNFSKa8jac="},"tinymce/plugins/link/plugin-8ee260979cd6327d7ed1bd3a08c5013203ff7a610f19fd9c5faa7dadd1f1e81c.js":{"logical_path":"tinymce/plugins/link/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":16245,"digest":"b1078f5d0b972fbd0775caa7db144340724263d51eb56668b53c97536272cbb1","integrity":"sha256-sQePXQuXL70Hdcqn2xRDQHJCY9UetWZotTyXU2Jyy7E="},"tinymce/plugins/lists/plugin-0ae75e7f9b0630c93d30efaa3116fa98b18afb64668cd306c4e18e3938a371b9.js":{"logical_path":"tinymce/plugins/lists/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":28665,"digest":"f9586dc57fbd4bc21f8152d71c59d64c584fac39ca6b021b405d40a2fddefaba","integrity":"sha256-+VhtxX+9S8IfgVLXHFnWTFhPrDnKawIbQF1Aov3e+ro="},"tinymce/plugins/media/plugin-1aad849a21686186c2935ca9c25989b082ca58b71976aa2bc19a798ab4a7a675.js":{"logical_path":"tinymce/plugins/media/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":18006,"digest":"e1379fe1491217a4fbb3c3c5c3a273bf17ee53dea4fed9a6b62181ba786aa6d3","integrity":"sha256-4Tef4UkSF6T7s8PFw6JzvxfuU96k/tmmtiGBunhqptM="},"tinymce/plugins/nonbreaking/plugin-be44fd68bf6f4469172b56508fc47b35842c7fe94a3d45c087b620cd0fe4ca8e.js":{"logical_path":"tinymce/plugins/nonbreaking/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":1455,"digest":"3f098c49fd49e19c2a114886189df59d3b7785de66c2be22219b1b9cd8849857","integrity":"sha256-PwmMSf1J4ZwqEUiGGJ31nTt3hd5mwr4iIZsbnNiEmFc="},"tinymce/plugins/noneditable/plugin-9c03c06e30f4efcf0e688bd80090005634f24783e9801666e44beb74805cc5fd.js":{"logical_path":"tinymce/plugins/noneditable/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":1759,"digest":"e5d28f4597546a58729cebb5b957dfafb5d5734538f09cb1449d7ba0daf8cecd","integrity":"sha256-5dKPRZdUalhynOu1uVffr7XVc0U48JyxRJ17oNr4zs0="},"tinymce/plugins/pagebreak/plugin-8e90262bf60a15a6110ff664066f9bab10a7002478fbd45d33ba0168ea9a3466.js":{"logical_path":"tinymce/plugins/pagebreak/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":1692,"digest":"ec3fe44130e0ae60f8b63b9d609d257a9ebbf72ec3561aa630798ef0cece3d4b","integrity":"sha256-7D/kQTDgrmD4tjudYJ0lep679y7DVhqmMHmO8M7OPUs="},"tinymce/plugins/paste/plugin-112f7ce8064e159ecd7450adcf4dc38baf14e85697f2954277b79bec78311745.js":{"logical_path":"tinymce/plugins/paste/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":22711,"digest":"47c1e3b19f71866465f08ff30b3f00eb0356f1b03f7d38fd7e19a34c417b9356","integrity":"sha256-R8HjsZ9xhmRl8I/zCz8A6wNW8bA/fTj9fhmjTEF7k1Y="},"tinymce/plugins/preview/plugin-8e20bf167638b33a5bfa78ad467157639888c0c40d8531deeff6aeab5cfe6f4d.js":{"logical_path":"tinymce/plugins/preview/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":2152,"digest":"c057d49a77442b3ecaa9bee32786b6dd540d1f068ec0930d4261fdfda2b9801d","integrity":"sha256-wFfUmndEKz7Kqb7jJ4a23VQNHwaOwJMNQmH9/aK5gB0="},"tinymce/plugins/print/plugin-a4287d7b3c115aaa79ad5a686f91e9064d0b7009796b0246282ea2b6c260f2c7.js":{"logical_path":"tinymce/plugins/print/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":848,"digest":"98c5a46b9fd8d653897486498e07706be24e64dd222e4ae8cfddf91563655187","integrity":"sha256-mMWka5/Y1lOJdIZJjgdwa+JOZN0iLkroz935FWNlUYc="},"tinymce/plugins/quickbars/plugin-51c2f1f2edde220b7484719d358f88738672db7b7744eecee28b23c06171982b.js":{"logical_path":"tinymce/plugins/quickbars/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":6405,"digest":"f5dbdf1b079de9cb7e67038a1fb96fe281b6aa8f91369ee8a9510d5fa8a881e0","integrity":"sha256-9dvfGwed6ct+ZwOKH7lv4oG2qo+RNp7oqVENX6iogeA="},"tinymce/plugins/save/plugin-7b963af33781ba2536a8f3f585775e247e11106967e2c09db6d0bf4d98300522.js":{"logical_path":"tinymce/plugins/save/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":1725,"digest":"fd72e416769feecad3540c4b04d7c7aa34435cb0d874177696f8d48baf4b8eba","integrity":"sha256-/XLkFnaf7srTVAxLBNfHqjRDXLDYdBd2lvjUi69Ljro="},"tinymce/plugins/searchreplace/plugin-dd912aca3c235cee61a8706064578e5fa57260364dbb26170b0875c2e856c044.js":{"logical_path":"tinymce/plugins/searchreplace/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":14954,"digest":"b409e925659b4994783021e7f57dc9351135e3d697887b6bb7eaf3873ab24afc","integrity":"sha256-tAnpJWWbSZR4MCHn9X3JNRE149aXiHtrt+rzhzqySvw="},"tinymce/plugins/spellchecker/plugin-31180f2712efef9df656fe514fb40270e94727138f8d9ce1e6d3640a16dadad0.js":{"logical_path":"tinymce/plugins/spellchecker/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":9882,"digest":"8d79d73e6cbc47b8fc87c40a2992cdcfc1e61c62eb7d58a1d0e0497747fde070","integrity":"sha256-jXnXPmy8R7j8h8QKKZLNz8HmHGLrfVih0OBJd0f94HA="},"tinymce/plugins/tabfocus/plugin-46fd007da8f1c080fe7ac277994638df151957dfd3249b8575079070839350b2.js":{"logical_path":"tinymce/plugins/tabfocus/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":1879,"digest":"d7aeaeb48f16aa8b78b6073d7af26458d42c51e5fad23c7d08ffe78a89163a01","integrity":"sha256-166utI8Wqot4tgc9evJkWNQsUeX60jx9CP/niokWOgE="},"tinymce/plugins/table/plugin-015f27dd7d71fc28a2862364ff25f1c28b9a15a9dd3285f1c6794cc322ace474.js":{"logical_path":"tinymce/plugins/table/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":137417,"digest":"541601a0f45bf787444c964dcc0da96461572061daac1dc9cca08b3e623fc948","integrity":"sha256-VBYBoPRb94dETJZNzA2pZGFXIGHarB3JzKCLPmI/yUg="},"tinymce/plugins/template/plugin-4c467e7314c73b0e1ce480ea42886d85953b3fcf8c6cc08a54cb506f785d8a45.js":{"logical_path":"tinymce/plugins/template/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":8292,"digest":"35a92fe836d61b5aaccdf1246c36a5b262df1b7ea0c70c8ca5b9dc909f7890c5","integrity":"sha256-Nakv6DbWG1qszfEkbDalsmLfG36gxwyMpbnckJ94kMU="},"tinymce/plugins/textcolor/plugin-4fc163cede49b5cc4842c27947d2029d2f7b977f5d53321c8db480bcf33f4d5b.js":{"logical_path":"tinymce/plugins/textcolor/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":512,"digest":"a19daae87633eb2bba156f96cb5a8c6ae8cb62b8a4bac64cf2e9cda9c42d9604","integrity":"sha256-oZ2q6HYz6yu6FW+Wy1qMaujLYrikusZM8unNqcQtlgQ="},"tinymce/plugins/textpattern/plugin-1dfbed698fe1ff37082a577f89ece6f1f7eb4a5d05720009098f4d87134948c6.js":{"logical_path":"tinymce/plugins/textpattern/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":18261,"digest":"5555ed9dbb148d75406816b7b15ab059708a3f0f24d40832cb83d0cfdaabeda7","integrity":"sha256-VVXtnbsUjXVAaBa3sVqwWXCKPw8k1Agyy4PQz9qr7ac="},"tinymce/plugins/toc/plugin-e042b53251fb67003a171743680c4220ca6dcf7845a3ab94dae8d778349ef11a.js":{"logical_path":"tinymce/plugins/toc/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":3367,"digest":"349ba3097bb2ebc949cb323e9e3e3c4bd83c0071c45ba6381c86ec5198148f37","integrity":"sha256-NJujCXuy68lJyzI+nj48S9g8AHHEW6Y4HIbsUZgUjzc="},"tinymce/plugins/visualblocks/plugin-8e5a7eb5d68e0a5ae53983298d4301e3aa71f484a8900c37389b8c32a47d494c.js":{"logical_path":"tinymce/plugins/visualblocks/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":1444,"digest":"43d7d4a2b305f8924a80f9cadd651e3bfc16597f059f8f3ef9da979e8333e719","integrity":"sha256-Q9fUorMF+JJKgPnK3WUeO/wWWX8Fn48++dqXnoMz5xk="},"tinymce/plugins/visualchars/plugin-891a9f567dcb8a7247f7a40528a54c9169605c877cac621ecae4b8bb68c331ff.js":{"logical_path":"tinymce/plugins/visualchars/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":6212,"digest":"10b7270bbedbaa1dca43dfca2924058f18bed5f1b63494505f7cb93f3ac8aa2b","integrity":"sha256-ELcnC77bqh3KQ9/KKSQFjxi+1fG2NJRQX3y5PzrIqis="},"tinymce/plugins/wordcount/plugin-28e52c6cc673c145fa89864027621ab2e9c2254b87b3304ea2ce746f943bbf34.js":{"logical_path":"tinymce/plugins/wordcount/plugin.js","mtime":"2022-06-18T11:05:00+02:00","size":12268,"digest":"92bcf70fbcfc3a89e67b8bffbf2fb9d224815b6ecf09841f525882ee5d60523c","integrity":"sha256-krz3D7z8Oonme4v/vy+50iSBW27PCYQfUliC7l1gUjw="},"tinymce/themes/mobile/theme-76acc51f6652134e2f655a1b29b98027dd611126977006e5c449ab05a74f5b0d.js":{"logical_path":"tinymce/themes/mobile/theme.js","mtime":"2022-06-18T11:05:00+02:00","size":170930,"digest":"3d745df020df5b4d390f0ac8408c96ea432dbbdadc7aa88f163ac6026e8115be","integrity":"sha256-PXRd8CDfW005DwrIQIyW6kMtu9rceqiPFjrGAm6BFb4="},"tinymce/themes/silver/theme-63c035401f63eb136b0083c369af35f906b30b9085aea2c3397155bbadc54160.js":{"logical_path":"tinymce/themes/silver/theme.js","mtime":"2022-06-18T11:05:00+02:00","size":412282,"digest":"6f87976ce1cdf853341b7253cf424bb74e8704ca0a805943d0e8c99daa575ec7","integrity":"sha256-b4eXbOHN+FM0G3JTz0JLt06HBMoKgFlD0OjJnapXXsc="},"tinymce/tinymce-60c39b11289948fb90f67e0f0d8cd0c5c08472745b3eb3f49461b10704ac2878.js":{"logical_path":"tinymce/tinymce.js","mtime":"2022-06-18T11:05:00+02:00","size":399559,"digest":"c84a9ee110cddffe2c5fb6403a58e7415d1de49c9b6e021e6ad65fc51830ccc8","integrity":"sha256-yEqe4RDN3/4sX7ZAOljnQV0d5JybbgIeatZfxRgwzMg="},"tinymce/skins/content/dark/content-e57474b10a25646cb26de224b51643167dffab7a473d1a133f59a245ce2bb03e.css":{"logical_path":"tinymce/skins/content/dark/content.css","mtime":"2022-06-18T11:05:00+02:00","size":1219,"digest":"b038b03a15de40771e6565b5541b24832c37b8328256ce6c7b1dfeb10f02eab7","integrity":"sha256-sDiwOhXeQHceZWW1VBskgyw3uDKCVs5sex3+sQ8C6rc="},"tinymce/skins/content/dark/content.min-e57474b10a25646cb26de224b51643167dffab7a473d1a133f59a245ce2bb03e.css":{"logical_path":"tinymce/skins/content/dark/content.min.css","mtime":"2022-06-18T11:05:00+02:00","size":1219,"digest":"b038b03a15de40771e6565b5541b24832c37b8328256ce6c7b1dfeb10f02eab7","integrity":"sha256-sDiwOhXeQHceZWW1VBskgyw3uDKCVs5sex3+sQ8C6rc="},"tinymce/skins/content/default/content-36771aef73c0aa7a3dac5782d3da3dfe3cf5bfa1bc1295157bf2a7c472bc6ded.css":{"logical_path":"tinymce/skins/content/default/content.css","mtime":"2022-06-18T11:05:00+02:00","size":1149,"digest":"245f475b07f8bd8b85aaae5bd67077a237bf85e53185736bb1bc2092aca2b33a","integrity":"sha256-JF9HWwf4vYuFqq5b1nB3oje/heUxhXNrsbwgkqyiszo="},"tinymce/skins/content/default/content.min-36771aef73c0aa7a3dac5782d3da3dfe3cf5bfa1bc1295157bf2a7c472bc6ded.css":{"logical_path":"tinymce/skins/content/default/content.min.css","mtime":"2022-06-18T11:05:00+02:00","size":1149,"digest":"245f475b07f8bd8b85aaae5bd67077a237bf85e53185736bb1bc2092aca2b33a","integrity":"sha256-JF9HWwf4vYuFqq5b1nB3oje/heUxhXNrsbwgkqyiszo="},"tinymce/skins/content/document/content-5b1de9a30138a2cd53ad09dfe989e0bdfb6f3da4c4c2fd2aa94cb1b7991ac9b9.css":{"logical_path":"tinymce/skins/content/document/content.css","mtime":"2022-06-18T11:05:00+02:00","size":1249,"digest":"27ab90013a8b02f0c27159918885e39b637751b1d75f8a85b9b1ed0c8ef006cd","integrity":"sha256-J6uQATqLAvDCcVmRiIXjm2N3UbHXX4qFubHtDI7wBs0="},"tinymce/skins/content/document/content.min-5b1de9a30138a2cd53ad09dfe989e0bdfb6f3da4c4c2fd2aa94cb1b7991ac9b9.css":{"logical_path":"tinymce/skins/content/document/content.min.css","mtime":"2022-06-18T11:05:00+02:00","size":1249,"digest":"27ab90013a8b02f0c27159918885e39b637751b1d75f8a85b9b1ed0c8ef006cd","integrity":"sha256-J6uQATqLAvDCcVmRiIXjm2N3UbHXX4qFubHtDI7wBs0="},"tinymce/skins/content/writer/content-90028995a30c9a4580260fbf7c1f91902b7fff8d5b8f7028c7ba4bf1c6b7e1ed.css":{"logical_path":"tinymce/skins/content/writer/content.css","mtime":"2022-06-18T11:05:00+02:00","size":1170,"digest":"2c73e4adbf51fe1bd75f24e16c46f851e9d789a85fcf5a5ff509fbb46b915b7d","integrity":"sha256-LHPkrb9R/hvXXyThbEb4UenXiahfz1pf9Qn7tGuRW30="},"tinymce/skins/content/writer/content.min-90028995a30c9a4580260fbf7c1f91902b7fff8d5b8f7028c7ba4bf1c6b7e1ed.css":{"logical_path":"tinymce/skins/content/writer/content.min.css","mtime":"2022-06-18T11:05:00+02:00","size":1170,"digest":"2c73e4adbf51fe1bd75f24e16c46f851e9d789a85fcf5a5ff509fbb46b915b7d","integrity":"sha256-LHPkrb9R/hvXXyThbEb4UenXiahfz1pf9Qn7tGuRW30="},"tinymce/skins/ui/oxide-dark/content-05858f414d87e95ced058681161df9acb0fb5e52a3ea9d3ea5efdc22436e2131.css":{"logical_path":"tinymce/skins/ui/oxide-dark/content.css","mtime":"2022-06-18T11:05:00+02:00","size":21211,"digest":"6545b88356649713a2e9fbdc9239d5ae92073ca9d82aaad28efeb291322ae335","integrity":"sha256-ZUW4g1ZklxOi6fvckjnVrpIHPKnYKqrSjv6ykTIq4zU="},"tinymce/skins/ui/oxide-dark/content.inline-965c0ab25123fa4dc5c987969c2a6e90568c903dac8841b59c6af9664a716ca6.css":{"logical_path":"tinymce/skins/ui/oxide-dark/content.inline.css","mtime":"2022-06-18T11:05:00+02:00","size":21538,"digest":"1442b2530b205a84c5dc12b589860a5448d55ad4e2ccabb168ddc27fa70c865b","integrity":"sha256-FEKyUwsgWoTF3BK1iYYKVEjVWtTizKuxaN3Cf6cMhls="},"tinymce/skins/ui/oxide-dark/content.inline.min-965c0ab25123fa4dc5c987969c2a6e90568c903dac8841b59c6af9664a716ca6.css":{"logical_path":"tinymce/skins/ui/oxide-dark/content.inline.min.css","mtime":"2022-06-18T11:05:00+02:00","size":21538,"digest":"1442b2530b205a84c5dc12b589860a5448d55ad4e2ccabb168ddc27fa70c865b","integrity":"sha256-FEKyUwsgWoTF3BK1iYYKVEjVWtTizKuxaN3Cf6cMhls="},"tinymce/skins/ui/oxide-dark/content.min-05858f414d87e95ced058681161df9acb0fb5e52a3ea9d3ea5efdc22436e2131.css":{"logical_path":"tinymce/skins/ui/oxide-dark/content.min.css","mtime":"2022-06-18T11:05:00+02:00","size":21211,"digest":"6545b88356649713a2e9fbdc9239d5ae92073ca9d82aaad28efeb291322ae335","integrity":"sha256-ZUW4g1ZklxOi6fvckjnVrpIHPKnYKqrSjv6ykTIq4zU="},"tinymce/skins/ui/oxide-dark/content.mobile-10aeccf0fe37014c1b0976dd81cff16dfc5be961d3ffebd1641c0a6066f85608.css":{"logical_path":"tinymce/skins/ui/oxide-dark/content.mobile.css","mtime":"2022-06-18T11:05:00+02:00","size":294,"digest":"eea17f0dd832a7c73044c13b869e7b91346e32efe2265f38b931f2c6040be85f","integrity":"sha256-7qF/Ddgyp8cwRME7hp57kTRuMu/iJl84uTHyxgQL6F8="},"tinymce/skins/ui/oxide-dark/content.mobile.min-10aeccf0fe37014c1b0976dd81cff16dfc5be961d3ffebd1641c0a6066f85608.css":{"logical_path":"tinymce/skins/ui/oxide-dark/content.mobile.min.css","mtime":"2022-06-18T11:05:00+02:00","size":294,"digest":"eea17f0dd832a7c73044c13b869e7b91346e32efe2265f38b931f2c6040be85f","integrity":"sha256-7qF/Ddgyp8cwRME7hp57kTRuMu/iJl84uTHyxgQL6F8="},"tinymce/skins/ui/oxide-dark/skin-9fc9e62b6e002e8d85ed3d27840588b58b77afddc3812967ad4204728dd97fc5.css":{"logical_path":"tinymce/skins/ui/oxide-dark/skin.css","mtime":"2022-06-18T11:05:00+02:00","size":60836,"digest":"1386b532e5db30c4ed2ff18b3ecbd98c63975cf515f2e783db4465c2820a4074","integrity":"sha256-E4a1MuXbMMTtL/GLPsvZjGOXXPUV8ueD20RlwoIKQHQ="},"tinymce/skins/ui/oxide-dark/skin.min-9fc9e62b6e002e8d85ed3d27840588b58b77afddc3812967ad4204728dd97fc5.css":{"logical_path":"tinymce/skins/ui/oxide-dark/skin.min.css","mtime":"2022-06-18T11:05:00+02:00","size":60836,"digest":"1386b532e5db30c4ed2ff18b3ecbd98c63975cf515f2e783db4465c2820a4074","integrity":"sha256-E4a1MuXbMMTtL/GLPsvZjGOXXPUV8ueD20RlwoIKQHQ="},"tinymce/skins/ui/oxide-dark/skin.mobile-f88bd33c7437e51a2e3fc58ae6e1760fa6f6ddb8604d5448dda4a2a206c95bac.css":{"logical_path":"tinymce/skins/ui/oxide-dark/skin.mobile.css","mtime":"2022-06-18T11:05:00+02:00","size":20783,"digest":"b0a97925b320970c4b5846cf2c6f3a7222b1268563eeb89c11f20533f469346e","integrity":"sha256-sKl5JbMglwxLWEbPLG86ciKxJoVj7ricEfIFM/RpNG4="},"tinymce/skins/ui/oxide-dark/skin.mobile.min-f88bd33c7437e51a2e3fc58ae6e1760fa6f6ddb8604d5448dda4a2a206c95bac.css":{"logical_path":"tinymce/skins/ui/oxide-dark/skin.mobile.min.css","mtime":"2022-06-18T11:05:00+02:00","size":20783,"digest":"b0a97925b320970c4b5846cf2c6f3a7222b1268563eeb89c11f20533f469346e","integrity":"sha256-sKl5JbMglwxLWEbPLG86ciKxJoVj7ricEfIFM/RpNG4="},"tinymce/skins/ui/oxide-dark/skin.shadowdom-7607e1810029c2191d32d46dc71b443e8e5317010b2e92a9bc133da9431fa80b.css":{"logical_path":"tinymce/skins/ui/oxide-dark/skin.shadowdom.css","mtime":"2022-06-18T11:05:00+02:00","size":514,"digest":"74e2442108dbc9e9e66c4ca8cc39f121aaa65d16a8c5a47b4a4455094399c7e3","integrity":"sha256-dOJEIQjbyenmbEyozDnxIaqmXRaoxaR7SkRVCUOZx+M="},"tinymce/skins/ui/oxide-dark/skin.shadowdom.min-7607e1810029c2191d32d46dc71b443e8e5317010b2e92a9bc133da9431fa80b.css":{"logical_path":"tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css","mtime":"2022-06-18T11:05:00+02:00","size":514,"digest":"74e2442108dbc9e9e66c4ca8cc39f121aaa65d16a8c5a47b4a4455094399c7e3","integrity":"sha256-dOJEIQjbyenmbEyozDnxIaqmXRaoxaR7SkRVCUOZx+M="},"tinymce/skins/ui/oxide/content-63f8955ff68e1122175e8f46d0b760b966148873e452c1b6085f367ef3d63400.css":{"logical_path":"tinymce/skins/ui/oxide/content.css","mtime":"2022-06-18T11:05:00+02:00","size":21597,"digest":"f0b842397eead8ce94c74303a4846beb3a0aa60d34e67bed05991c5d4f04c50f","integrity":"sha256-8LhCOX7q2M6Ux0MDpIRr6zoKpg005nvtBZkcXU8ExQ8="},"tinymce/skins/ui/oxide/content.inline-965c0ab25123fa4dc5c987969c2a6e90568c903dac8841b59c6af9664a716ca6.css":{"logical_path":"tinymce/skins/ui/oxide/content.inline.css","mtime":"2022-06-18T11:05:00+02:00","size":21538,"digest":"1442b2530b205a84c5dc12b589860a5448d55ad4e2ccabb168ddc27fa70c865b","integrity":"sha256-FEKyUwsgWoTF3BK1iYYKVEjVWtTizKuxaN3Cf6cMhls="},"tinymce/skins/ui/oxide/content.inline.min-965c0ab25123fa4dc5c987969c2a6e90568c903dac8841b59c6af9664a716ca6.css":{"logical_path":"tinymce/skins/ui/oxide/content.inline.min.css","mtime":"2022-06-18T11:05:00+02:00","size":21538,"digest":"1442b2530b205a84c5dc12b589860a5448d55ad4e2ccabb168ddc27fa70c865b","integrity":"sha256-FEKyUwsgWoTF3BK1iYYKVEjVWtTizKuxaN3Cf6cMhls="},"tinymce/skins/ui/oxide/content.min-63f8955ff68e1122175e8f46d0b760b966148873e452c1b6085f367ef3d63400.css":{"logical_path":"tinymce/skins/ui/oxide/content.min.css","mtime":"2022-06-18T11:05:00+02:00","size":21597,"digest":"f0b842397eead8ce94c74303a4846beb3a0aa60d34e67bed05991c5d4f04c50f","integrity":"sha256-8LhCOX7q2M6Ux0MDpIRr6zoKpg005nvtBZkcXU8ExQ8="},"tinymce/skins/ui/oxide/content.mobile-10aeccf0fe37014c1b0976dd81cff16dfc5be961d3ffebd1641c0a6066f85608.css":{"logical_path":"tinymce/skins/ui/oxide/content.mobile.css","mtime":"2022-06-18T11:05:00+02:00","size":294,"digest":"eea17f0dd832a7c73044c13b869e7b91346e32efe2265f38b931f2c6040be85f","integrity":"sha256-7qF/Ddgyp8cwRME7hp57kTRuMu/iJl84uTHyxgQL6F8="},"tinymce/skins/ui/oxide/content.mobile.min-10aeccf0fe37014c1b0976dd81cff16dfc5be961d3ffebd1641c0a6066f85608.css":{"logical_path":"tinymce/skins/ui/oxide/content.mobile.min.css","mtime":"2022-06-18T11:05:00+02:00","size":294,"digest":"eea17f0dd832a7c73044c13b869e7b91346e32efe2265f38b931f2c6040be85f","integrity":"sha256-7qF/Ddgyp8cwRME7hp57kTRuMu/iJl84uTHyxgQL6F8="},"tinymce/skins/ui/oxide/skin-ddd4fd676f75ed761367a072bf2be1bd9fc48aed59a15011aeec9b7a9aa331bf.css":{"logical_path":"tinymce/skins/ui/oxide/skin.css","mtime":"2022-06-18T11:05:00+02:00","size":60959,"digest":"c319be2872c7d9e4ac9499ca14c7d0acf533fbed3d3f8c1dec42f06e598ef6af","integrity":"sha256-wxm+KHLH2eSslJnKFMfQrPUz++09P4wd7ELwblmO9q8="},"tinymce/skins/ui/oxide/skin.min-ddd4fd676f75ed761367a072bf2be1bd9fc48aed59a15011aeec9b7a9aa331bf.css":{"logical_path":"tinymce/skins/ui/oxide/skin.min.css","mtime":"2022-06-18T11:05:00+02:00","size":60959,"digest":"c319be2872c7d9e4ac9499ca14c7d0acf533fbed3d3f8c1dec42f06e598ef6af","integrity":"sha256-wxm+KHLH2eSslJnKFMfQrPUz++09P4wd7ELwblmO9q8="},"tinymce/skins/ui/oxide/skin.mobile-f88bd33c7437e51a2e3fc58ae6e1760fa6f6ddb8604d5448dda4a2a206c95bac.css":{"logical_path":"tinymce/skins/ui/oxide/skin.mobile.css","mtime":"2022-06-18T11:05:00+02:00","size":20783,"digest":"b0a97925b320970c4b5846cf2c6f3a7222b1268563eeb89c11f20533f469346e","integrity":"sha256-sKl5JbMglwxLWEbPLG86ciKxJoVj7ricEfIFM/RpNG4="},"tinymce/skins/ui/oxide/skin.mobile.min-f88bd33c7437e51a2e3fc58ae6e1760fa6f6ddb8604d5448dda4a2a206c95bac.css":{"logical_path":"tinymce/skins/ui/oxide/skin.mobile.min.css","mtime":"2022-06-18T11:05:00+02:00","size":20783,"digest":"b0a97925b320970c4b5846cf2c6f3a7222b1268563eeb89c11f20533f469346e","integrity":"sha256-sKl5JbMglwxLWEbPLG86ciKxJoVj7ricEfIFM/RpNG4="},"tinymce/skins/ui/oxide/skin.shadowdom-7607e1810029c2191d32d46dc71b443e8e5317010b2e92a9bc133da9431fa80b.css":{"logical_path":"tinymce/skins/ui/oxide/skin.shadowdom.css","mtime":"2022-06-18T11:05:00+02:00","size":514,"digest":"74e2442108dbc9e9e66c4ca8cc39f121aaa65d16a8c5a47b4a4455094399c7e3","integrity":"sha256-dOJEIQjbyenmbEyozDnxIaqmXRaoxaR7SkRVCUOZx+M="},"tinymce/skins/ui/oxide/skin.shadowdom.min-7607e1810029c2191d32d46dc71b443e8e5317010b2e92a9bc133da9431fa80b.css":{"logical_path":"tinymce/skins/ui/oxide/skin.shadowdom.min.css","mtime":"2022-06-18T11:05:00+02:00","size":514,"digest":"74e2442108dbc9e9e66c4ca8cc39f121aaa65d16a8c5a47b4a4455094399c7e3","integrity":"sha256-dOJEIQjbyenmbEyozDnxIaqmXRaoxaR7SkRVCUOZx+M="},"tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile-e11d6800d0e2233bb8bd5acbe138b214166265f10763acebdf53af93713ef664.woff":{"logical_path":"tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff","mtime":"2022-06-18T11:05:00+02:00","size":4624,"digest":"e64bf156a432d63f5b34b4567b513dc0d351b49161c7f608fb82574bfdd9d213","integrity":"sha256-5kvxVqQy1j9bNLRWe1E9wNNRtJFhx/YI+4JXS/3Z0hM="},"tinymce/skins/ui/oxide/fonts/tinymce-mobile-e11d6800d0e2233bb8bd5acbe138b214166265f10763acebdf53af93713ef664.woff":{"logical_path":"tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff","mtime":"2022-06-18T11:05:00+02:00","size":4624,"digest":"e64bf156a432d63f5b34b4567b513dc0d351b49161c7f608fb82574bfdd9d213","integrity":"sha256-5kvxVqQy1j9bNLRWe1E9wNNRtJFhx/YI+4JXS/3Z0hM="}},"assets":{"markdown.css":"markdown-fc5502f8bf675ab6f1c2d569fdffe6bd18558e812cbca0e6680212b583776cfe.css","manifest.js":"manifest-b4bf6e57a53c2bdb55b8998cc94cd00883793c1c37c5e5aea3ef6749b4f6d92b.js","actiontext.css":"actiontext-f1a367c28b0d2ec5aca43ca3a6642b10865865e6eb660a6f5896b0666038899c.css","application.css":"application-68e4c9cf504edbaa670b008700a7a6fe6af44a59079ac627bd23fb53e8178565.css","articles.css":"articles-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","bibtex.css":"bibtex-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","bibtex_entries.css":"bibtex_entries-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","bibtex_files.css":"bibtex_files-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","blocked_users.css":"blocked_users-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","blog_posts.css":"blog_posts-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","codes.css":"codes-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","custom.css":"custom-873f1ee6b4f4137809e60fd6a57139a315c1dd8fe1683e1cd1d567e6a33ea28e.css","editor.css":"editor-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","external_referee_submission.css":"external_referee_submission-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","external_referee_submissions.css":"external_referee_submissions-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","external_referees.css":"external_referees-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","histories.css":"histories-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","issues.css":"issues-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","jsons.css":"jsons-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","pages.css":"pages-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","pandoc.css":"pandoc-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","reports.css":"reports-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","requested_reviewers.css":"requested_reviewers-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","scaffolds.css":"scaffolds-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","static_pages.css":"static_pages-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","stuffs.css":"stuffs-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","submissions.css":"submissions-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","test.css":"test-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","tools.css":"tools-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","user.css":"user-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css","tinymce.js":"tinymce-213f84c2ea0b76dbe066217672caec97a8f3e296895064f010ae89541df69849.js","tinymce-rails.manifest.js":"tinymce-rails.manifest-dad05bf766af0fe3d79dd746db3c1361c0583026cdf35d6a2921bccaea835331.js","tinymce/icons/default/icons.js":"tinymce/icons/default/icons-a0721895c1cc12748bd1564f906fa27587b5c76ba1598ef53ffc24ecb6b134ab.js","tinymce/jquery.tinymce.js":"tinymce/jquery.tinymce-3816ed398fa3cae7cfa3778396c3080cc77f7a98cf6f76c09d5fd87ac5717060.js","tinymce/plugins/advlist/plugin.js":"tinymce/plugins/advlist/plugin-4fa030df2a1a571b367acd30f0e2feca230c0cd2b8baec69654a05afc55307ce.js","tinymce/plugins/anchor/plugin.js":"tinymce/plugins/anchor/plugin-5a93606694b7a0bd66e2f699801ccba90e0dc57a86514785aa6a2973c3c6a4ef.js","tinymce/plugins/autolink/plugin.js":"tinymce/plugins/autolink/plugin-a3a7a374935cef0e281d7fe0d90cb2d1e72484032e13534567908d5ea4a5f0cd.js","tinymce/plugins/autoresize/plugin.js":"tinymce/plugins/autoresize/plugin-8f999eb1efa36730560646f2f7e5e7b2e6829c84fb951cae557bf9bc537c0daf.js","tinymce/plugins/autosave/plugin.js":"tinymce/plugins/autosave/plugin-3fd90e874fb12511855540e04d399e02b4c916696d58ba1fddf137c8e956aea5.js","tinymce/plugins/bbcode/plugin.js":"tinymce/plugins/bbcode/plugin-218d7766e7fcc1fb224d31eef2f9d3b6cd91b7fefe81c8a8cc09e9e3a63bf603.js","tinymce/plugins/charmap/plugin.js":"tinymce/plugins/charmap/plugin-0b32f067c1ea7b80c584da52fd75124a7bc8371551475c6f679389428ee80583.js","tinymce/plugins/code/plugin.js":"tinymce/plugins/code/plugin-4b8cf16ed0534566bc6a7056d2a95874fc3e025d91d6e77aebf510a33ac6ab3a.js","tinymce/plugins/codesample/plugin.js":"tinymce/plugins/codesample/plugin-58dce15e40cdb579a3a21b9ce74d0725bc50071adb6769547003a39ef6e1a3e3.js","tinymce/plugins/colorpicker/plugin.js":"tinymce/plugins/colorpicker/plugin-fd701e4b52db508ae6794a0811e2df5be1e69f6108c6897dc564067666beb3a0.js","tinymce/plugins/contextmenu/plugin.js":"tinymce/plugins/contextmenu/plugin-466629e42bf8c9385163805640d88f42476f32ee3c2180ca89137bf07e3a251f.js","tinymce/plugins/directionality/plugin.js":"tinymce/plugins/directionality/plugin-bf67abe0d37244a65c89fca222678446401d1df666a3eb80aad22eb969f2ede1.js","tinymce/plugins/emoticons/js/emojiimages.js":"tinymce/plugins/emoticons/js/emojiimages-8d59e6cafd8ee4961cd4f31515f08ad07db747166ce3af67fa8108289e88564d.js","tinymce/plugins/emoticons/js/emojis.js":"tinymce/plugins/emoticons/js/emojis-3006b2aae9b4d0b2df2068968cc5523af58362fbd5759350b5f217f3f20c7236.js","tinymce/plugins/emoticons/plugin.js":"tinymce/plugins/emoticons/plugin-281a10488cd27bf645f84655f0bebb4185f34a9ddb5a6b1a8203ae2f2a43e96f.js","tinymce/plugins/fullpage/plugin.js":"tinymce/plugins/fullpage/plugin-9922360abd8ce20550ef2271d4c37e55e6b1ece541b8149427285bbe4731f67e.js","tinymce/plugins/fullscreen/plugin.js":"tinymce/plugins/fullscreen/plugin-82a33cc62d1752e94284042a7a0847dd2d5ecb8657d108c9a08462f9e3b933a3.js","tinymce/plugins/help/plugin.js":"tinymce/plugins/help/plugin-21f93399a4c6379ac6afe1ef49e65bc00b7f8b3d949bdffe4392efc9ca251e78.js","tinymce/plugins/hr/plugin.js":"tinymce/plugins/hr/plugin-ef8c674f8aa76387c1d5508e978dac74447db0707b150a6d82150ad60874ce78.js","tinymce/plugins/image/plugin.js":"tinymce/plugins/image/plugin-81b520f6cba4e087d98521c960a69d05cad12e1284666ddad51213c64ca97b39.js","tinymce/plugins/imagetools/plugin.js":"tinymce/plugins/imagetools/plugin-5f12b0cffddfd1af1a5ab053111cdb80ce4a107d42cb07b2cff4049110e831f8.js","tinymce/plugins/importcss/plugin.js":"tinymce/plugins/importcss/plugin-ca965b67bec04673901973233461d6cea877764480feb6062dd7f12fd31d3370.js","tinymce/plugins/insertdatetime/plugin.js":"tinymce/plugins/insertdatetime/plugin-b60c2b569baf4f6c5bbb4f2b99701dd39d7eca515955af1ce0e677212e4dde61.js","tinymce/plugins/legacyoutput/plugin.js":"tinymce/plugins/legacyoutput/plugin-c460b8361cb93f80823af1cc29b4ad6b58e2bb8a711144abeb22cd61f9bce541.js","tinymce/plugins/link/plugin.js":"tinymce/plugins/link/plugin-8ee260979cd6327d7ed1bd3a08c5013203ff7a610f19fd9c5faa7dadd1f1e81c.js","tinymce/plugins/lists/plugin.js":"tinymce/plugins/lists/plugin-0ae75e7f9b0630c93d30efaa3116fa98b18afb64668cd306c4e18e3938a371b9.js","tinymce/plugins/media/plugin.js":"tinymce/plugins/media/plugin-1aad849a21686186c2935ca9c25989b082ca58b71976aa2bc19a798ab4a7a675.js","tinymce/plugins/nonbreaking/plugin.js":"tinymce/plugins/nonbreaking/plugin-be44fd68bf6f4469172b56508fc47b35842c7fe94a3d45c087b620cd0fe4ca8e.js","tinymce/plugins/noneditable/plugin.js":"tinymce/plugins/noneditable/plugin-9c03c06e30f4efcf0e688bd80090005634f24783e9801666e44beb74805cc5fd.js","tinymce/plugins/pagebreak/plugin.js":"tinymce/plugins/pagebreak/plugin-8e90262bf60a15a6110ff664066f9bab10a7002478fbd45d33ba0168ea9a3466.js","tinymce/plugins/paste/plugin.js":"tinymce/plugins/paste/plugin-112f7ce8064e159ecd7450adcf4dc38baf14e85697f2954277b79bec78311745.js","tinymce/plugins/preview/plugin.js":"tinymce/plugins/preview/plugin-8e20bf167638b33a5bfa78ad467157639888c0c40d8531deeff6aeab5cfe6f4d.js","tinymce/plugins/print/plugin.js":"tinymce/plugins/print/plugin-a4287d7b3c115aaa79ad5a686f91e9064d0b7009796b0246282ea2b6c260f2c7.js","tinymce/plugins/quickbars/plugin.js":"tinymce/plugins/quickbars/plugin-51c2f1f2edde220b7484719d358f88738672db7b7744eecee28b23c06171982b.js","tinymce/plugins/save/plugin.js":"tinymce/plugins/save/plugin-7b963af33781ba2536a8f3f585775e247e11106967e2c09db6d0bf4d98300522.js","tinymce/plugins/searchreplace/plugin.js":"tinymce/plugins/searchreplace/plugin-dd912aca3c235cee61a8706064578e5fa57260364dbb26170b0875c2e856c044.js","tinymce/plugins/spellchecker/plugin.js":"tinymce/plugins/spellchecker/plugin-31180f2712efef9df656fe514fb40270e94727138f8d9ce1e6d3640a16dadad0.js","tinymce/plugins/tabfocus/plugin.js":"tinymce/plugins/tabfocus/plugin-46fd007da8f1c080fe7ac277994638df151957dfd3249b8575079070839350b2.js","tinymce/plugins/table/plugin.js":"tinymce/plugins/table/plugin-015f27dd7d71fc28a2862364ff25f1c28b9a15a9dd3285f1c6794cc322ace474.js","tinymce/plugins/template/plugin.js":"tinymce/plugins/template/plugin-4c467e7314c73b0e1ce480ea42886d85953b3fcf8c6cc08a54cb506f785d8a45.js","tinymce/plugins/textcolor/plugin.js":"tinymce/plugins/textcolor/plugin-4fc163cede49b5cc4842c27947d2029d2f7b977f5d53321c8db480bcf33f4d5b.js","tinymce/plugins/textpattern/plugin.js":"tinymce/plugins/textpattern/plugin-1dfbed698fe1ff37082a577f89ece6f1f7eb4a5d05720009098f4d87134948c6.js","tinymce/plugins/toc/plugin.js":"tinymce/plugins/toc/plugin-e042b53251fb67003a171743680c4220ca6dcf7845a3ab94dae8d778349ef11a.js","tinymce/plugins/visualblocks/plugin.js":"tinymce/plugins/visualblocks/plugin-8e5a7eb5d68e0a5ae53983298d4301e3aa71f484a8900c37389b8c32a47d494c.js","tinymce/plugins/visualchars/plugin.js":"tinymce/plugins/visualchars/plugin-891a9f567dcb8a7247f7a40528a54c9169605c877cac621ecae4b8bb68c331ff.js","tinymce/plugins/wordcount/plugin.js":"tinymce/plugins/wordcount/plugin-28e52c6cc673c145fa89864027621ab2e9c2254b87b3304ea2ce746f943bbf34.js","tinymce/themes/mobile/theme.js":"tinymce/themes/mobile/theme-76acc51f6652134e2f655a1b29b98027dd611126977006e5c449ab05a74f5b0d.js","tinymce/themes/silver/theme.js":"tinymce/themes/silver/theme-63c035401f63eb136b0083c369af35f906b30b9085aea2c3397155bbadc54160.js","tinymce/tinymce.js":"tinymce/tinymce-60c39b11289948fb90f67e0f0d8cd0c5c08472745b3eb3f49461b10704ac2878.js","tinymce/skins/content/dark/content.css":"tinymce/skins/content/dark/content-e57474b10a25646cb26de224b51643167dffab7a473d1a133f59a245ce2bb03e.css","tinymce/skins/content/dark/content.min.css":"tinymce/skins/content/dark/content.min-e57474b10a25646cb26de224b51643167dffab7a473d1a133f59a245ce2bb03e.css","tinymce/skins/content/default/content.css":"tinymce/skins/content/default/content-36771aef73c0aa7a3dac5782d3da3dfe3cf5bfa1bc1295157bf2a7c472bc6ded.css","tinymce/skins/content/default/content.min.css":"tinymce/skins/content/default/content.min-36771aef73c0aa7a3dac5782d3da3dfe3cf5bfa1bc1295157bf2a7c472bc6ded.css","tinymce/skins/content/document/content.css":"tinymce/skins/content/document/content-5b1de9a30138a2cd53ad09dfe989e0bdfb6f3da4c4c2fd2aa94cb1b7991ac9b9.css","tinymce/skins/content/document/content.min.css":"tinymce/skins/content/document/content.min-5b1de9a30138a2cd53ad09dfe989e0bdfb6f3da4c4c2fd2aa94cb1b7991ac9b9.css","tinymce/skins/content/writer/content.css":"tinymce/skins/content/writer/content-90028995a30c9a4580260fbf7c1f91902b7fff8d5b8f7028c7ba4bf1c6b7e1ed.css","tinymce/skins/content/writer/content.min.css":"tinymce/skins/content/writer/content.min-90028995a30c9a4580260fbf7c1f91902b7fff8d5b8f7028c7ba4bf1c6b7e1ed.css","tinymce/skins/ui/oxide-dark/content.css":"tinymce/skins/ui/oxide-dark/content-05858f414d87e95ced058681161df9acb0fb5e52a3ea9d3ea5efdc22436e2131.css","tinymce/skins/ui/oxide-dark/content.inline.css":"tinymce/skins/ui/oxide-dark/content.inline-965c0ab25123fa4dc5c987969c2a6e90568c903dac8841b59c6af9664a716ca6.css","tinymce/skins/ui/oxide-dark/content.inline.min.css":"tinymce/skins/ui/oxide-dark/content.inline.min-965c0ab25123fa4dc5c987969c2a6e90568c903dac8841b59c6af9664a716ca6.css","tinymce/skins/ui/oxide-dark/content.min.css":"tinymce/skins/ui/oxide-dark/content.min-05858f414d87e95ced058681161df9acb0fb5e52a3ea9d3ea5efdc22436e2131.css","tinymce/skins/ui/oxide-dark/content.mobile.css":"tinymce/skins/ui/oxide-dark/content.mobile-10aeccf0fe37014c1b0976dd81cff16dfc5be961d3ffebd1641c0a6066f85608.css","tinymce/skins/ui/oxide-dark/content.mobile.min.css":"tinymce/skins/ui/oxide-dark/content.mobile.min-10aeccf0fe37014c1b0976dd81cff16dfc5be961d3ffebd1641c0a6066f85608.css","tinymce/skins/ui/oxide-dark/skin.css":"tinymce/skins/ui/oxide-dark/skin-9fc9e62b6e002e8d85ed3d27840588b58b77afddc3812967ad4204728dd97fc5.css","tinymce/skins/ui/oxide-dark/skin.min.css":"tinymce/skins/ui/oxide-dark/skin.min-9fc9e62b6e002e8d85ed3d27840588b58b77afddc3812967ad4204728dd97fc5.css","tinymce/skins/ui/oxide-dark/skin.mobile.css":"tinymce/skins/ui/oxide-dark/skin.mobile-f88bd33c7437e51a2e3fc58ae6e1760fa6f6ddb8604d5448dda4a2a206c95bac.css","tinymce/skins/ui/oxide-dark/skin.mobile.min.css":"tinymce/skins/ui/oxide-dark/skin.mobile.min-f88bd33c7437e51a2e3fc58ae6e1760fa6f6ddb8604d5448dda4a2a206c95bac.css","tinymce/skins/ui/oxide-dark/skin.shadowdom.css":"tinymce/skins/ui/oxide-dark/skin.shadowdom-7607e1810029c2191d32d46dc71b443e8e5317010b2e92a9bc133da9431fa80b.css","tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css":"tinymce/skins/ui/oxide-dark/skin.shadowdom.min-7607e1810029c2191d32d46dc71b443e8e5317010b2e92a9bc133da9431fa80b.css","tinymce/skins/ui/oxide/content.css":"tinymce/skins/ui/oxide/content-63f8955ff68e1122175e8f46d0b760b966148873e452c1b6085f367ef3d63400.css","tinymce/skins/ui/oxide/content.inline.css":"tinymce/skins/ui/oxide/content.inline-965c0ab25123fa4dc5c987969c2a6e90568c903dac8841b59c6af9664a716ca6.css","tinymce/skins/ui/oxide/content.inline.min.css":"tinymce/skins/ui/oxide/content.inline.min-965c0ab25123fa4dc5c987969c2a6e90568c903dac8841b59c6af9664a716ca6.css","tinymce/skins/ui/oxide/content.min.css":"tinymce/skins/ui/oxide/content.min-63f8955ff68e1122175e8f46d0b760b966148873e452c1b6085f367ef3d63400.css","tinymce/skins/ui/oxide/content.mobile.css":"tinymce/skins/ui/oxide/content.mobile-10aeccf0fe37014c1b0976dd81cff16dfc5be961d3ffebd1641c0a6066f85608.css","tinymce/skins/ui/oxide/content.mobile.min.css":"tinymce/skins/ui/oxide/content.mobile.min-10aeccf0fe37014c1b0976dd81cff16dfc5be961d3ffebd1641c0a6066f85608.css","tinymce/skins/ui/oxide/skin.css":"tinymce/skins/ui/oxide/skin-ddd4fd676f75ed761367a072bf2be1bd9fc48aed59a15011aeec9b7a9aa331bf.css","tinymce/skins/ui/oxide/skin.min.css":"tinymce/skins/ui/oxide/skin.min-ddd4fd676f75ed761367a072bf2be1bd9fc48aed59a15011aeec9b7a9aa331bf.css","tinymce/skins/ui/oxide/skin.mobile.css":"tinymce/skins/ui/oxide/skin.mobile-f88bd33c7437e51a2e3fc58ae6e1760fa6f6ddb8604d5448dda4a2a206c95bac.css","tinymce/skins/ui/oxide/skin.mobile.min.css":"tinymce/skins/ui/oxide/skin.mobile.min-f88bd33c7437e51a2e3fc58ae6e1760fa6f6ddb8604d5448dda4a2a206c95bac.css","tinymce/skins/ui/oxide/skin.shadowdom.css":"tinymce/skins/ui/oxide/skin.shadowdom-7607e1810029c2191d32d46dc71b443e8e5317010b2e92a9bc133da9431fa80b.css","tinymce/skins/ui/oxide/skin.shadowdom.min.css":"tinymce/skins/ui/oxide/skin.shadowdom.min-7607e1810029c2191d32d46dc71b443e8e5317010b2e92a9bc133da9431fa80b.css","tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff":"tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile-e11d6800d0e2233bb8bd5acbe138b214166265f10763acebdf53af93713ef664.woff","tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff":"tinymce/skins/ui/oxide/fonts/tinymce-mobile-e11d6800d0e2233bb8bd5acbe138b214166265f10763acebdf53af93713ef664.woff"}} \ No newline at end of file diff --git a/public/assets/actiontext-f1a367c28b0d2ec5aca43ca3a6642b10865865e6eb660a6f5896b0666038899c.css b/public/assets/actiontext-f1a367c28b0d2ec5aca43ca3a6642b10865865e6eb660a6f5896b0666038899c.css new file mode 100644 index 00000000..e53a5ced --- /dev/null +++ b/public/assets/actiontext-f1a367c28b0d2ec5aca43ca3a6642b10865865e6eb660a6f5896b0666038899c.css @@ -0,0 +1 @@ +trix-editor{border:1px solid #bbb;border-radius:3px;margin:0;padding:0.4em 0.6em;min-height:5em;outline:none}trix-toolbar *{box-sizing:border-box}trix-toolbar .trix-button-row{display:flex;flex-wrap:nowrap;justify-content:space-between;overflow-x:auto}trix-toolbar .trix-button-group{display:flex;margin-bottom:10px;border:1px solid #bbb;border-top-color:#ccc;border-bottom-color:#888;border-radius:3px}trix-toolbar .trix-button-group:not(:first-child){margin-left:1.5vw}@media (max-device-width: 768px){trix-toolbar .trix-button-group:not(:first-child){margin-left:0}}trix-toolbar .trix-button-group-spacer{flex-grow:1}@media (max-device-width: 768px){trix-toolbar .trix-button-group-spacer{display:none}}trix-toolbar .trix-button{position:relative;float:left;color:rgba(0,0,0,0.6);font-size:0.75em;font-weight:600;white-space:nowrap;padding:0 0.5em;margin:0;outline:none;border:none;border-bottom:1px solid #ddd;border-radius:0;background:transparent}trix-toolbar .trix-button:not(:first-child){border-left:1px solid #ccc}trix-toolbar .trix-button.trix-active{background:#cbeefa;color:black}trix-toolbar .trix-button:not(:disabled){cursor:pointer}trix-toolbar .trix-button:disabled{color:rgba(0,0,0,0.125)}@media (max-device-width: 768px){trix-toolbar .trix-button{letter-spacing:-0.01em;padding:0 0.3em}}trix-toolbar .trix-button--icon{font-size:inherit;width:2.6em;height:1.6em;max-width:calc(0.8em + 4vw);text-indent:-9999px}@media (max-device-width: 768px){trix-toolbar .trix-button--icon{height:2em;max-width:calc(0.8em + 3.5vw)}}trix-toolbar .trix-button--icon::before{display:inline-block;position:absolute;top:0;right:0;bottom:0;left:0;opacity:0.6;content:"";background-position:center;background-repeat:no-repeat;background-size:contain}@media (max-device-width: 768px){trix-toolbar .trix-button--icon::before{right:6%;left:6%}}trix-toolbar .trix-button--icon.trix-active::before{opacity:1}trix-toolbar .trix-button--icon:disabled::before{opacity:0.125}trix-toolbar .trix-button--icon-attach::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M16.5%206v11.5a4%204%200%201%201-8%200V5a2.5%202.5%200%200%201%205%200v10.5a1%201%200%201%201-2%200V6H10v9.5a2.5%202.5%200%200%200%205%200V5a4%204%200%201%200-8%200v12.5a5.5%205.5%200%200%200%2011%200V6h-1.5z%22%2F%3E%3C%2Fsvg%3E);top:8%;bottom:4%}trix-toolbar .trix-button--icon-bold::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M15.6%2011.8c1-.7%201.6-1.8%201.6-2.8a4%204%200%200%200-4-4H7v14h7c2.1%200%203.7-1.7%203.7-3.8%200-1.5-.8-2.8-2.1-3.4zM10%207.5h3a1.5%201.5%200%201%201%200%203h-3v-3zm3.5%209H10v-3h3.5a1.5%201.5%200%201%201%200%203z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-italic::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M10%205v3h2.2l-3.4%208H6v3h8v-3h-2.2l3.4-8H18V5h-8z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-link::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M9.88%2013.7a4.3%204.3%200%200%201%200-6.07l3.37-3.37a4.26%204.26%200%200%201%206.07%200%204.3%204.3%200%200%201%200%206.06l-1.96%201.72a.91.91%200%201%201-1.3-1.3l1.97-1.71a2.46%202.46%200%200%200-3.48-3.48l-3.38%203.37a2.46%202.46%200%200%200%200%203.48.91.91%200%201%201-1.3%201.3z%22%2F%3E%3Cpath%20d%3D%22M4.25%2019.46a4.3%204.3%200%200%201%200-6.07l1.93-1.9a.91.91%200%201%201%201.3%201.3l-1.93%201.9a2.46%202.46%200%200%200%203.48%203.48l3.37-3.38c.96-.96.96-2.52%200-3.48a.91.91%200%201%201%201.3-1.3%204.3%204.3%200%200%201%200%206.07l-3.38%203.38a4.26%204.26%200%200%201-6.07%200z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-strike::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M12.73%2014l.28.14c.26.15.45.3.57.44.12.14.18.3.18.5%200%20.3-.15.56-.44.75-.3.2-.76.3-1.39.3A13.52%2013.52%200%200%201%207%2014.95v3.37a10.64%2010.64%200%200%200%204.84.88c1.26%200%202.35-.19%203.28-.56.93-.37%201.64-.9%202.14-1.57s.74-1.45.74-2.32c0-.26-.02-.51-.06-.75h-5.21zm-5.5-4c-.08-.34-.12-.7-.12-1.1%200-1.29.52-2.3%201.58-3.02%201.05-.72%202.5-1.08%204.34-1.08%201.62%200%203.28.34%204.97%201l-1.3%202.93c-1.47-.6-2.73-.9-3.8-.9-.55%200-.96.08-1.2.26-.26.17-.38.38-.38.64%200%20.27.16.52.48.74.17.12.53.3%201.05.53H7.23zM3%2013h18v-2H3v2z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-quote::before{background-image:url(data:image/svg+xml,%3Csvg%20version%3D%221%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M6%2017h3l2-4V7H5v6h3zm8%200h3l2-4V7h-6v6h3z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-heading-1::before{background-image:url(data:image/svg+xml,%3Csvg%20version%3D%221%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M12%209v3H9v7H6v-7H3V9h9zM8%204h14v3h-6v12h-3V7H8V4z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-code::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M18.2%2012L15%2015.2l1.4%201.4L21%2012l-4.6-4.6L15%208.8l3.2%203.2zM5.8%2012L9%208.8%207.6%207.4%203%2012l4.6%204.6L9%2015.2%205.8%2012z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-bullet-list::before{background-image:url(data:image/svg+xml,%3Csvg%20version%3D%221%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%204a2%202%200%201%200%200%204%202%202%200%200%200%200-4zm0%206a2%202%200%201%200%200%204%202%202%200%200%200%200-4zm0%206a2%202%200%201%200%200%204%202%202%200%200%200%200-4zm4%203h14v-2H8v2zm0-6h14v-2H8v2zm0-8v2h14V5H8z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-number-list::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M2%2017h2v.5H3v1h1v.5H2v1h3v-4H2v1zm1-9h1V4H2v1h1v3zm-1%203h1.8L2%2013.1v.9h3v-1H3.2L5%2010.9V10H2v1zm5-6v2h14V5H7zm0%2014h14v-2H7v2zm0-6h14v-2H7v2z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-undo::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M12.5%208c-2.6%200-5%201-6.9%202.6L2%207v9h9l-3.6-3.6A8%208%200%200%201%2020%2016l2.4-.8a10.5%2010.5%200%200%200-10-7.2z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-redo::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M18.4%2010.6a10.5%2010.5%200%200%200-16.9%204.6L4%2016a8%208%200%200%201%2012.7-3.6L13%2016h9V7l-3.6%203.6z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-decrease-nesting-level::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M3%2019h19v-2H3v2zm7-6h12v-2H10v2zm-8.3-.3l2.8%202.9L6%2014.2%204%2012l2-2-1.4-1.5L1%2012l.7.7zM3%205v2h19V5H3z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-increase-nesting-level::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M3%2019h19v-2H3v2zm7-6h12v-2H10v2zm-6.9-1L1%2014.2l1.4%201.4L6%2012l-.7-.7-2.8-2.8L1%209.9%203.1%2012zM3%205v2h19V5H3z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-dialogs{position:relative}trix-toolbar .trix-dialog{position:absolute;top:0;left:0;right:0;font-size:0.75em;padding:15px 10px;background:#fff;box-shadow:0 0.3em 1em #ccc;border-top:2px solid #888;border-radius:5px;z-index:5}trix-toolbar .trix-input--dialog{font-size:inherit;font-weight:normal;padding:0.5em 0.8em;margin:0 10px 0 0;border-radius:3px;border:1px solid #bbb;background-color:#fff;box-shadow:none;outline:none;-webkit-appearance:none;-moz-appearance:none}trix-toolbar .trix-input--dialog.validate:invalid{box-shadow:#F00 0px 0px 1.5px 1px}trix-toolbar .trix-button--dialog{font-size:inherit;padding:0.5em;border-bottom:none}trix-toolbar .trix-dialog--link{max-width:600px}trix-toolbar .trix-dialog__link-fields{display:flex;align-items:baseline}trix-toolbar .trix-dialog__link-fields .trix-input{flex:1}trix-toolbar .trix-dialog__link-fields .trix-button-group{flex:0 0 content;margin:0}trix-editor [data-trix-mutable]:not(.attachment__caption-editor){-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}trix-editor [data-trix-mutable]::-moz-selection,trix-editor [data-trix-cursor-target]::-moz-selection,trix-editor [data-trix-mutable] ::-moz-selection{background:none}trix-editor [data-trix-mutable]::selection,trix-editor [data-trix-cursor-target]::selection,trix-editor [data-trix-mutable] ::selection{background:none}trix-editor .attachment__caption-editor[data-trix-mutable]:focus::-moz-selection{background:highlight}trix-editor .attachment__caption-editor[data-trix-mutable]:focus::selection{background:highlight}trix-editor .attachment.attachment--file[data-trix-mutable]{box-shadow:0 0 0 2px highlight;border-color:transparent}trix-editor .attachment[data-trix-mutable] img{box-shadow:0 0 0 2px highlight}trix-editor .attachment{position:relative}trix-editor .attachment:hover{cursor:default}trix-editor .attachment--preview .attachment__caption:hover{cursor:text}trix-editor .attachment__progress{position:absolute;z-index:1;height:20px;top:calc(50% - 10px);left:5%;width:90%;opacity:0.9;transition:opacity 200ms ease-in}trix-editor .attachment__progress[value="100"]{opacity:0}trix-editor .attachment__caption-editor{display:inline-block;width:100%;margin:0;padding:0;font-size:inherit;font-family:inherit;line-height:inherit;color:inherit;text-align:center;vertical-align:top;border:none;outline:none;-webkit-appearance:none;-moz-appearance:none}trix-editor .attachment__toolbar{position:absolute;z-index:1;top:-0.9em;left:0;width:100%;text-align:center}trix-editor .trix-button-group{display:inline-flex}trix-editor .trix-button{position:relative;float:left;color:#666;white-space:nowrap;font-size:80%;padding:0 0.8em;margin:0;outline:none;border:none;border-radius:0;background:transparent}trix-editor .trix-button:not(:first-child){border-left:1px solid #ccc}trix-editor .trix-button.trix-active{background:#cbeefa}trix-editor .trix-button:not(:disabled){cursor:pointer}trix-editor .trix-button--remove{text-indent:-9999px;display:inline-block;padding:0;outline:none;width:1.8em;height:1.8em;line-height:1.8em;border-radius:50%;background-color:#fff;border:2px solid highlight;box-shadow:1px 1px 6px rgba(0,0,0,0.25)}trix-editor .trix-button--remove::before{display:inline-block;position:absolute;top:0;right:0;bottom:0;left:0;opacity:0.7;content:"";background-image:url(data:image/svg+xml,%3Csvg%20height%3D%2224%22%20width%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M19%206.4L17.6%205%2012%2010.6%206.4%205%205%206.4l5.6%205.6L5%2017.6%206.4%2019l5.6-5.6%205.6%205.6%201.4-1.4-5.6-5.6z%22%2F%3E%3Cpath%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3C%2Fsvg%3E);background-position:center;background-repeat:no-repeat;background-size:90%}trix-editor .trix-button--remove:hover{border-color:#333}trix-editor .trix-button--remove:hover::before{opacity:1}trix-editor .attachment__metadata-container{position:relative}trix-editor .attachment__metadata{position:absolute;left:50%;top:2em;transform:translate(-50%, 0);max-width:90%;padding:0.1em 0.6em;font-size:0.8em;color:#fff;background-color:rgba(0,0,0,0.7);border-radius:3px}trix-editor .attachment__metadata .attachment__name{display:inline-block;max-width:100%;vertical-align:bottom;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}trix-editor .attachment__metadata .attachment__size{margin-left:0.2em;white-space:nowrap}.trix-content{line-height:1.5}.trix-content *{box-sizing:border-box;margin:0;padding:0}.trix-content h1{font-size:1.2em;line-height:1.2}.trix-content blockquote{border:0 solid #ccc;border-left-width:0.3em;margin-left:0.3em;padding-left:0.6em}.trix-content [dir=rtl] blockquote,.trix-content blockquote[dir=rtl]{border-width:0;border-right-width:0.3em;margin-right:0.3em;padding-right:0.6em}.trix-content li{margin-left:1em}.trix-content [dir=rtl] li{margin-right:1em}.trix-content pre{display:inline-block;width:100%;vertical-align:top;font-family:monospace;font-size:0.9em;padding:0.5em;white-space:pre;background-color:#eee;overflow-x:auto}.trix-content img{max-width:100%;height:auto}.trix-content .attachment{display:inline-block;position:relative;max-width:100%}.trix-content .attachment a{color:inherit;text-decoration:none}.trix-content .attachment a:hover,.trix-content .attachment a:visited:hover{color:inherit}.trix-content .attachment__caption{text-align:center}.trix-content .attachment__caption .attachment__name+.attachment__size::before{content:' · '}.trix-content .attachment--preview{width:100%;text-align:center}.trix-content .attachment--preview .attachment__caption{color:#666;font-size:0.9em;line-height:1.2}.trix-content .attachment--file{color:#333;line-height:1;margin:0 2px 2px 2px;padding:0.4em 1em;border:1px solid #bbb;border-radius:5px}.trix-content .attachment-gallery{display:flex;flex-wrap:wrap;position:relative}.trix-content .attachment-gallery .attachment{flex:1 0 33%;padding:0 0.5em;max-width:33%}.trix-content .attachment-gallery.attachment-gallery--2 .attachment,.trix-content .attachment-gallery.attachment-gallery--4 .attachment{flex-basis:50%;max-width:50%}.trix-content .attachment-gallery>action-text-attachment,.trix-content .attachment-gallery>.attachment{flex:1 0 33%;padding:0 0.5em;max-width:33%}.trix-content .attachment-gallery.attachment-gallery--2>action-text-attachment,.trix-content .attachment-gallery.attachment-gallery--2>.attachment,.trix-content .attachment-gallery.attachment-gallery--4>action-text-attachment,.trix-content .attachment-gallery.attachment-gallery--4>.attachment{flex-basis:50%;max-width:50%}.trix-content action-text-attachment .attachment{padding:0 !important;max-width:100% !important} diff --git a/public/assets/actiontext-f1a367c28b0d2ec5aca43ca3a6642b10865865e6eb660a6f5896b0666038899c.css.gz b/public/assets/actiontext-f1a367c28b0d2ec5aca43ca3a6642b10865865e6eb660a6f5896b0666038899c.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..ea134952d8feb98244c87a4763de01cebfb767c4 GIT binary patch literal 3384 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 O-G2dGLG_FqIRF6cVvbw@ literal 0 HcmV?d00001 diff --git a/public/assets/application-68e4c9cf504edbaa670b008700a7a6fe6af44a59079ac627bd23fb53e8178565.css b/public/assets/application-68e4c9cf504edbaa670b008700a7a6fe6af44a59079ac627bd23fb53e8178565.css new file mode 100644 index 00000000..4d3a231d --- /dev/null +++ b/public/assets/application-68e4c9cf504edbaa670b008700a7a6fe6af44a59079ac627bd23fb53e8178565.css @@ -0,0 +1 @@ +trix-editor{border:1px solid #bbb;border-radius:3px;margin:0;padding:0.4em 0.6em;min-height:5em;outline:none}trix-toolbar *{box-sizing:border-box}trix-toolbar .trix-button-row{display:flex;flex-wrap:nowrap;justify-content:space-between;overflow-x:auto}trix-toolbar .trix-button-group{display:flex;margin-bottom:10px;border:1px solid #bbb;border-top-color:#ccc;border-bottom-color:#888;border-radius:3px}trix-toolbar .trix-button-group:not(:first-child){margin-left:1.5vw}@media (max-device-width: 768px){trix-toolbar .trix-button-group:not(:first-child){margin-left:0}}trix-toolbar .trix-button-group-spacer{flex-grow:1}@media (max-device-width: 768px){trix-toolbar .trix-button-group-spacer{display:none}}trix-toolbar .trix-button{position:relative;float:left;color:rgba(0,0,0,0.6);font-size:0.75em;font-weight:600;white-space:nowrap;padding:0 0.5em;margin:0;outline:none;border:none;border-bottom:1px solid #ddd;border-radius:0;background:transparent}trix-toolbar .trix-button:not(:first-child){border-left:1px solid #ccc}trix-toolbar .trix-button.trix-active{background:#cbeefa;color:black}trix-toolbar .trix-button:not(:disabled){cursor:pointer}trix-toolbar .trix-button:disabled{color:rgba(0,0,0,0.125)}@media (max-device-width: 768px){trix-toolbar .trix-button{letter-spacing:-0.01em;padding:0 0.3em}}trix-toolbar .trix-button--icon{font-size:inherit;width:2.6em;height:1.6em;max-width:calc(0.8em + 4vw);text-indent:-9999px}@media (max-device-width: 768px){trix-toolbar .trix-button--icon{height:2em;max-width:calc(0.8em + 3.5vw)}}trix-toolbar .trix-button--icon::before{display:inline-block;position:absolute;top:0;right:0;bottom:0;left:0;opacity:0.6;content:"";background-position:center;background-repeat:no-repeat;background-size:contain}@media (max-device-width: 768px){trix-toolbar .trix-button--icon::before{right:6%;left:6%}}trix-toolbar .trix-button--icon.trix-active::before{opacity:1}trix-toolbar .trix-button--icon:disabled::before{opacity:0.125}trix-toolbar .trix-button--icon-attach::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M16.5%206v11.5a4%204%200%201%201-8%200V5a2.5%202.5%200%200%201%205%200v10.5a1%201%200%201%201-2%200V6H10v9.5a2.5%202.5%200%200%200%205%200V5a4%204%200%201%200-8%200v12.5a5.5%205.5%200%200%200%2011%200V6h-1.5z%22%2F%3E%3C%2Fsvg%3E);top:8%;bottom:4%}trix-toolbar .trix-button--icon-bold::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M15.6%2011.8c1-.7%201.6-1.8%201.6-2.8a4%204%200%200%200-4-4H7v14h7c2.1%200%203.7-1.7%203.7-3.8%200-1.5-.8-2.8-2.1-3.4zM10%207.5h3a1.5%201.5%200%201%201%200%203h-3v-3zm3.5%209H10v-3h3.5a1.5%201.5%200%201%201%200%203z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-italic::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M10%205v3h2.2l-3.4%208H6v3h8v-3h-2.2l3.4-8H18V5h-8z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-link::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M9.88%2013.7a4.3%204.3%200%200%201%200-6.07l3.37-3.37a4.26%204.26%200%200%201%206.07%200%204.3%204.3%200%200%201%200%206.06l-1.96%201.72a.91.91%200%201%201-1.3-1.3l1.97-1.71a2.46%202.46%200%200%200-3.48-3.48l-3.38%203.37a2.46%202.46%200%200%200%200%203.48.91.91%200%201%201-1.3%201.3z%22%2F%3E%3Cpath%20d%3D%22M4.25%2019.46a4.3%204.3%200%200%201%200-6.07l1.93-1.9a.91.91%200%201%201%201.3%201.3l-1.93%201.9a2.46%202.46%200%200%200%203.48%203.48l3.37-3.38c.96-.96.96-2.52%200-3.48a.91.91%200%201%201%201.3-1.3%204.3%204.3%200%200%201%200%206.07l-3.38%203.38a4.26%204.26%200%200%201-6.07%200z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-strike::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M12.73%2014l.28.14c.26.15.45.3.57.44.12.14.18.3.18.5%200%20.3-.15.56-.44.75-.3.2-.76.3-1.39.3A13.52%2013.52%200%200%201%207%2014.95v3.37a10.64%2010.64%200%200%200%204.84.88c1.26%200%202.35-.19%203.28-.56.93-.37%201.64-.9%202.14-1.57s.74-1.45.74-2.32c0-.26-.02-.51-.06-.75h-5.21zm-5.5-4c-.08-.34-.12-.7-.12-1.1%200-1.29.52-2.3%201.58-3.02%201.05-.72%202.5-1.08%204.34-1.08%201.62%200%203.28.34%204.97%201l-1.3%202.93c-1.47-.6-2.73-.9-3.8-.9-.55%200-.96.08-1.2.26-.26.17-.38.38-.38.64%200%20.27.16.52.48.74.17.12.53.3%201.05.53H7.23zM3%2013h18v-2H3v2z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-quote::before{background-image:url(data:image/svg+xml,%3Csvg%20version%3D%221%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M6%2017h3l2-4V7H5v6h3zm8%200h3l2-4V7h-6v6h3z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-heading-1::before{background-image:url(data:image/svg+xml,%3Csvg%20version%3D%221%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M12%209v3H9v7H6v-7H3V9h9zM8%204h14v3h-6v12h-3V7H8V4z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-code::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M18.2%2012L15%2015.2l1.4%201.4L21%2012l-4.6-4.6L15%208.8l3.2%203.2zM5.8%2012L9%208.8%207.6%207.4%203%2012l4.6%204.6L9%2015.2%205.8%2012z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-bullet-list::before{background-image:url(data:image/svg+xml,%3Csvg%20version%3D%221%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%204a2%202%200%201%200%200%204%202%202%200%200%200%200-4zm0%206a2%202%200%201%200%200%204%202%202%200%200%200%200-4zm0%206a2%202%200%201%200%200%204%202%202%200%200%200%200-4zm4%203h14v-2H8v2zm0-6h14v-2H8v2zm0-8v2h14V5H8z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-number-list::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M2%2017h2v.5H3v1h1v.5H2v1h3v-4H2v1zm1-9h1V4H2v1h1v3zm-1%203h1.8L2%2013.1v.9h3v-1H3.2L5%2010.9V10H2v1zm5-6v2h14V5H7zm0%2014h14v-2H7v2zm0-6h14v-2H7v2z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-undo::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M12.5%208c-2.6%200-5%201-6.9%202.6L2%207v9h9l-3.6-3.6A8%208%200%200%201%2020%2016l2.4-.8a10.5%2010.5%200%200%200-10-7.2z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-redo::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M18.4%2010.6a10.5%2010.5%200%200%200-16.9%204.6L4%2016a8%208%200%200%201%2012.7-3.6L13%2016h9V7l-3.6%203.6z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-decrease-nesting-level::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M3%2019h19v-2H3v2zm7-6h12v-2H10v2zm-8.3-.3l2.8%202.9L6%2014.2%204%2012l2-2-1.4-1.5L1%2012l.7.7zM3%205v2h19V5H3z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-button--icon-increase-nesting-level::before{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M3%2019h19v-2H3v2zm7-6h12v-2H10v2zm-6.9-1L1%2014.2l1.4%201.4L6%2012l-.7-.7-2.8-2.8L1%209.9%203.1%2012zM3%205v2h19V5H3z%22%2F%3E%3C%2Fsvg%3E)}trix-toolbar .trix-dialogs{position:relative}trix-toolbar .trix-dialog{position:absolute;top:0;left:0;right:0;font-size:0.75em;padding:15px 10px;background:#fff;box-shadow:0 0.3em 1em #ccc;border-top:2px solid #888;border-radius:5px;z-index:5}trix-toolbar .trix-input--dialog{font-size:inherit;font-weight:normal;padding:0.5em 0.8em;margin:0 10px 0 0;border-radius:3px;border:1px solid #bbb;background-color:#fff;box-shadow:none;outline:none;-webkit-appearance:none;-moz-appearance:none}trix-toolbar .trix-input--dialog.validate:invalid{box-shadow:#F00 0px 0px 1.5px 1px}trix-toolbar .trix-button--dialog{font-size:inherit;padding:0.5em;border-bottom:none}trix-toolbar .trix-dialog--link{max-width:600px}trix-toolbar .trix-dialog__link-fields{display:flex;align-items:baseline}trix-toolbar .trix-dialog__link-fields .trix-input{flex:1}trix-toolbar .trix-dialog__link-fields .trix-button-group{flex:0 0 content;margin:0}trix-editor [data-trix-mutable]:not(.attachment__caption-editor){-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}trix-editor [data-trix-mutable]::-moz-selection,trix-editor [data-trix-cursor-target]::-moz-selection,trix-editor [data-trix-mutable] ::-moz-selection{background:none}trix-editor [data-trix-mutable]::selection,trix-editor [data-trix-cursor-target]::selection,trix-editor [data-trix-mutable] ::selection{background:none}trix-editor .attachment__caption-editor[data-trix-mutable]:focus::-moz-selection{background:highlight}trix-editor .attachment__caption-editor[data-trix-mutable]:focus::selection{background:highlight}trix-editor .attachment.attachment--file[data-trix-mutable]{box-shadow:0 0 0 2px highlight;border-color:transparent}trix-editor .attachment[data-trix-mutable] img{box-shadow:0 0 0 2px highlight}trix-editor .attachment{position:relative}trix-editor .attachment:hover{cursor:default}trix-editor .attachment--preview .attachment__caption:hover{cursor:text}trix-editor .attachment__progress{position:absolute;z-index:1;height:20px;top:calc(50% - 10px);left:5%;width:90%;opacity:0.9;transition:opacity 200ms ease-in}trix-editor .attachment__progress[value="100"]{opacity:0}trix-editor .attachment__caption-editor{display:inline-block;width:100%;margin:0;padding:0;font-size:inherit;font-family:inherit;line-height:inherit;color:inherit;text-align:center;vertical-align:top;border:none;outline:none;-webkit-appearance:none;-moz-appearance:none}trix-editor .attachment__toolbar{position:absolute;z-index:1;top:-0.9em;left:0;width:100%;text-align:center}trix-editor .trix-button-group{display:inline-flex}trix-editor .trix-button{position:relative;float:left;color:#666;white-space:nowrap;font-size:80%;padding:0 0.8em;margin:0;outline:none;border:none;border-radius:0;background:transparent}trix-editor .trix-button:not(:first-child){border-left:1px solid #ccc}trix-editor .trix-button.trix-active{background:#cbeefa}trix-editor .trix-button:not(:disabled){cursor:pointer}trix-editor .trix-button--remove{text-indent:-9999px;display:inline-block;padding:0;outline:none;width:1.8em;height:1.8em;line-height:1.8em;border-radius:50%;background-color:#fff;border:2px solid highlight;box-shadow:1px 1px 6px rgba(0,0,0,0.25)}trix-editor .trix-button--remove::before{display:inline-block;position:absolute;top:0;right:0;bottom:0;left:0;opacity:0.7;content:"";background-image:url(data:image/svg+xml,%3Csvg%20height%3D%2224%22%20width%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M19%206.4L17.6%205%2012%2010.6%206.4%205%205%206.4l5.6%205.6L5%2017.6%206.4%2019l5.6-5.6%205.6%205.6%201.4-1.4-5.6-5.6z%22%2F%3E%3Cpath%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3C%2Fsvg%3E);background-position:center;background-repeat:no-repeat;background-size:90%}trix-editor .trix-button--remove:hover{border-color:#333}trix-editor .trix-button--remove:hover::before{opacity:1}trix-editor .attachment__metadata-container{position:relative}trix-editor .attachment__metadata{position:absolute;left:50%;top:2em;transform:translate(-50%, 0);max-width:90%;padding:0.1em 0.6em;font-size:0.8em;color:#fff;background-color:rgba(0,0,0,0.7);border-radius:3px}trix-editor .attachment__metadata .attachment__name{display:inline-block;max-width:100%;vertical-align:bottom;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}trix-editor .attachment__metadata .attachment__size{margin-left:0.2em;white-space:nowrap}.trix-content{line-height:1.5}.trix-content *{box-sizing:border-box;margin:0;padding:0}.trix-content h1{font-size:1.2em;line-height:1.2}.trix-content blockquote{border:0 solid #ccc;border-left-width:0.3em;margin-left:0.3em;padding-left:0.6em}.trix-content [dir=rtl] blockquote,.trix-content blockquote[dir=rtl]{border-width:0;border-right-width:0.3em;margin-right:0.3em;padding-right:0.6em}.trix-content li{margin-left:1em}.trix-content [dir=rtl] li{margin-right:1em}.trix-content pre{display:inline-block;width:100%;vertical-align:top;font-family:monospace;font-size:0.9em;padding:0.5em;white-space:pre;background-color:#eee;overflow-x:auto}.trix-content img{max-width:100%;height:auto}.trix-content .attachment{display:inline-block;position:relative;max-width:100%}.trix-content .attachment a{color:inherit;text-decoration:none}.trix-content .attachment a:hover,.trix-content .attachment a:visited:hover{color:inherit}.trix-content .attachment__caption{text-align:center}.trix-content .attachment__caption .attachment__name+.attachment__size::before{content:' · '}.trix-content .attachment--preview{width:100%;text-align:center}.trix-content .attachment--preview .attachment__caption{color:#666;font-size:0.9em;line-height:1.2}.trix-content .attachment--file{color:#333;line-height:1;margin:0 2px 2px 2px;padding:0.4em 1em;border:1px solid #bbb;border-radius:5px}.trix-content .attachment-gallery{display:flex;flex-wrap:wrap;position:relative}.trix-content .attachment-gallery .attachment{flex:1 0 33%;padding:0 0.5em;max-width:33%}.trix-content .attachment-gallery.attachment-gallery--2 .attachment,.trix-content .attachment-gallery.attachment-gallery--4 .attachment{flex-basis:50%;max-width:50%}.trix-content .attachment-gallery>action-text-attachment,.trix-content .attachment-gallery>.attachment{flex:1 0 33%;padding:0 0.5em;max-width:33%}.trix-content .attachment-gallery.attachment-gallery--2>action-text-attachment,.trix-content .attachment-gallery.attachment-gallery--2>.attachment,.trix-content .attachment-gallery.attachment-gallery--4>action-text-attachment,.trix-content .attachment-gallery.attachment-gallery--4>.attachment{flex-basis:50%;max-width:50%}.trix-content action-text-attachment .attachment{padding:0 !important;max-width:100% !important}.thick-borders-1{border-width:1px !important}.thick-borders-2{border-width:2px !important}.thick-borders-3{border-width:3px !important}.thick-borders-4{border-width:4px !important}.thick-borders-5{border-width:5px !important}.thick-borders-6{border-width:6px !important}.thick-borders-7{border-width:7px !important}.thick-borders-8{border-width:8px !important}.thick-borders-9{border-width:9px !important}.thick-borders-10{border-width:10px !important}@keyframes shake{10%,90%{transform:translate3d(-1px, 0, 0)}20%,80%{transform:translate3d(2px, 0, 0)}30%,50%,70%{transform:translate3d(-4px, 0, 0)}40%,60%{transform:translate3d(4px, 0, 0)}}.bg-color-light-green{background-color:#90EE90 !important}.bg-color-light-green:hover{transform:scale(1.09);background-color:#bcf5bc !important}.bg-color-dark-green{background-color:#32CD32 !important}.bg-color-dark-green:hover{transform:scale(1.09);background-color:#5bd75b !important}.bg-color-light-red{background-color:#FF4500 !important}.bg-color-light-red:hover{transform:scale(1.09);background-color:#ff6a33 !important}.bg-color-dark-red{background-color:#DC143C !important}.bg-color-dark-red:hover{transform:scale(1.09);background-color:#ed365b !important}.bg-color-violet{background-color:#FF1493 !important}.bg-color-violet:hover{transform:scale(1.09);background-color:#ff47aa !important}.bg-color-dark-grey{background-color:#A9A9A9 !important}.bg-color-dark-grey:hover{transform:scale(1.09);background-color:#c3c3c3 !important}.bg-color-black{background-color:#000000 !important}.bg-color-black:hover{transform:scale(1.09);background-color:#1a1a1a !important}.border-light-yellow{border-color:#fdfd96 !important;border-radius:25px;border:2px}.border-dark-yellow{border-color:#FAFA0F !important;border-radius:25px;border:2px}.bg-first-color{background-color:#164da2}.embed-responsive-210by297{padding-bottom:141.42%}blockquote{font-size:1.4em;width:60%;margin:50px auto;font-family:Open Sans;font-style:italic;color:#555555;padding:1.2em 5px 1.2em 10px;border-left:8px solid #78C0A8;line-height:1.6;position:relative;background:#EDEDED}.arrow-animation{transform:rotate(0deg)}.arrow-animation.show{transform:rotate(90deg)}.arrow-animation.collapsed{transform:rotate(0deg)}.markdown{word-wrap:break-word}.markdown,.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6,.markdown pre,.markdown code,.markdown blockquote,.markdown em,.markdown strong,.markdown code{font-size:14px;line-height:20px;font-weight:normal;font-style:normal;font-family:consolas, monaco, courier, "courier new", fixed-width;color:#333333}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6,.markdown pre,.markdown code,.markdown blockquote,.markdown ol,.markdown ul,.markdown li,.markdown p,.markdown section,.markdown header,.markdown footer{float:none;margin:0;padding:0}.markdown h1,.markdown p,.markdown ul,.markdown ol,.markdown pre,.markdown blockquote{margin-top:20px;margin-bottom:20px}.markdown h1{position:relative;display:inline-block;display:table-cell;padding:20px 0 40px;margin:0;overflow:hidden}.markdown h1+*{margin-top:0}.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{position:relative;margin-bottom:20px}.markdown h1:before{content:"# ";display:inline}.markdown h2:before,.markdown h3:before,.markdown h4:before,.markdown h5:before,.markdown h6:before{content:"## ";display:inline}.markdown h3:before{content:"### "}.markdown h4:before{content:"#### "}.markdown h5:before{content:"##### "}.markdown h6:before{content:"###### "}.markdown li{position:relative;display:block;padding-left:34px;padding-left:4ch}.markdown li:after{position:absolute;top:0;left:0}.markdown ul>li:after{content:"*"}.markdown ol{counter-reset:ol}.markdown ol>li:after{content:counter(ol) ".";counter-increment:ol}.markdown pre{margin-left:34px;padding-left:4ch}.markdown blockquote{position:relative;padding-left:17px;padding-left:2ch;overflow:hidden}.markdown blockquote:after{content:">\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>";white-space:pre;position:absolute;top:0;left:0;font-size:14px;line-height:20px}.markdown strong:before,.markdown strong:after{content:"__";display:inline}.markdown em:before,.markdown em:after{content:"*";display:inline}.markdown a{text-decoration:none}.markdown a:before{content:"[";display:inline;color:#333333}.markdown a:after{content:"](" attr(href) ")";display:inline;color:#333333}.markdown code{font-weight:100}.markdown code:before{content:"\00a0\00a0\00a0\00a0";display:inline}.markdown pre code:before,.markdown pre code:after{content:none}.markdown hr{position:relative;height:20px;font-size:0;line-height:0;overflow:hidden;border:0;margin-bottom:20px}.markdown hr:after{content:"----------------------------------------------------------------------------------------------------";position:absolute;top:0;left:0;font-size:14px;line-height:20px;width:100%;word-wrap:break-word}@-moz-document url-prefix(){.markdown h1{display:block}}.markdown-ones ol>li:after{content:"1."}.markdown b:before{content:"**"}.markdown b:after{content:"**"}.markdown i:before{content:"*"}.markdown i:after{content:"*"} diff --git a/public/assets/application-68e4c9cf504edbaa670b008700a7a6fe6af44a59079ac627bd23fb53e8178565.css.gz b/public/assets/application-68e4c9cf504edbaa670b008700a7a6fe6af44a59079ac627bd23fb53e8178565.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..0d390a3bcd573f441d6407911767311a5d8df0c7 GIT binary patch literal 4486 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 literal 0 HcmV?d00001 diff --git a/public/assets/editor-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css b/public/assets/editor-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css new file mode 100644 index 00000000..e69de29b diff --git a/public/assets/editor-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz b/public/assets/editor-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..39c62e570f11d275b7d597a789dc3bc8ed629b76 GIT binary patch literal 20 Ucmb2|=3uayx;BZ4nVA6w04SpZn*aa+ literal 0 HcmV?d00001 diff --git a/public/assets/external_referee_submission-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css b/public/assets/external_referee_submission-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css new file mode 100644 index 00000000..e69de29b diff --git a/public/assets/external_referee_submission-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz b/public/assets/external_referee_submission-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..39c62e570f11d275b7d597a789dc3bc8ed629b76 GIT binary patch literal 20 Ucmb2|=3uayx;BZ4nVA6w04SpZn*aa+ literal 0 HcmV?d00001 diff --git a/public/assets/external_referee_submissions-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css b/public/assets/external_referee_submissions-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css new file mode 100644 index 00000000..e69de29b diff --git a/public/assets/external_referee_submissions-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz b/public/assets/external_referee_submissions-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..39c62e570f11d275b7d597a789dc3bc8ed629b76 GIT binary patch literal 20 Ucmb2|=3uayx;BZ4nVA6w04SpZn*aa+ literal 0 HcmV?d00001 diff --git a/public/assets/external_referees-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css b/public/assets/external_referees-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css new file mode 100644 index 00000000..e69de29b diff --git a/public/assets/external_referees-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz b/public/assets/external_referees-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..39c62e570f11d275b7d597a789dc3bc8ed629b76 GIT binary patch literal 20 Ucmb2|=3uayx;BZ4nVA6w04SpZn*aa+ literal 0 HcmV?d00001 diff --git a/public/assets/histories-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css b/public/assets/histories-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css new file mode 100644 index 00000000..e69de29b diff --git a/public/assets/histories-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz b/public/assets/histories-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..39c62e570f11d275b7d597a789dc3bc8ed629b76 GIT binary patch literal 20 Ucmb2|=3uayx;BZ4nVA6w04SpZn*aa+ literal 0 HcmV?d00001 diff --git a/public/assets/issues-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css b/public/assets/issues-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css new file mode 100644 index 00000000..e69de29b diff --git a/public/assets/issues-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz b/public/assets/issues-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..39c62e570f11d275b7d597a789dc3bc8ed629b76 GIT binary patch literal 20 Ucmb2|=3uayx;BZ4nVA6w04SpZn*aa+ literal 0 HcmV?d00001 diff --git a/public/assets/jsons-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css b/public/assets/jsons-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css new file mode 100644 index 00000000..e69de29b diff --git a/public/assets/jsons-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz b/public/assets/jsons-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..39c62e570f11d275b7d597a789dc3bc8ed629b76 GIT binary patch literal 20 Ucmb2|=3uayx;BZ4nVA6w04SpZn*aa+ literal 0 HcmV?d00001 diff --git a/public/assets/manifest-b4bf6e57a53c2bdb55b8998cc94cd00883793c1c37c5e5aea3ef6749b4f6d92b.js b/public/assets/manifest-b4bf6e57a53c2bdb55b8998cc94cd00883793c1c37c5e5aea3ef6749b4f6d92b.js new file mode 100644 index 00000000..139597f9 --- /dev/null +++ b/public/assets/manifest-b4bf6e57a53c2bdb55b8998cc94cd00883793c1c37c5e5aea3ef6749b4f6d92b.js @@ -0,0 +1,2 @@ + + diff --git a/public/assets/manifest-b4bf6e57a53c2bdb55b8998cc94cd00883793c1c37c5e5aea3ef6749b4f6d92b.js.gz b/public/assets/manifest-b4bf6e57a53c2bdb55b8998cc94cd00883793c1c37c5e5aea3ef6749b4f6d92b.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..c83389e94d55325e2823d984fb3a03f337573b3e GIT binary patch literal 22 dcmb2|=3uayx;BZ4`SBwrhHT--(M${s3;<0b1|0wZ literal 0 HcmV?d00001 diff --git a/public/assets/markdown-fc5502f8bf675ab6f1c2d569fdffe6bd18558e812cbca0e6680212b583776cfe.css b/public/assets/markdown-fc5502f8bf675ab6f1c2d569fdffe6bd18558e812cbca0e6680212b583776cfe.css new file mode 100644 index 00000000..96d3f014 --- /dev/null +++ b/public/assets/markdown-fc5502f8bf675ab6f1c2d569fdffe6bd18558e812cbca0e6680212b583776cfe.css @@ -0,0 +1 @@ +.markdown{word-wrap:break-word}.markdown,.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6,.markdown pre,.markdown code,.markdown blockquote,.markdown em,.markdown strong,.markdown code{font-size:14px;line-height:20px;font-weight:normal;font-style:normal;font-family:consolas, monaco, courier, "courier new", fixed-width;color:#333333}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6,.markdown pre,.markdown code,.markdown blockquote,.markdown ol,.markdown ul,.markdown li,.markdown p,.markdown section,.markdown header,.markdown footer{float:none;margin:0;padding:0}.markdown h1,.markdown p,.markdown ul,.markdown ol,.markdown pre,.markdown blockquote{margin-top:20px;margin-bottom:20px}.markdown h1{position:relative;display:inline-block;display:table-cell;padding:20px 0 40px;margin:0;overflow:hidden}.markdown h1+*{margin-top:0}.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{position:relative;margin-bottom:20px}.markdown h1:before{content:"# ";display:inline}.markdown h2:before,.markdown h3:before,.markdown h4:before,.markdown h5:before,.markdown h6:before{content:"## ";display:inline}.markdown h3:before{content:"### "}.markdown h4:before{content:"#### "}.markdown h5:before{content:"##### "}.markdown h6:before{content:"###### "}.markdown li{position:relative;display:block;padding-left:34px;padding-left:4ch}.markdown li:after{position:absolute;top:0;left:0}.markdown ul>li:after{content:"*"}.markdown ol{counter-reset:ol}.markdown ol>li:after{content:counter(ol) ".";counter-increment:ol}.markdown pre{margin-left:34px;padding-left:4ch}.markdown blockquote{position:relative;padding-left:17px;padding-left:2ch;overflow:hidden}.markdown blockquote:after{content:">\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>";white-space:pre;position:absolute;top:0;left:0;font-size:14px;line-height:20px}.markdown strong:before,.markdown strong:after{content:"__";display:inline}.markdown em:before,.markdown em:after{content:"*";display:inline}.markdown a{text-decoration:none}.markdown a:before{content:"[";display:inline;color:#333333}.markdown a:after{content:"](" attr(href) ")";display:inline;color:#333333}.markdown code{font-weight:100}.markdown code:before{content:"\00a0\00a0\00a0\00a0";display:inline}.markdown pre code:before,.markdown pre code:after{content:none}.markdown hr{position:relative;height:20px;font-size:0;line-height:0;overflow:hidden;border:0;margin-bottom:20px}.markdown hr:after{content:"----------------------------------------------------------------------------------------------------";position:absolute;top:0;left:0;font-size:14px;line-height:20px;width:100%;word-wrap:break-word}@-moz-document url-prefix(){.markdown h1{display:block}}.markdown-ones ol>li:after{content:"1."}.markdown b:before{content:"**"}.markdown b:after{content:"**"}.markdown i:before{content:"*"}.markdown i:after{content:"*"} diff --git a/public/assets/markdown-fc5502f8bf675ab6f1c2d569fdffe6bd18558e812cbca0e6680212b583776cfe.css.gz b/public/assets/markdown-fc5502f8bf675ab6f1c2d569fdffe6bd18558e812cbca0e6680212b583776cfe.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..34bb161d9d3917d722d781ef711425f1dc619316 GIT binary patch literal 754 zcmV=ZksUh|DFO-O-i#kB2C&!Myj^wSf|Rs5v&>?Gp1>a z^6oPvO>9Hbs*|Su7($5q{_vge<|R`P8E#~|L6wn>Viipkum{q?+xaVbcK8d5g$-QU zz|sa*HgIhNHx^JSu%Hw(8%zYI55F4JHWEq;sI@}5_B6CPN=<710(7yeo?^izkOKI+ z(DW)Yh@QULAtb7ji5;re&jK7w&PpzxX^OH&!RlF1qGTz~jGabtP_rQ1{{<2@;Vj7c z6PP^mOc!yA0u{Yj_Rsd;$sh^~Xly`mTd|#INHs^N41i@O{v#qsV@0*OK-OhdLTpHD zE@>23EX%lD)96$Zs#6X*uDX#PLu+@2h{kGnzI!-9t+DJ;j^Vb#ns?z)1%he*2yw>i zO0Z|jWnV14?gLV@L;y)ah(jcu&L9d_M{6cbd<12}-_U|*8A!+Gm#OWglZX!$z(@>l zL`@UOQ9)~JS%cIxya+-sZpW)VzvJ8pZZ(3t9>LuV?VopGIU-;rwj;J37LVt8l*ePb z8E1021V2+ayNcPD2N95Ky6o;A2eV2GM;~Q**D?pKEHSrCqap5VB<^MGQfb8PLFnM= z)brdw4MX<+vM|OXI<|=@4 zsK($1eQ;U>Yc)J+l0k}!_2G2`%4Qf`06%4 zzvM4G;U9KF+^>M$`F)N@SL<)2#21ob+H{v}&?rI70hsl1a@jh|iZfxh$HWkGF7@b@ k9xmqgOh^VLGo8A0zmps?ABwx=;XL~E8%e=6;#Uj+0OE*dCIA2c literal 0 HcmV?d00001 diff --git a/public/assets/pages-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css b/public/assets/pages-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css new file mode 100644 index 00000000..e69de29b diff --git a/public/assets/pages-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz b/public/assets/pages-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..39c62e570f11d275b7d597a789dc3bc8ed629b76 GIT binary patch literal 20 Ucmb2|=3uayx;BZ4nVA6w04SpZn*aa+ literal 0 HcmV?d00001 diff --git a/public/assets/pandoc-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css b/public/assets/pandoc-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css new file mode 100644 index 00000000..e69de29b diff --git a/public/assets/pandoc-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz b/public/assets/pandoc-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..39c62e570f11d275b7d597a789dc3bc8ed629b76 GIT binary patch literal 20 Ucmb2|=3uayx;BZ4nVA6w04SpZn*aa+ literal 0 HcmV?d00001 diff --git a/public/assets/reports-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css b/public/assets/reports-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css new file mode 100644 index 00000000..e69de29b diff --git a/public/assets/reports-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz b/public/assets/reports-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..39c62e570f11d275b7d597a789dc3bc8ed629b76 GIT binary patch literal 20 Ucmb2|=3uayx;BZ4nVA6w04SpZn*aa+ literal 0 HcmV?d00001 diff --git a/public/assets/requested_reviewers-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css b/public/assets/requested_reviewers-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css new file mode 100644 index 00000000..e69de29b diff --git a/public/assets/requested_reviewers-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz b/public/assets/requested_reviewers-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..39c62e570f11d275b7d597a789dc3bc8ed629b76 GIT binary patch literal 20 Ucmb2|=3uayx;BZ4nVA6w04SpZn*aa+ literal 0 HcmV?d00001 diff --git a/public/assets/scaffolds-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css b/public/assets/scaffolds-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css new file mode 100644 index 00000000..e69de29b diff --git a/public/assets/scaffolds-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz b/public/assets/scaffolds-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..39c62e570f11d275b7d597a789dc3bc8ed629b76 GIT binary patch literal 20 Ucmb2|=3uayx;BZ4nVA6w04SpZn*aa+ literal 0 HcmV?d00001 diff --git a/public/assets/static_pages-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css b/public/assets/static_pages-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css new file mode 100644 index 00000000..e69de29b diff --git a/public/assets/static_pages-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz b/public/assets/static_pages-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..39c62e570f11d275b7d597a789dc3bc8ed629b76 GIT binary patch literal 20 Ucmb2|=3uayx;BZ4nVA6w04SpZn*aa+ literal 0 HcmV?d00001 diff --git a/public/assets/stuffs-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css b/public/assets/stuffs-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css new file mode 100644 index 00000000..e69de29b diff --git a/public/assets/stuffs-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz b/public/assets/stuffs-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..39c62e570f11d275b7d597a789dc3bc8ed629b76 GIT binary patch literal 20 Ucmb2|=3uayx;BZ4nVA6w04SpZn*aa+ literal 0 HcmV?d00001 diff --git a/public/assets/submissions-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css b/public/assets/submissions-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css new file mode 100644 index 00000000..e69de29b diff --git a/public/assets/submissions-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz b/public/assets/submissions-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..39c62e570f11d275b7d597a789dc3bc8ed629b76 GIT binary patch literal 20 Ucmb2|=3uayx;BZ4nVA6w04SpZn*aa+ literal 0 HcmV?d00001 diff --git a/public/assets/test-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css b/public/assets/test-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css new file mode 100644 index 00000000..e69de29b diff --git a/public/assets/test-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz b/public/assets/test-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..39c62e570f11d275b7d597a789dc3bc8ed629b76 GIT binary patch literal 20 Ucmb2|=3uayx;BZ4nVA6w04SpZn*aa+ literal 0 HcmV?d00001 diff --git a/public/assets/tinymce-213f84c2ea0b76dbe066217672caec97a8f3e296895064f010ae89541df69849.js b/public/assets/tinymce-213f84c2ea0b76dbe066217672caec97a8f3e296895064f010ae89541df69849.js new file mode 100644 index 00000000..77678e44 --- /dev/null +++ b/public/assets/tinymce-213f84c2ea0b76dbe066217672caec97a8f3e296895064f010ae89541df69849.js @@ -0,0 +1,30169 @@ +window.TinyMCERails = { + configuration: { + default: {} + }, + + initialize: function(config, options) { + if (typeof tinyMCE != 'undefined') { + // Merge the custom options with the given configuration + var configuration = TinyMCERails.configuration[config || 'default']; + configuration = TinyMCERails._merge(configuration, options); + + tinyMCE.init(configuration); + } else { + // Wait until TinyMCE is loaded + setTimeout(function() { + TinyMCERails.initialize(config, options); + }, 50); + } + }, + + setupTurbolinks: function() { + // Remove all TinyMCE instances before rendering + document.addEventListener('turbolinks:before-render', function() { + tinymce.remove(); + }); + }, + + _merge: function() { + var result = {}; + + for (var i = 0; i < arguments.length; ++i) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + if (Object.prototype.toString.call(source[key]) === '[object Object]') { + result[key] = TinyMCERails._merge(result[key], source[key]); + } else { + result[key] = source[key]; + } + } + } + } + + return result; + } +}; + +if (typeof Turbolinks != 'undefined' && Turbolinks.supported) { + TinyMCERails.setupTurbolinks(); +}; +window.tinymce = window.tinymce || { + base: '/assets/tinymce', + suffix: '' +}; +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.8.2 (2021-06-23) + */ +(function () { + 'use strict'; + + var typeOf = function (x) { + if (x === null) { + return 'null'; + } + if (x === undefined) { + return 'undefined'; + } + var t = typeof x; + if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) { + return 'array'; + } + if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) { + return 'string'; + } + return t; + }; + var isEquatableType = function (x) { + return [ + 'undefined', + 'boolean', + 'number', + 'string', + 'function', + 'xml', + 'null' + ].indexOf(x) !== -1; + }; + + var sort = function (xs, compareFn) { + var clone = Array.prototype.slice.call(xs); + return clone.sort(compareFn); + }; + + var contramap = function (eqa, f) { + return eq(function (x, y) { + return eqa.eq(f(x), f(y)); + }); + }; + var eq = function (f) { + return { eq: f }; + }; + var tripleEq = eq(function (x, y) { + return x === y; + }); + var eqString = tripleEq; + var eqArray = function (eqa) { + return eq(function (x, y) { + if (x.length !== y.length) { + return false; + } + var len = x.length; + for (var i = 0; i < len; i++) { + if (!eqa.eq(x[i], y[i])) { + return false; + } + } + return true; + }); + }; + var eqSortedArray = function (eqa, compareFn) { + return contramap(eqArray(eqa), function (xs) { + return sort(xs, compareFn); + }); + }; + var eqRecord = function (eqa) { + return eq(function (x, y) { + var kx = Object.keys(x); + var ky = Object.keys(y); + if (!eqSortedArray(eqString).eq(kx, ky)) { + return false; + } + var len = kx.length; + for (var i = 0; i < len; i++) { + var q = kx[i]; + if (!eqa.eq(x[q], y[q])) { + return false; + } + } + return true; + }); + }; + var eqAny = eq(function (x, y) { + if (x === y) { + return true; + } + var tx = typeOf(x); + var ty = typeOf(y); + if (tx !== ty) { + return false; + } + if (isEquatableType(tx)) { + return x === y; + } else if (tx === 'array') { + return eqArray(eqAny).eq(x, y); + } else if (tx === 'object') { + return eqRecord(eqAny).eq(x, y); + } + return false; + }); + + var typeOf$1 = function (x) { + var t = typeof x; + if (x === null) { + return 'null'; + } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) { + return 'array'; + } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) { + return 'string'; + } else { + return t; + } + }; + var isType = function (type) { + return function (value) { + return typeOf$1(value) === type; + }; + }; + var isSimpleType = function (type) { + return function (value) { + return typeof value === type; + }; + }; + var eq$1 = function (t) { + return function (a) { + return t === a; + }; + }; + var isString = isType('string'); + var isObject = isType('object'); + var isArray = isType('array'); + var isNull = eq$1(null); + var isBoolean = isSimpleType('boolean'); + var isUndefined = eq$1(undefined); + var isNullable = function (a) { + return a === null || a === undefined; + }; + var isNonNullable = function (a) { + return !isNullable(a); + }; + var isFunction = isSimpleType('function'); + var isNumber = isSimpleType('number'); + + var noop = function () { + }; + var compose = function (fa, fb) { + return function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return fa(fb.apply(null, args)); + }; + }; + var compose1 = function (fbc, fab) { + return function (a) { + return fbc(fab(a)); + }; + }; + var constant = function (value) { + return function () { + return value; + }; + }; + var identity = function (x) { + return x; + }; + function curry(fn) { + var initialArgs = []; + for (var _i = 1; _i < arguments.length; _i++) { + initialArgs[_i - 1] = arguments[_i]; + } + return function () { + var restArgs = []; + for (var _i = 0; _i < arguments.length; _i++) { + restArgs[_i] = arguments[_i]; + } + var all = initialArgs.concat(restArgs); + return fn.apply(null, all); + }; + } + var not = function (f) { + return function (t) { + return !f(t); + }; + }; + var die = function (msg) { + return function () { + throw new Error(msg); + }; + }; + var apply = function (f) { + return f(); + }; + var call = function (f) { + f(); + }; + var never = constant(false); + var always = constant(true); + + var none = function () { + return NONE; + }; + var NONE = function () { + var eq = function (o) { + return o.isNone(); + }; + var call = function (thunk) { + return thunk(); + }; + var id = function (n) { + return n; + }; + var me = { + fold: function (n, _s) { + return n(); + }, + is: never, + isSome: never, + isNone: always, + getOr: id, + getOrThunk: call, + getOrDie: function (msg) { + throw new Error(msg || 'error: getOrDie called on none.'); + }, + getOrNull: constant(null), + getOrUndefined: constant(undefined), + or: id, + orThunk: call, + map: none, + each: noop, + bind: none, + exists: never, + forall: always, + filter: none, + equals: eq, + equals_: eq, + toArray: function () { + return []; + }, + toString: constant('none()') + }; + return me; + }(); + var some = function (a) { + var constant_a = constant(a); + var self = function () { + return me; + }; + var bind = function (f) { + return f(a); + }; + var me = { + fold: function (n, s) { + return s(a); + }, + is: function (v) { + return a === v; + }, + isSome: always, + isNone: never, + getOr: constant_a, + getOrThunk: constant_a, + getOrDie: constant_a, + getOrNull: constant_a, + getOrUndefined: constant_a, + or: self, + orThunk: self, + map: function (f) { + return some(f(a)); + }, + each: function (f) { + f(a); + }, + bind: bind, + exists: bind, + forall: bind, + filter: function (f) { + return f(a) ? me : NONE; + }, + toArray: function () { + return [a]; + }, + toString: function () { + return 'some(' + a + ')'; + }, + equals: function (o) { + return o.is(a); + }, + equals_: function (o, elementEq) { + return o.fold(never, function (b) { + return elementEq(a, b); + }); + } + }; + return me; + }; + var from = function (value) { + return value === null || value === undefined ? NONE : some(value); + }; + var Optional = { + some: some, + none: none, + from: from + }; + + var nativeSlice = Array.prototype.slice; + var nativeIndexOf = Array.prototype.indexOf; + var nativePush = Array.prototype.push; + var rawIndexOf = function (ts, t) { + return nativeIndexOf.call(ts, t); + }; + var indexOf = function (xs, x) { + var r = rawIndexOf(xs, x); + return r === -1 ? Optional.none() : Optional.some(r); + }; + var contains = function (xs, x) { + return rawIndexOf(xs, x) > -1; + }; + var exists = function (xs, pred) { + for (var i = 0, len = xs.length; i < len; i++) { + var x = xs[i]; + if (pred(x, i)) { + return true; + } + } + return false; + }; + var map = function (xs, f) { + var len = xs.length; + var r = new Array(len); + for (var i = 0; i < len; i++) { + var x = xs[i]; + r[i] = f(x, i); + } + return r; + }; + var each = function (xs, f) { + for (var i = 0, len = xs.length; i < len; i++) { + var x = xs[i]; + f(x, i); + } + }; + var eachr = function (xs, f) { + for (var i = xs.length - 1; i >= 0; i--) { + var x = xs[i]; + f(x, i); + } + }; + var partition = function (xs, pred) { + var pass = []; + var fail = []; + for (var i = 0, len = xs.length; i < len; i++) { + var x = xs[i]; + var arr = pred(x, i) ? pass : fail; + arr.push(x); + } + return { + pass: pass, + fail: fail + }; + }; + var filter = function (xs, pred) { + var r = []; + for (var i = 0, len = xs.length; i < len; i++) { + var x = xs[i]; + if (pred(x, i)) { + r.push(x); + } + } + return r; + }; + var foldr = function (xs, f, acc) { + eachr(xs, function (x) { + acc = f(acc, x); + }); + return acc; + }; + var foldl = function (xs, f, acc) { + each(xs, function (x) { + acc = f(acc, x); + }); + return acc; + }; + var findUntil = function (xs, pred, until) { + for (var i = 0, len = xs.length; i < len; i++) { + var x = xs[i]; + if (pred(x, i)) { + return Optional.some(x); + } else if (until(x, i)) { + break; + } + } + return Optional.none(); + }; + var find = function (xs, pred) { + return findUntil(xs, pred, never); + }; + var findIndex = function (xs, pred) { + for (var i = 0, len = xs.length; i < len; i++) { + var x = xs[i]; + if (pred(x, i)) { + return Optional.some(i); + } + } + return Optional.none(); + }; + var flatten = function (xs) { + var r = []; + for (var i = 0, len = xs.length; i < len; ++i) { + if (!isArray(xs[i])) { + throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs); + } + nativePush.apply(r, xs[i]); + } + return r; + }; + var bind = function (xs, f) { + return flatten(map(xs, f)); + }; + var forall = function (xs, pred) { + for (var i = 0, len = xs.length; i < len; ++i) { + var x = xs[i]; + if (pred(x, i) !== true) { + return false; + } + } + return true; + }; + var reverse = function (xs) { + var r = nativeSlice.call(xs, 0); + r.reverse(); + return r; + }; + var difference = function (a1, a2) { + return filter(a1, function (x) { + return !contains(a2, x); + }); + }; + var mapToObject = function (xs, f) { + var r = {}; + for (var i = 0, len = xs.length; i < len; i++) { + var x = xs[i]; + r[String(x)] = f(x, i); + } + return r; + }; + var sort$1 = function (xs, comparator) { + var copy = nativeSlice.call(xs, 0); + copy.sort(comparator); + return copy; + }; + var get = function (xs, i) { + return i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none(); + }; + var head = function (xs) { + return get(xs, 0); + }; + var last = function (xs) { + return get(xs, xs.length - 1); + }; + var from$1 = isFunction(Array.from) ? Array.from : function (x) { + return nativeSlice.call(x); + }; + var findMap = function (arr, f) { + for (var i = 0; i < arr.length; i++) { + var r = f(arr[i], i); + if (r.isSome()) { + return r; + } + } + return Optional.none(); + }; + + var keys = Object.keys; + var hasOwnProperty = Object.hasOwnProperty; + var each$1 = function (obj, f) { + var props = keys(obj); + for (var k = 0, len = props.length; k < len; k++) { + var i = props[k]; + var x = obj[i]; + f(x, i); + } + }; + var map$1 = function (obj, f) { + return tupleMap(obj, function (x, i) { + return { + k: i, + v: f(x, i) + }; + }); + }; + var tupleMap = function (obj, f) { + var r = {}; + each$1(obj, function (x, i) { + var tuple = f(x, i); + r[tuple.k] = tuple.v; + }); + return r; + }; + var objAcc = function (r) { + return function (x, i) { + r[i] = x; + }; + }; + var internalFilter = function (obj, pred, onTrue, onFalse) { + var r = {}; + each$1(obj, function (x, i) { + (pred(x, i) ? onTrue : onFalse)(x, i); + }); + return r; + }; + var bifilter = function (obj, pred) { + var t = {}; + var f = {}; + internalFilter(obj, pred, objAcc(t), objAcc(f)); + return { + t: t, + f: f + }; + }; + var filter$1 = function (obj, pred) { + var t = {}; + internalFilter(obj, pred, objAcc(t), noop); + return t; + }; + var mapToArray = function (obj, f) { + var r = []; + each$1(obj, function (value, name) { + r.push(f(value, name)); + }); + return r; + }; + var values = function (obj) { + return mapToArray(obj, function (v) { + return v; + }); + }; + var get$1 = function (obj, key) { + return has(obj, key) ? Optional.from(obj[key]) : Optional.none(); + }; + var has = function (obj, key) { + return hasOwnProperty.call(obj, key); + }; + var hasNonNullableKey = function (obj, key) { + return has(obj, key) && obj[key] !== undefined && obj[key] !== null; + }; + var equal = function (a1, a2, eq) { + if (eq === void 0) { + eq = eqAny; + } + return eqRecord(eq).eq(a1, a2); + }; + + var isArray$1 = Array.isArray; + var toArray = function (obj) { + if (!isArray$1(obj)) { + var array = []; + for (var i = 0, l = obj.length; i < l; i++) { + array[i] = obj[i]; + } + return array; + } else { + return obj; + } + }; + var each$2 = function (o, cb, s) { + var n, l; + if (!o) { + return false; + } + s = s || o; + if (o.length !== undefined) { + for (n = 0, l = o.length; n < l; n++) { + if (cb.call(s, o[n], n, o) === false) { + return false; + } + } + } else { + for (n in o) { + if (o.hasOwnProperty(n)) { + if (cb.call(s, o[n], n, o) === false) { + return false; + } + } + } + } + return true; + }; + var map$2 = function (array, callback) { + var out = []; + each$2(array, function (item, index) { + out.push(callback(item, index, array)); + }); + return out; + }; + var filter$2 = function (a, f) { + var o = []; + each$2(a, function (v, index) { + if (!f || f(v, index, a)) { + o.push(v); + } + }); + return o; + }; + var indexOf$1 = function (a, v) { + if (a) { + for (var i = 0, l = a.length; i < l; i++) { + if (a[i] === v) { + return i; + } + } + } + return -1; + }; + var reduce = function (collection, iteratee, accumulator, thisArg) { + var acc = isUndefined(accumulator) ? collection[0] : accumulator; + for (var i = 0; i < collection.length; i++) { + acc = iteratee.call(thisArg, acc, collection[i], i); + } + return acc; + }; + var findIndex$1 = function (array, predicate, thisArg) { + var i, l; + for (i = 0, l = array.length; i < l; i++) { + if (predicate.call(thisArg, array[i], i, array)) { + return i; + } + } + return -1; + }; + var last$1 = function (collection) { + return collection[collection.length - 1]; + }; + + var __assign = function () { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + function __rest(s, e) { + var t = {}; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === 'function') + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; + } + function __spreadArrays() { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) + s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; + } + + var cached = function (f) { + var called = false; + var r; + return function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (!called) { + called = true; + r = f.apply(null, args); + } + return r; + }; + }; + + var DeviceType = function (os, browser, userAgent, mediaMatch) { + var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true; + var isiPhone = os.isiOS() && !isiPad; + var isMobile = os.isiOS() || os.isAndroid(); + var isTouch = isMobile || mediaMatch('(pointer:coarse)'); + var isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)'); + var isPhone = isiPhone || isMobile && !isTablet; + var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false; + var isDesktop = !isPhone && !isTablet && !iOSwebview; + return { + isiPad: constant(isiPad), + isiPhone: constant(isiPhone), + isTablet: constant(isTablet), + isPhone: constant(isPhone), + isTouch: constant(isTouch), + isAndroid: os.isAndroid, + isiOS: os.isiOS, + isWebView: constant(iOSwebview), + isDesktop: constant(isDesktop) + }; + }; + + var firstMatch = function (regexes, s) { + for (var i = 0; i < regexes.length; i++) { + var x = regexes[i]; + if (x.test(s)) { + return x; + } + } + return undefined; + }; + var find$1 = function (regexes, agent) { + var r = firstMatch(regexes, agent); + if (!r) { + return { + major: 0, + minor: 0 + }; + } + var group = function (i) { + return Number(agent.replace(r, '$' + i)); + }; + return nu(group(1), group(2)); + }; + var detect = function (versionRegexes, agent) { + var cleanedAgent = String(agent).toLowerCase(); + if (versionRegexes.length === 0) { + return unknown(); + } + return find$1(versionRegexes, cleanedAgent); + }; + var unknown = function () { + return nu(0, 0); + }; + var nu = function (major, minor) { + return { + major: major, + minor: minor + }; + }; + var Version = { + nu: nu, + detect: detect, + unknown: unknown + }; + + var detect$1 = function (candidates, userAgent) { + var agent = String(userAgent).toLowerCase(); + return find(candidates, function (candidate) { + return candidate.search(agent); + }); + }; + var detectBrowser = function (browsers, userAgent) { + return detect$1(browsers, userAgent).map(function (browser) { + var version = Version.detect(browser.versionRegexes, userAgent); + return { + current: browser.name, + version: version + }; + }); + }; + var detectOs = function (oses, userAgent) { + return detect$1(oses, userAgent).map(function (os) { + var version = Version.detect(os.versionRegexes, userAgent); + return { + current: os.name, + version: version + }; + }); + }; + var UaString = { + detectBrowser: detectBrowser, + detectOs: detectOs + }; + + var removeFromStart = function (str, numChars) { + return str.substring(numChars); + }; + + var checkRange = function (str, substr, start) { + return substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr; + }; + var removeLeading = function (str, prefix) { + return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str; + }; + var contains$1 = function (str, substr) { + return str.indexOf(substr) !== -1; + }; + var startsWith = function (str, prefix) { + return checkRange(str, prefix, 0); + }; + var blank = function (r) { + return function (s) { + return s.replace(r, ''); + }; + }; + var trim = blank(/^\s+|\s+$/g); + var lTrim = blank(/^\s+/g); + var rTrim = blank(/\s+$/g); + var isNotEmpty = function (s) { + return s.length > 0; + }; + + var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/; + var checkContains = function (target) { + return function (uastring) { + return contains$1(uastring, target); + }; + }; + var browsers = [ + { + name: 'Edge', + versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/], + search: function (uastring) { + return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit'); + } + }, + { + name: 'Chrome', + versionRegexes: [ + /.*?chrome\/([0-9]+)\.([0-9]+).*/, + normalVersionRegex + ], + search: function (uastring) { + return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe'); + } + }, + { + name: 'IE', + versionRegexes: [ + /.*?msie\ ?([0-9]+)\.([0-9]+).*/, + /.*?rv:([0-9]+)\.([0-9]+).*/ + ], + search: function (uastring) { + return contains$1(uastring, 'msie') || contains$1(uastring, 'trident'); + } + }, + { + name: 'Opera', + versionRegexes: [ + normalVersionRegex, + /.*?opera\/([0-9]+)\.([0-9]+).*/ + ], + search: checkContains('opera') + }, + { + name: 'Firefox', + versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/], + search: checkContains('firefox') + }, + { + name: 'Safari', + versionRegexes: [ + normalVersionRegex, + /.*?cpu os ([0-9]+)_([0-9]+).*/ + ], + search: function (uastring) { + return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit'); + } + } + ]; + var oses = [ + { + name: 'Windows', + search: checkContains('win'), + versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/] + }, + { + name: 'iOS', + search: function (uastring) { + return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad'); + }, + versionRegexes: [ + /.*?version\/\ ?([0-9]+)\.([0-9]+).*/, + /.*cpu os ([0-9]+)_([0-9]+).*/, + /.*cpu iphone os ([0-9]+)_([0-9]+).*/ + ] + }, + { + name: 'Android', + search: checkContains('android'), + versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/] + }, + { + name: 'OSX', + search: checkContains('mac os x'), + versionRegexes: [/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/] + }, + { + name: 'Linux', + search: checkContains('linux'), + versionRegexes: [] + }, + { + name: 'Solaris', + search: checkContains('sunos'), + versionRegexes: [] + }, + { + name: 'FreeBSD', + search: checkContains('freebsd'), + versionRegexes: [] + }, + { + name: 'ChromeOS', + search: checkContains('cros'), + versionRegexes: [/.*?chrome\/([0-9]+)\.([0-9]+).*/] + } + ]; + var PlatformInfo = { + browsers: constant(browsers), + oses: constant(oses) + }; + + var edge = 'Edge'; + var chrome = 'Chrome'; + var ie = 'IE'; + var opera = 'Opera'; + var firefox = 'Firefox'; + var safari = 'Safari'; + var unknown$1 = function () { + return nu$1({ + current: undefined, + version: Version.unknown() + }); + }; + var nu$1 = function (info) { + var current = info.current; + var version = info.version; + var isBrowser = function (name) { + return function () { + return current === name; + }; + }; + return { + current: current, + version: version, + isEdge: isBrowser(edge), + isChrome: isBrowser(chrome), + isIE: isBrowser(ie), + isOpera: isBrowser(opera), + isFirefox: isBrowser(firefox), + isSafari: isBrowser(safari) + }; + }; + var Browser = { + unknown: unknown$1, + nu: nu$1, + edge: constant(edge), + chrome: constant(chrome), + ie: constant(ie), + opera: constant(opera), + firefox: constant(firefox), + safari: constant(safari) + }; + + var windows = 'Windows'; + var ios = 'iOS'; + var android = 'Android'; + var linux = 'Linux'; + var osx = 'OSX'; + var solaris = 'Solaris'; + var freebsd = 'FreeBSD'; + var chromeos = 'ChromeOS'; + var unknown$2 = function () { + return nu$2({ + current: undefined, + version: Version.unknown() + }); + }; + var nu$2 = function (info) { + var current = info.current; + var version = info.version; + var isOS = function (name) { + return function () { + return current === name; + }; + }; + return { + current: current, + version: version, + isWindows: isOS(windows), + isiOS: isOS(ios), + isAndroid: isOS(android), + isOSX: isOS(osx), + isLinux: isOS(linux), + isSolaris: isOS(solaris), + isFreeBSD: isOS(freebsd), + isChromeOS: isOS(chromeos) + }; + }; + var OperatingSystem = { + unknown: unknown$2, + nu: nu$2, + windows: constant(windows), + ios: constant(ios), + android: constant(android), + linux: constant(linux), + osx: constant(osx), + solaris: constant(solaris), + freebsd: constant(freebsd), + chromeos: constant(chromeos) + }; + + var detect$2 = function (userAgent, mediaMatch) { + var browsers = PlatformInfo.browsers(); + var oses = PlatformInfo.oses(); + var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu); + var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu); + var deviceType = DeviceType(os, browser, userAgent, mediaMatch); + return { + browser: browser, + os: os, + deviceType: deviceType + }; + }; + var PlatformDetection = { detect: detect$2 }; + + var mediaMatch = function (query) { + return window.matchMedia(query).matches; + }; + var platform = cached(function () { + return PlatformDetection.detect(navigator.userAgent, mediaMatch); + }); + var detect$3 = function () { + return platform(); + }; + + var userAgent = navigator.userAgent; + var platform$1 = detect$3(); + var browser = platform$1.browser; + var os = platform$1.os; + var deviceType = platform$1.deviceType; + var webkit = /WebKit/.test(userAgent) && !browser.isEdge(); + var fileApi = 'FormData' in window && 'FileReader' in window && 'URL' in window && !!URL.createObjectURL; + var windowsPhone = userAgent.indexOf('Windows Phone') !== -1; + var Env = { + opera: browser.isOpera(), + webkit: webkit, + ie: browser.isIE() || browser.isEdge() ? browser.version.major : false, + gecko: browser.isFirefox(), + mac: os.isOSX() || os.isiOS(), + iOS: deviceType.isiPad() || deviceType.isiPhone(), + android: os.isAndroid(), + contentEditable: true, + transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7', + caretAfter: true, + range: window.getSelection && 'Range' in window, + documentMode: browser.isIE() ? document.documentMode || 7 : 10, + fileApi: fileApi, + ceFalse: true, + cacheSuffix: null, + container: null, + experimentalShadowDom: false, + canHaveCSP: !browser.isIE(), + desktop: deviceType.isDesktop(), + windowsPhone: windowsPhone, + browser: { + current: browser.current, + version: browser.version, + isChrome: browser.isChrome, + isEdge: browser.isEdge, + isFirefox: browser.isFirefox, + isIE: browser.isIE, + isOpera: browser.isOpera, + isSafari: browser.isSafari + }, + os: { + current: os.current, + version: os.version, + isAndroid: os.isAndroid, + isChromeOS: os.isChromeOS, + isFreeBSD: os.isFreeBSD, + isiOS: os.isiOS, + isLinux: os.isLinux, + isOSX: os.isOSX, + isSolaris: os.isSolaris, + isWindows: os.isWindows + }, + deviceType: { + isDesktop: deviceType.isDesktop, + isiPad: deviceType.isiPad, + isiPhone: deviceType.isiPhone, + isPhone: deviceType.isPhone, + isTablet: deviceType.isTablet, + isTouch: deviceType.isTouch, + isWebView: deviceType.isWebView + } + }; + + var whiteSpaceRegExp = /^\s*|\s*$/g; + var trim$1 = function (str) { + return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp, ''); + }; + var is = function (obj, type) { + if (!type) { + return obj !== undefined; + } + if (type === 'array' && isArray$1(obj)) { + return true; + } + return typeof obj === type; + }; + var makeMap = function (items, delim, map) { + var i; + items = items || []; + delim = delim || ','; + if (typeof items === 'string') { + items = items.split(delim); + } + map = map || {}; + i = items.length; + while (i--) { + map[items[i]] = {}; + } + return map; + }; + var hasOwnProperty$1 = function (obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); + }; + var create = function (s, p, root) { + var self = this; + var sp, scn, c, de = 0; + s = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(s); + var cn = s[3].match(/(^|\.)(\w+)$/i)[2]; + var ns = self.createNS(s[3].replace(/\.\w+$/, ''), root); + if (ns[cn]) { + return; + } + if (s[2] === 'static') { + ns[cn] = p; + if (this.onCreate) { + this.onCreate(s[2], s[3], ns[cn]); + } + return; + } + if (!p[cn]) { + p[cn] = function () { + }; + de = 1; + } + ns[cn] = p[cn]; + self.extend(ns[cn].prototype, p); + if (s[5]) { + sp = self.resolve(s[5]).prototype; + scn = s[5].match(/\.(\w+)$/i)[1]; + c = ns[cn]; + if (de) { + ns[cn] = function () { + return sp[scn].apply(this, arguments); + }; + } else { + ns[cn] = function () { + this.parent = sp[scn]; + return c.apply(this, arguments); + }; + } + ns[cn].prototype[cn] = ns[cn]; + self.each(sp, function (f, n) { + ns[cn].prototype[n] = sp[n]; + }); + self.each(p, function (f, n) { + if (sp[n]) { + ns[cn].prototype[n] = function () { + this.parent = sp[n]; + return f.apply(this, arguments); + }; + } else { + if (n !== cn) { + ns[cn].prototype[n] = f; + } + } + }); + } + self.each(p.static, function (f, n) { + ns[cn][n] = f; + }); + }; + var extend = function (obj) { + var exts = []; + for (var _i = 1; _i < arguments.length; _i++) { + exts[_i - 1] = arguments[_i]; + } + for (var i = 0; i < exts.length; i++) { + var ext = exts[i]; + for (var name_1 in ext) { + if (ext.hasOwnProperty(name_1)) { + var value = ext[name_1]; + if (value !== undefined) { + obj[name_1] = value; + } + } + } + } + return obj; + }; + var walk = function (o, f, n, s) { + s = s || this; + if (o) { + if (n) { + o = o[n]; + } + each$2(o, function (o, i) { + if (f.call(s, o, i, n) === false) { + return false; + } + walk(o, f, n, s); + }); + } + }; + var createNS = function (n, o) { + var i, v; + o = o || window; + n = n.split('.'); + for (i = 0; i < n.length; i++) { + v = n[i]; + if (!o[v]) { + o[v] = {}; + } + o = o[v]; + } + return o; + }; + var resolve = function (n, o) { + var i, l; + o = o || window; + n = n.split('.'); + for (i = 0, l = n.length; i < l; i++) { + o = o[n[i]]; + if (!o) { + break; + } + } + return o; + }; + var explode = function (s, d) { + if (!s || is(s, 'array')) { + return s; + } + return map$2(s.split(d || ','), trim$1); + }; + var _addCacheSuffix = function (url) { + var cacheSuffix = Env.cacheSuffix; + if (cacheSuffix) { + url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix; + } + return url; + }; + var Tools = { + trim: trim$1, + isArray: isArray$1, + is: is, + toArray: toArray, + makeMap: makeMap, + each: each$2, + map: map$2, + grep: filter$2, + inArray: indexOf$1, + hasOwn: hasOwnProperty$1, + extend: extend, + create: create, + walk: walk, + createNS: createNS, + resolve: resolve, + explode: explode, + _addCacheSuffix: _addCacheSuffix + }; + + var fromHtml = function (html, scope) { + var doc = scope || document; + var div = doc.createElement('div'); + div.innerHTML = html; + if (!div.hasChildNodes() || div.childNodes.length > 1) { + console.error('HTML does not have a single root node', html); + throw new Error('HTML must have a single root node'); + } + return fromDom(div.childNodes[0]); + }; + var fromTag = function (tag, scope) { + var doc = scope || document; + var node = doc.createElement(tag); + return fromDom(node); + }; + var fromText = function (text, scope) { + var doc = scope || document; + var node = doc.createTextNode(text); + return fromDom(node); + }; + var fromDom = function (node) { + if (node === null || node === undefined) { + throw new Error('Node cannot be null or undefined'); + } + return { dom: node }; + }; + var fromPoint = function (docElm, x, y) { + return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom); + }; + var SugarElement = { + fromHtml: fromHtml, + fromTag: fromTag, + fromText: fromText, + fromDom: fromDom, + fromPoint: fromPoint + }; + + var toArray$1 = function (target, f) { + var r = []; + var recurse = function (e) { + r.push(e); + return f(e); + }; + var cur = f(target); + do { + cur = cur.bind(recurse); + } while (cur.isSome()); + return r; + }; + + var compareDocumentPosition = function (a, b, match) { + return (a.compareDocumentPosition(b) & match) !== 0; + }; + var documentPositionContainedBy = function (a, b) { + return compareDocumentPosition(a, b, Node.DOCUMENT_POSITION_CONTAINED_BY); + }; + + var COMMENT = 8; + var DOCUMENT = 9; + var DOCUMENT_FRAGMENT = 11; + var ELEMENT = 1; + var TEXT = 3; + + var is$1 = function (element, selector) { + var dom = element.dom; + if (dom.nodeType !== ELEMENT) { + return false; + } else { + var elem = dom; + if (elem.matches !== undefined) { + return elem.matches(selector); + } else if (elem.msMatchesSelector !== undefined) { + return elem.msMatchesSelector(selector); + } else if (elem.webkitMatchesSelector !== undefined) { + return elem.webkitMatchesSelector(selector); + } else if (elem.mozMatchesSelector !== undefined) { + return elem.mozMatchesSelector(selector); + } else { + throw new Error('Browser lacks native selectors'); + } + } + }; + var bypassSelector = function (dom) { + return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0; + }; + var all = function (selector, scope) { + var base = scope === undefined ? document : scope.dom; + return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), SugarElement.fromDom); + }; + var one = function (selector, scope) { + var base = scope === undefined ? document : scope.dom; + return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom); + }; + + var eq$2 = function (e1, e2) { + return e1.dom === e2.dom; + }; + var regularContains = function (e1, e2) { + var d1 = e1.dom; + var d2 = e2.dom; + return d1 === d2 ? false : d1.contains(d2); + }; + var ieContains = function (e1, e2) { + return documentPositionContainedBy(e1.dom, e2.dom); + }; + var contains$2 = function (e1, e2) { + return detect$3().browser.isIE() ? ieContains(e1, e2) : regularContains(e1, e2); + }; + + var Global = typeof window !== 'undefined' ? window : Function('return this;')(); + + var name = function (element) { + var r = element.dom.nodeName; + return r.toLowerCase(); + }; + var type = function (element) { + return element.dom.nodeType; + }; + var isType$1 = function (t) { + return function (element) { + return type(element) === t; + }; + }; + var isComment = function (element) { + return type(element) === COMMENT || name(element) === '#comment'; + }; + var isElement = isType$1(ELEMENT); + var isText = isType$1(TEXT); + var isDocument = isType$1(DOCUMENT); + var isDocumentFragment = isType$1(DOCUMENT_FRAGMENT); + + var owner = function (element) { + return SugarElement.fromDom(element.dom.ownerDocument); + }; + var documentOrOwner = function (dos) { + return isDocument(dos) ? dos : owner(dos); + }; + var documentElement = function (element) { + return SugarElement.fromDom(documentOrOwner(element).dom.documentElement); + }; + var defaultView = function (element) { + return SugarElement.fromDom(documentOrOwner(element).dom.defaultView); + }; + var parent = function (element) { + return Optional.from(element.dom.parentNode).map(SugarElement.fromDom); + }; + var parents = function (element, isRoot) { + var stop = isFunction(isRoot) ? isRoot : never; + var dom = element.dom; + var ret = []; + while (dom.parentNode !== null && dom.parentNode !== undefined) { + var rawParent = dom.parentNode; + var p = SugarElement.fromDom(rawParent); + ret.push(p); + if (stop(p) === true) { + break; + } else { + dom = rawParent; + } + } + return ret; + }; + var siblings = function (element) { + var filterSelf = function (elements) { + return filter(elements, function (x) { + return !eq$2(element, x); + }); + }; + return parent(element).map(children).map(filterSelf).getOr([]); + }; + var prevSibling = function (element) { + return Optional.from(element.dom.previousSibling).map(SugarElement.fromDom); + }; + var nextSibling = function (element) { + return Optional.from(element.dom.nextSibling).map(SugarElement.fromDom); + }; + var prevSiblings = function (element) { + return reverse(toArray$1(element, prevSibling)); + }; + var nextSiblings = function (element) { + return toArray$1(element, nextSibling); + }; + var children = function (element) { + return map(element.dom.childNodes, SugarElement.fromDom); + }; + var child = function (element, index) { + var cs = element.dom.childNodes; + return Optional.from(cs[index]).map(SugarElement.fromDom); + }; + var firstChild = function (element) { + return child(element, 0); + }; + var lastChild = function (element) { + return child(element, element.dom.childNodes.length - 1); + }; + var childNodesCount = function (element) { + return element.dom.childNodes.length; + }; + + var getHead = function (doc) { + var b = doc.dom.head; + if (b === null || b === undefined) { + throw new Error('Head is not available yet'); + } + return SugarElement.fromDom(b); + }; + + var isShadowRoot = function (dos) { + return isDocumentFragment(dos) && isNonNullable(dos.dom.host); + }; + var supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode); + var isSupported = constant(supported); + var getRootNode = supported ? function (e) { + return SugarElement.fromDom(e.dom.getRootNode()); + } : documentOrOwner; + var getStyleContainer = function (dos) { + return isShadowRoot(dos) ? dos : getHead(documentOrOwner(dos)); + }; + var getShadowRoot = function (e) { + var r = getRootNode(e); + return isShadowRoot(r) ? Optional.some(r) : Optional.none(); + }; + var getShadowHost = function (e) { + return SugarElement.fromDom(e.dom.host); + }; + var getOriginalEventTarget = function (event) { + if (isSupported() && isNonNullable(event.target)) { + var el = SugarElement.fromDom(event.target); + if (isElement(el) && isOpenShadowHost(el)) { + if (event.composed && event.composedPath) { + var composedPath = event.composedPath(); + if (composedPath) { + return head(composedPath); + } + } + } + } + return Optional.from(event.target); + }; + var isOpenShadowHost = function (element) { + return isNonNullable(element.dom.shadowRoot); + }; + + var before = function (marker, element) { + var parent$1 = parent(marker); + parent$1.each(function (v) { + v.dom.insertBefore(element.dom, marker.dom); + }); + }; + var after = function (marker, element) { + var sibling = nextSibling(marker); + sibling.fold(function () { + var parent$1 = parent(marker); + parent$1.each(function (v) { + append(v, element); + }); + }, function (v) { + before(v, element); + }); + }; + var prepend = function (parent, element) { + var firstChild$1 = firstChild(parent); + firstChild$1.fold(function () { + append(parent, element); + }, function (v) { + parent.dom.insertBefore(element.dom, v.dom); + }); + }; + var append = function (parent, element) { + parent.dom.appendChild(element.dom); + }; + var wrap = function (element, wrapper) { + before(element, wrapper); + append(wrapper, element); + }; + + var before$1 = function (marker, elements) { + each(elements, function (x) { + before(marker, x); + }); + }; + var append$1 = function (parent, elements) { + each(elements, function (x) { + append(parent, x); + }); + }; + + var empty = function (element) { + element.dom.textContent = ''; + each(children(element), function (rogue) { + remove(rogue); + }); + }; + var remove = function (element) { + var dom = element.dom; + if (dom.parentNode !== null) { + dom.parentNode.removeChild(dom); + } + }; + var unwrap = function (wrapper) { + var children$1 = children(wrapper); + if (children$1.length > 0) { + before$1(wrapper, children$1); + } + remove(wrapper); + }; + + var inBody = function (element) { + var dom = isText(element) ? element.dom.parentNode : element.dom; + if (dom === undefined || dom === null || dom.ownerDocument === null) { + return false; + } + var doc = dom.ownerDocument; + return getShadowRoot(SugarElement.fromDom(dom)).fold(function () { + return doc.body.contains(dom); + }, compose1(inBody, getShadowHost)); + }; + + var r = function (left, top) { + var translate = function (x, y) { + return r(left + x, top + y); + }; + return { + left: left, + top: top, + translate: translate + }; + }; + var SugarPosition = r; + + var boxPosition = function (dom) { + var box = dom.getBoundingClientRect(); + return SugarPosition(box.left, box.top); + }; + var firstDefinedOrZero = function (a, b) { + if (a !== undefined) { + return a; + } else { + return b !== undefined ? b : 0; + } + }; + var absolute = function (element) { + var doc = element.dom.ownerDocument; + var body = doc.body; + var win = doc.defaultView; + var html = doc.documentElement; + if (body === element.dom) { + return SugarPosition(body.offsetLeft, body.offsetTop); + } + var scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop); + var scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft); + var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop); + var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft); + return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop); + }; + var viewport = function (element) { + var dom = element.dom; + var doc = dom.ownerDocument; + var body = doc.body; + if (body === dom) { + return SugarPosition(body.offsetLeft, body.offsetTop); + } + if (!inBody(element)) { + return SugarPosition(0, 0); + } + return boxPosition(dom); + }; + + var get$2 = function (_DOC) { + var doc = _DOC !== undefined ? _DOC.dom : document; + var x = doc.body.scrollLeft || doc.documentElement.scrollLeft; + var y = doc.body.scrollTop || doc.documentElement.scrollTop; + return SugarPosition(x, y); + }; + var to = function (x, y, _DOC) { + var doc = _DOC !== undefined ? _DOC.dom : document; + var win = doc.defaultView; + if (win) { + win.scrollTo(x, y); + } + }; + var intoView = function (element, alignToTop) { + var isSafari = detect$3().browser.isSafari(); + if (isSafari && isFunction(element.dom.scrollIntoViewIfNeeded)) { + element.dom.scrollIntoViewIfNeeded(false); + } else { + element.dom.scrollIntoView(alignToTop); + } + }; + + var get$3 = function (_win) { + var win = _win === undefined ? window : _win; + return Optional.from(win['visualViewport']); + }; + var bounds = function (x, y, width, height) { + return { + x: x, + y: y, + width: width, + height: height, + right: x + width, + bottom: y + height + }; + }; + var getBounds = function (_win) { + var win = _win === undefined ? window : _win; + var doc = win.document; + var scroll = get$2(SugarElement.fromDom(doc)); + return get$3(win).fold(function () { + var html = win.document.documentElement; + var width = html.clientWidth; + var height = html.clientHeight; + return bounds(scroll.left, scroll.top, width, height); + }, function (visualViewport) { + return bounds(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height); + }); + }; + + var isNodeType = function (type) { + return function (node) { + return !!node && node.nodeType === type; + }; + }; + var isRestrictedNode = function (node) { + return !!node && !Object.getPrototypeOf(node); + }; + var isElement$1 = isNodeType(1); + var matchNodeNames = function (names) { + var lowercasedNames = names.map(function (s) { + return s.toLowerCase(); + }); + return function (node) { + if (node && node.nodeName) { + var nodeName = node.nodeName.toLowerCase(); + return contains(lowercasedNames, nodeName); + } + return false; + }; + }; + var matchStyleValues = function (name, values) { + var items = values.toLowerCase().split(' '); + return function (node) { + var i, cssValue; + if (isElement$1(node)) { + for (i = 0; i < items.length; i++) { + var computed = node.ownerDocument.defaultView.getComputedStyle(node, null); + cssValue = computed ? computed.getPropertyValue(name) : null; + if (cssValue === items[i]) { + return true; + } + } + } + return false; + }; + }; + var hasAttribute = function (attrName) { + return function (node) { + return isElement$1(node) && node.hasAttribute(attrName); + }; + }; + var hasAttributeValue = function (attrName, attrValue) { + return function (node) { + return isElement$1(node) && node.getAttribute(attrName) === attrValue; + }; + }; + var isBogus = function (node) { + return isElement$1(node) && node.hasAttribute('data-mce-bogus'); + }; + var isBogusAll = function (node) { + return isElement$1(node) && node.getAttribute('data-mce-bogus') === 'all'; + }; + var isTable = function (node) { + return isElement$1(node) && node.tagName === 'TABLE'; + }; + var hasContentEditableState = function (value) { + return function (node) { + if (isElement$1(node)) { + if (node.contentEditable === value) { + return true; + } + if (node.getAttribute('data-mce-contenteditable') === value) { + return true; + } + } + return false; + }; + }; + var isTextareaOrInput = matchNodeNames([ + 'textarea', + 'input' + ]); + var isText$1 = isNodeType(3); + var isComment$1 = isNodeType(8); + var isDocument$1 = isNodeType(9); + var isDocumentFragment$1 = isNodeType(11); + var isBr = matchNodeNames(['br']); + var isImg = matchNodeNames(['img']); + var isContentEditableTrue = hasContentEditableState('true'); + var isContentEditableFalse = hasContentEditableState('false'); + var isTableCell = matchNodeNames([ + 'td', + 'th' + ]); + var isMedia = matchNodeNames([ + 'video', + 'audio', + 'object', + 'embed' + ]); + + var isSupported$1 = function (dom) { + return dom.style !== undefined && isFunction(dom.style.getPropertyValue); + }; + + var rawSet = function (dom, key, value) { + if (isString(value) || isBoolean(value) || isNumber(value)) { + dom.setAttribute(key, value + ''); + } else { + console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom); + throw new Error('Attribute value was not simple'); + } + }; + var set = function (element, key, value) { + rawSet(element.dom, key, value); + }; + var setAll = function (element, attrs) { + var dom = element.dom; + each$1(attrs, function (v, k) { + rawSet(dom, k, v); + }); + }; + var get$4 = function (element, key) { + var v = element.dom.getAttribute(key); + return v === null ? undefined : v; + }; + var getOpt = function (element, key) { + return Optional.from(get$4(element, key)); + }; + var has$1 = function (element, key) { + var dom = element.dom; + return dom && dom.hasAttribute ? dom.hasAttribute(key) : false; + }; + var remove$1 = function (element, key) { + element.dom.removeAttribute(key); + }; + var clone = function (element) { + return foldl(element.dom.attributes, function (acc, attr) { + acc[attr.name] = attr.value; + return acc; + }, {}); + }; + + var internalSet = function (dom, property, value) { + if (!isString(value)) { + console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom); + throw new Error('CSS value must be a string: ' + value); + } + if (isSupported$1(dom)) { + dom.style.setProperty(property, value); + } + }; + var setAll$1 = function (element, css) { + var dom = element.dom; + each$1(css, function (v, k) { + internalSet(dom, k, v); + }); + }; + var get$5 = function (element, property) { + var dom = element.dom; + var styles = window.getComputedStyle(dom); + var r = styles.getPropertyValue(property); + return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r; + }; + var getUnsafeProperty = function (dom, property) { + return isSupported$1(dom) ? dom.style.getPropertyValue(property) : ''; + }; + var getRaw = function (element, property) { + var dom = element.dom; + var raw = getUnsafeProperty(dom, property); + return Optional.from(raw).filter(function (r) { + return r.length > 0; + }); + }; + var getAllRaw = function (element) { + var css = {}; + var dom = element.dom; + if (isSupported$1(dom)) { + for (var i = 0; i < dom.style.length; i++) { + var ruleName = dom.style.item(i); + css[ruleName] = dom.style[ruleName]; + } + } + return css; + }; + var reflow = function (e) { + return e.dom.offsetWidth; + }; + + var browser$1 = detect$3().browser; + var firstElement = function (nodes) { + return find(nodes, isElement); + }; + var getTableCaptionDeltaY = function (elm) { + if (browser$1.isFirefox() && name(elm) === 'table') { + return firstElement(children(elm)).filter(function (elm) { + return name(elm) === 'caption'; + }).bind(function (caption) { + return firstElement(nextSiblings(caption)).map(function (body) { + var bodyTop = body.dom.offsetTop; + var captionTop = caption.dom.offsetTop; + var captionHeight = caption.dom.offsetHeight; + return bodyTop <= captionTop ? -captionHeight : 0; + }); + }).getOr(0); + } else { + return 0; + } + }; + var hasChild = function (elm, child) { + return elm.children && contains(elm.children, child); + }; + var getPos = function (body, elm, rootElm) { + var x = 0, y = 0, offsetParent; + var doc = body.ownerDocument; + var pos; + rootElm = rootElm ? rootElm : body; + if (elm) { + if (rootElm === body && elm.getBoundingClientRect && get$5(SugarElement.fromDom(body), 'position') === 'static') { + pos = elm.getBoundingClientRect(); + x = pos.left + (doc.documentElement.scrollLeft || body.scrollLeft) - doc.documentElement.clientLeft; + y = pos.top + (doc.documentElement.scrollTop || body.scrollTop) - doc.documentElement.clientTop; + return { + x: x, + y: y + }; + } + offsetParent = elm; + while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType && !hasChild(offsetParent, rootElm)) { + x += offsetParent.offsetLeft || 0; + y += offsetParent.offsetTop || 0; + offsetParent = offsetParent.offsetParent; + } + offsetParent = elm.parentNode; + while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType && !hasChild(offsetParent, rootElm)) { + x -= offsetParent.scrollLeft || 0; + y -= offsetParent.scrollTop || 0; + offsetParent = offsetParent.parentNode; + } + y += getTableCaptionDeltaY(SugarElement.fromDom(elm)); + } + return { + x: x, + y: y + }; + }; + + var exports$1 = {}, module$1 = { exports: exports$1 }; + (function (define, exports, module, require) { + (function (f) { + if (typeof exports === 'object' && typeof module !== 'undefined') { + module.exports = f(); + } else if (typeof define === 'function' && define.amd) { + define([], f); + } else { + var g; + if (typeof window !== 'undefined') { + g = window; + } else if (typeof global !== 'undefined') { + g = global; + } else if (typeof self !== 'undefined') { + g = self; + } else { + g = this; + } + g.EphoxContactWrapper = f(); + } + }(function () { + return function () { + function r(e, n, t) { + function o(i, f) { + if (!n[i]) { + if (!e[i]) { + var c = 'function' == typeof require && require; + if (!f && c) + return c(i, !0); + if (u) + return u(i, !0); + var a = new Error('Cannot find module \'' + i + '\''); + throw a.code = 'MODULE_NOT_FOUND', a; + } + var p = n[i] = { exports: {} }; + e[i][0].call(p.exports, function (r) { + var n = e[i][1][r]; + return o(n || r); + }, p, p.exports, r, e, n, t); + } + return n[i].exports; + } + for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++) + o(t[i]); + return o; + } + return r; + }()({ + 1: [ + function (require, module, exports) { + var process = module.exports = {}; + var cachedSetTimeout; + var cachedClearTimeout; + function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); + } + function defaultClearTimeout() { + throw new Error('clearTimeout has not been defined'); + } + (function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } + }()); + function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + return setTimeout(fun, 0); + } + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + return cachedSetTimeout(fun, 0); + } catch (e) { + try { + return cachedSetTimeout.call(null, fun, 0); + } catch (e) { + return cachedSetTimeout.call(this, fun, 0); + } + } + } + function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + return clearTimeout(marker); + } + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + return cachedClearTimeout(marker); + } catch (e) { + try { + return cachedClearTimeout.call(null, marker); + } catch (e) { + return cachedClearTimeout.call(this, marker); + } + } + } + var queue = []; + var draining = false; + var currentQueue; + var queueIndex = -1; + function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } + } + function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + var len = queue.length; + while (len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); + } + process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } + }; + function Item(fun, array) { + this.fun = fun; + this.array = array; + } + Item.prototype.run = function () { + this.fun.apply(null, this.array); + }; + process.title = 'browser'; + process.browser = true; + process.env = {}; + process.argv = []; + process.version = ''; + process.versions = {}; + function noop() { + } + process.on = noop; + process.addListener = noop; + process.once = noop; + process.off = noop; + process.removeListener = noop; + process.removeAllListeners = noop; + process.emit = noop; + process.prependListener = noop; + process.prependOnceListener = noop; + process.listeners = function (name) { + return []; + }; + process.binding = function (name) { + throw new Error('process.binding is not supported'); + }; + process.cwd = function () { + return '/'; + }; + process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); + }; + process.umask = function () { + return 0; + }; + }, + {} + ], + 2: [ + function (require, module, exports) { + (function (setImmediate) { + (function (root) { + var setTimeoutFunc = setTimeout; + function noop() { + } + function bind(fn, thisArg) { + return function () { + fn.apply(thisArg, arguments); + }; + } + function Promise(fn) { + if (typeof this !== 'object') + throw new TypeError('Promises must be constructed via new'); + if (typeof fn !== 'function') + throw new TypeError('not a function'); + this._state = 0; + this._handled = false; + this._value = undefined; + this._deferreds = []; + doResolve(fn, this); + } + function handle(self, deferred) { + while (self._state === 3) { + self = self._value; + } + if (self._state === 0) { + self._deferreds.push(deferred); + return; + } + self._handled = true; + Promise._immediateFn(function () { + var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected; + if (cb === null) { + (self._state === 1 ? resolve : reject)(deferred.promise, self._value); + return; + } + var ret; + try { + ret = cb(self._value); + } catch (e) { + reject(deferred.promise, e); + return; + } + resolve(deferred.promise, ret); + }); + } + function resolve(self, newValue) { + try { + if (newValue === self) + throw new TypeError('A promise cannot be resolved with itself.'); + if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) { + var then = newValue.then; + if (newValue instanceof Promise) { + self._state = 3; + self._value = newValue; + finale(self); + return; + } else if (typeof then === 'function') { + doResolve(bind(then, newValue), self); + return; + } + } + self._state = 1; + self._value = newValue; + finale(self); + } catch (e) { + reject(self, e); + } + } + function reject(self, newValue) { + self._state = 2; + self._value = newValue; + finale(self); + } + function finale(self) { + if (self._state === 2 && self._deferreds.length === 0) { + Promise._immediateFn(function () { + if (!self._handled) { + Promise._unhandledRejectionFn(self._value); + } + }); + } + for (var i = 0, len = self._deferreds.length; i < len; i++) { + handle(self, self._deferreds[i]); + } + self._deferreds = null; + } + function Handler(onFulfilled, onRejected, promise) { + this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; + this.onRejected = typeof onRejected === 'function' ? onRejected : null; + this.promise = promise; + } + function doResolve(fn, self) { + var done = false; + try { + fn(function (value) { + if (done) + return; + done = true; + resolve(self, value); + }, function (reason) { + if (done) + return; + done = true; + reject(self, reason); + }); + } catch (ex) { + if (done) + return; + done = true; + reject(self, ex); + } + } + Promise.prototype['catch'] = function (onRejected) { + return this.then(null, onRejected); + }; + Promise.prototype.then = function (onFulfilled, onRejected) { + var prom = new this.constructor(noop); + handle(this, new Handler(onFulfilled, onRejected, prom)); + return prom; + }; + Promise.all = function (arr) { + var args = Array.prototype.slice.call(arr); + return new Promise(function (resolve, reject) { + if (args.length === 0) + return resolve([]); + var remaining = args.length; + function res(i, val) { + try { + if (val && (typeof val === 'object' || typeof val === 'function')) { + var then = val.then; + if (typeof then === 'function') { + then.call(val, function (val) { + res(i, val); + }, reject); + return; + } + } + args[i] = val; + if (--remaining === 0) { + resolve(args); + } + } catch (ex) { + reject(ex); + } + } + for (var i = 0; i < args.length; i++) { + res(i, args[i]); + } + }); + }; + Promise.resolve = function (value) { + if (value && typeof value === 'object' && value.constructor === Promise) { + return value; + } + return new Promise(function (resolve) { + resolve(value); + }); + }; + Promise.reject = function (value) { + return new Promise(function (resolve, reject) { + reject(value); + }); + }; + Promise.race = function (values) { + return new Promise(function (resolve, reject) { + for (var i = 0, len = values.length; i < len; i++) { + values[i].then(resolve, reject); + } + }); + }; + Promise._immediateFn = typeof setImmediate === 'function' ? function (fn) { + setImmediate(fn); + } : function (fn) { + setTimeoutFunc(fn, 0); + }; + Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) { + if (typeof console !== 'undefined' && console) { + console.warn('Possible Unhandled Promise Rejection:', err); + } + }; + Promise._setImmediateFn = function _setImmediateFn(fn) { + Promise._immediateFn = fn; + }; + Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) { + Promise._unhandledRejectionFn = fn; + }; + if (typeof module !== 'undefined' && module.exports) { + module.exports = Promise; + } else if (!root.Promise) { + root.Promise = Promise; + } + }(this)); + }.call(this, require('timers').setImmediate)); + }, + { 'timers': 3 } + ], + 3: [ + function (require, module, exports) { + (function (setImmediate, clearImmediate) { + var nextTick = require('process/browser.js').nextTick; + var apply = Function.prototype.apply; + var slice = Array.prototype.slice; + var immediateIds = {}; + var nextImmediateId = 0; + exports.setTimeout = function () { + return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout); + }; + exports.setInterval = function () { + return new Timeout(apply.call(setInterval, window, arguments), clearInterval); + }; + exports.clearTimeout = exports.clearInterval = function (timeout) { + timeout.close(); + }; + function Timeout(id, clearFn) { + this._id = id; + this._clearFn = clearFn; + } + Timeout.prototype.unref = Timeout.prototype.ref = function () { + }; + Timeout.prototype.close = function () { + this._clearFn.call(window, this._id); + }; + exports.enroll = function (item, msecs) { + clearTimeout(item._idleTimeoutId); + item._idleTimeout = msecs; + }; + exports.unenroll = function (item) { + clearTimeout(item._idleTimeoutId); + item._idleTimeout = -1; + }; + exports._unrefActive = exports.active = function (item) { + clearTimeout(item._idleTimeoutId); + var msecs = item._idleTimeout; + if (msecs >= 0) { + item._idleTimeoutId = setTimeout(function onTimeout() { + if (item._onTimeout) + item._onTimeout(); + }, msecs); + } + }; + exports.setImmediate = typeof setImmediate === 'function' ? setImmediate : function (fn) { + var id = nextImmediateId++; + var args = arguments.length < 2 ? false : slice.call(arguments, 1); + immediateIds[id] = true; + nextTick(function onNextTick() { + if (immediateIds[id]) { + if (args) { + fn.apply(null, args); + } else { + fn.call(null); + } + exports.clearImmediate(id); + } + }); + return id; + }; + exports.clearImmediate = typeof clearImmediate === 'function' ? clearImmediate : function (id) { + delete immediateIds[id]; + }; + }.call(this, require('timers').setImmediate, require('timers').clearImmediate)); + }, + { + 'process/browser.js': 1, + 'timers': 3 + } + ], + 4: [ + function (require, module, exports) { + var promisePolyfill = require('promise-polyfill'); + var Global = function () { + if (typeof window !== 'undefined') { + return window; + } else { + return Function('return this;')(); + } + }(); + module.exports = { boltExport: Global.Promise || promisePolyfill }; + }, + { 'promise-polyfill': 2 } + ] + }, {}, [4])(4); + })); + }(undefined, exports$1, module$1, undefined)); + var Promise = module$1.exports.boltExport; + + var nu$3 = function (baseFn) { + var data = Optional.none(); + var callbacks = []; + var map = function (f) { + return nu$3(function (nCallback) { + get(function (data) { + nCallback(f(data)); + }); + }); + }; + var get = function (nCallback) { + if (isReady()) { + call(nCallback); + } else { + callbacks.push(nCallback); + } + }; + var set = function (x) { + if (!isReady()) { + data = Optional.some(x); + run(callbacks); + callbacks = []; + } + }; + var isReady = function () { + return data.isSome(); + }; + var run = function (cbs) { + each(cbs, call); + }; + var call = function (cb) { + data.each(function (x) { + setTimeout(function () { + cb(x); + }, 0); + }); + }; + baseFn(set); + return { + get: get, + map: map, + isReady: isReady + }; + }; + var pure = function (a) { + return nu$3(function (callback) { + callback(a); + }); + }; + var LazyValue = { + nu: nu$3, + pure: pure + }; + + var errorReporter = function (err) { + setTimeout(function () { + throw err; + }, 0); + }; + var make = function (run) { + var get = function (callback) { + run().then(callback, errorReporter); + }; + var map = function (fab) { + return make(function () { + return run().then(fab); + }); + }; + var bind = function (aFutureB) { + return make(function () { + return run().then(function (v) { + return aFutureB(v).toPromise(); + }); + }); + }; + var anonBind = function (futureB) { + return make(function () { + return run().then(function () { + return futureB.toPromise(); + }); + }); + }; + var toLazy = function () { + return LazyValue.nu(get); + }; + var toCached = function () { + var cache = null; + return make(function () { + if (cache === null) { + cache = run(); + } + return cache; + }); + }; + var toPromise = run; + return { + map: map, + bind: bind, + anonBind: anonBind, + toLazy: toLazy, + toCached: toCached, + toPromise: toPromise, + get: get + }; + }; + var nu$4 = function (baseFn) { + return make(function () { + return new Promise(baseFn); + }); + }; + var pure$1 = function (a) { + return make(function () { + return Promise.resolve(a); + }); + }; + var Future = { + nu: nu$4, + pure: pure$1 + }; + + var par = function (asyncValues, nu) { + return nu(function (callback) { + var r = []; + var count = 0; + var cb = function (i) { + return function (value) { + r[i] = value; + count++; + if (count >= asyncValues.length) { + callback(r); + } + }; + }; + if (asyncValues.length === 0) { + callback([]); + } else { + each(asyncValues, function (asyncValue, i) { + asyncValue.get(cb(i)); + }); + } + }); + }; + + var par$1 = function (futures) { + return par(futures, Future.nu); + }; + + var value = function (o) { + var is = function (v) { + return o === v; + }; + var or = function (_opt) { + return value(o); + }; + var orThunk = function (_f) { + return value(o); + }; + var map = function (f) { + return value(f(o)); + }; + var mapError = function (_f) { + return value(o); + }; + var each = function (f) { + f(o); + }; + var bind = function (f) { + return f(o); + }; + var fold = function (_, onValue) { + return onValue(o); + }; + var exists = function (f) { + return f(o); + }; + var forall = function (f) { + return f(o); + }; + var toOptional = function () { + return Optional.some(o); + }; + return { + is: is, + isValue: always, + isError: never, + getOr: constant(o), + getOrThunk: constant(o), + getOrDie: constant(o), + or: or, + orThunk: orThunk, + fold: fold, + map: map, + mapError: mapError, + each: each, + bind: bind, + exists: exists, + forall: forall, + toOptional: toOptional + }; + }; + var error = function (message) { + var getOrThunk = function (f) { + return f(); + }; + var getOrDie = function () { + return die(String(message))(); + }; + var or = function (opt) { + return opt; + }; + var orThunk = function (f) { + return f(); + }; + var map = function (_f) { + return error(message); + }; + var mapError = function (f) { + return error(f(message)); + }; + var bind = function (_f) { + return error(message); + }; + var fold = function (onError, _) { + return onError(message); + }; + return { + is: never, + isValue: never, + isError: always, + getOr: identity, + getOrThunk: getOrThunk, + getOrDie: getOrDie, + or: or, + orThunk: orThunk, + fold: fold, + map: map, + mapError: mapError, + each: noop, + bind: bind, + exists: never, + forall: always, + toOptional: Optional.none + }; + }; + var fromOption = function (opt, err) { + return opt.fold(function () { + return error(err); + }, value); + }; + var Result = { + value: value, + error: error, + fromOption: fromOption + }; + + var generate = function (cases) { + if (!isArray(cases)) { + throw new Error('cases must be an array'); + } + if (cases.length === 0) { + throw new Error('there must be at least one case'); + } + var constructors = []; + var adt = {}; + each(cases, function (acase, count) { + var keys$1 = keys(acase); + if (keys$1.length !== 1) { + throw new Error('one and only one name per case'); + } + var key = keys$1[0]; + var value = acase[key]; + if (adt[key] !== undefined) { + throw new Error('duplicate key detected:' + key); + } else if (key === 'cata') { + throw new Error('cannot have a case named cata (sorry)'); + } else if (!isArray(value)) { + throw new Error('case arguments must be an array'); + } + constructors.push(key); + adt[key] = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var argLength = args.length; + if (argLength !== value.length) { + throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength); + } + var match = function (branches) { + var branchKeys = keys(branches); + if (constructors.length !== branchKeys.length) { + throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\nActual: ' + branchKeys.join(',')); + } + var allReqd = forall(constructors, function (reqKey) { + return contains(branchKeys, reqKey); + }); + if (!allReqd) { + throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\nRequired: ' + constructors.join(', ')); + } + return branches[key].apply(null, args); + }; + return { + fold: function () { + var foldArgs = []; + for (var _i = 0; _i < arguments.length; _i++) { + foldArgs[_i] = arguments[_i]; + } + if (foldArgs.length !== cases.length) { + throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length); + } + var target = foldArgs[count]; + return target.apply(null, args); + }, + match: match, + log: function (label) { + console.log(label, { + constructors: constructors, + constructor: key, + params: args + }); + } + }; + }; + }); + return adt; + }; + var Adt = { generate: generate }; + + var comparison = Adt.generate([ + { + bothErrors: [ + 'error1', + 'error2' + ] + }, + { + firstError: [ + 'error1', + 'value2' + ] + }, + { + secondError: [ + 'value1', + 'error2' + ] + }, + { + bothValues: [ + 'value1', + 'value2' + ] + } + ]); + var unite = function (result) { + return result.fold(identity, identity); + }; + + function ClosestOrAncestor (is, ancestor, scope, a, isRoot) { + if (is(scope, a)) { + return Optional.some(scope); + } else if (isFunction(isRoot) && isRoot(scope)) { + return Optional.none(); + } else { + return ancestor(scope, a, isRoot); + } + } + + var ancestor = function (scope, predicate, isRoot) { + var element = scope.dom; + var stop = isFunction(isRoot) ? isRoot : never; + while (element.parentNode) { + element = element.parentNode; + var el = SugarElement.fromDom(element); + if (predicate(el)) { + return Optional.some(el); + } else if (stop(el)) { + break; + } + } + return Optional.none(); + }; + var closest = function (scope, predicate, isRoot) { + var is = function (s, test) { + return test(s); + }; + return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot); + }; + var sibling = function (scope, predicate) { + var element = scope.dom; + if (!element.parentNode) { + return Optional.none(); + } + return child$1(SugarElement.fromDom(element.parentNode), function (x) { + return !eq$2(scope, x) && predicate(x); + }); + }; + var child$1 = function (scope, predicate) { + var pred = function (node) { + return predicate(SugarElement.fromDom(node)); + }; + var result = find(scope.dom.childNodes, pred); + return result.map(SugarElement.fromDom); + }; + + var ancestor$1 = function (scope, selector, isRoot) { + return ancestor(scope, function (e) { + return is$1(e, selector); + }, isRoot); + }; + var descendant = function (scope, selector) { + return one(selector, scope); + }; + var closest$1 = function (scope, selector, isRoot) { + var is = function (element, selector) { + return is$1(element, selector); + }; + return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot); + }; + + var promise = function () { + var bind = function (fn, thisArg) { + return function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + fn.apply(thisArg, args); + }; + }; + var isArray = Array.isArray || function (value) { + return Object.prototype.toString.call(value) === '[object Array]'; + }; + var Promise = function (fn) { + if (typeof this !== 'object') { + throw new TypeError('Promises must be constructed via new'); + } + if (typeof fn !== 'function') { + throw new TypeError('not a function'); + } + this._state = null; + this._value = null; + this._deferreds = []; + doResolve(fn, bind(resolve, this), bind(reject, this)); + }; + var asap = Promise.immediateFn || typeof setImmediate === 'function' && setImmediate || function (fn) { + return setTimeout(fn, 1); + }; + function handle(deferred) { + var me = this; + if (this._state === null) { + this._deferreds.push(deferred); + return; + } + asap(function () { + var cb = me._state ? deferred.onFulfilled : deferred.onRejected; + if (cb === null) { + (me._state ? deferred.resolve : deferred.reject)(me._value); + return; + } + var ret; + try { + ret = cb(me._value); + } catch (e) { + deferred.reject(e); + return; + } + deferred.resolve(ret); + }); + } + function resolve(newValue) { + try { + if (newValue === this) { + throw new TypeError('A promise cannot be resolved with itself.'); + } + if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) { + var then = newValue.then; + if (typeof then === 'function') { + doResolve(bind(then, newValue), bind(resolve, this), bind(reject, this)); + return; + } + } + this._state = true; + this._value = newValue; + finale.call(this); + } catch (e) { + reject.call(this, e); + } + } + function reject(newValue) { + this._state = false; + this._value = newValue; + finale.call(this); + } + function finale() { + for (var i = 0, len = this._deferreds.length; i < len; i++) { + handle.call(this, this._deferreds[i]); + } + this._deferreds = null; + } + function Handler(onFulfilled, onRejected, resolve, reject) { + this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; + this.onRejected = typeof onRejected === 'function' ? onRejected : null; + this.resolve = resolve; + this.reject = reject; + } + var doResolve = function (fn, onFulfilled, onRejected) { + var done = false; + try { + fn(function (value) { + if (done) { + return; + } + done = true; + onFulfilled(value); + }, function (reason) { + if (done) { + return; + } + done = true; + onRejected(reason); + }); + } catch (ex) { + if (done) { + return; + } + done = true; + onRejected(ex); + } + }; + Promise.prototype.catch = function (onRejected) { + return this.then(null, onRejected); + }; + Promise.prototype.then = function (onFulfilled, onRejected) { + var me = this; + return new Promise(function (resolve, reject) { + handle.call(me, new Handler(onFulfilled, onRejected, resolve, reject)); + }); + }; + Promise.all = function () { + var values = []; + for (var _i = 0; _i < arguments.length; _i++) { + values[_i] = arguments[_i]; + } + var args = Array.prototype.slice.call(values.length === 1 && isArray(values[0]) ? values[0] : values); + return new Promise(function (resolve, reject) { + if (args.length === 0) { + return resolve([]); + } + var remaining = args.length; + var res = function (i, val) { + try { + if (val && (typeof val === 'object' || typeof val === 'function')) { + var then = val.then; + if (typeof then === 'function') { + then.call(val, function (val) { + res(i, val); + }, reject); + return; + } + } + args[i] = val; + if (--remaining === 0) { + resolve(args); + } + } catch (ex) { + reject(ex); + } + }; + for (var i = 0; i < args.length; i++) { + res(i, args[i]); + } + }); + }; + Promise.resolve = function (value) { + if (value && typeof value === 'object' && value.constructor === Promise) { + return value; + } + return new Promise(function (resolve) { + resolve(value); + }); + }; + Promise.reject = function (value) { + return new Promise(function (resolve, reject) { + reject(value); + }); + }; + Promise.race = function (values) { + return new Promise(function (resolve, reject) { + for (var i = 0, len = values.length; i < len; i++) { + values[i].then(resolve, reject); + } + }); + }; + return Promise; + }; + var promiseObj = window.Promise ? window.Promise : promise(); + + var requestAnimationFramePromise; + var requestAnimationFrame = function (callback, element) { + var requestAnimationFrameFunc = window.requestAnimationFrame; + var vendors = [ + 'ms', + 'moz', + 'webkit' + ]; + var featurefill = function (cb) { + window.setTimeout(cb, 0); + }; + for (var i = 0; i < vendors.length && !requestAnimationFrameFunc; i++) { + requestAnimationFrameFunc = window[vendors[i] + 'RequestAnimationFrame']; + } + if (!requestAnimationFrameFunc) { + requestAnimationFrameFunc = featurefill; + } + requestAnimationFrameFunc(callback, element); + }; + var wrappedSetTimeout = function (callback, time) { + if (typeof time !== 'number') { + time = 0; + } + return setTimeout(callback, time); + }; + var wrappedSetInterval = function (callback, time) { + if (typeof time !== 'number') { + time = 1; + } + return setInterval(callback, time); + }; + var wrappedClearTimeout = function (id) { + return clearTimeout(id); + }; + var wrappedClearInterval = function (id) { + return clearInterval(id); + }; + var debounce = function (callback, time) { + var timer; + var func = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + clearTimeout(timer); + timer = wrappedSetTimeout(function () { + callback.apply(this, args); + }, time); + }; + func.stop = function () { + clearTimeout(timer); + }; + return func; + }; + var Delay = { + requestAnimationFrame: function (callback, element) { + if (requestAnimationFramePromise) { + requestAnimationFramePromise.then(callback); + return; + } + requestAnimationFramePromise = new promiseObj(function (resolve) { + if (!element) { + element = document.body; + } + requestAnimationFrame(resolve, element); + }).then(callback); + }, + setTimeout: wrappedSetTimeout, + setInterval: wrappedSetInterval, + setEditorTimeout: function (editor, callback, time) { + return wrappedSetTimeout(function () { + if (!editor.removed) { + callback(); + } + }, time); + }, + setEditorInterval: function (editor, callback, time) { + var timer = wrappedSetInterval(function () { + if (!editor.removed) { + callback(); + } else { + clearInterval(timer); + } + }, time); + return timer; + }, + debounce: debounce, + throttle: debounce, + clearInterval: wrappedClearInterval, + clearTimeout: wrappedClearTimeout + }; + + var StyleSheetLoader = function (documentOrShadowRoot, settings) { + if (settings === void 0) { + settings = {}; + } + var idCount = 0; + var loadedStates = {}; + var edos = SugarElement.fromDom(documentOrShadowRoot); + var doc = documentOrOwner(edos); + var maxLoadTime = settings.maxLoadTime || 5000; + var _setReferrerPolicy = function (referrerPolicy) { + settings.referrerPolicy = referrerPolicy; + }; + var addStyle = function (element) { + append(getStyleContainer(edos), element); + }; + var removeStyle = function (id) { + var styleContainer = getStyleContainer(edos); + descendant(styleContainer, '#' + id).each(remove); + }; + var getOrCreateState = function (url) { + return get$1(loadedStates, url).getOrThunk(function () { + return { + id: 'mce-u' + idCount++, + passed: [], + failed: [], + count: 0 + }; + }); + }; + var load = function (url, success, failure) { + var link; + var urlWithSuffix = Tools._addCacheSuffix(url); + var state = getOrCreateState(urlWithSuffix); + loadedStates[urlWithSuffix] = state; + state.count++; + var resolve = function (callbacks, status) { + var i = callbacks.length; + while (i--) { + callbacks[i](); + } + state.status = status; + state.passed = []; + state.failed = []; + if (link) { + link.onload = null; + link.onerror = null; + link = null; + } + }; + var passed = function () { + return resolve(state.passed, 2); + }; + var failed = function () { + return resolve(state.failed, 3); + }; + var wait = function (testCallback, waitCallback) { + if (!testCallback()) { + if (Date.now() - startTime < maxLoadTime) { + Delay.setTimeout(waitCallback); + } else { + failed(); + } + } + }; + var waitForWebKitLinkLoaded = function () { + wait(function () { + var styleSheets = documentOrShadowRoot.styleSheets; + var i = styleSheets.length; + while (i--) { + var styleSheet = styleSheets[i]; + var owner = styleSheet.ownerNode; + if (owner && owner.id === link.id) { + passed(); + return true; + } + } + return false; + }, waitForWebKitLinkLoaded); + }; + if (success) { + state.passed.push(success); + } + if (failure) { + state.failed.push(failure); + } + if (state.status === 1) { + return; + } + if (state.status === 2) { + passed(); + return; + } + if (state.status === 3) { + failed(); + return; + } + state.status = 1; + var linkElem = SugarElement.fromTag('link', doc.dom); + setAll(linkElem, { + rel: 'stylesheet', + type: 'text/css', + id: state.id + }); + var startTime = Date.now(); + if (settings.contentCssCors) { + set(linkElem, 'crossOrigin', 'anonymous'); + } + if (settings.referrerPolicy) { + set(linkElem, 'referrerpolicy', settings.referrerPolicy); + } + link = linkElem.dom; + link.onload = waitForWebKitLinkLoaded; + link.onerror = failed; + addStyle(linkElem); + set(linkElem, 'href', urlWithSuffix); + }; + var loadF = function (url) { + return Future.nu(function (resolve) { + load(url, compose(resolve, constant(Result.value(url))), compose(resolve, constant(Result.error(url)))); + }); + }; + var loadAll = function (urls, success, failure) { + par$1(map(urls, loadF)).get(function (result) { + var parts = partition(result, function (r) { + return r.isValue(); + }); + if (parts.fail.length > 0) { + failure(parts.fail.map(unite)); + } else { + success(parts.pass.map(unite)); + } + }); + }; + var unload = function (url) { + var urlWithSuffix = Tools._addCacheSuffix(url); + get$1(loadedStates, urlWithSuffix).each(function (state) { + var count = --state.count; + if (count === 0) { + delete loadedStates[urlWithSuffix]; + removeStyle(state.id); + } + }); + }; + var unloadAll = function (urls) { + each(urls, function (url) { + unload(url); + }); + }; + return { + load: load, + loadAll: loadAll, + unload: unload, + unloadAll: unloadAll, + _setReferrerPolicy: _setReferrerPolicy + }; + }; + + var create$1 = function () { + var map = new WeakMap(); + var forElement = function (referenceElement, settings) { + var root = getRootNode(referenceElement); + var rootDom = root.dom; + return Optional.from(map.get(rootDom)).getOrThunk(function () { + var sl = StyleSheetLoader(rootDom, settings); + map.set(rootDom, sl); + return sl; + }); + }; + return { forElement: forElement }; + }; + var instance = create$1(); + + var DomTreeWalker = function () { + function DomTreeWalker(startNode, rootNode) { + this.node = startNode; + this.rootNode = rootNode; + this.current = this.current.bind(this); + this.next = this.next.bind(this); + this.prev = this.prev.bind(this); + this.prev2 = this.prev2.bind(this); + } + DomTreeWalker.prototype.current = function () { + return this.node; + }; + DomTreeWalker.prototype.next = function (shallow) { + this.node = this.findSibling(this.node, 'firstChild', 'nextSibling', shallow); + return this.node; + }; + DomTreeWalker.prototype.prev = function (shallow) { + this.node = this.findSibling(this.node, 'lastChild', 'previousSibling', shallow); + return this.node; + }; + DomTreeWalker.prototype.prev2 = function (shallow) { + this.node = this.findPreviousNode(this.node, 'lastChild', 'previousSibling', shallow); + return this.node; + }; + DomTreeWalker.prototype.findSibling = function (node, startName, siblingName, shallow) { + var sibling, parent; + if (node) { + if (!shallow && node[startName]) { + return node[startName]; + } + if (node !== this.rootNode) { + sibling = node[siblingName]; + if (sibling) { + return sibling; + } + for (parent = node.parentNode; parent && parent !== this.rootNode; parent = parent.parentNode) { + sibling = parent[siblingName]; + if (sibling) { + return sibling; + } + } + } + } + }; + DomTreeWalker.prototype.findPreviousNode = function (node, startName, siblingName, shallow) { + var sibling, parent, child; + if (node) { + sibling = node[siblingName]; + if (this.rootNode && sibling === this.rootNode) { + return; + } + if (sibling) { + if (!shallow) { + for (child = sibling[startName]; child; child = child[startName]) { + if (!child[startName]) { + return child; + } + } + } + return sibling; + } + parent = node.parentNode; + if (parent && parent !== this.rootNode) { + return parent; + } + } + }; + return DomTreeWalker; + }(); + + var blocks = [ + 'article', + 'aside', + 'details', + 'div', + 'dt', + 'figcaption', + 'footer', + 'form', + 'fieldset', + 'header', + 'hgroup', + 'html', + 'main', + 'nav', + 'section', + 'summary', + 'body', + 'p', + 'dl', + 'multicol', + 'dd', + 'figure', + 'address', + 'center', + 'blockquote', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'listing', + 'xmp', + 'pre', + 'plaintext', + 'menu', + 'dir', + 'ul', + 'ol', + 'li', + 'hr', + 'table', + 'tbody', + 'thead', + 'tfoot', + 'th', + 'tr', + 'td', + 'caption' + ]; + var tableCells = [ + 'td', + 'th' + ]; + var tableSections = [ + 'thead', + 'tbody', + 'tfoot' + ]; + var textBlocks = [ + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'p', + 'div', + 'address', + 'pre', + 'form', + 'blockquote', + 'center', + 'dir', + 'fieldset', + 'header', + 'footer', + 'article', + 'section', + 'hgroup', + 'aside', + 'nav', + 'figure' + ]; + var headings = [ + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6' + ]; + var listItems = [ + 'li', + 'dd', + 'dt' + ]; + var lists = [ + 'ul', + 'ol', + 'dl' + ]; + var wsElements = [ + 'pre', + 'script', + 'textarea', + 'style' + ]; + var lazyLookup = function (items) { + var lookup; + return function (node) { + lookup = lookup ? lookup : mapToObject(items, always); + return lookup.hasOwnProperty(name(node)); + }; + }; + var isHeading = lazyLookup(headings); + var isBlock = lazyLookup(blocks); + var isTable$1 = function (node) { + return name(node) === 'table'; + }; + var isInline = function (node) { + return isElement(node) && !isBlock(node); + }; + var isBr$1 = function (node) { + return isElement(node) && name(node) === 'br'; + }; + var isTextBlock = lazyLookup(textBlocks); + var isList = lazyLookup(lists); + var isListItem = lazyLookup(listItems); + var isTableSection = lazyLookup(tableSections); + var isTableCell$1 = lazyLookup(tableCells); + var isWsPreserveElement = lazyLookup(wsElements); + + var ancestor$2 = function (scope, selector, isRoot) { + return ancestor$1(scope, selector, isRoot).isSome(); + }; + + var zeroWidth = '\uFEFF'; + var nbsp = '\xA0'; + var isZwsp = function (char) { + return char === zeroWidth; + }; + var removeZwsp = function (s) { + return s.replace(/\uFEFF/g, ''); + }; + + var ZWSP = zeroWidth; + var isZwsp$1 = isZwsp; + var trim$2 = removeZwsp; + + var isElement$2 = isElement$1; + var isText$2 = isText$1; + var isCaretContainerBlock = function (node) { + if (isText$2(node)) { + node = node.parentNode; + } + return isElement$2(node) && node.hasAttribute('data-mce-caret'); + }; + var isCaretContainerInline = function (node) { + return isText$2(node) && isZwsp$1(node.data); + }; + var isCaretContainer = function (node) { + return isCaretContainerBlock(node) || isCaretContainerInline(node); + }; + var hasContent = function (node) { + return node.firstChild !== node.lastChild || !isBr(node.firstChild); + }; + var insertInline = function (node, before) { + var sibling; + var doc = node.ownerDocument; + var textNode = doc.createTextNode(ZWSP); + var parentNode = node.parentNode; + if (!before) { + sibling = node.nextSibling; + if (isText$2(sibling)) { + if (isCaretContainer(sibling)) { + return sibling; + } + if (startsWithCaretContainer(sibling)) { + sibling.splitText(1); + return sibling; + } + } + if (node.nextSibling) { + parentNode.insertBefore(textNode, node.nextSibling); + } else { + parentNode.appendChild(textNode); + } + } else { + sibling = node.previousSibling; + if (isText$2(sibling)) { + if (isCaretContainer(sibling)) { + return sibling; + } + if (endsWithCaretContainer(sibling)) { + return sibling.splitText(sibling.data.length - 1); + } + } + parentNode.insertBefore(textNode, node); + } + return textNode; + }; + var isBeforeInline = function (pos) { + var container = pos.container(); + if (!isText$1(container)) { + return false; + } + return container.data.charAt(pos.offset()) === ZWSP || pos.isAtStart() && isCaretContainerInline(container.previousSibling); + }; + var isAfterInline = function (pos) { + var container = pos.container(); + if (!isText$1(container)) { + return false; + } + return container.data.charAt(pos.offset() - 1) === ZWSP || pos.isAtEnd() && isCaretContainerInline(container.nextSibling); + }; + var createBogusBr = function () { + var br = document.createElement('br'); + br.setAttribute('data-mce-bogus', '1'); + return br; + }; + var insertBlock = function (blockName, node, before) { + var doc = node.ownerDocument; + var blockNode = doc.createElement(blockName); + blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after'); + blockNode.setAttribute('data-mce-bogus', 'all'); + blockNode.appendChild(createBogusBr()); + var parentNode = node.parentNode; + if (!before) { + if (node.nextSibling) { + parentNode.insertBefore(blockNode, node.nextSibling); + } else { + parentNode.appendChild(blockNode); + } + } else { + parentNode.insertBefore(blockNode, node); + } + return blockNode; + }; + var startsWithCaretContainer = function (node) { + return isText$2(node) && node.data[0] === ZWSP; + }; + var endsWithCaretContainer = function (node) { + return isText$2(node) && node.data[node.data.length - 1] === ZWSP; + }; + var trimBogusBr = function (elm) { + var brs = elm.getElementsByTagName('br'); + var lastBr = brs[brs.length - 1]; + if (isBogus(lastBr)) { + lastBr.parentNode.removeChild(lastBr); + } + }; + var showCaretContainerBlock = function (caretContainer) { + if (caretContainer && caretContainer.hasAttribute('data-mce-caret')) { + trimBogusBr(caretContainer); + caretContainer.removeAttribute('data-mce-caret'); + caretContainer.removeAttribute('data-mce-bogus'); + caretContainer.removeAttribute('style'); + caretContainer.removeAttribute('_moz_abspos'); + return caretContainer; + } + return null; + }; + var isRangeInCaretContainerBlock = function (range) { + return isCaretContainerBlock(range.startContainer); + }; + + var isContentEditableTrue$1 = isContentEditableTrue; + var isContentEditableFalse$1 = isContentEditableFalse; + var isBr$2 = isBr; + var isText$3 = isText$1; + var isInvalidTextElement = matchNodeNames([ + 'script', + 'style', + 'textarea' + ]); + var isAtomicInline = matchNodeNames([ + 'img', + 'input', + 'textarea', + 'hr', + 'iframe', + 'video', + 'audio', + 'object', + 'embed' + ]); + var isTable$2 = matchNodeNames(['table']); + var isCaretContainer$1 = isCaretContainer; + var isCaretCandidate = function (node) { + if (isCaretContainer$1(node)) { + return false; + } + if (isText$3(node)) { + return !isInvalidTextElement(node.parentNode); + } + return isAtomicInline(node) || isBr$2(node) || isTable$2(node) || isNonUiContentEditableFalse(node); + }; + var isUnselectable = function (node) { + return isElement$1(node) && node.getAttribute('unselectable') === 'true'; + }; + var isNonUiContentEditableFalse = function (node) { + return isUnselectable(node) === false && isContentEditableFalse$1(node); + }; + var isInEditable = function (node, root) { + for (node = node.parentNode; node && node !== root; node = node.parentNode) { + if (isNonUiContentEditableFalse(node)) { + return false; + } + if (isContentEditableTrue$1(node)) { + return true; + } + } + return true; + }; + var isAtomicContentEditableFalse = function (node) { + if (!isNonUiContentEditableFalse(node)) { + return false; + } + return foldl(from$1(node.getElementsByTagName('*')), function (result, elm) { + return result || isContentEditableTrue$1(elm); + }, false) !== true; + }; + var isAtomic = function (node) { + return isAtomicInline(node) || isAtomicContentEditableFalse(node); + }; + var isEditableCaretCandidate = function (node, root) { + return isCaretCandidate(node) && isInEditable(node, root); + }; + + var whiteSpaceRegExp$1 = /^[ \t\r\n]*$/; + var isWhitespaceText = function (text) { + return whiteSpaceRegExp$1.test(text); + }; + + var hasWhitespacePreserveParent = function (node, rootNode) { + var rootElement = SugarElement.fromDom(rootNode); + var startNode = SugarElement.fromDom(node); + return ancestor$2(startNode, 'pre,code', curry(eq$2, rootElement)); + }; + var isWhitespace = function (node, rootNode) { + return isText$1(node) && isWhitespaceText(node.data) && hasWhitespacePreserveParent(node, rootNode) === false; + }; + var isNamedAnchor = function (node) { + return isElement$1(node) && node.nodeName === 'A' && !node.hasAttribute('href') && (node.hasAttribute('name') || node.hasAttribute('id')); + }; + var isContent = function (node, rootNode) { + return isCaretCandidate(node) && isWhitespace(node, rootNode) === false || isNamedAnchor(node) || isBookmark(node); + }; + var isBookmark = hasAttribute('data-mce-bookmark'); + var isBogus$1 = hasAttribute('data-mce-bogus'); + var isBogusAll$1 = hasAttributeValue('data-mce-bogus', 'all'); + var isEmptyNode = function (targetNode, skipBogus) { + var node, brCount = 0; + if (isContent(targetNode, targetNode)) { + return false; + } else { + node = targetNode.firstChild; + if (!node) { + return true; + } + var walker = new DomTreeWalker(node, targetNode); + do { + if (skipBogus) { + if (isBogusAll$1(node)) { + node = walker.next(true); + continue; + } + if (isBogus$1(node)) { + node = walker.next(); + continue; + } + } + if (isBr(node)) { + brCount++; + node = walker.next(); + continue; + } + if (isContent(node, targetNode)) { + return false; + } + node = walker.next(); + } while (node); + return brCount <= 1; + } + }; + var isEmpty = function (elm, skipBogus) { + if (skipBogus === void 0) { + skipBogus = true; + } + return isEmptyNode(elm.dom, skipBogus); + }; + + var isSpan = function (node) { + return node.nodeName.toLowerCase() === 'span'; + }; + var isInlineContent = function (node, root) { + return isNonNullable(node) && (isContent(node, root) || isInline(SugarElement.fromDom(node))); + }; + var surroundedByInlineContent = function (node, root) { + var prev = new DomTreeWalker(node, root).prev(false); + var next = new DomTreeWalker(node, root).next(false); + var prevIsInline = isUndefined(prev) || isInlineContent(prev, root); + var nextIsInline = isUndefined(next) || isInlineContent(next, root); + return prevIsInline && nextIsInline; + }; + var isBookmarkNode = function (node) { + return isSpan(node) && node.getAttribute('data-mce-type') === 'bookmark'; + }; + var isKeepTextNode = function (node, root) { + return isText$1(node) && node.data.length > 0 && surroundedByInlineContent(node, root); + }; + var isKeepElement = function (node) { + return isElement$1(node) ? node.childNodes.length > 0 : false; + }; + var isDocument$2 = function (node) { + return isDocumentFragment$1(node) || isDocument$1(node); + }; + var trimNode = function (dom, node, root) { + var rootNode = root || node; + if (isElement$1(node) && isBookmarkNode(node)) { + return node; + } + var children = node.childNodes; + for (var i = children.length - 1; i >= 0; i--) { + trimNode(dom, children[i], rootNode); + } + if (isElement$1(node)) { + var currentChildren = node.childNodes; + if (currentChildren.length === 1 && isBookmarkNode(currentChildren[0])) { + node.parentNode.insertBefore(currentChildren[0], node); + } + } + if (!isDocument$2(node) && !isContent(node, rootNode) && !isKeepElement(node) && !isKeepTextNode(node, rootNode)) { + dom.remove(node); + } + return node; + }; + + var makeMap$1 = Tools.makeMap; + var attrsCharsRegExp = /[&<>\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + var textCharsRegExp = /[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + var rawCharsRegExp = /[<>&\"\']/g; + var entityRegExp = /&#([a-z0-9]+);?|&([a-z0-9]+);/gi; + var asciiMap = { + 128: '\u20AC', + 130: '\u201A', + 131: '\u0192', + 132: '\u201E', + 133: '\u2026', + 134: '\u2020', + 135: '\u2021', + 136: '\u02c6', + 137: '\u2030', + 138: '\u0160', + 139: '\u2039', + 140: '\u0152', + 142: '\u017d', + 145: '\u2018', + 146: '\u2019', + 147: '\u201C', + 148: '\u201D', + 149: '\u2022', + 150: '\u2013', + 151: '\u2014', + 152: '\u02DC', + 153: '\u2122', + 154: '\u0161', + 155: '\u203A', + 156: '\u0153', + 158: '\u017e', + 159: '\u0178' + }; + var baseEntities = { + '"': '"', + '\'': ''', + '<': '<', + '>': '>', + '&': '&', + '`': '`' + }; + var reverseEntities = { + '<': '<', + '>': '>', + '&': '&', + '"': '"', + ''': '\'' + }; + var nativeDecode = function (text) { + var elm = SugarElement.fromTag('div').dom; + elm.innerHTML = text; + return elm.textContent || elm.innerText || text; + }; + var buildEntitiesLookup = function (items, radix) { + var i, chr, entity; + var lookup = {}; + if (items) { + items = items.split(','); + radix = radix || 10; + for (i = 0; i < items.length; i += 2) { + chr = String.fromCharCode(parseInt(items[i], radix)); + if (!baseEntities[chr]) { + entity = '&' + items[i + 1] + ';'; + lookup[chr] = entity; + lookup[entity] = chr; + } + } + return lookup; + } + }; + var namedEntities = buildEntitiesLookup('50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,' + '5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,' + '5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,' + '5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,' + '68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,' + '6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,' + '6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,' + '75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,' + '7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,' + '7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,' + 'sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,' + 'st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,' + 't9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,' + 'tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,' + 'u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,' + '81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,' + '8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,' + '8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,' + '8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,' + '8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,' + 'nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,' + 'rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,' + 'Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,' + '80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,' + '811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro', 32); + var encodeRaw = function (text, attr) { + return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) { + return baseEntities[chr] || chr; + }); + }; + var encodeAllRaw = function (text) { + return ('' + text).replace(rawCharsRegExp, function (chr) { + return baseEntities[chr] || chr; + }); + }; + var encodeNumeric = function (text, attr) { + return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) { + if (chr.length > 1) { + return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';'; + } + return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';'; + }); + }; + var encodeNamed = function (text, attr, entities) { + entities = entities || namedEntities; + return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) { + return baseEntities[chr] || entities[chr] || chr; + }); + }; + var getEncodeFunc = function (name, entities) { + var entitiesMap = buildEntitiesLookup(entities) || namedEntities; + var encodeNamedAndNumeric = function (text, attr) { + return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) { + if (baseEntities[chr] !== undefined) { + return baseEntities[chr]; + } + if (entitiesMap[chr] !== undefined) { + return entitiesMap[chr]; + } + if (chr.length > 1) { + return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';'; + } + return '&#' + chr.charCodeAt(0) + ';'; + }); + }; + var encodeCustomNamed = function (text, attr) { + return encodeNamed(text, attr, entitiesMap); + }; + var nameMap = makeMap$1(name.replace(/\+/g, ',')); + if (nameMap.named && nameMap.numeric) { + return encodeNamedAndNumeric; + } + if (nameMap.named) { + if (entities) { + return encodeCustomNamed; + } + return encodeNamed; + } + if (nameMap.numeric) { + return encodeNumeric; + } + return encodeRaw; + }; + var decode = function (text) { + return text.replace(entityRegExp, function (all, numeric) { + if (numeric) { + if (numeric.charAt(0).toLowerCase() === 'x') { + numeric = parseInt(numeric.substr(1), 16); + } else { + numeric = parseInt(numeric, 10); + } + if (numeric > 65535) { + numeric -= 65536; + return String.fromCharCode(55296 + (numeric >> 10), 56320 + (numeric & 1023)); + } + return asciiMap[numeric] || String.fromCharCode(numeric); + } + return reverseEntities[all] || namedEntities[all] || nativeDecode(all); + }); + }; + var Entities = { + encodeRaw: encodeRaw, + encodeAllRaw: encodeAllRaw, + encodeNumeric: encodeNumeric, + encodeNamed: encodeNamed, + getEncodeFunc: getEncodeFunc, + decode: decode + }; + + var mapCache = {}, dummyObj = {}; + var makeMap$2 = Tools.makeMap, each$3 = Tools.each, extend$1 = Tools.extend, explode$1 = Tools.explode, inArray = Tools.inArray; + var split = function (items, delim) { + items = Tools.trim(items); + return items ? items.split(delim || ' ') : []; + }; + var compileSchema = function (type) { + var schema = {}; + var globalAttributes, blockContent; + var phrasingContent, flowContent, html4BlockContent, html4PhrasingContent; + var add = function (name, attributes, children) { + var ni, attributesOrder, element; + var arrayToMap = function (array, obj) { + var map = {}; + var i, l; + for (i = 0, l = array.length; i < l; i++) { + map[array[i]] = obj || {}; + } + return map; + }; + children = children || []; + attributes = attributes || ''; + if (typeof children === 'string') { + children = split(children); + } + var names = split(name); + ni = names.length; + while (ni--) { + attributesOrder = split([ + globalAttributes, + attributes + ].join(' ')); + element = { + attributes: arrayToMap(attributesOrder), + attributesOrder: attributesOrder, + children: arrayToMap(children, dummyObj) + }; + schema[names[ni]] = element; + } + }; + var addAttrs = function (name, attributes) { + var ni, schemaItem, i, l; + var names = split(name); + ni = names.length; + var attrs = split(attributes); + while (ni--) { + schemaItem = schema[names[ni]]; + for (i = 0, l = attrs.length; i < l; i++) { + schemaItem.attributes[attrs[i]] = {}; + schemaItem.attributesOrder.push(attrs[i]); + } + } + }; + if (mapCache[type]) { + return mapCache[type]; + } + globalAttributes = 'id accesskey class dir lang style tabindex title role'; + blockContent = 'address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul'; + phrasingContent = 'a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd ' + 'label map noscript object q s samp script select small span strong sub sup ' + 'textarea u var #text #comment'; + if (type !== 'html4') { + globalAttributes += ' contenteditable contextmenu draggable dropzone ' + 'hidden spellcheck translate'; + blockContent += ' article aside details dialog figure main header footer hgroup section nav'; + phrasingContent += ' audio canvas command datalist mark meter output picture ' + 'progress time wbr video ruby bdi keygen'; + } + if (type !== 'html5-strict') { + globalAttributes += ' xml:lang'; + html4PhrasingContent = 'acronym applet basefont big font strike tt'; + phrasingContent = [ + phrasingContent, + html4PhrasingContent + ].join(' '); + each$3(split(html4PhrasingContent), function (name) { + add(name, '', phrasingContent); + }); + html4BlockContent = 'center dir isindex noframes'; + blockContent = [ + blockContent, + html4BlockContent + ].join(' '); + flowContent = [ + blockContent, + phrasingContent + ].join(' '); + each$3(split(html4BlockContent), function (name) { + add(name, '', flowContent); + }); + } + flowContent = flowContent || [ + blockContent, + phrasingContent + ].join(' '); + add('html', 'manifest', 'head body'); + add('head', '', 'base command link meta noscript script style title'); + add('title hr noscript br'); + add('base', 'href target'); + add('link', 'href rel media hreflang type sizes hreflang'); + add('meta', 'name http-equiv content charset'); + add('style', 'media type scoped'); + add('script', 'src async defer type charset'); + add('body', 'onafterprint onbeforeprint onbeforeunload onblur onerror onfocus ' + 'onhashchange onload onmessage onoffline ononline onpagehide onpageshow ' + 'onpopstate onresize onscroll onstorage onunload', flowContent); + add('address dt dd div caption', '', flowContent); + add('h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn', '', phrasingContent); + add('blockquote', 'cite', flowContent); + add('ol', 'reversed start type', 'li'); + add('ul', '', 'li'); + add('li', 'value', flowContent); + add('dl', '', 'dt dd'); + add('a', 'href target rel media hreflang type', phrasingContent); + add('q', 'cite', phrasingContent); + add('ins del', 'cite datetime', flowContent); + add('img', 'src sizes srcset alt usemap ismap width height'); + add('iframe', 'src name width height', flowContent); + add('embed', 'src type width height'); + add('object', 'data type typemustmatch name usemap form width height', [ + flowContent, + 'param' + ].join(' ')); + add('param', 'name value'); + add('map', 'name', [ + flowContent, + 'area' + ].join(' ')); + add('area', 'alt coords shape href target rel media hreflang type'); + add('table', 'border', 'caption colgroup thead tfoot tbody tr' + (type === 'html4' ? ' col' : '')); + add('colgroup', 'span', 'col'); + add('col', 'span'); + add('tbody thead tfoot', '', 'tr'); + add('tr', '', 'td th'); + add('td', 'colspan rowspan headers', flowContent); + add('th', 'colspan rowspan headers scope abbr', flowContent); + add('form', 'accept-charset action autocomplete enctype method name novalidate target', flowContent); + add('fieldset', 'disabled form name', [ + flowContent, + 'legend' + ].join(' ')); + add('label', 'form for', phrasingContent); + add('input', 'accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate ' + 'formtarget height list max maxlength min multiple name pattern readonly required size src step type value width'); + add('button', 'disabled form formaction formenctype formmethod formnovalidate formtarget name type value', type === 'html4' ? flowContent : phrasingContent); + add('select', 'disabled form multiple name required size', 'option optgroup'); + add('optgroup', 'disabled label', 'option'); + add('option', 'disabled label selected value'); + add('textarea', 'cols dirname disabled form maxlength name readonly required rows wrap'); + add('menu', 'type label', [ + flowContent, + 'li' + ].join(' ')); + add('noscript', '', flowContent); + if (type !== 'html4') { + add('wbr'); + add('ruby', '', [ + phrasingContent, + 'rt rp' + ].join(' ')); + add('figcaption', '', flowContent); + add('mark rt rp summary bdi', '', phrasingContent); + add('canvas', 'width height', flowContent); + add('video', 'src crossorigin poster preload autoplay mediagroup loop ' + 'muted controls width height buffered', [ + flowContent, + 'track source' + ].join(' ')); + add('audio', 'src crossorigin preload autoplay mediagroup loop muted controls ' + 'buffered volume', [ + flowContent, + 'track source' + ].join(' ')); + add('picture', '', 'img source'); + add('source', 'src srcset type media sizes'); + add('track', 'kind src srclang label default'); + add('datalist', '', [ + phrasingContent, + 'option' + ].join(' ')); + add('article section nav aside main header footer', '', flowContent); + add('hgroup', '', 'h1 h2 h3 h4 h5 h6'); + add('figure', '', [ + flowContent, + 'figcaption' + ].join(' ')); + add('time', 'datetime', phrasingContent); + add('dialog', 'open', flowContent); + add('command', 'type label icon disabled checked radiogroup command'); + add('output', 'for form name', phrasingContent); + add('progress', 'value max', phrasingContent); + add('meter', 'value min max low high optimum', phrasingContent); + add('details', 'open', [ + flowContent, + 'summary' + ].join(' ')); + add('keygen', 'autofocus challenge disabled form keytype name'); + } + if (type !== 'html5-strict') { + addAttrs('script', 'language xml:space'); + addAttrs('style', 'xml:space'); + addAttrs('object', 'declare classid code codebase codetype archive standby align border hspace vspace'); + addAttrs('embed', 'align name hspace vspace'); + addAttrs('param', 'valuetype type'); + addAttrs('a', 'charset name rev shape coords'); + addAttrs('br', 'clear'); + addAttrs('applet', 'codebase archive code object alt name width height align hspace vspace'); + addAttrs('img', 'name longdesc align border hspace vspace'); + addAttrs('iframe', 'longdesc frameborder marginwidth marginheight scrolling align'); + addAttrs('font basefont', 'size color face'); + addAttrs('input', 'usemap align'); + addAttrs('select'); + addAttrs('textarea'); + addAttrs('h1 h2 h3 h4 h5 h6 div p legend caption', 'align'); + addAttrs('ul', 'type compact'); + addAttrs('li', 'type'); + addAttrs('ol dl menu dir', 'compact'); + addAttrs('pre', 'width xml:space'); + addAttrs('hr', 'align noshade size width'); + addAttrs('isindex', 'prompt'); + addAttrs('table', 'summary width frame rules cellspacing cellpadding align bgcolor'); + addAttrs('col', 'width align char charoff valign'); + addAttrs('colgroup', 'width align char charoff valign'); + addAttrs('thead', 'align char charoff valign'); + addAttrs('tr', 'align char charoff valign bgcolor'); + addAttrs('th', 'axis align char charoff valign nowrap bgcolor width height'); + addAttrs('form', 'accept'); + addAttrs('td', 'abbr axis scope align char charoff valign nowrap bgcolor width height'); + addAttrs('tfoot', 'align char charoff valign'); + addAttrs('tbody', 'align char charoff valign'); + addAttrs('area', 'nohref'); + addAttrs('body', 'background bgcolor text link vlink alink'); + } + if (type !== 'html4') { + addAttrs('input button select textarea', 'autofocus'); + addAttrs('input textarea', 'placeholder'); + addAttrs('a', 'download'); + addAttrs('link script img', 'crossorigin'); + addAttrs('img', 'loading'); + addAttrs('iframe', 'sandbox seamless allowfullscreen loading'); + } + each$3(split('a form meter progress dfn'), function (name) { + if (schema[name]) { + delete schema[name].children[name]; + } + }); + delete schema.caption.children.table; + delete schema.script; + mapCache[type] = schema; + return schema; + }; + var compileElementMap = function (value, mode) { + var styles; + if (value) { + styles = {}; + if (typeof value === 'string') { + value = { '*': value }; + } + each$3(value, function (value, key) { + styles[key] = styles[key.toUpperCase()] = mode === 'map' ? makeMap$2(value, /[, ]/) : explode$1(value, /[, ]/); + }); + } + return styles; + }; + var Schema = function (settings) { + var elements = {}; + var children = {}; + var patternElements = []; + var customElementsMap = {}, specialElements = {}; + var createLookupTable = function (option, defaultValue, extendWith) { + var value = settings[option]; + if (!value) { + value = mapCache[option]; + if (!value) { + value = makeMap$2(defaultValue, ' ', makeMap$2(defaultValue.toUpperCase(), ' ')); + value = extend$1(value, extendWith); + mapCache[option] = value; + } + } else { + value = makeMap$2(value, /[, ]/, makeMap$2(value.toUpperCase(), /[, ]/)); + } + return value; + }; + settings = settings || {}; + var schemaItems = compileSchema(settings.schema); + if (settings.verify_html === false) { + settings.valid_elements = '*[*]'; + } + var validStyles = compileElementMap(settings.valid_styles); + var invalidStyles = compileElementMap(settings.invalid_styles, 'map'); + var validClasses = compileElementMap(settings.valid_classes, 'map'); + var whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code'); + var selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr'); + var shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track'); + var boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls'); + var nonEmptyOrMoveCaretBeforeOnEnter = 'td th iframe video audio object script code'; + var nonEmptyElementsMap = createLookupTable('non_empty_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' pre', shortEndedElementsMap); + var moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' table', shortEndedElementsMap); + var textBlockElementsMap = createLookupTable('text_block_elements', 'h1 h2 h3 h4 h5 h6 p div address pre form ' + 'blockquote center dir fieldset header footer article section hgroup aside main nav figure'); + var blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + 'th tr td li ol ul caption dl dt dd noscript menu isindex option ' + 'datalist select optgroup figcaption details summary', textBlockElementsMap); + var textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font strike u var cite ' + 'dfn code mark q sup sub samp'); + each$3((settings.special || 'script noscript iframe noframes noembed title style textarea xmp').split(' '), function (name) { + specialElements[name] = new RegExp(']*>', 'gi'); + }); + var patternToRegExp = function (str) { + return new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$'); + }; + var addValidElements = function (validElements) { + var ei, el, ai, al, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder, prefix, outputName, globalAttributes, globalAttributesOrder, value; + var elementRuleRegExp = /^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)])?$/, attrRuleRegExp = /^([!\-])?(\w+[\\:]:\w+|[^=:<]+)?(?:([=:<])(.*))?$/, hasPatternsRegExp = /[*?+]/; + if (validElements) { + var validElementsArr = split(validElements, ','); + if (elements['@']) { + globalAttributes = elements['@'].attributes; + globalAttributesOrder = elements['@'].attributesOrder; + } + for (ei = 0, el = validElementsArr.length; ei < el; ei++) { + matches = elementRuleRegExp.exec(validElementsArr[ei]); + if (matches) { + prefix = matches[1]; + elementName = matches[2]; + outputName = matches[3]; + attrData = matches[5]; + attributes = {}; + attributesOrder = []; + element = { + attributes: attributes, + attributesOrder: attributesOrder + }; + if (prefix === '#') { + element.paddEmpty = true; + } + if (prefix === '-') { + element.removeEmpty = true; + } + if (matches[4] === '!') { + element.removeEmptyAttrs = true; + } + if (globalAttributes) { + each$1(globalAttributes, function (value, key) { + attributes[key] = value; + }); + attributesOrder.push.apply(attributesOrder, globalAttributesOrder); + } + if (attrData) { + attrData = split(attrData, '|'); + for (ai = 0, al = attrData.length; ai < al; ai++) { + matches = attrRuleRegExp.exec(attrData[ai]); + if (matches) { + attr = {}; + attrType = matches[1]; + attrName = matches[2].replace(/[\\:]:/g, ':'); + prefix = matches[3]; + value = matches[4]; + if (attrType === '!') { + element.attributesRequired = element.attributesRequired || []; + element.attributesRequired.push(attrName); + attr.required = true; + } + if (attrType === '-') { + delete attributes[attrName]; + attributesOrder.splice(inArray(attributesOrder, attrName), 1); + continue; + } + if (prefix) { + if (prefix === '=') { + element.attributesDefault = element.attributesDefault || []; + element.attributesDefault.push({ + name: attrName, + value: value + }); + attr.defaultValue = value; + } + if (prefix === ':') { + element.attributesForced = element.attributesForced || []; + element.attributesForced.push({ + name: attrName, + value: value + }); + attr.forcedValue = value; + } + if (prefix === '<') { + attr.validValues = makeMap$2(value, '?'); + } + } + if (hasPatternsRegExp.test(attrName)) { + element.attributePatterns = element.attributePatterns || []; + attr.pattern = patternToRegExp(attrName); + element.attributePatterns.push(attr); + } else { + if (!attributes[attrName]) { + attributesOrder.push(attrName); + } + attributes[attrName] = attr; + } + } + } + } + if (!globalAttributes && elementName === '@') { + globalAttributes = attributes; + globalAttributesOrder = attributesOrder; + } + if (outputName) { + element.outputName = elementName; + elements[outputName] = element; + } + if (hasPatternsRegExp.test(elementName)) { + element.pattern = patternToRegExp(elementName); + patternElements.push(element); + } else { + elements[elementName] = element; + } + } + } + } + }; + var setValidElements = function (validElements) { + elements = {}; + patternElements = []; + addValidElements(validElements); + each$3(schemaItems, function (element, name) { + children[name] = element.children; + }); + }; + var addCustomElements = function (customElements) { + var customElementRegExp = /^(~)?(.+)$/; + if (customElements) { + mapCache.text_block_elements = mapCache.block_elements = null; + each$3(split(customElements, ','), function (rule) { + var matches = customElementRegExp.exec(rule), inline = matches[1] === '~', cloneName = inline ? 'span' : 'div', name = matches[2]; + children[name] = children[cloneName]; + customElementsMap[name] = cloneName; + if (!inline) { + blockElementsMap[name.toUpperCase()] = {}; + blockElementsMap[name] = {}; + } + if (!elements[name]) { + var customRule = elements[cloneName]; + customRule = extend$1({}, customRule); + delete customRule.removeEmptyAttrs; + delete customRule.removeEmpty; + elements[name] = customRule; + } + each$3(children, function (element, elmName) { + if (element[cloneName]) { + children[elmName] = element = extend$1({}, children[elmName]); + element[name] = element[cloneName]; + } + }); + }); + } + }; + var addValidChildren = function (validChildren) { + var childRuleRegExp = /^([+\-]?)([A-Za-z0-9_\-.\u00b7\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u037d\u037f-\u1fff\u200c-\u200d\u203f-\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]+)\[([^\]]+)]$/; + mapCache[settings.schema] = null; + if (validChildren) { + each$3(split(validChildren, ','), function (rule) { + var matches = childRuleRegExp.exec(rule); + var parent, prefix; + if (matches) { + prefix = matches[1]; + if (prefix) { + parent = children[matches[2]]; + } else { + parent = children[matches[2]] = { '#comment': {} }; + } + parent = children[matches[2]]; + each$3(split(matches[3], '|'), function (child) { + if (prefix === '-') { + delete parent[child]; + } else { + parent[child] = {}; + } + }); + } + }); + } + }; + var getElementRule = function (name) { + var element = elements[name], i; + if (element) { + return element; + } + i = patternElements.length; + while (i--) { + element = patternElements[i]; + if (element.pattern.test(name)) { + return element; + } + } + }; + if (!settings.valid_elements) { + each$3(schemaItems, function (element, name) { + elements[name] = { + attributes: element.attributes, + attributesOrder: element.attributesOrder + }; + children[name] = element.children; + }); + if (settings.schema !== 'html5') { + each$3(split('strong/b em/i'), function (item) { + var items = split(item, '/'); + elements[items[1]].outputName = items[0]; + }); + } + each$3(split('ol ul sub sup blockquote span font a table tbody strong em b i'), function (name) { + if (elements[name]) { + elements[name].removeEmpty = true; + } + }); + each$3(split('p h1 h2 h3 h4 h5 h6 th td pre div address caption li'), function (name) { + elements[name].paddEmpty = true; + }); + each$3(split('span'), function (name) { + elements[name].removeEmptyAttrs = true; + }); + } else { + setValidElements(settings.valid_elements); + } + addCustomElements(settings.custom_elements); + addValidChildren(settings.valid_children); + addValidElements(settings.extended_valid_elements); + addValidChildren('+ol[ul|ol],+ul[ul|ol]'); + each$3({ + dd: 'dl', + dt: 'dl', + li: 'ul ol', + td: 'tr', + th: 'tr', + tr: 'tbody thead tfoot', + tbody: 'table', + thead: 'table', + tfoot: 'table', + legend: 'fieldset', + area: 'map', + param: 'video audio object' + }, function (parents, item) { + if (elements[item]) { + elements[item].parentsRequired = split(parents); + } + }); + if (settings.invalid_elements) { + each$3(explode$1(settings.invalid_elements), function (item) { + if (elements[item]) { + delete elements[item]; + } + }); + } + if (!getElementRule('span')) { + addValidElements('span[!data-mce-type|*]'); + } + var getValidStyles = function () { + return validStyles; + }; + var getInvalidStyles = function () { + return invalidStyles; + }; + var getValidClasses = function () { + return validClasses; + }; + var getBoolAttrs = function () { + return boolAttrMap; + }; + var getBlockElements = function () { + return blockElementsMap; + }; + var getTextBlockElements = function () { + return textBlockElementsMap; + }; + var getTextInlineElements = function () { + return textInlineElementsMap; + }; + var getShortEndedElements = function () { + return shortEndedElementsMap; + }; + var getSelfClosingElements = function () { + return selfClosingElementsMap; + }; + var getNonEmptyElements = function () { + return nonEmptyElementsMap; + }; + var getMoveCaretBeforeOnEnterElements = function () { + return moveCaretBeforeOnEnterElementsMap; + }; + var getWhiteSpaceElements = function () { + return whiteSpaceElementsMap; + }; + var getSpecialElements = function () { + return specialElements; + }; + var isValidChild = function (name, child) { + var parent = children[name.toLowerCase()]; + return !!(parent && parent[child.toLowerCase()]); + }; + var isValid = function (name, attr) { + var attrPatterns, i; + var rule = getElementRule(name); + if (rule) { + if (attr) { + if (rule.attributes[attr]) { + return true; + } + attrPatterns = rule.attributePatterns; + if (attrPatterns) { + i = attrPatterns.length; + while (i--) { + if (attrPatterns[i].pattern.test(name)) { + return true; + } + } + } + } else { + return true; + } + } + return false; + }; + var getCustomElements = function () { + return customElementsMap; + }; + return { + children: children, + elements: elements, + getValidStyles: getValidStyles, + getValidClasses: getValidClasses, + getBlockElements: getBlockElements, + getInvalidStyles: getInvalidStyles, + getShortEndedElements: getShortEndedElements, + getTextBlockElements: getTextBlockElements, + getTextInlineElements: getTextInlineElements, + getBoolAttrs: getBoolAttrs, + getElementRule: getElementRule, + getSelfClosingElements: getSelfClosingElements, + getNonEmptyElements: getNonEmptyElements, + getMoveCaretBeforeOnEnterElements: getMoveCaretBeforeOnEnterElements, + getWhiteSpaceElements: getWhiteSpaceElements, + getSpecialElements: getSpecialElements, + isValidChild: isValidChild, + isValid: isValid, + getCustomElements: getCustomElements, + addValidElements: addValidElements, + setValidElements: setValidElements, + addCustomElements: addCustomElements, + addValidChildren: addValidChildren + }; + }; + + var toHex = function (match, r, g, b) { + var hex = function (val) { + val = parseInt(val, 10).toString(16); + return val.length > 1 ? val : '0' + val; + }; + return '#' + hex(r) + hex(g) + hex(b); + }; + var Styles = function (settings, schema) { + var _this = this; + var rgbRegExp = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi; + var urlOrStrRegExp = /(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi; + var styleRegExp = /\s*([^:]+):\s*([^;]+);?/g; + var trimRightRegExp = /\s+$/; + var i; + var encodingLookup = {}; + var validStyles; + var invalidStyles; + var invisibleChar = zeroWidth; + settings = settings || {}; + if (schema) { + validStyles = schema.getValidStyles(); + invalidStyles = schema.getInvalidStyles(); + } + var encodingItems = ('\\" \\\' \\; \\: ; : ' + invisibleChar).split(' '); + for (i = 0; i < encodingItems.length; i++) { + encodingLookup[encodingItems[i]] = invisibleChar + i; + encodingLookup[invisibleChar + i] = encodingItems[i]; + } + return { + toHex: function (color) { + return color.replace(rgbRegExp, toHex); + }, + parse: function (css) { + var styles = {}; + var matches, name, value, isEncoded; + var urlConverter = settings.url_converter; + var urlConverterScope = settings.url_converter_scope || _this; + var compress = function (prefix, suffix, noJoin) { + var top = styles[prefix + '-top' + suffix]; + if (!top) { + return; + } + var right = styles[prefix + '-right' + suffix]; + if (!right) { + return; + } + var bottom = styles[prefix + '-bottom' + suffix]; + if (!bottom) { + return; + } + var left = styles[prefix + '-left' + suffix]; + if (!left) { + return; + } + var box = [ + top, + right, + bottom, + left + ]; + i = box.length - 1; + while (i--) { + if (box[i] !== box[i + 1]) { + break; + } + } + if (i > -1 && noJoin) { + return; + } + styles[prefix + suffix] = i === -1 ? box[0] : box.join(' '); + delete styles[prefix + '-top' + suffix]; + delete styles[prefix + '-right' + suffix]; + delete styles[prefix + '-bottom' + suffix]; + delete styles[prefix + '-left' + suffix]; + }; + var canCompress = function (key) { + var value = styles[key], i; + if (!value) { + return; + } + value = value.split(' '); + i = value.length; + while (i--) { + if (value[i] !== value[0]) { + return false; + } + } + styles[key] = value[0]; + return true; + }; + var compress2 = function (target, a, b, c) { + if (!canCompress(a)) { + return; + } + if (!canCompress(b)) { + return; + } + if (!canCompress(c)) { + return; + } + styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c]; + delete styles[a]; + delete styles[b]; + delete styles[c]; + }; + var encode = function (str) { + isEncoded = true; + return encodingLookup[str]; + }; + var decode = function (str, keepSlashes) { + if (isEncoded) { + str = str.replace(/\uFEFF[0-9]/g, function (str) { + return encodingLookup[str]; + }); + } + if (!keepSlashes) { + str = str.replace(/\\([\'\";:])/g, '$1'); + } + return str; + }; + var decodeSingleHexSequence = function (escSeq) { + return String.fromCharCode(parseInt(escSeq.slice(1), 16)); + }; + var decodeHexSequences = function (value) { + return value.replace(/\\[0-9a-f]+/gi, decodeSingleHexSequence); + }; + var processUrl = function (match, url, url2, url3, str, str2) { + str = str || str2; + if (str) { + str = decode(str); + return '\'' + str.replace(/\'/g, '\\\'') + '\''; + } + url = decode(url || url2 || url3); + if (!settings.allow_script_urls) { + var scriptUrl = url.replace(/[\s\r\n]+/g, ''); + if (/(java|vb)script:/i.test(scriptUrl)) { + return ''; + } + if (!settings.allow_svg_data_urls && /^data:image\/svg/i.test(scriptUrl)) { + return ''; + } + } + if (urlConverter) { + url = urlConverter.call(urlConverterScope, url, 'style'); + } + return 'url(\'' + url.replace(/\'/g, '\\\'') + '\')'; + }; + if (css) { + css = css.replace(/[\u0000-\u001F]/g, ''); + css = css.replace(/\\[\"\';:\uFEFF]/g, encode).replace(/\"[^\"]+\"|\'[^\']+\'/g, function (str) { + return str.replace(/[;:]/g, encode); + }); + while (matches = styleRegExp.exec(css)) { + styleRegExp.lastIndex = matches.index + matches[0].length; + name = matches[1].replace(trimRightRegExp, '').toLowerCase(); + value = matches[2].replace(trimRightRegExp, ''); + if (name && value) { + name = decodeHexSequences(name); + value = decodeHexSequences(value); + if (name.indexOf(invisibleChar) !== -1 || name.indexOf('"') !== -1) { + continue; + } + if (!settings.allow_script_urls && (name === 'behavior' || /expression\s*\(|\/\*|\*\//.test(value))) { + continue; + } + if (name === 'font-weight' && value === '700') { + value = 'bold'; + } else if (name === 'color' || name === 'background-color') { + value = value.toLowerCase(); + } + value = value.replace(rgbRegExp, toHex); + value = value.replace(urlOrStrRegExp, processUrl); + styles[name] = isEncoded ? decode(value, true) : value; + } + } + compress('border', '', true); + compress('border', '-width'); + compress('border', '-color'); + compress('border', '-style'); + compress('padding', ''); + compress('margin', ''); + compress2('border', 'border-width', 'border-style', 'border-color'); + if (styles.border === 'medium none') { + delete styles.border; + } + if (styles['border-image'] === 'none') { + delete styles['border-image']; + } + } + return styles; + }, + serialize: function (styles, elementName) { + var css = ''; + var serializeStyles = function (name) { + var value; + var styleList = validStyles[name]; + if (styleList) { + for (var i_1 = 0, l = styleList.length; i_1 < l; i_1++) { + name = styleList[i_1]; + value = styles[name]; + if (value) { + css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';'; + } + } + } + }; + var isValid = function (name, elementName) { + var styleMap = invalidStyles['*']; + if (styleMap && styleMap[name]) { + return false; + } + styleMap = invalidStyles[elementName]; + return !(styleMap && styleMap[name]); + }; + if (elementName && validStyles) { + serializeStyles('*'); + serializeStyles(elementName); + } else { + each$1(styles, function (value, name) { + if (value && (!invalidStyles || isValid(name, elementName))) { + css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';'; + } + }); + } + return css; + } + }; + }; + + var eventExpandoPrefix = 'mce-data-'; + var mouseEventRe = /^(?:mouse|contextmenu)|click/; + var deprecated = { + keyLocation: 1, + layerX: 1, + layerY: 1, + returnValue: 1, + webkitMovementX: 1, + webkitMovementY: 1, + keyIdentifier: 1, + mozPressure: 1 + }; + var hasIsDefaultPrevented = function (event) { + return event.isDefaultPrevented === returnTrue || event.isDefaultPrevented === returnFalse; + }; + var returnFalse = never; + var returnTrue = always; + var addEvent = function (target, name, callback, capture) { + if (target.addEventListener) { + target.addEventListener(name, callback, capture || false); + } else if (target.attachEvent) { + target.attachEvent('on' + name, callback); + } + }; + var removeEvent = function (target, name, callback, capture) { + if (target.removeEventListener) { + target.removeEventListener(name, callback, capture || false); + } else if (target.detachEvent) { + target.detachEvent('on' + name, callback); + } + }; + var isMouseEvent = function (event) { + return mouseEventRe.test(event.type); + }; + var fix = function (originalEvent, data) { + var name; + var event = data || {}; + for (name in originalEvent) { + if (!deprecated[name]) { + event[name] = originalEvent[name]; + } + } + if (!event.target) { + event.target = event.srcElement || document; + } + if (event.composedPath) { + event.composedPath = function () { + return originalEvent.composedPath(); + }; + } + if (originalEvent && isMouseEvent(originalEvent) && originalEvent.pageX === undefined && originalEvent.clientX !== undefined) { + var eventDoc = event.target.ownerDocument || document; + var doc = eventDoc.documentElement; + var body = eventDoc.body; + event.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); + event.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); + } + event.preventDefault = function () { + event.defaultPrevented = true; + event.isDefaultPrevented = returnTrue; + if (originalEvent) { + if (originalEvent.preventDefault) { + originalEvent.preventDefault(); + } else { + originalEvent.returnValue = false; + } + } + }; + event.stopPropagation = function () { + event.cancelBubble = true; + event.isPropagationStopped = returnTrue; + if (originalEvent) { + if (originalEvent.stopPropagation) { + originalEvent.stopPropagation(); + } else { + originalEvent.cancelBubble = true; + } + } + }; + event.stopImmediatePropagation = function () { + event.isImmediatePropagationStopped = returnTrue; + event.stopPropagation(); + }; + if (hasIsDefaultPrevented(event) === false) { + event.isDefaultPrevented = event.defaultPrevented === true ? returnTrue : returnFalse; + event.isPropagationStopped = event.cancelBubble === true ? returnTrue : returnFalse; + event.isImmediatePropagationStopped = returnFalse; + } + if (typeof event.metaKey === 'undefined') { + event.metaKey = false; + } + return event; + }; + var bindOnReady = function (win, callback, eventUtils) { + var doc = win.document, event = { type: 'ready' }; + if (eventUtils.domLoaded) { + callback(event); + return; + } + var isDocReady = function () { + return doc.readyState === 'complete' || doc.readyState === 'interactive' && doc.body; + }; + var readyHandler = function () { + removeEvent(win, 'DOMContentLoaded', readyHandler); + removeEvent(win, 'load', readyHandler); + if (!eventUtils.domLoaded) { + eventUtils.domLoaded = true; + callback(event); + } + win = null; + }; + if (isDocReady()) { + readyHandler(); + } else { + addEvent(win, 'DOMContentLoaded', readyHandler); + } + if (!eventUtils.domLoaded) { + addEvent(win, 'load', readyHandler); + } + }; + var EventUtils = function () { + function EventUtils() { + this.domLoaded = false; + this.events = {}; + this.count = 1; + this.expando = eventExpandoPrefix + (+new Date()).toString(32); + this.hasMouseEnterLeave = 'onmouseenter' in document.documentElement; + this.hasFocusIn = 'onfocusin' in document.documentElement; + this.count = 1; + } + EventUtils.prototype.bind = function (target, names, callback, scope) { + var self = this; + var id, callbackList, i, name, fakeName, nativeHandler, capture; + var win = window; + var defaultNativeHandler = function (evt) { + self.executeHandlers(fix(evt || win.event), id); + }; + if (!target || target.nodeType === 3 || target.nodeType === 8) { + return; + } + if (!target[self.expando]) { + id = self.count++; + target[self.expando] = id; + self.events[id] = {}; + } else { + id = target[self.expando]; + } + scope = scope || target; + var namesList = names.split(' '); + i = namesList.length; + while (i--) { + name = namesList[i]; + nativeHandler = defaultNativeHandler; + fakeName = capture = false; + if (name === 'DOMContentLoaded') { + name = 'ready'; + } + if (self.domLoaded && name === 'ready' && target.readyState === 'complete') { + callback.call(scope, fix({ type: name })); + continue; + } + if (!self.hasMouseEnterLeave) { + fakeName = self.mouseEnterLeave[name]; + if (fakeName) { + nativeHandler = function (evt) { + var current = evt.currentTarget; + var related = evt.relatedTarget; + if (related && current.contains) { + related = current.contains(related); + } else { + while (related && related !== current) { + related = related.parentNode; + } + } + if (!related) { + evt = fix(evt || win.event); + evt.type = evt.type === 'mouseout' ? 'mouseleave' : 'mouseenter'; + evt.target = current; + self.executeHandlers(evt, id); + } + }; + } + } + if (!self.hasFocusIn && (name === 'focusin' || name === 'focusout')) { + capture = true; + fakeName = name === 'focusin' ? 'focus' : 'blur'; + nativeHandler = function (evt) { + evt = fix(evt || win.event); + evt.type = evt.type === 'focus' ? 'focusin' : 'focusout'; + self.executeHandlers(evt, id); + }; + } + callbackList = self.events[id][name]; + if (!callbackList) { + self.events[id][name] = callbackList = [{ + func: callback, + scope: scope + }]; + callbackList.fakeName = fakeName; + callbackList.capture = capture; + callbackList.nativeHandler = nativeHandler; + if (name === 'ready') { + bindOnReady(target, nativeHandler, self); + } else { + addEvent(target, fakeName || name, nativeHandler, capture); + } + } else { + if (name === 'ready' && self.domLoaded) { + callback(fix({ type: name })); + } else { + callbackList.push({ + func: callback, + scope: scope + }); + } + } + } + target = callbackList = null; + return callback; + }; + EventUtils.prototype.unbind = function (target, names, callback) { + var callbackList, i, ci, name, eventMap; + if (!target || target.nodeType === 3 || target.nodeType === 8) { + return this; + } + var id = target[this.expando]; + if (id) { + eventMap = this.events[id]; + if (names) { + var namesList = names.split(' '); + i = namesList.length; + while (i--) { + name = namesList[i]; + callbackList = eventMap[name]; + if (callbackList) { + if (callback) { + ci = callbackList.length; + while (ci--) { + if (callbackList[ci].func === callback) { + var nativeHandler = callbackList.nativeHandler; + var fakeName = callbackList.fakeName, capture = callbackList.capture; + callbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1)); + callbackList.nativeHandler = nativeHandler; + callbackList.fakeName = fakeName; + callbackList.capture = capture; + eventMap[name] = callbackList; + } + } + } + if (!callback || callbackList.length === 0) { + delete eventMap[name]; + removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture); + } + } + } + } else { + each$1(eventMap, function (callbackList, name) { + removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture); + }); + eventMap = {}; + } + for (name in eventMap) { + if (has(eventMap, name)) { + return this; + } + } + delete this.events[id]; + try { + delete target[this.expando]; + } catch (ex) { + target[this.expando] = null; + } + } + return this; + }; + EventUtils.prototype.fire = function (target, name, args) { + var id; + if (!target || target.nodeType === 3 || target.nodeType === 8) { + return this; + } + var event = fix(null, args); + event.type = name; + event.target = target; + do { + id = target[this.expando]; + if (id) { + this.executeHandlers(event, id); + } + target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow; + } while (target && !event.isPropagationStopped()); + return this; + }; + EventUtils.prototype.clean = function (target) { + var i, children; + if (!target || target.nodeType === 3 || target.nodeType === 8) { + return this; + } + if (target[this.expando]) { + this.unbind(target); + } + if (!target.getElementsByTagName) { + target = target.document; + } + if (target && target.getElementsByTagName) { + this.unbind(target); + children = target.getElementsByTagName('*'); + i = children.length; + while (i--) { + target = children[i]; + if (target[this.expando]) { + this.unbind(target); + } + } + } + return this; + }; + EventUtils.prototype.destroy = function () { + this.events = {}; + }; + EventUtils.prototype.cancel = function (e) { + if (e) { + e.preventDefault(); + e.stopImmediatePropagation(); + } + return false; + }; + EventUtils.prototype.executeHandlers = function (evt, id) { + var container = this.events[id]; + var callbackList = container && container[evt.type]; + if (callbackList) { + for (var i = 0, l = callbackList.length; i < l; i++) { + var callback = callbackList[i]; + if (callback && callback.func.call(callback.scope, evt) === false) { + evt.preventDefault(); + } + if (evt.isImmediatePropagationStopped()) { + return; + } + } + } + }; + EventUtils.Event = new EventUtils(); + return EventUtils; + }(); + + var support, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, setDocument, document$1, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains$3, expando = 'sizzle' + -new Date(), preferredDoc = window.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), sortOrder = function (a, b) { + if (a === b) { + hasDuplicate = true; + } + return 0; + }, strundefined = typeof undefined, MAX_NEGATIVE = 1 << 31, hasOwn = {}.hasOwnProperty, arr = [], pop = arr.pop, push_native = arr.push, push = arr.push, slice = arr.slice, indexOf$2 = arr.indexOf || function (elem) { + var i = 0, len = this.length; + for (; i < len; i++) { + if (this[i] === elem) { + return i; + } + } + return -1; + }, booleans = 'checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped', whitespace = '[\\x20\\t\\r\\n\\f]', identifier = '(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+', attributes = '\\[' + whitespace + '*(' + identifier + ')(?:' + whitespace + '*([*^$|!~]?=)' + whitespace + '*(?:\'((?:\\\\.|[^\\\\\'])*)\'|"((?:\\\\.|[^\\\\"])*)"|(' + identifier + '))|)' + whitespace + '*\\]', pseudos = ':(' + identifier + ')(?:\\((' + '(\'((?:\\\\.|[^\\\\\'])*)\'|"((?:\\\\.|[^\\\\"])*)")|' + '((?:\\\\.|[^\\\\()[\\]]|' + attributes + ')*)|' + '.*' + ')\\)|)', rtrim = new RegExp('^' + whitespace + '+|((?:^|[^\\\\])(?:\\\\.)*)' + whitespace + '+$', 'g'), rcomma = new RegExp('^' + whitespace + '*,' + whitespace + '*'), rcombinators = new RegExp('^' + whitespace + '*([>+~]|' + whitespace + ')' + whitespace + '*'), rattributeQuotes = new RegExp('=' + whitespace + '*([^\\]\'"]*?)' + whitespace + '*\\]', 'g'), rpseudo = new RegExp(pseudos), ridentifier = new RegExp('^' + identifier + '$'), matchExpr = { + ID: new RegExp('^#(' + identifier + ')'), + CLASS: new RegExp('^\\.(' + identifier + ')'), + TAG: new RegExp('^(' + identifier + '|[*])'), + ATTR: new RegExp('^' + attributes), + PSEUDO: new RegExp('^' + pseudos), + CHILD: new RegExp('^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(' + whitespace + '*(even|odd|(([+-]|)(\\d*)n|)' + whitespace + '*(?:([+-]|)' + whitespace + '*(\\d+)|))' + whitespace + '*\\)|)', 'i'), + bool: new RegExp('^(?:' + booleans + ')$', 'i'), + needsContext: new RegExp('^' + whitespace + '*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(' + whitespace + '*((?:-\\d)?\\d*)' + whitespace + '*\\)|)(?=[^-]|$)', 'i') + }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, rnative = /^[^{]+\{\s*\[native \w/, rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rsibling = /[+~]/, rescape = /'|\\/g, runescape = new RegExp('\\\\([\\da-f]{1,6}' + whitespace + '?|(' + whitespace + ')|.)', 'ig'), funescape = function (_, escaped, escapedWhitespace) { + var high = '0x' + escaped - 65536; + return high !== high || escapedWhitespace ? escaped : high < 0 ? String.fromCharCode(high + 65536) : String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320); + }; + try { + push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes); + arr[preferredDoc.childNodes.length].nodeType; + } catch (e) { + push = { + apply: arr.length ? function (target, els) { + push_native.apply(target, slice.call(els)); + } : function (target, els) { + var j = target.length, i = 0; + while (target[j++] = els[i++]) { + } + target.length = j - 1; + } + }; + } + var Sizzle = function (selector, context, results, seed) { + var match, elem, m, nodeType, i, groups, old, nid, newContext, newSelector; + if ((context ? context.ownerDocument || context : preferredDoc) !== document$1) { + setDocument(context); + } + context = context || document$1; + results = results || []; + if (!selector || typeof selector !== 'string') { + return results; + } + if ((nodeType = context.nodeType) !== 1 && nodeType !== 9) { + return []; + } + if (documentIsHTML && !seed) { + if (match = rquickExpr.exec(selector)) { + if (m = match[1]) { + if (nodeType === 9) { + elem = context.getElementById(m); + if (elem && elem.parentNode) { + if (elem.id === m) { + results.push(elem); + return results; + } + } else { + return results; + } + } else { + if (context.ownerDocument && (elem = context.ownerDocument.getElementById(m)) && contains$3(context, elem) && elem.id === m) { + results.push(elem); + return results; + } + } + } else if (match[2]) { + push.apply(results, context.getElementsByTagName(selector)); + return results; + } else if ((m = match[3]) && support.getElementsByClassName) { + push.apply(results, context.getElementsByClassName(m)); + return results; + } + } + if (support.qsa && (!rbuggyQSA || !rbuggyQSA.test(selector))) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + if (nodeType === 1 && context.nodeName.toLowerCase() !== 'object') { + groups = tokenize(selector); + if (old = context.getAttribute('id')) { + nid = old.replace(rescape, '\\$&'); + } else { + context.setAttribute('id', nid); + } + nid = '[id=\'' + nid + '\'] '; + i = groups.length; + while (i--) { + groups[i] = nid + toSelector(groups[i]); + } + newContext = rsibling.test(selector) && testContext(context.parentNode) || context; + newSelector = groups.join(','); + } + if (newSelector) { + try { + push.apply(results, newContext.querySelectorAll(newSelector)); + return results; + } catch (qsaError) { + } finally { + if (!old) { + context.removeAttribute('id'); + } + } + } + } + } + return select(selector.replace(rtrim, '$1'), context, results, seed); + }; + function createCache() { + var keys = []; + function cache(key, value) { + if (keys.push(key + ' ') > Expr.cacheLength) { + delete cache[keys.shift()]; + } + return cache[key + ' '] = value; + } + return cache; + } + function markFunction(fn) { + fn[expando] = true; + return fn; + } + function siblingCheck(a, b) { + var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && (~b.sourceIndex || MAX_NEGATIVE) - (~a.sourceIndex || MAX_NEGATIVE); + if (diff) { + return diff; + } + if (cur) { + while (cur = cur.nextSibling) { + if (cur === b) { + return -1; + } + } + } + return a ? 1 : -1; + } + function createInputPseudo(type) { + return function (elem) { + var name = elem.nodeName.toLowerCase(); + return name === 'input' && elem.type === type; + }; + } + function createButtonPseudo(type) { + return function (elem) { + var name = elem.nodeName.toLowerCase(); + return (name === 'input' || name === 'button') && elem.type === type; + }; + } + function createPositionalPseudo(fn) { + return markFunction(function (argument) { + argument = +argument; + return markFunction(function (seed, matches) { + var j, matchIndexes = fn([], seed.length, argument), i = matchIndexes.length; + while (i--) { + if (seed[j = matchIndexes[i]]) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); + } + function testContext(context) { + return context && typeof context.getElementsByTagName !== strundefined && context; + } + support = Sizzle.support = {}; + isXML = Sizzle.isXML = function (elem) { + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== 'HTML' : false; + }; + setDocument = Sizzle.setDocument = function (node) { + var hasCompare, doc = node ? node.ownerDocument || node : preferredDoc, parent = doc.defaultView; + function getTop(win) { + try { + return win.top; + } catch (ex) { + } + return null; + } + if (doc === document$1 || doc.nodeType !== 9 || !doc.documentElement) { + return document$1; + } + document$1 = doc; + docElem = doc.documentElement; + documentIsHTML = !isXML(doc); + if (parent && parent !== getTop(parent)) { + if (parent.addEventListener) { + parent.addEventListener('unload', function () { + setDocument(); + }, false); + } else if (parent.attachEvent) { + parent.attachEvent('onunload', function () { + setDocument(); + }); + } + } + support.attributes = true; + support.getElementsByTagName = true; + support.getElementsByClassName = rnative.test(doc.getElementsByClassName); + support.getById = true; + Expr.find.ID = function (id, context) { + if (typeof context.getElementById !== strundefined && documentIsHTML) { + var m = context.getElementById(id); + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter.ID = function (id) { + var attrId = id.replace(runescape, funescape); + return function (elem) { + return elem.getAttribute('id') === attrId; + }; + }; + Expr.find.TAG = support.getElementsByTagName ? function (tag, context) { + if (typeof context.getElementsByTagName !== strundefined) { + return context.getElementsByTagName(tag); + } + } : function (tag, context) { + var elem, tmp = [], i = 0, results = context.getElementsByTagName(tag); + if (tag === '*') { + while (elem = results[i++]) { + if (elem.nodeType === 1) { + tmp.push(elem); + } + } + return tmp; + } + return results; + }; + Expr.find.CLASS = support.getElementsByClassName && function (className, context) { + if (documentIsHTML) { + return context.getElementsByClassName(className); + } + }; + rbuggyMatches = []; + rbuggyQSA = []; + support.disconnectedMatch = true; + rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join('|')); + rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join('|')); + hasCompare = rnative.test(docElem.compareDocumentPosition); + contains$3 = hasCompare || rnative.test(docElem.contains) ? function (a, b) { + var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode; + return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16)); + } : function (a, b) { + if (b) { + while (b = b.parentNode) { + if (b === a) { + return true; + } + } + } + return false; + }; + sortOrder = hasCompare ? function (a, b) { + if (a === b) { + hasDuplicate = true; + return 0; + } + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if (compare) { + return compare; + } + compare = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1; + if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) { + if (a === doc || a.ownerDocument === preferredDoc && contains$3(preferredDoc, a)) { + return -1; + } + if (b === doc || b.ownerDocument === preferredDoc && contains$3(preferredDoc, b)) { + return 1; + } + return sortInput ? indexOf$2.call(sortInput, a) - indexOf$2.call(sortInput, b) : 0; + } + return compare & 4 ? -1 : 1; + } : function (a, b) { + if (a === b) { + hasDuplicate = true; + return 0; + } + var cur, i = 0, aup = a.parentNode, bup = b.parentNode, ap = [a], bp = [b]; + if (!aup || !bup) { + return a === doc ? -1 : b === doc ? 1 : aup ? -1 : bup ? 1 : sortInput ? indexOf$2.call(sortInput, a) - indexOf$2.call(sortInput, b) : 0; + } else if (aup === bup) { + return siblingCheck(a, b); + } + cur = a; + while (cur = cur.parentNode) { + ap.unshift(cur); + } + cur = b; + while (cur = cur.parentNode) { + bp.unshift(cur); + } + while (ap[i] === bp[i]) { + i++; + } + return i ? siblingCheck(ap[i], bp[i]) : ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0; + }; + return doc; + }; + Sizzle.matches = function (expr, elements) { + return Sizzle(expr, null, null, elements); + }; + Sizzle.matchesSelector = function (elem, expr) { + if ((elem.ownerDocument || elem) !== document$1) { + setDocument(elem); + } + expr = expr.replace(rattributeQuotes, '=\'$1\']'); + if (support.matchesSelector && documentIsHTML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) { + try { + var ret = matches.call(elem, expr); + if (ret || support.disconnectedMatch || elem.document && elem.document.nodeType !== 11) { + return ret; + } + } catch (e) { + } + } + return Sizzle(expr, document$1, null, [elem]).length > 0; + }; + Sizzle.contains = function (context, elem) { + if ((context.ownerDocument || context) !== document$1) { + setDocument(context); + } + return contains$3(context, elem); + }; + Sizzle.attr = function (elem, name) { + if ((elem.ownerDocument || elem) !== document$1) { + setDocument(elem); + } + var fn = Expr.attrHandle[name.toLowerCase()], val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined; + return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null; + }; + Sizzle.error = function (msg) { + throw new Error('Syntax error, unrecognized expression: ' + msg); + }; + Sizzle.uniqueSort = function (results) { + var elem, duplicates = [], j = 0, i = 0; + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice(0); + results.sort(sortOrder); + if (hasDuplicate) { + while (elem = results[i++]) { + if (elem === results[i]) { + j = duplicates.push(i); + } + } + while (j--) { + results.splice(duplicates[j], 1); + } + } + sortInput = null; + return results; + }; + getText = Sizzle.getText = function (elem) { + var node, ret = '', i = 0, nodeType = elem.nodeType; + if (!nodeType) { + while (node = elem[i++]) { + ret += getText(node); + } + } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) { + if (typeof elem.textContent === 'string') { + return elem.textContent; + } else { + for (elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText(elem); + } + } + } else if (nodeType === 3 || nodeType === 4) { + return elem.nodeValue; + } + return ret; + }; + Expr = Sizzle.selectors = { + cacheLength: 50, + createPseudo: markFunction, + match: matchExpr, + attrHandle: {}, + find: {}, + relative: { + '>': { + dir: 'parentNode', + first: true + }, + ' ': { dir: 'parentNode' }, + '+': { + dir: 'previousSibling', + first: true + }, + '~': { dir: 'previousSibling' } + }, + preFilter: { + ATTR: function (match) { + match[1] = match[1].replace(runescape, funescape); + match[3] = (match[3] || match[4] || match[5] || '').replace(runescape, funescape); + if (match[2] === '~=') { + match[3] = ' ' + match[3] + ' '; + } + return match.slice(0, 4); + }, + CHILD: function (match) { + match[1] = match[1].toLowerCase(); + if (match[1].slice(0, 3) === 'nth') { + if (!match[3]) { + Sizzle.error(match[0]); + } + match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === 'even' || match[3] === 'odd')); + match[5] = +(match[7] + match[8] || match[3] === 'odd'); + } else if (match[3]) { + Sizzle.error(match[0]); + } + return match; + }, + PSEUDO: function (match) { + var excess, unquoted = !match[6] && match[2]; + if (matchExpr.CHILD.test(match[0])) { + return null; + } + if (match[3]) { + match[2] = match[4] || match[5] || ''; + } else if (unquoted && rpseudo.test(unquoted) && (excess = tokenize(unquoted, true)) && (excess = unquoted.indexOf(')', unquoted.length - excess) - unquoted.length)) { + match[0] = match[0].slice(0, excess); + match[2] = unquoted.slice(0, excess); + } + return match.slice(0, 3); + } + }, + filter: { + TAG: function (nodeNameSelector) { + var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase(); + return nodeNameSelector === '*' ? function () { + return true; + } : function (elem) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + CLASS: function (className) { + var pattern = classCache[className + ' ']; + return pattern || (pattern = new RegExp('(^|' + whitespace + ')' + className + '(' + whitespace + '|$)')) && classCache(className, function (elem) { + return pattern.test(typeof elem.className === 'string' && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute('class') || ''); + }); + }, + ATTR: function (name, operator, check) { + return function (elem) { + var result = Sizzle.attr(elem, name); + if (result == null) { + return operator === '!='; + } + if (!operator) { + return true; + } + result += ''; + return operator === '=' ? result === check : operator === '!=' ? result !== check : operator === '^=' ? check && result.indexOf(check) === 0 : operator === '*=' ? check && result.indexOf(check) > -1 : operator === '$=' ? check && result.slice(-check.length) === check : operator === '~=' ? (' ' + result + ' ').indexOf(check) > -1 : operator === '|=' ? result === check || result.slice(0, check.length + 1) === check + '-' : false; + }; + }, + CHILD: function (type, what, argument, first, last) { + var simple = type.slice(0, 3) !== 'nth', forward = type.slice(-4) !== 'last', ofType = what === 'of-type'; + return first === 1 && last === 0 ? function (elem) { + return !!elem.parentNode; + } : function (elem, context, xml) { + var cache, outerCache, node, diff, nodeIndex, start, dir = simple !== forward ? 'nextSibling' : 'previousSibling', parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType; + if (parent) { + if (simple) { + while (dir) { + node = elem; + while (node = node[dir]) { + if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) { + return false; + } + } + start = dir = type === 'only' && !start && 'nextSibling'; + } + return true; + } + start = [forward ? parent.firstChild : parent.lastChild]; + if (forward && useCache) { + outerCache = parent[expando] || (parent[expando] = {}); + cache = outerCache[type] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[nodeIndex]; + while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) { + if (node.nodeType === 1 && ++diff && node === elem) { + outerCache[type] = [ + dirruns, + nodeIndex, + diff + ]; + break; + } + } + } else if (useCache && (cache = (elem[expando] || (elem[expando] = {}))[type]) && cache[0] === dirruns) { + diff = cache[1]; + } else { + while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) { + if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) { + if (useCache) { + (node[expando] || (node[expando] = {}))[type] = [ + dirruns, + diff + ]; + } + if (node === elem) { + break; + } + } + } + } + diff -= last; + return diff === first || diff % first === 0 && diff / first >= 0; + } + }; + }, + PSEUDO: function (pseudo, argument) { + var args, fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error('unsupported pseudo: ' + pseudo); + if (fn[expando]) { + return fn(argument); + } + if (fn.length > 1) { + args = [ + pseudo, + pseudo, + '', + argument + ]; + return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) { + var idx, matched = fn(seed, argument), i = matched.length; + while (i--) { + idx = indexOf$2.call(seed, matched[i]); + seed[idx] = !(matches[idx] = matched[i]); + } + }) : function (elem) { + return fn(elem, 0, args); + }; + } + return fn; + } + }, + pseudos: { + not: markFunction(function (selector) { + var input = [], results = [], matcher = compile(selector.replace(rtrim, '$1')); + return matcher[expando] ? markFunction(function (seed, matches, context, xml) { + var elem, unmatched = matcher(seed, null, xml, []), i = seed.length; + while (i--) { + if (elem = unmatched[i]) { + seed[i] = !(matches[i] = elem); + } + } + }) : function (elem, context, xml) { + input[0] = elem; + matcher(input, null, xml, results); + input[0] = null; + return !results.pop(); + }; + }), + has: markFunction(function (selector) { + return function (elem) { + return Sizzle(selector, elem).length > 0; + }; + }), + contains: markFunction(function (text) { + text = text.replace(runescape, funescape); + return function (elem) { + return (elem.textContent || elem.innerText || getText(elem)).indexOf(text) > -1; + }; + }), + lang: markFunction(function (lang) { + if (!ridentifier.test(lang || '')) { + Sizzle.error('unsupported lang: ' + lang); + } + lang = lang.replace(runescape, funescape).toLowerCase(); + return function (elem) { + var elemLang; + do { + if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute('xml:lang') || elem.getAttribute('lang')) { + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf(lang + '-') === 0; + } + } while ((elem = elem.parentNode) && elem.nodeType === 1); + return false; + }; + }), + target: function (elem) { + var hash = window.location && window.location.hash; + return hash && hash.slice(1) === elem.id; + }, + root: function (elem) { + return elem === docElem; + }, + focus: function (elem) { + return elem === document$1.activeElement && (!document$1.hasFocus || document$1.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + enabled: function (elem) { + return elem.disabled === false; + }, + disabled: function (elem) { + return elem.disabled === true; + }, + checked: function (elem) { + var nodeName = elem.nodeName.toLowerCase(); + return nodeName === 'input' && !!elem.checked || nodeName === 'option' && !!elem.selected; + }, + selected: function (elem) { + if (elem.parentNode) { + elem.parentNode.selectedIndex; + } + return elem.selected === true; + }, + empty: function (elem) { + for (elem = elem.firstChild; elem; elem = elem.nextSibling) { + if (elem.nodeType < 6) { + return false; + } + } + return true; + }, + parent: function (elem) { + return !Expr.pseudos.empty(elem); + }, + header: function (elem) { + return rheader.test(elem.nodeName); + }, + input: function (elem) { + return rinputs.test(elem.nodeName); + }, + button: function (elem) { + var name = elem.nodeName.toLowerCase(); + return name === 'input' && elem.type === 'button' || name === 'button'; + }, + text: function (elem) { + var attr; + return elem.nodeName.toLowerCase() === 'input' && elem.type === 'text' && ((attr = elem.getAttribute('type')) == null || attr.toLowerCase() === 'text'); + }, + first: createPositionalPseudo(function () { + return [0]; + }), + last: createPositionalPseudo(function (matchIndexes, length) { + return [length - 1]; + }), + eq: createPositionalPseudo(function (matchIndexes, length, argument) { + return [argument < 0 ? argument + length : argument]; + }), + even: createPositionalPseudo(function (matchIndexes, length) { + var i = 0; + for (; i < length; i += 2) { + matchIndexes.push(i); + } + return matchIndexes; + }), + odd: createPositionalPseudo(function (matchIndexes, length) { + var i = 1; + for (; i < length; i += 2) { + matchIndexes.push(i); + } + return matchIndexes; + }), + lt: createPositionalPseudo(function (matchIndexes, length, argument) { + var i = argument < 0 ? argument + length : argument; + for (; --i >= 0;) { + matchIndexes.push(i); + } + return matchIndexes; + }), + gt: createPositionalPseudo(function (matchIndexes, length, argument) { + var i = argument < 0 ? argument + length : argument; + for (; ++i < length;) { + matchIndexes.push(i); + } + return matchIndexes; + }) + } + }; + Expr.pseudos.nth = Expr.pseudos.eq; + each([ + 'radio', + 'checkbox', + 'file', + 'password', + 'image' + ], function (i) { + Expr.pseudos[i] = createInputPseudo(i); + }); + each([ + 'submit', + 'reset' + ], function (i) { + Expr.pseudos[i] = createButtonPseudo(i); + }); + function setFilters() { + } + setFilters.prototype = Expr.filters = Expr.pseudos; + Expr.setFilters = new setFilters(); + tokenize = Sizzle.tokenize = function (selector, parseOnly) { + var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + ' ']; + if (cached) { + return parseOnly ? 0 : cached.slice(0); + } + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + while (soFar) { + if (!matched || (match = rcomma.exec(soFar))) { + if (match) { + soFar = soFar.slice(match[0].length) || soFar; + } + groups.push(tokens = []); + } + matched = false; + if (match = rcombinators.exec(soFar)) { + matched = match.shift(); + tokens.push({ + value: matched, + type: match[0].replace(rtrim, ' ') + }); + soFar = soFar.slice(matched.length); + } + for (type in Expr.filter) { + if (!Expr.filter.hasOwnProperty(type)) { + continue; + } + if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice(matched.length); + } + } + if (!matched) { + break; + } + } + return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : tokenCache(selector, groups).slice(0); + }; + function toSelector(tokens) { + var i = 0, len = tokens.length, selector = ''; + for (; i < len; i++) { + selector += tokens[i].value; + } + return selector; + } + function addCombinator(matcher, combinator, base) { + var dir = combinator.dir, checkNonElements = base && dir === 'parentNode', doneName = done++; + return combinator.first ? function (elem, context, xml) { + while (elem = elem[dir]) { + if (elem.nodeType === 1 || checkNonElements) { + return matcher(elem, context, xml); + } + } + } : function (elem, context, xml) { + var oldCache, outerCache, newCache = [ + dirruns, + doneName + ]; + if (xml) { + while (elem = elem[dir]) { + if (elem.nodeType === 1 || checkNonElements) { + if (matcher(elem, context, xml)) { + return true; + } + } + } + } else { + while (elem = elem[dir]) { + if (elem.nodeType === 1 || checkNonElements) { + outerCache = elem[expando] || (elem[expando] = {}); + if ((oldCache = outerCache[dir]) && oldCache[0] === dirruns && oldCache[1] === doneName) { + return newCache[2] = oldCache[2]; + } else { + outerCache[dir] = newCache; + if (newCache[2] = matcher(elem, context, xml)) { + return true; + } + } + } + } + } + }; + } + function elementMatcher(matchers) { + return matchers.length > 1 ? function (elem, context, xml) { + var i = matchers.length; + while (i--) { + if (!matchers[i](elem, context, xml)) { + return false; + } + } + return true; + } : matchers[0]; + } + function multipleContexts(selector, contexts, results) { + var i = 0, len = contexts.length; + for (; i < len; i++) { + Sizzle(selector, contexts[i], results); + } + return results; + } + function condense(unmatched, map, filter, context, xml) { + var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null; + for (; i < len; i++) { + if (elem = unmatched[i]) { + if (!filter || filter(elem, context, xml)) { + newUnmatched.push(elem); + if (mapped) { + map.push(i); + } + } + } + } + return newUnmatched; + } + function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) { + if (postFilter && !postFilter[expando]) { + postFilter = setMatcher(postFilter); + } + if (postFinder && !postFinder[expando]) { + postFinder = setMatcher(postFinder, postSelector); + } + return markFunction(function (seed, results, context, xml) { + var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, elems = seed || multipleContexts(selector || '*', context.nodeType ? [context] : context, []), matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems, matcherOut = matcher ? postFinder || (seed ? preFilter : preexisting || postFilter) ? [] : results : matcherIn; + if (matcher) { + matcher(matcherIn, matcherOut, context, xml); + } + if (postFilter) { + temp = condense(matcherOut, postMap); + postFilter(temp, [], context, xml); + i = temp.length; + while (i--) { + if (elem = temp[i]) { + matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem); + } + } + } + if (seed) { + if (postFinder || preFilter) { + if (postFinder) { + temp = []; + i = matcherOut.length; + while (i--) { + if (elem = matcherOut[i]) { + temp.push(matcherIn[i] = elem); + } + } + postFinder(null, matcherOut = [], temp, xml); + } + i = matcherOut.length; + while (i--) { + if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf$2.call(seed, elem) : preMap[i]) > -1) { + seed[temp] = !(results[temp] = elem); + } + } + } + } else { + matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut); + if (postFinder) { + postFinder(null, results, matcherOut, xml); + } else { + push.apply(results, matcherOut); + } + } + }); + } + function matcherFromTokens(tokens) { + var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[tokens[0].type], implicitRelative = leadingRelative || Expr.relative[' '], i = leadingRelative ? 1 : 0, matchContext = addCombinator(function (elem) { + return elem === checkContext; + }, implicitRelative, true), matchAnyContext = addCombinator(function (elem) { + return indexOf$2.call(checkContext, elem) > -1; + }, implicitRelative, true), matchers = [function (elem, context, xml) { + var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml)); + checkContext = null; + return ret; + }]; + for (; i < len; i++) { + if (matcher = Expr.relative[tokens[i].type]) { + matchers = [addCombinator(elementMatcher(matchers), matcher)]; + } else { + matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches); + if (matcher[expando]) { + j = ++i; + for (; j < len; j++) { + if (Expr.relative[tokens[j].type]) { + break; + } + } + return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector(tokens.slice(0, i - 1).concat({ value: tokens[i - 2].type === ' ' ? '*' : '' })).replace(rtrim, '$1'), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens)); + } + matchers.push(matcher); + } + } + return elementMatcher(matchers); + } + function matcherFromGroupMatchers(elementMatchers, setMatchers) { + var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function (seed, context, xml, results, outermost) { + var elem, j, matcher, matchedCount = 0, i = '0', unmatched = seed && [], setMatched = [], contextBackup = outermostContext, elems = seed || byElement && Expr.find.TAG('*', outermost), dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1, len = elems.length; + if (outermost) { + outermostContext = context !== document$1 && context; + } + for (; i !== len && (elem = elems[i]) != null; i++) { + if (byElement && elem) { + j = 0; + while (matcher = elementMatchers[j++]) { + if (matcher(elem, context, xml)) { + results.push(elem); + break; + } + } + if (outermost) { + dirruns = dirrunsUnique; + } + } + if (bySet) { + if (elem = !matcher && elem) { + matchedCount--; + } + if (seed) { + unmatched.push(elem); + } + } + } + matchedCount += i; + if (bySet && i !== matchedCount) { + j = 0; + while (matcher = setMatchers[j++]) { + matcher(unmatched, setMatched, context, xml); + } + if (seed) { + if (matchedCount > 0) { + while (i--) { + if (!(unmatched[i] || setMatched[i])) { + setMatched[i] = pop.call(results); + } + } + } + setMatched = condense(setMatched); + } + push.apply(results, setMatched); + if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) { + Sizzle.uniqueSort(results); + } + } + if (outermost) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + return unmatched; + }; + return bySet ? markFunction(superMatcher) : superMatcher; + } + compile = Sizzle.compile = function (selector, match) { + var i, setMatchers = [], elementMatchers = [], cached = compilerCache[selector + ' ']; + if (!cached) { + if (!match) { + match = tokenize(selector); + } + i = match.length; + while (i--) { + cached = matcherFromTokens(match[i]); + if (cached[expando]) { + setMatchers.push(cached); + } else { + elementMatchers.push(cached); + } + } + cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers)); + cached.selector = selector; + } + return cached; + }; + select = Sizzle.select = function (selector, context, results, seed) { + var i, tokens, token, type, find, compiled = typeof selector === 'function' && selector, match = !seed && tokenize(selector = compiled.selector || selector); + results = results || []; + if (match.length === 1) { + tokens = match[0] = match[0].slice(0); + if (tokens.length > 2 && (token = tokens[0]).type === 'ID' && support.getById && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) { + context = (Expr.find.ID(token.matches[0].replace(runescape, funescape), context) || [])[0]; + if (!context) { + return results; + } else if (compiled) { + context = context.parentNode; + } + selector = selector.slice(tokens.shift().value.length); + } + i = matchExpr.needsContext.test(selector) ? 0 : tokens.length; + while (i--) { + token = tokens[i]; + if (Expr.relative[type = token.type]) { + break; + } + if (find = Expr.find[type]) { + if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) { + tokens.splice(i, 1); + selector = seed.length && toSelector(tokens); + if (!selector) { + push.apply(results, seed); + return results; + } + break; + } + } + } + } + (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, rsibling.test(selector) && testContext(context.parentNode) || context); + return results; + }; + support.sortStable = expando.split('').sort(sortOrder).join('') === expando; + support.detectDuplicates = !!hasDuplicate; + setDocument(); + support.sortDetached = true; + + var doc = document; + var push$1 = Array.prototype.push; + var slice$1 = Array.prototype.slice; + var rquickExpr$1 = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/; + var Event = EventUtils.Event; + var skipUniques = Tools.makeMap('children,contents,next,prev'); + var isDefined = function (obj) { + return typeof obj !== 'undefined'; + }; + var isString$1 = function (obj) { + return typeof obj === 'string'; + }; + var isWindow = function (obj) { + return obj && obj === obj.window; + }; + var createFragment = function (html, fragDoc) { + fragDoc = fragDoc || doc; + var container = fragDoc.createElement('div'); + var frag = fragDoc.createDocumentFragment(); + container.innerHTML = html; + var node; + while (node = container.firstChild) { + frag.appendChild(node); + } + return frag; + }; + var domManipulate = function (targetNodes, sourceItem, callback, reverse) { + var i; + if (isString$1(sourceItem)) { + sourceItem = createFragment(sourceItem, getElementDocument(targetNodes[0])); + } else if (sourceItem.length && !sourceItem.nodeType) { + sourceItem = DomQuery.makeArray(sourceItem); + if (reverse) { + for (i = sourceItem.length - 1; i >= 0; i--) { + domManipulate(targetNodes, sourceItem[i], callback, reverse); + } + } else { + for (i = 0; i < sourceItem.length; i++) { + domManipulate(targetNodes, sourceItem[i], callback, reverse); + } + } + return targetNodes; + } + if (sourceItem.nodeType) { + i = targetNodes.length; + while (i--) { + callback.call(targetNodes[i], sourceItem); + } + } + return targetNodes; + }; + var hasClass = function (node, className) { + return node && className && (' ' + node.className + ' ').indexOf(' ' + className + ' ') !== -1; + }; + var wrap$1 = function (elements, wrapper, all) { + var lastParent, newWrapper; + wrapper = DomQuery(wrapper)[0]; + elements.each(function () { + var self = this; + if (!all || lastParent !== self.parentNode) { + lastParent = self.parentNode; + newWrapper = wrapper.cloneNode(false); + self.parentNode.insertBefore(newWrapper, self); + newWrapper.appendChild(self); + } else { + newWrapper.appendChild(self); + } + }); + return elements; + }; + var numericCssMap = Tools.makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom', ' '); + var booleanMap = Tools.makeMap('checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected', ' '); + var propFix = { + for: 'htmlFor', + class: 'className', + readonly: 'readOnly' + }; + var cssFix = { float: 'cssFloat' }; + var attrHooks = {}, cssHooks = {}; + var DomQueryConstructor = function (selector, context) { + return new DomQuery.fn.init(selector, context); + }; + var inArray$1 = function (item, array) { + var i; + if (array.indexOf) { + return array.indexOf(item); + } + i = array.length; + while (i--) { + if (array[i] === item) { + return i; + } + } + return -1; + }; + var whiteSpaceRegExp$2 = /^\s*|\s*$/g; + var trim$3 = function (str) { + return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp$2, ''); + }; + var each$4 = function (obj, callback) { + var length, key, i, value; + if (obj) { + length = obj.length; + if (length === undefined) { + for (key in obj) { + if (obj.hasOwnProperty(key)) { + value = obj[key]; + if (callback.call(value, key, value) === false) { + break; + } + } + } + } else { + for (i = 0; i < length; i++) { + value = obj[i]; + if (callback.call(value, i, value) === false) { + break; + } + } + } + } + return obj; + }; + var grep = function (array, callback) { + var out = []; + each$4(array, function (i, item) { + if (callback(item, i)) { + out.push(item); + } + }); + return out; + }; + var getElementDocument = function (element) { + if (!element) { + return doc; + } + if (element.nodeType === 9) { + return element; + } + return element.ownerDocument; + }; + DomQueryConstructor.fn = DomQueryConstructor.prototype = { + constructor: DomQueryConstructor, + selector: '', + context: null, + length: 0, + init: function (selector, context) { + var self = this; + var match, node; + if (!selector) { + return self; + } + if (selector.nodeType) { + self.context = self[0] = selector; + self.length = 1; + return self; + } + if (context && context.nodeType) { + self.context = context; + } else { + if (context) { + return DomQuery(selector).attr(context); + } + self.context = context = document; + } + if (isString$1(selector)) { + self.selector = selector; + if (selector.charAt(0) === '<' && selector.charAt(selector.length - 1) === '>' && selector.length >= 3) { + match = [ + null, + selector, + null + ]; + } else { + match = rquickExpr$1.exec(selector); + } + if (match) { + if (match[1]) { + node = createFragment(selector, getElementDocument(context)).firstChild; + while (node) { + push$1.call(self, node); + node = node.nextSibling; + } + } else { + node = getElementDocument(context).getElementById(match[2]); + if (!node) { + return self; + } + if (node.id !== match[2]) { + return self.find(selector); + } + self.length = 1; + self[0] = node; + } + } else { + return DomQuery(context).find(selector); + } + } else { + this.add(selector, false); + } + return self; + }, + toArray: function () { + return Tools.toArray(this); + }, + add: function (items, sort) { + var self = this; + var nodes, i; + if (isString$1(items)) { + return self.add(DomQuery(items)); + } + if (sort !== false) { + nodes = DomQuery.unique(self.toArray().concat(DomQuery.makeArray(items))); + self.length = nodes.length; + for (i = 0; i < nodes.length; i++) { + self[i] = nodes[i]; + } + } else { + push$1.apply(self, DomQuery.makeArray(items)); + } + return self; + }, + attr: function (name, value) { + var self = this; + var hook; + if (typeof name === 'object') { + each$4(name, function (name, value) { + self.attr(name, value); + }); + } else if (isDefined(value)) { + this.each(function () { + var hook; + if (this.nodeType === 1) { + hook = attrHooks[name]; + if (hook && hook.set) { + hook.set(this, value); + return; + } + if (value === null) { + this.removeAttribute(name, 2); + } else { + this.setAttribute(name, value, 2); + } + } + }); + } else { + if (self[0] && self[0].nodeType === 1) { + hook = attrHooks[name]; + if (hook && hook.get) { + return hook.get(self[0], name); + } + if (booleanMap[name]) { + return self.prop(name) ? name : undefined; + } + value = self[0].getAttribute(name, 2); + if (value === null) { + value = undefined; + } + } + return value; + } + return self; + }, + removeAttr: function (name) { + return this.attr(name, null); + }, + prop: function (name, value) { + var self = this; + name = propFix[name] || name; + if (typeof name === 'object') { + each$4(name, function (name, value) { + self.prop(name, value); + }); + } else if (isDefined(value)) { + this.each(function () { + if (this.nodeType === 1) { + this[name] = value; + } + }); + } else { + if (self[0] && self[0].nodeType && name in self[0]) { + return self[0][name]; + } + return value; + } + return self; + }, + css: function (name, value) { + var self = this; + var elm, hook; + var camel = function (name) { + return name.replace(/-(\D)/g, function (a, b) { + return b.toUpperCase(); + }); + }; + var dashed = function (name) { + return name.replace(/[A-Z]/g, function (a) { + return '-' + a; + }); + }; + if (typeof name === 'object') { + each$4(name, function (name, value) { + self.css(name, value); + }); + } else { + if (isDefined(value)) { + name = camel(name); + if (typeof value === 'number' && !numericCssMap[name]) { + value = value.toString() + 'px'; + } + self.each(function () { + var style = this.style; + hook = cssHooks[name]; + if (hook && hook.set) { + hook.set(this, value); + return; + } + try { + this.style[cssFix[name] || name] = value; + } catch (ex) { + } + if (value === null || value === '') { + if (style.removeProperty) { + style.removeProperty(dashed(name)); + } else { + style.removeAttribute(name); + } + } + }); + } else { + elm = self[0]; + hook = cssHooks[name]; + if (hook && hook.get) { + return hook.get(elm); + } + if (elm.ownerDocument.defaultView) { + try { + return elm.ownerDocument.defaultView.getComputedStyle(elm, null).getPropertyValue(dashed(name)); + } catch (ex) { + return undefined; + } + } else if (elm.currentStyle) { + return elm.currentStyle[camel(name)]; + } else { + return ''; + } + } + } + return self; + }, + remove: function () { + var self = this; + var node, i = this.length; + while (i--) { + node = self[i]; + Event.clean(node); + if (node.parentNode) { + node.parentNode.removeChild(node); + } + } + return this; + }, + empty: function () { + var self = this; + var node, i = this.length; + while (i--) { + node = self[i]; + while (node.firstChild) { + node.removeChild(node.firstChild); + } + } + return this; + }, + html: function (value) { + var self = this; + var i; + if (isDefined(value)) { + i = self.length; + try { + while (i--) { + self[i].innerHTML = value; + } + } catch (ex) { + DomQuery(self[i]).empty().append(value); + } + return self; + } + return self[0] ? self[0].innerHTML : ''; + }, + text: function (value) { + var self = this; + var i; + if (isDefined(value)) { + i = self.length; + while (i--) { + if ('innerText' in self[i]) { + self[i].innerText = value; + } else { + self[0].textContent = value; + } + } + return self; + } + return self[0] ? self[0].innerText || self[0].textContent : ''; + }, + append: function () { + return domManipulate(this, arguments, function (node) { + if (this.nodeType === 1 || this.host && this.host.nodeType === 1) { + this.appendChild(node); + } + }); + }, + prepend: function () { + return domManipulate(this, arguments, function (node) { + if (this.nodeType === 1 || this.host && this.host.nodeType === 1) { + this.insertBefore(node, this.firstChild); + } + }, true); + }, + before: function () { + var self = this; + if (self[0] && self[0].parentNode) { + return domManipulate(self, arguments, function (node) { + this.parentNode.insertBefore(node, this); + }); + } + return self; + }, + after: function () { + var self = this; + if (self[0] && self[0].parentNode) { + return domManipulate(self, arguments, function (node) { + this.parentNode.insertBefore(node, this.nextSibling); + }, true); + } + return self; + }, + appendTo: function (val) { + DomQuery(val).append(this); + return this; + }, + prependTo: function (val) { + DomQuery(val).prepend(this); + return this; + }, + replaceWith: function (content) { + return this.before(content).remove(); + }, + wrap: function (content) { + return wrap$1(this, content); + }, + wrapAll: function (content) { + return wrap$1(this, content, true); + }, + wrapInner: function (content) { + this.each(function () { + DomQuery(this).contents().wrapAll(content); + }); + return this; + }, + unwrap: function () { + return this.parent().each(function () { + DomQuery(this).replaceWith(this.childNodes); + }); + }, + clone: function () { + var result = []; + this.each(function () { + result.push(this.cloneNode(true)); + }); + return DomQuery(result); + }, + addClass: function (className) { + return this.toggleClass(className, true); + }, + removeClass: function (className) { + return this.toggleClass(className, false); + }, + toggleClass: function (className, state) { + var self = this; + if (typeof className !== 'string') { + return self; + } + if (className.indexOf(' ') !== -1) { + each$4(className.split(' '), function () { + self.toggleClass(this, state); + }); + } else { + self.each(function (index, node) { + var classState = hasClass(node, className); + if (classState !== state) { + var existingClassName = node.className; + if (classState) { + node.className = trim$3((' ' + existingClassName + ' ').replace(' ' + className + ' ', ' ')); + } else { + node.className += existingClassName ? ' ' + className : className; + } + } + }); + } + return self; + }, + hasClass: function (className) { + return hasClass(this[0], className); + }, + each: function (callback) { + return each$4(this, callback); + }, + on: function (name, callback) { + return this.each(function () { + Event.bind(this, name, callback); + }); + }, + off: function (name, callback) { + return this.each(function () { + Event.unbind(this, name, callback); + }); + }, + trigger: function (name) { + return this.each(function () { + if (typeof name === 'object') { + Event.fire(this, name.type, name); + } else { + Event.fire(this, name); + } + }); + }, + show: function () { + return this.css('display', ''); + }, + hide: function () { + return this.css('display', 'none'); + }, + slice: function () { + return DomQuery(slice$1.apply(this, arguments)); + }, + eq: function (index) { + return index === -1 ? this.slice(index) : this.slice(index, +index + 1); + }, + first: function () { + return this.eq(0); + }, + last: function () { + return this.eq(-1); + }, + find: function (selector) { + var i, l; + var ret = []; + for (i = 0, l = this.length; i < l; i++) { + DomQuery.find(selector, this[i], ret); + } + return DomQuery(ret); + }, + filter: function (selector) { + if (typeof selector === 'function') { + return DomQuery(grep(this.toArray(), function (item, i) { + return selector(i, item); + })); + } + return DomQuery(DomQuery.filter(selector, this.toArray())); + }, + closest: function (selector) { + var result = []; + if (selector instanceof DomQuery) { + selector = selector[0]; + } + this.each(function (i, node) { + while (node) { + if (typeof selector === 'string' && DomQuery(node).is(selector)) { + result.push(node); + break; + } else if (node === selector) { + result.push(node); + break; + } + node = node.parentNode; + } + }); + return DomQuery(result); + }, + offset: function (offset) { + var elm, doc, docElm; + var x = 0, y = 0, pos; + if (!offset) { + elm = this[0]; + if (elm) { + doc = elm.ownerDocument; + docElm = doc.documentElement; + if (elm.getBoundingClientRect) { + pos = elm.getBoundingClientRect(); + x = pos.left + (docElm.scrollLeft || doc.body.scrollLeft) - docElm.clientLeft; + y = pos.top + (docElm.scrollTop || doc.body.scrollTop) - docElm.clientTop; + } + } + return { + left: x, + top: y + }; + } + return this.css(offset); + }, + push: push$1, + sort: Array.prototype.sort, + splice: Array.prototype.splice + }; + Tools.extend(DomQueryConstructor, { + extend: Tools.extend, + makeArray: function (object) { + if (isWindow(object) || object.nodeType) { + return [object]; + } + return Tools.toArray(object); + }, + inArray: inArray$1, + isArray: Tools.isArray, + each: each$4, + trim: trim$3, + grep: grep, + find: Sizzle, + expr: Sizzle.selectors, + unique: Sizzle.uniqueSort, + text: Sizzle.getText, + contains: Sizzle.contains, + filter: function (expr, elems, not) { + var i = elems.length; + if (not) { + expr = ':not(' + expr + ')'; + } + while (i--) { + if (elems[i].nodeType !== 1) { + elems.splice(i, 1); + } + } + if (elems.length === 1) { + elems = DomQuery.find.matchesSelector(elems[0], expr) ? [elems[0]] : []; + } else { + elems = DomQuery.find.matches(expr, elems); + } + return elems; + } + }); + var dir = function (el, prop, until) { + var matched = []; + var cur = el[prop]; + if (typeof until !== 'string' && until instanceof DomQuery) { + until = until[0]; + } + while (cur && cur.nodeType !== 9) { + if (until !== undefined) { + if (cur === until) { + break; + } + if (typeof until === 'string' && DomQuery(cur).is(until)) { + break; + } + } + if (cur.nodeType === 1) { + matched.push(cur); + } + cur = cur[prop]; + } + return matched; + }; + var sibling$1 = function (node, siblingName, nodeType, until) { + var result = []; + if (until instanceof DomQuery) { + until = until[0]; + } + for (; node; node = node[siblingName]) { + if (nodeType && node.nodeType !== nodeType) { + continue; + } + if (until !== undefined) { + if (node === until) { + break; + } + if (typeof until === 'string' && DomQuery(node).is(until)) { + break; + } + } + result.push(node); + } + return result; + }; + var firstSibling = function (node, siblingName, nodeType) { + for (node = node[siblingName]; node; node = node[siblingName]) { + if (node.nodeType === nodeType) { + return node; + } + } + return null; + }; + each$4({ + parent: function (node) { + var parent = node.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function (node) { + return dir(node, 'parentNode'); + }, + next: function (node) { + return firstSibling(node, 'nextSibling', 1); + }, + prev: function (node) { + return firstSibling(node, 'previousSibling', 1); + }, + children: function (node) { + return sibling$1(node.firstChild, 'nextSibling', 1); + }, + contents: function (node) { + return Tools.toArray((node.nodeName === 'iframe' ? node.contentDocument || node.contentWindow.document : node).childNodes); + } + }, function (name, fn) { + DomQueryConstructor.fn[name] = function (selector) { + var self = this; + var result = []; + self.each(function () { + var nodes = fn.call(result, this, selector, result); + if (nodes) { + if (DomQuery.isArray(nodes)) { + result.push.apply(result, nodes); + } else { + result.push(nodes); + } + } + }); + if (this.length > 1) { + if (!skipUniques[name]) { + result = DomQuery.unique(result); + } + if (name.indexOf('parents') === 0) { + result = result.reverse(); + } + } + var wrappedResult = DomQuery(result); + if (selector) { + return wrappedResult.filter(selector); + } + return wrappedResult; + }; + }); + each$4({ + parentsUntil: function (node, until) { + return dir(node, 'parentNode', until); + }, + nextUntil: function (node, until) { + return sibling$1(node, 'nextSibling', 1, until).slice(1); + }, + prevUntil: function (node, until) { + return sibling$1(node, 'previousSibling', 1, until).slice(1); + } + }, function (name, fn) { + DomQueryConstructor.fn[name] = function (selector, filter) { + var self = this; + var result = []; + self.each(function () { + var nodes = fn.call(result, this, selector, result); + if (nodes) { + if (DomQuery.isArray(nodes)) { + result.push.apply(result, nodes); + } else { + result.push(nodes); + } + } + }); + if (this.length > 1) { + result = DomQuery.unique(result); + if (name.indexOf('parents') === 0 || name === 'prevUntil') { + result = result.reverse(); + } + } + var wrappedResult = DomQuery(result); + if (filter) { + return wrappedResult.filter(filter); + } + return wrappedResult; + }; + }); + DomQueryConstructor.fn.is = function (selector) { + return !!selector && this.filter(selector).length > 0; + }; + DomQueryConstructor.fn.init.prototype = DomQueryConstructor.fn; + DomQueryConstructor.overrideDefaults = function (callback) { + var defaults; + var sub = function (selector, context) { + defaults = defaults || callback(); + if (arguments.length === 0) { + selector = defaults.element; + } + if (!context) { + context = defaults.context; + } + return new sub.fn.init(selector, context); + }; + DomQuery.extend(sub, this); + return sub; + }; + DomQueryConstructor.attrHooks = attrHooks; + DomQueryConstructor.cssHooks = cssHooks; + var DomQuery = DomQueryConstructor; + + var each$5 = Tools.each; + var grep$1 = Tools.grep; + var isIE = Env.ie; + var simpleSelectorRe = /^([a-z0-9],?)+$/i; + var setupAttrHooks = function (styles, settings, getContext) { + var keepValues = settings.keep_values; + var keepUrlHook = { + set: function ($elm, value, name) { + if (settings.url_converter) { + value = settings.url_converter.call(settings.url_converter_scope || getContext(), value, name, $elm[0]); + } + $elm.attr('data-mce-' + name, value).attr(name, value); + }, + get: function ($elm, name) { + return $elm.attr('data-mce-' + name) || $elm.attr(name); + } + }; + var attrHooks = { + style: { + set: function ($elm, value) { + if (value !== null && typeof value === 'object') { + $elm.css(value); + return; + } + if (keepValues) { + $elm.attr('data-mce-style', value); + } + if (value !== null && typeof value === 'string') { + $elm.removeAttr('style'); + $elm.css(styles.parse(value)); + } else { + $elm.attr('style', value); + } + }, + get: function ($elm) { + var value = $elm.attr('data-mce-style') || $elm.attr('style'); + value = styles.serialize(styles.parse(value), $elm[0].nodeName); + return value; + } + } + }; + if (keepValues) { + attrHooks.href = attrHooks.src = keepUrlHook; + } + return attrHooks; + }; + var updateInternalStyleAttr = function (styles, $elm) { + var rawValue = $elm.attr('style'); + var value = styles.serialize(styles.parse(rawValue), $elm[0].nodeName); + if (!value) { + value = null; + } + $elm.attr('data-mce-style', value); + }; + var findNodeIndex = function (node, normalized) { + var idx = 0, lastNodeType, nodeType; + if (node) { + for (lastNodeType = node.nodeType, node = node.previousSibling; node; node = node.previousSibling) { + nodeType = node.nodeType; + if (normalized && nodeType === 3) { + if (nodeType === lastNodeType || !node.nodeValue.length) { + continue; + } + } + idx++; + lastNodeType = nodeType; + } + } + return idx; + }; + var DOMUtils = function (doc, settings) { + if (settings === void 0) { + settings = {}; + } + var addedStyles = {}; + var win = window; + var files = {}; + var counter = 0; + var stdMode = true; + var boxModel = true; + var styleSheetLoader = instance.forElement(SugarElement.fromDom(doc), { + contentCssCors: settings.contentCssCors, + referrerPolicy: settings.referrerPolicy + }); + var boundEvents = []; + var schema = settings.schema ? settings.schema : Schema({}); + var styles = Styles({ + url_converter: settings.url_converter, + url_converter_scope: settings.url_converter_scope + }, settings.schema); + var events = settings.ownEvents ? new EventUtils() : EventUtils.Event; + var blockElementsMap = schema.getBlockElements(); + var $ = DomQuery.overrideDefaults(function () { + return { + context: doc, + element: self.getRoot() + }; + }); + var isBlock = function (node) { + if (typeof node === 'string') { + return !!blockElementsMap[node]; + } else if (node) { + var type = node.nodeType; + if (type) { + return !!(type === 1 && blockElementsMap[node.nodeName]); + } + } + return false; + }; + var get = function (elm) { + return elm && doc && isString(elm) ? doc.getElementById(elm) : elm; + }; + var $$ = function (elm) { + return $(typeof elm === 'string' ? get(elm) : elm); + }; + var getAttrib = function (elm, name, defaultVal) { + var hook, value; + var $elm = $$(elm); + if ($elm.length) { + hook = attrHooks[name]; + if (hook && hook.get) { + value = hook.get($elm, name); + } else { + value = $elm.attr(name); + } + } + if (typeof value === 'undefined') { + value = defaultVal || ''; + } + return value; + }; + var getAttribs = function (elm) { + var node = get(elm); + if (!node) { + return []; + } + return node.attributes; + }; + var setAttrib = function (elm, name, value) { + if (value === '') { + value = null; + } + var $elm = $$(elm); + var originalValue = $elm.attr(name); + if (!$elm.length) { + return; + } + var hook = attrHooks[name]; + if (hook && hook.set) { + hook.set($elm, value, name); + } else { + $elm.attr(name, value); + } + if (originalValue !== value && settings.onSetAttrib) { + settings.onSetAttrib({ + attrElm: $elm, + attrName: name, + attrValue: value + }); + } + }; + var clone = function (node, deep) { + if (!isIE || node.nodeType !== 1 || deep) { + return node.cloneNode(deep); + } else { + var clone_1 = doc.createElement(node.nodeName); + each$5(getAttribs(node), function (attr) { + setAttrib(clone_1, attr.nodeName, getAttrib(node, attr.nodeName)); + }); + return clone_1; + } + }; + var getRoot = function () { + return settings.root_element || doc.body; + }; + var getViewPort = function (argWin) { + var vp = getBounds(argWin); + return { + x: vp.x, + y: vp.y, + w: vp.width, + h: vp.height + }; + }; + var getPos$1 = function (elm, rootElm) { + return getPos(doc.body, get(elm), rootElm); + }; + var setStyle = function (elm, name, value) { + var $elm = isString(name) ? $$(elm).css(name, value) : $$(elm).css(name); + if (settings.update_styles) { + updateInternalStyleAttr(styles, $elm); + } + }; + var setStyles = function (elm, stylesArg) { + var $elm = $$(elm).css(stylesArg); + if (settings.update_styles) { + updateInternalStyleAttr(styles, $elm); + } + }; + var getStyle = function (elm, name, computed) { + var $elm = $$(elm); + if (computed) { + return $elm.css(name); + } + name = name.replace(/-(\D)/g, function (a, b) { + return b.toUpperCase(); + }); + if (name === 'float') { + name = Env.browser.isIE() ? 'styleFloat' : 'cssFloat'; + } + return $elm[0] && $elm[0].style ? $elm[0].style[name] : undefined; + }; + var getSize = function (elm) { + var w, h; + elm = get(elm); + w = getStyle(elm, 'width'); + h = getStyle(elm, 'height'); + if (w.indexOf('px') === -1) { + w = 0; + } + if (h.indexOf('px') === -1) { + h = 0; + } + return { + w: parseInt(w, 10) || elm.offsetWidth || elm.clientWidth, + h: parseInt(h, 10) || elm.offsetHeight || elm.clientHeight + }; + }; + var getRect = function (elm) { + elm = get(elm); + var pos = getPos$1(elm); + var size = getSize(elm); + return { + x: pos.x, + y: pos.y, + w: size.w, + h: size.h + }; + }; + var is = function (elm, selector) { + var i; + if (!elm) { + return false; + } + if (!Array.isArray(elm)) { + if (selector === '*') { + return elm.nodeType === 1; + } + if (simpleSelectorRe.test(selector)) { + var selectors = selector.toLowerCase().split(/,/); + var elmName = elm.nodeName.toLowerCase(); + for (i = selectors.length - 1; i >= 0; i--) { + if (selectors[i] === elmName) { + return true; + } + } + return false; + } + if (elm.nodeType && elm.nodeType !== 1) { + return false; + } + } + var elms = !Array.isArray(elm) ? [elm] : elm; + return Sizzle(selector, elms[0].ownerDocument || elms[0], null, elms).length > 0; + }; + var getParents = function (elm, selector, root, collect) { + var result = []; + var selectorVal; + var node = get(elm); + collect = collect === undefined; + root = root || (getRoot().nodeName !== 'BODY' ? getRoot().parentNode : null); + if (Tools.is(selector, 'string')) { + selectorVal = selector; + if (selector === '*') { + selector = function (node) { + return node.nodeType === 1; + }; + } else { + selector = function (node) { + return is(node, selectorVal); + }; + } + } + while (node) { + if (node === root || isNullable(node.nodeType) || isDocument$1(node) || isDocumentFragment$1(node)) { + break; + } + if (!selector || typeof selector === 'function' && selector(node)) { + if (collect) { + result.push(node); + } else { + return [node]; + } + } + node = node.parentNode; + } + return collect ? result : null; + }; + var getParent = function (node, selector, root) { + var parents = getParents(node, selector, root, false); + return parents && parents.length > 0 ? parents[0] : null; + }; + var _findSib = function (node, selector, name) { + var func = selector; + if (node) { + if (typeof selector === 'string') { + func = function (node) { + return is(node, selector); + }; + } + for (node = node[name]; node; node = node[name]) { + if (typeof func === 'function' && func(node)) { + return node; + } + } + } + return null; + }; + var getNext = function (node, selector) { + return _findSib(node, selector, 'nextSibling'); + }; + var getPrev = function (node, selector) { + return _findSib(node, selector, 'previousSibling'); + }; + var select = function (selector, scope) { + return Sizzle(selector, get(scope) || settings.root_element || doc, []); + }; + var run = function (elm, func, scope) { + var result; + var node = typeof elm === 'string' ? get(elm) : elm; + if (!node) { + return false; + } + if (Tools.isArray(node) && (node.length || node.length === 0)) { + result = []; + each$5(node, function (elm, i) { + if (elm) { + result.push(func.call(scope, typeof elm === 'string' ? get(elm) : elm, i)); + } + }); + return result; + } + var context = scope ? scope : this; + return func.call(context, node); + }; + var setAttribs = function (elm, attrs) { + $$(elm).each(function (i, node) { + each$5(attrs, function (value, name) { + setAttrib(node, name, value); + }); + }); + }; + var setHTML = function (elm, html) { + var $elm = $$(elm); + if (isIE) { + $elm.each(function (i, target) { + if (target.canHaveHTML === false) { + return; + } + while (target.firstChild) { + target.removeChild(target.firstChild); + } + try { + target.innerHTML = '
' + html; + target.removeChild(target.firstChild); + } catch (ex) { + DomQuery('
').html('
' + html).contents().slice(1).appendTo(target); + } + return html; + }); + } else { + $elm.html(html); + } + }; + var add = function (parentElm, name, attrs, html, create) { + return run(parentElm, function (parentElm) { + var newElm = typeof name === 'string' ? doc.createElement(name) : name; + setAttribs(newElm, attrs); + if (html) { + if (typeof html !== 'string' && html.nodeType) { + newElm.appendChild(html); + } else if (typeof html === 'string') { + setHTML(newElm, html); + } + } + return !create ? parentElm.appendChild(newElm) : newElm; + }); + }; + var create = function (name, attrs, html) { + return add(doc.createElement(name), name, attrs, html, true); + }; + var decode = Entities.decode; + var encode = Entities.encodeAllRaw; + var createHTML = function (name, attrs, html) { + var outHtml = '', key; + outHtml += '<' + name; + for (key in attrs) { + if (attrs.hasOwnProperty(key) && attrs[key] !== null && typeof attrs[key] !== 'undefined') { + outHtml += ' ' + key + '="' + encode(attrs[key]) + '"'; + } + } + if (typeof html !== 'undefined') { + return outHtml + '>' + html + ''; + } + return outHtml + ' />'; + }; + var createFragment = function (html) { + var node; + var container = doc.createElement('div'); + var frag = doc.createDocumentFragment(); + frag.appendChild(container); + if (html) { + container.innerHTML = html; + } + while (node = container.firstChild) { + frag.appendChild(node); + } + frag.removeChild(container); + return frag; + }; + var remove = function (node, keepChildren) { + var $node = $$(node); + if (keepChildren) { + $node.each(function () { + var child; + while (child = this.firstChild) { + if (child.nodeType === 3 && child.data.length === 0) { + this.removeChild(child); + } else { + this.parentNode.insertBefore(child, this); + } + } + }).remove(); + } else { + $node.remove(); + } + return $node.length > 1 ? $node.toArray() : $node[0]; + }; + var removeAllAttribs = function (e) { + return run(e, function (e) { + var i; + var attrs = e.attributes; + for (i = attrs.length - 1; i >= 0; i--) { + e.removeAttributeNode(attrs.item(i)); + } + }); + }; + var parseStyle = function (cssText) { + return styles.parse(cssText); + }; + var serializeStyle = function (stylesArg, name) { + return styles.serialize(stylesArg, name); + }; + var addStyle = function (cssText) { + var head, styleElm; + if (self !== DOMUtils.DOM && doc === document) { + if (addedStyles[cssText]) { + return; + } + addedStyles[cssText] = true; + } + styleElm = doc.getElementById('mceDefaultStyles'); + if (!styleElm) { + styleElm = doc.createElement('style'); + styleElm.id = 'mceDefaultStyles'; + styleElm.type = 'text/css'; + head = doc.getElementsByTagName('head')[0]; + if (head.firstChild) { + head.insertBefore(styleElm, head.firstChild); + } else { + head.appendChild(styleElm); + } + } + if (styleElm.styleSheet) { + styleElm.styleSheet.cssText += cssText; + } else { + styleElm.appendChild(doc.createTextNode(cssText)); + } + }; + var loadCSS = function (urls) { + if (!urls) { + urls = ''; + } + each(urls.split(','), function (url) { + files[url] = true; + styleSheetLoader.load(url, noop); + }); + }; + var toggleClass = function (elm, cls, state) { + $$(elm).toggleClass(cls, state).each(function () { + if (this.className === '') { + DomQuery(this).attr('class', null); + } + }); + }; + var addClass = function (elm, cls) { + $$(elm).addClass(cls); + }; + var removeClass = function (elm, cls) { + toggleClass(elm, cls, false); + }; + var hasClass = function (elm, cls) { + return $$(elm).hasClass(cls); + }; + var show = function (elm) { + $$(elm).show(); + }; + var hide = function (elm) { + $$(elm).hide(); + }; + var isHidden = function (elm) { + return $$(elm).css('display') === 'none'; + }; + var uniqueId = function (prefix) { + return (!prefix ? 'mce_' : prefix) + counter++; + }; + var getOuterHTML = function (elm) { + var node = typeof elm === 'string' ? get(elm) : elm; + return isElement$1(node) ? node.outerHTML : DomQuery('
').append(DomQuery(node).clone()).html(); + }; + var setOuterHTML = function (elm, html) { + $$(elm).each(function () { + try { + if ('outerHTML' in this) { + this.outerHTML = html; + return; + } + } catch (ex) { + } + remove(DomQuery(this).html(html), true); + }); + }; + var insertAfter = function (node, reference) { + var referenceNode = get(reference); + return run(node, function (node) { + var parent = referenceNode.parentNode; + var nextSibling = referenceNode.nextSibling; + if (nextSibling) { + parent.insertBefore(node, nextSibling); + } else { + parent.appendChild(node); + } + return node; + }); + }; + var replace = function (newElm, oldElm, keepChildren) { + return run(oldElm, function (oldElm) { + if (Tools.is(oldElm, 'array')) { + newElm = newElm.cloneNode(true); + } + if (keepChildren) { + each$5(grep$1(oldElm.childNodes), function (node) { + newElm.appendChild(node); + }); + } + return oldElm.parentNode.replaceChild(newElm, oldElm); + }); + }; + var rename = function (elm, name) { + var newElm; + if (elm.nodeName !== name.toUpperCase()) { + newElm = create(name); + each$5(getAttribs(elm), function (attrNode) { + setAttrib(newElm, attrNode.nodeName, getAttrib(elm, attrNode.nodeName)); + }); + replace(newElm, elm, true); + } + return newElm || elm; + }; + var findCommonAncestor = function (a, b) { + var ps = a, pe; + while (ps) { + pe = b; + while (pe && ps !== pe) { + pe = pe.parentNode; + } + if (ps === pe) { + break; + } + ps = ps.parentNode; + } + if (!ps && a.ownerDocument) { + return a.ownerDocument.documentElement; + } + return ps; + }; + var toHex = function (rgbVal) { + return styles.toHex(Tools.trim(rgbVal)); + }; + var isNonEmptyElement = function (node) { + if (isElement$1(node)) { + var isNamedAnchor = node.nodeName.toLowerCase() === 'a' && !getAttrib(node, 'href') && getAttrib(node, 'id'); + if (getAttrib(node, 'name') || getAttrib(node, 'data-mce-bookmark') || isNamedAnchor) { + return true; + } + } + return false; + }; + var isEmpty = function (node, elements) { + var type, name, brCount = 0; + if (isNonEmptyElement(node)) { + return false; + } + node = node.firstChild; + if (node) { + var walker = new DomTreeWalker(node, node.parentNode); + var whitespace = schema ? schema.getWhiteSpaceElements() : {}; + elements = elements || (schema ? schema.getNonEmptyElements() : null); + do { + type = node.nodeType; + if (isElement$1(node)) { + var bogusVal = node.getAttribute('data-mce-bogus'); + if (bogusVal) { + node = walker.next(bogusVal === 'all'); + continue; + } + name = node.nodeName.toLowerCase(); + if (elements && elements[name]) { + if (name === 'br') { + brCount++; + node = walker.next(); + continue; + } + return false; + } + if (isNonEmptyElement(node)) { + return false; + } + } + if (type === 8) { + return false; + } + if (type === 3 && !isWhitespaceText(node.nodeValue)) { + return false; + } + if (type === 3 && node.parentNode && whitespace[node.parentNode.nodeName] && isWhitespaceText(node.nodeValue)) { + return false; + } + node = walker.next(); + } while (node); + } + return brCount <= 1; + }; + var createRng = function () { + return doc.createRange(); + }; + var split = function (parentElm, splitElm, replacementElm) { + var range = createRng(); + var beforeFragment; + var afterFragment; + var parentNode; + if (parentElm && splitElm) { + range.setStart(parentElm.parentNode, findNodeIndex(parentElm)); + range.setEnd(splitElm.parentNode, findNodeIndex(splitElm)); + beforeFragment = range.extractContents(); + range = createRng(); + range.setStart(splitElm.parentNode, findNodeIndex(splitElm) + 1); + range.setEnd(parentElm.parentNode, findNodeIndex(parentElm) + 1); + afterFragment = range.extractContents(); + parentNode = parentElm.parentNode; + parentNode.insertBefore(trimNode(self, beforeFragment), parentElm); + if (replacementElm) { + parentNode.insertBefore(replacementElm, parentElm); + } else { + parentNode.insertBefore(splitElm, parentElm); + } + parentNode.insertBefore(trimNode(self, afterFragment), parentElm); + remove(parentElm); + return replacementElm || splitElm; + } + }; + var bind = function (target, name, func, scope) { + if (Tools.isArray(target)) { + var i = target.length; + var rv = []; + while (i--) { + rv[i] = bind(target[i], name, func, scope); + } + return rv; + } + if (settings.collect && (target === doc || target === win)) { + boundEvents.push([ + target, + name, + func, + scope + ]); + } + var output = events.bind(target, name, func, scope || self); + return output; + }; + var unbind = function (target, name, func) { + if (Tools.isArray(target)) { + var i = target.length; + var rv = []; + while (i--) { + rv[i] = unbind(target[i], name, func); + } + return rv; + } else { + if (boundEvents.length > 0 && (target === doc || target === win)) { + var i = boundEvents.length; + while (i--) { + var item = boundEvents[i]; + if (target === item[0] && (!name || name === item[1]) && (!func || func === item[2])) { + events.unbind(item[0], item[1], item[2]); + } + } + } + return events.unbind(target, name, func); + } + }; + var fire = function (target, name, evt) { + return events.fire(target, name, evt); + }; + var getContentEditable = function (node) { + if (node && isElement$1(node)) { + var contentEditable = node.getAttribute('data-mce-contenteditable'); + if (contentEditable && contentEditable !== 'inherit') { + return contentEditable; + } + return node.contentEditable !== 'inherit' ? node.contentEditable : null; + } else { + return null; + } + }; + var getContentEditableParent = function (node) { + var root = getRoot(); + var state = null; + for (; node && node !== root; node = node.parentNode) { + state = getContentEditable(node); + if (state !== null) { + break; + } + } + return state; + }; + var destroy = function () { + if (boundEvents.length > 0) { + var i = boundEvents.length; + while (i--) { + var item = boundEvents[i]; + events.unbind(item[0], item[1], item[2]); + } + } + each$1(files, function (_, url) { + styleSheetLoader.unload(url); + delete files[url]; + }); + if (Sizzle.setDocument) { + Sizzle.setDocument(); + } + }; + var isChildOf = function (node, parent) { + while (node) { + if (parent === node) { + return true; + } + node = node.parentNode; + } + return false; + }; + var dumpRng = function (r) { + return 'startContainer: ' + r.startContainer.nodeName + ', startOffset: ' + r.startOffset + ', endContainer: ' + r.endContainer.nodeName + ', endOffset: ' + r.endOffset; + }; + var self = { + doc: doc, + settings: settings, + win: win, + files: files, + stdMode: stdMode, + boxModel: boxModel, + styleSheetLoader: styleSheetLoader, + boundEvents: boundEvents, + styles: styles, + schema: schema, + events: events, + isBlock: isBlock, + $: $, + $$: $$, + root: null, + clone: clone, + getRoot: getRoot, + getViewPort: getViewPort, + getRect: getRect, + getSize: getSize, + getParent: getParent, + getParents: getParents, + get: get, + getNext: getNext, + getPrev: getPrev, + select: select, + is: is, + add: add, + create: create, + createHTML: createHTML, + createFragment: createFragment, + remove: remove, + setStyle: setStyle, + getStyle: getStyle, + setStyles: setStyles, + removeAllAttribs: removeAllAttribs, + setAttrib: setAttrib, + setAttribs: setAttribs, + getAttrib: getAttrib, + getPos: getPos$1, + parseStyle: parseStyle, + serializeStyle: serializeStyle, + addStyle: addStyle, + loadCSS: loadCSS, + addClass: addClass, + removeClass: removeClass, + hasClass: hasClass, + toggleClass: toggleClass, + show: show, + hide: hide, + isHidden: isHidden, + uniqueId: uniqueId, + setHTML: setHTML, + getOuterHTML: getOuterHTML, + setOuterHTML: setOuterHTML, + decode: decode, + encode: encode, + insertAfter: insertAfter, + replace: replace, + rename: rename, + findCommonAncestor: findCommonAncestor, + toHex: toHex, + run: run, + getAttribs: getAttribs, + isEmpty: isEmpty, + createRng: createRng, + nodeIndex: findNodeIndex, + split: split, + bind: bind, + unbind: unbind, + fire: fire, + getContentEditable: getContentEditable, + getContentEditableParent: getContentEditableParent, + destroy: destroy, + isChildOf: isChildOf, + dumpRng: dumpRng + }; + var attrHooks = setupAttrHooks(styles, settings, function () { + return self; + }); + return self; + }; + DOMUtils.DOM = DOMUtils(document); + DOMUtils.nodeIndex = findNodeIndex; + + var DOM = DOMUtils.DOM; + var each$6 = Tools.each, grep$2 = Tools.grep; + var QUEUED = 0; + var LOADING = 1; + var LOADED = 2; + var FAILED = 3; + var ScriptLoader = function () { + function ScriptLoader(settings) { + if (settings === void 0) { + settings = {}; + } + this.states = {}; + this.queue = []; + this.scriptLoadedCallbacks = {}; + this.queueLoadedCallbacks = []; + this.loading = 0; + this.settings = settings; + } + ScriptLoader.prototype._setReferrerPolicy = function (referrerPolicy) { + this.settings.referrerPolicy = referrerPolicy; + }; + ScriptLoader.prototype.loadScript = function (url, success, failure) { + var dom = DOM; + var elm; + var cleanup = function () { + dom.remove(id); + if (elm) { + elm.onerror = elm.onload = elm = null; + } + }; + var done = function () { + cleanup(); + success(); + }; + var error = function () { + cleanup(); + if (isFunction(failure)) { + failure(); + } else { + if (typeof console !== 'undefined' && console.log) { + console.log('Failed to load script: ' + url); + } + } + }; + var id = dom.uniqueId(); + elm = document.createElement('script'); + elm.id = id; + elm.type = 'text/javascript'; + elm.src = Tools._addCacheSuffix(url); + if (this.settings.referrerPolicy) { + dom.setAttrib(elm, 'referrerpolicy', this.settings.referrerPolicy); + } + elm.onload = done; + elm.onerror = error; + (document.getElementsByTagName('head')[0] || document.body).appendChild(elm); + }; + ScriptLoader.prototype.isDone = function (url) { + return this.states[url] === LOADED; + }; + ScriptLoader.prototype.markDone = function (url) { + this.states[url] = LOADED; + }; + ScriptLoader.prototype.add = function (url, success, scope, failure) { + var state = this.states[url]; + this.queue.push(url); + if (state === undefined) { + this.states[url] = QUEUED; + } + if (success) { + if (!this.scriptLoadedCallbacks[url]) { + this.scriptLoadedCallbacks[url] = []; + } + this.scriptLoadedCallbacks[url].push({ + success: success, + failure: failure, + scope: scope || this + }); + } + }; + ScriptLoader.prototype.load = function (url, success, scope, failure) { + return this.add(url, success, scope, failure); + }; + ScriptLoader.prototype.remove = function (url) { + delete this.states[url]; + delete this.scriptLoadedCallbacks[url]; + }; + ScriptLoader.prototype.loadQueue = function (success, scope, failure) { + this.loadScripts(this.queue, success, scope, failure); + }; + ScriptLoader.prototype.loadScripts = function (scripts, success, scope, failure) { + var self = this; + var failures = []; + var execCallbacks = function (name, url) { + each$6(self.scriptLoadedCallbacks[url], function (callback) { + if (isFunction(callback[name])) { + callback[name].call(callback.scope); + } + }); + self.scriptLoadedCallbacks[url] = undefined; + }; + self.queueLoadedCallbacks.push({ + success: success, + failure: failure, + scope: scope || this + }); + var loadScripts = function () { + var loadingScripts = grep$2(scripts); + scripts.length = 0; + each$6(loadingScripts, function (url) { + if (self.states[url] === LOADED) { + execCallbacks('success', url); + return; + } + if (self.states[url] === FAILED) { + execCallbacks('failure', url); + return; + } + if (self.states[url] !== LOADING) { + self.states[url] = LOADING; + self.loading++; + self.loadScript(url, function () { + self.states[url] = LOADED; + self.loading--; + execCallbacks('success', url); + loadScripts(); + }, function () { + self.states[url] = FAILED; + self.loading--; + failures.push(url); + execCallbacks('failure', url); + loadScripts(); + }); + } + }); + if (!self.loading) { + var notifyCallbacks = self.queueLoadedCallbacks.slice(0); + self.queueLoadedCallbacks.length = 0; + each$6(notifyCallbacks, function (callback) { + if (failures.length === 0) { + if (isFunction(callback.success)) { + callback.success.call(callback.scope); + } + } else { + if (isFunction(callback.failure)) { + callback.failure.call(callback.scope, failures); + } + } + }); + } + }; + loadScripts(); + }; + ScriptLoader.ScriptLoader = new ScriptLoader(); + return ScriptLoader; + }(); + + var Cell = function (initial) { + var value = initial; + var get = function () { + return value; + }; + var set = function (v) { + value = v; + }; + return { + get: get, + set: set + }; + }; + + var isRaw = function (str) { + return isObject(str) && has(str, 'raw'); + }; + var isTokenised = function (str) { + return isArray(str) && str.length > 1; + }; + var data = {}; + var currentCode = Cell('en'); + var getLanguageData = function () { + return get$1(data, currentCode.get()); + }; + var getData = function () { + return map$1(data, function (value) { + return __assign({}, value); + }); + }; + var setCode = function (newCode) { + if (newCode) { + currentCode.set(newCode); + } + }; + var getCode = function () { + return currentCode.get(); + }; + var add = function (code, items) { + var langData = data[code]; + if (!langData) { + data[code] = langData = {}; + } + each$1(items, function (translation, name) { + langData[name.toLowerCase()] = translation; + }); + }; + var translate = function (text) { + var langData = getLanguageData().getOr({}); + var toString = function (obj) { + if (isFunction(obj)) { + return Object.prototype.toString.call(obj); + } + return !isEmpty(obj) ? '' + obj : ''; + }; + var isEmpty = function (text) { + return text === '' || text === null || text === undefined; + }; + var getLangData = function (text) { + var textstr = toString(text); + return get$1(langData, textstr.toLowerCase()).map(toString).getOr(textstr); + }; + var removeContext = function (str) { + return str.replace(/{context:\w+}$/, ''); + }; + if (isEmpty(text)) { + return ''; + } + if (isRaw(text)) { + return toString(text.raw); + } + if (isTokenised(text)) { + var values_1 = text.slice(1); + var substitued = getLangData(text[0]).replace(/\{([0-9]+)\}/g, function ($1, $2) { + return has(values_1, $2) ? toString(values_1[$2]) : $1; + }); + return removeContext(substitued); + } + return removeContext(getLangData(text)); + }; + var isRtl = function () { + return getLanguageData().bind(function (items) { + return get$1(items, '_dir'); + }).exists(function (dir) { + return dir === 'rtl'; + }); + }; + var hasCode = function (code) { + return has(data, code); + }; + var I18n = { + getData: getData, + setCode: setCode, + getCode: getCode, + add: add, + translate: translate, + isRtl: isRtl, + hasCode: hasCode + }; + + var AddOnManager = function () { + var items = []; + var urls = {}; + var lookup = {}; + var _listeners = []; + var runListeners = function (name, state) { + var matchedListeners = filter(_listeners, function (listener) { + return listener.name === name && listener.state === state; + }); + each(matchedListeners, function (listener) { + return listener.callback(); + }); + }; + var get = function (name) { + if (lookup[name]) { + return lookup[name].instance; + } + return undefined; + }; + var dependencies = function (name) { + var result; + if (lookup[name]) { + result = lookup[name].dependencies; + } + return result || []; + }; + var requireLangPack = function (name, languages) { + if (AddOnManager.languageLoad !== false) { + waitFor(name, function () { + var language = I18n.getCode(); + var wrappedLanguages = ',' + (languages || '') + ','; + if (!language || languages && wrappedLanguages.indexOf(',' + language + ',') === -1) { + return; + } + ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js'); + }, 'loaded'); + } + }; + var add = function (id, addOn, dependencies) { + var addOnConstructor = addOn; + items.push(addOnConstructor); + lookup[id] = { + instance: addOnConstructor, + dependencies: dependencies + }; + runListeners(id, 'added'); + return addOnConstructor; + }; + var remove = function (name) { + delete urls[name]; + delete lookup[name]; + }; + var createUrl = function (baseUrl, dep) { + if (typeof dep === 'object') { + return dep; + } + return typeof baseUrl === 'string' ? { + prefix: '', + resource: dep, + suffix: '' + } : { + prefix: baseUrl.prefix, + resource: dep, + suffix: baseUrl.suffix + }; + }; + var addComponents = function (pluginName, scripts) { + var pluginUrl = urls[pluginName]; + each(scripts, function (script) { + ScriptLoader.ScriptLoader.add(pluginUrl + '/' + script); + }); + }; + var loadDependencies = function (name, addOnUrl, success, scope) { + var deps = dependencies(name); + each(deps, function (dep) { + var newUrl = createUrl(addOnUrl, dep); + load(newUrl.resource, newUrl, undefined, undefined); + }); + if (success) { + if (scope) { + success.call(scope); + } else { + success.call(ScriptLoader); + } + } + }; + var load = function (name, addOnUrl, success, scope, failure) { + if (urls[name]) { + return; + } + var urlString = typeof addOnUrl === 'string' ? addOnUrl : addOnUrl.prefix + addOnUrl.resource + addOnUrl.suffix; + if (urlString.indexOf('/') !== 0 && urlString.indexOf('://') === -1) { + urlString = AddOnManager.baseURL + '/' + urlString; + } + urls[name] = urlString.substring(0, urlString.lastIndexOf('/')); + var done = function () { + runListeners(name, 'loaded'); + loadDependencies(name, addOnUrl, success, scope); + }; + if (lookup[name]) { + done(); + } else { + ScriptLoader.ScriptLoader.add(urlString, done, scope, failure); + } + }; + var waitFor = function (name, callback, state) { + if (state === void 0) { + state = 'added'; + } + if (has(lookup, name) && state === 'added') { + callback(); + } else if (has(urls, name) && state === 'loaded') { + callback(); + } else { + _listeners.push({ + name: name, + state: state, + callback: callback + }); + } + }; + return { + items: items, + urls: urls, + lookup: lookup, + _listeners: _listeners, + get: get, + dependencies: dependencies, + requireLangPack: requireLangPack, + add: add, + remove: remove, + createUrl: createUrl, + addComponents: addComponents, + load: load, + waitFor: waitFor + }; + }; + AddOnManager.languageLoad = true; + AddOnManager.baseURL = ''; + AddOnManager.PluginManager = AddOnManager(); + AddOnManager.ThemeManager = AddOnManager(); + + var first = function (fn, rate) { + var timer = null; + var cancel = function () { + if (timer !== null) { + clearTimeout(timer); + timer = null; + } + }; + var throttle = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (timer === null) { + timer = setTimeout(function () { + fn.apply(null, args); + timer = null; + }, rate); + } + }; + return { + cancel: cancel, + throttle: throttle + }; + }; + var last$2 = function (fn, rate) { + var timer = null; + var cancel = function () { + if (timer !== null) { + clearTimeout(timer); + timer = null; + } + }; + var throttle = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (timer !== null) { + clearTimeout(timer); + } + timer = setTimeout(function () { + fn.apply(null, args); + timer = null; + }, rate); + }; + return { + cancel: cancel, + throttle: throttle + }; + }; + + var read = function (element, attr) { + var value = get$4(element, attr); + return value === undefined || value === '' ? [] : value.split(' '); + }; + var add$1 = function (element, attr, id) { + var old = read(element, attr); + var nu = old.concat([id]); + set(element, attr, nu.join(' ')); + return true; + }; + var remove$2 = function (element, attr, id) { + var nu = filter(read(element, attr), function (v) { + return v !== id; + }); + if (nu.length > 0) { + set(element, attr, nu.join(' ')); + } else { + remove$1(element, attr); + } + return false; + }; + + var supports = function (element) { + return element.dom.classList !== undefined; + }; + var get$6 = function (element) { + return read(element, 'class'); + }; + var add$2 = function (element, clazz) { + return add$1(element, 'class', clazz); + }; + var remove$3 = function (element, clazz) { + return remove$2(element, 'class', clazz); + }; + + var add$3 = function (element, clazz) { + if (supports(element)) { + element.dom.classList.add(clazz); + } else { + add$2(element, clazz); + } + }; + var cleanClass = function (element) { + var classList = supports(element) ? element.dom.classList : get$6(element); + if (classList.length === 0) { + remove$1(element, 'class'); + } + }; + var remove$4 = function (element, clazz) { + if (supports(element)) { + var classList = element.dom.classList; + classList.remove(clazz); + } else { + remove$3(element, clazz); + } + cleanClass(element); + }; + var has$2 = function (element, clazz) { + return supports(element) && element.dom.classList.contains(clazz); + }; + + var descendants = function (scope, predicate) { + var result = []; + each(children(scope), function (x) { + if (predicate(x)) { + result = result.concat([x]); + } + result = result.concat(descendants(x, predicate)); + }); + return result; + }; + + var descendants$1 = function (scope, selector) { + return all(selector, scope); + }; + + var annotation = constant('mce-annotation'); + var dataAnnotation = constant('data-mce-annotation'); + var dataAnnotationId = constant('data-mce-annotation-uid'); + + var identify = function (editor, annotationName) { + var rng = editor.selection.getRng(); + var start = SugarElement.fromDom(rng.startContainer); + var root = SugarElement.fromDom(editor.getBody()); + var selector = annotationName.fold(function () { + return '.' + annotation(); + }, function (an) { + return '[' + dataAnnotation() + '="' + an + '"]'; + }); + var newStart = child(start, rng.startOffset).getOr(start); + var closest = closest$1(newStart, selector, function (n) { + return eq$2(n, root); + }); + var getAttr = function (c, property) { + if (has$1(c, property)) { + return Optional.some(get$4(c, property)); + } else { + return Optional.none(); + } + }; + return closest.bind(function (c) { + return getAttr(c, '' + dataAnnotationId()).bind(function (uid) { + return getAttr(c, '' + dataAnnotation()).map(function (name) { + var elements = findMarkers(editor, uid); + return { + uid: uid, + name: name, + elements: elements + }; + }); + }); + }); + }; + var isAnnotation = function (elem) { + return isElement(elem) && has$2(elem, annotation()); + }; + var findMarkers = function (editor, uid) { + var body = SugarElement.fromDom(editor.getBody()); + return descendants$1(body, '[' + dataAnnotationId() + '="' + uid + '"]'); + }; + var findAll = function (editor, name) { + var body = SugarElement.fromDom(editor.getBody()); + var markers = descendants$1(body, '[' + dataAnnotation() + '="' + name + '"]'); + var directory = {}; + each(markers, function (m) { + var uid = get$4(m, dataAnnotationId()); + var nodesAlready = directory.hasOwnProperty(uid) ? directory[uid] : []; + directory[uid] = nodesAlready.concat([m]); + }); + return directory; + }; + + var setup = function (editor, _registry) { + var changeCallbacks = Cell({}); + var initData = function () { + return { + listeners: [], + previous: Cell(Optional.none()) + }; + }; + var withCallbacks = function (name, f) { + updateCallbacks(name, function (data) { + f(data); + return data; + }); + }; + var updateCallbacks = function (name, f) { + var callbackMap = changeCallbacks.get(); + var data = callbackMap.hasOwnProperty(name) ? callbackMap[name] : initData(); + var outputData = f(data); + callbackMap[name] = outputData; + changeCallbacks.set(callbackMap); + }; + var fireCallbacks = function (name, uid, elements) { + withCallbacks(name, function (data) { + each(data.listeners, function (f) { + return f(true, name, { + uid: uid, + nodes: map(elements, function (elem) { + return elem.dom; + }) + }); + }); + }); + }; + var fireNoAnnotation = function (name) { + withCallbacks(name, function (data) { + each(data.listeners, function (f) { + return f(false, name); + }); + }); + }; + var onNodeChange = last$2(function () { + var callbackMap = changeCallbacks.get(); + var annotations = sort$1(keys(callbackMap)); + each(annotations, function (name) { + updateCallbacks(name, function (data) { + var prev = data.previous.get(); + identify(editor, Optional.some(name)).fold(function () { + if (prev.isSome()) { + fireNoAnnotation(name); + data.previous.set(Optional.none()); + } + }, function (_a) { + var uid = _a.uid, name = _a.name, elements = _a.elements; + if (!prev.is(uid)) { + fireCallbacks(name, uid, elements); + data.previous.set(Optional.some(uid)); + } + }); + return { + previous: data.previous, + listeners: data.listeners + }; + }); + }); + }, 30); + editor.on('remove', function () { + onNodeChange.cancel(); + }); + editor.on('NodeChange', function () { + onNodeChange.throttle(); + }); + var addListener = function (name, f) { + updateCallbacks(name, function (data) { + return { + previous: data.previous, + listeners: data.listeners.concat([f]) + }; + }); + }; + return { addListener: addListener }; + }; + + var setup$1 = function (editor, registry) { + var identifyParserNode = function (span) { + return Optional.from(span.attr(dataAnnotation())).bind(registry.lookup); + }; + editor.on('init', function () { + editor.serializer.addNodeFilter('span', function (spans) { + each(spans, function (span) { + identifyParserNode(span).each(function (settings) { + if (settings.persistent === false) { + span.unwrap(); + } + }); + }); + }); + }); + }; + + var create$2 = function () { + var annotations = {}; + var register = function (name, settings) { + annotations[name] = { + name: name, + settings: settings + }; + }; + var lookup = function (name) { + return annotations.hasOwnProperty(name) ? Optional.from(annotations[name]).map(function (a) { + return a.settings; + }) : Optional.none(); + }; + return { + register: register, + lookup: lookup + }; + }; + + var unique = 0; + var generate$1 = function (prefix) { + var date = new Date(); + var time = date.getTime(); + var random = Math.floor(Math.random() * 1000000000); + unique++; + return prefix + '_' + random + unique + String(time); + }; + + var add$4 = function (element, classes) { + each(classes, function (x) { + add$3(element, x); + }); + }; + + var fromHtml$1 = function (html, scope) { + var doc = scope || document; + var div = doc.createElement('div'); + div.innerHTML = html; + return children(SugarElement.fromDom(div)); + }; + + var get$7 = function (element) { + return element.dom.innerHTML; + }; + var set$1 = function (element, content) { + var owner$1 = owner(element); + var docDom = owner$1.dom; + var fragment = SugarElement.fromDom(docDom.createDocumentFragment()); + var contentElements = fromHtml$1(content, docDom); + append$1(fragment, contentElements); + empty(element); + append(element, fragment); + }; + + var clone$1 = function (original, isDeep) { + return SugarElement.fromDom(original.dom.cloneNode(isDeep)); + }; + var shallow = function (original) { + return clone$1(original, false); + }; + var deep = function (original) { + return clone$1(original, true); + }; + + var TextWalker = function (startNode, rootNode, isBoundary) { + if (isBoundary === void 0) { + isBoundary = never; + } + var walker = new DomTreeWalker(startNode, rootNode); + var walk = function (direction) { + var next; + do { + next = walker[direction](); + } while (next && !isText$1(next) && !isBoundary(next)); + return Optional.from(next).filter(isText$1); + }; + return { + current: function () { + return Optional.from(walker.current()).filter(isText$1); + }, + next: function () { + return walk('next'); + }, + prev: function () { + return walk('prev'); + }, + prev2: function () { + return walk('prev2'); + } + }; + }; + + var TextSeeker = function (dom, isBoundary) { + var isBlockBoundary = isBoundary ? isBoundary : function (node) { + return dom.isBlock(node) || isBr(node) || isContentEditableFalse(node); + }; + var walk = function (node, offset, walker, process) { + if (isText$1(node)) { + var newOffset = process(node, offset, node.data); + if (newOffset !== -1) { + return Optional.some({ + container: node, + offset: newOffset + }); + } + } + return walker().bind(function (next) { + return walk(next.container, next.offset, walker, process); + }); + }; + var backwards = function (node, offset, process, root) { + var walker = TextWalker(node, root, isBlockBoundary); + return walk(node, offset, function () { + return walker.prev().map(function (prev) { + return { + container: prev, + offset: prev.length + }; + }); + }, process).getOrNull(); + }; + var forwards = function (node, offset, process, root) { + var walker = TextWalker(node, root, isBlockBoundary); + return walk(node, offset, function () { + return walker.next().map(function (next) { + return { + container: next, + offset: 0 + }; + }); + }, process).getOrNull(); + }; + return { + backwards: backwards, + forwards: forwards + }; + }; + + var cat = function (arr) { + var r = []; + var push = function (x) { + r.push(x); + }; + for (var i = 0; i < arr.length; i++) { + arr[i].each(push); + } + return r; + }; + var lift2 = function (oa, ob, f) { + return oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none(); + }; + var lift3 = function (oa, ob, oc, f) { + return oa.isSome() && ob.isSome() && oc.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Optional.none(); + }; + var someIf = function (b, a) { + return b ? Optional.some(a) : Optional.none(); + }; + + var round = Math.round; + var clone$2 = function (rect) { + if (!rect) { + return { + left: 0, + top: 0, + bottom: 0, + right: 0, + width: 0, + height: 0 + }; + } + return { + left: round(rect.left), + top: round(rect.top), + bottom: round(rect.bottom), + right: round(rect.right), + width: round(rect.width), + height: round(rect.height) + }; + }; + var collapse = function (rect, toStart) { + rect = clone$2(rect); + if (toStart) { + rect.right = rect.left; + } else { + rect.left = rect.left + rect.width; + rect.right = rect.left; + } + rect.width = 0; + return rect; + }; + var isEqual = function (rect1, rect2) { + return rect1.left === rect2.left && rect1.top === rect2.top && rect1.bottom === rect2.bottom && rect1.right === rect2.right; + }; + var isValidOverflow = function (overflowY, rect1, rect2) { + return overflowY >= 0 && overflowY <= Math.min(rect1.height, rect2.height) / 2; + }; + var isAbove = function (rect1, rect2) { + var halfHeight = Math.min(rect2.height / 2, rect1.height / 2); + if (rect1.bottom - halfHeight < rect2.top) { + return true; + } + if (rect1.top > rect2.bottom) { + return false; + } + return isValidOverflow(rect2.top - rect1.bottom, rect1, rect2); + }; + var isBelow = function (rect1, rect2) { + if (rect1.top > rect2.bottom) { + return true; + } + if (rect1.bottom < rect2.top) { + return false; + } + return isValidOverflow(rect2.bottom - rect1.top, rect1, rect2); + }; + var containsXY = function (rect, clientX, clientY) { + return clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom; + }; + + var getSelectedNode = function (range) { + var startContainer = range.startContainer, startOffset = range.startOffset; + if (startContainer.hasChildNodes() && range.endOffset === startOffset + 1) { + return startContainer.childNodes[startOffset]; + } + return null; + }; + var getNode = function (container, offset) { + if (container.nodeType === 1 && container.hasChildNodes()) { + if (offset >= container.childNodes.length) { + offset = container.childNodes.length - 1; + } + container = container.childNodes[offset]; + } + return container; + }; + + var extendingChars = new RegExp('[\u0300-\u036f\u0483-\u0487\u0488-\u0489\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u0610-\u061a' + '\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0' + '\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e3-\u0902\u093a\u093c' + '\u0941-\u0948\u094d\u0951-\u0957\u0962-\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2-\u09e3' + '\u0a01-\u0a02\u0a3c\u0a41-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51\u0a70-\u0a71\u0a75\u0a81-\u0a82\u0abc' + '\u0ac1-\u0ac5\u0ac7-\u0ac8\u0acd\u0ae2-\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57' + '\u0b62-\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c00\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56' + '\u0c62-\u0c63\u0c81\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc-\u0ccd\u0cd5-\u0cd6\u0ce2-\u0ce3\u0d01\u0d3e\u0d41-\u0d44' + '\u0d4d\u0d57\u0d62-\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9' + '\u0ebb-\u0ebc\u0ec8-\u0ecd\u0f18-\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86-\u0f87\u0f8d-\u0f97' + '\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039-\u103a\u103d-\u103e\u1058-\u1059\u105e-\u1060\u1071-\u1074' + '\u1082\u1085-\u1086\u108d\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17b4-\u17b5' + '\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193b\u1a17-\u1a18' + '\u1a1b\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1ab0-\u1abd\u1ABE\u1b00-\u1b03\u1b34' + '\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80-\u1b81\u1ba2-\u1ba5\u1ba8-\u1ba9\u1bab-\u1bad\u1be6\u1be8-\u1be9' + '\u1bed\u1bef-\u1bf1\u1c2c-\u1c33\u1c36-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8-\u1cf9' + '\u1dc0-\u1df5\u1dfc-\u1dff\u200c-\u200d\u20d0-\u20dc\u20DD-\u20E0\u20e1\u20E2-\u20E4\u20e5-\u20f0\u2cef-\u2cf1' + '\u2d7f\u2de0-\u2dff\u302a-\u302d\u302e-\u302f\u3099-\u309a\ua66f\uA670-\uA672\ua674-\ua67d\ua69e-\ua69f\ua6f0-\ua6f1' + '\ua802\ua806\ua80b\ua825-\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc' + '\ua9e5\uaa29-\uaa2e\uaa31-\uaa32\uaa35-\uaa36\uaa43\uaa4c\uaa7c\uaab0\uaab2-\uaab4\uaab7-\uaab8\uaabe-\uaabf\uaac1' + '\uaaec-\uaaed\uaaf6\uabe5\uabe8\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\uff9e-\uff9f]'); + var isExtendingChar = function (ch) { + return typeof ch === 'string' && ch.charCodeAt(0) >= 768 && extendingChars.test(ch); + }; + + var or = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return function (x) { + for (var i = 0; i < args.length; i++) { + if (args[i](x)) { + return true; + } + } + return false; + }; + }; + var and = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return function (x) { + for (var i = 0; i < args.length; i++) { + if (!args[i](x)) { + return false; + } + } + return true; + }; + }; + + var isElement$3 = isElement$1; + var isCaretCandidate$1 = isCaretCandidate; + var isBlock$1 = matchStyleValues('display', 'block table'); + var isFloated = matchStyleValues('float', 'left right'); + var isValidElementCaretCandidate = and(isElement$3, isCaretCandidate$1, not(isFloated)); + var isNotPre = not(matchStyleValues('white-space', 'pre pre-line pre-wrap')); + var isText$4 = isText$1; + var isBr$3 = isBr; + var nodeIndex = DOMUtils.nodeIndex; + var resolveIndex = getNode; + var createRange = function (doc) { + return 'createRange' in doc ? doc.createRange() : DOMUtils.DOM.createRng(); + }; + var isWhiteSpace = function (chr) { + return chr && /[\r\n\t ]/.test(chr); + }; + var isRange = function (rng) { + return !!rng.setStart && !!rng.setEnd; + }; + var isHiddenWhiteSpaceRange = function (range) { + var container = range.startContainer; + var offset = range.startOffset; + var text; + if (isWhiteSpace(range.toString()) && isNotPre(container.parentNode) && isText$1(container)) { + text = container.data; + if (isWhiteSpace(text[offset - 1]) || isWhiteSpace(text[offset + 1])) { + return true; + } + } + return false; + }; + var getBrClientRect = function (brNode) { + var doc = brNode.ownerDocument; + var rng = createRange(doc); + var nbsp$1 = doc.createTextNode(nbsp); + var parentNode = brNode.parentNode; + parentNode.insertBefore(nbsp$1, brNode); + rng.setStart(nbsp$1, 0); + rng.setEnd(nbsp$1, 1); + var clientRect = clone$2(rng.getBoundingClientRect()); + parentNode.removeChild(nbsp$1); + return clientRect; + }; + var getBoundingClientRectWebKitText = function (rng) { + var sc = rng.startContainer; + var ec = rng.endContainer; + var so = rng.startOffset; + var eo = rng.endOffset; + if (sc === ec && isText$1(ec) && so === 0 && eo === 1) { + var newRng = rng.cloneRange(); + newRng.setEndAfter(ec); + return getBoundingClientRect(newRng); + } else { + return null; + } + }; + var isZeroRect = function (r) { + return r.left === 0 && r.right === 0 && r.top === 0 && r.bottom === 0; + }; + var getBoundingClientRect = function (item) { + var clientRect; + var clientRects = item.getClientRects(); + if (clientRects.length > 0) { + clientRect = clone$2(clientRects[0]); + } else { + clientRect = clone$2(item.getBoundingClientRect()); + } + if (!isRange(item) && isBr$3(item) && isZeroRect(clientRect)) { + return getBrClientRect(item); + } + if (isZeroRect(clientRect) && isRange(item)) { + return getBoundingClientRectWebKitText(item); + } + return clientRect; + }; + var collapseAndInflateWidth = function (clientRect, toStart) { + var newClientRect = collapse(clientRect, toStart); + newClientRect.width = 1; + newClientRect.right = newClientRect.left + 1; + return newClientRect; + }; + var getCaretPositionClientRects = function (caretPosition) { + var clientRects = []; + var beforeNode, node; + var addUniqueAndValidRect = function (clientRect) { + if (clientRect.height === 0) { + return; + } + if (clientRects.length > 0) { + if (isEqual(clientRect, clientRects[clientRects.length - 1])) { + return; + } + } + clientRects.push(clientRect); + }; + var addCharacterOffset = function (container, offset) { + var range = createRange(container.ownerDocument); + if (offset < container.data.length) { + if (isExtendingChar(container.data[offset])) { + return clientRects; + } + if (isExtendingChar(container.data[offset - 1])) { + range.setStart(container, offset); + range.setEnd(container, offset + 1); + if (!isHiddenWhiteSpaceRange(range)) { + addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), false)); + return clientRects; + } + } + } + if (offset > 0) { + range.setStart(container, offset - 1); + range.setEnd(container, offset); + if (!isHiddenWhiteSpaceRange(range)) { + addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), false)); + } + } + if (offset < container.data.length) { + range.setStart(container, offset); + range.setEnd(container, offset + 1); + if (!isHiddenWhiteSpaceRange(range)) { + addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), true)); + } + } + }; + if (isText$4(caretPosition.container())) { + addCharacterOffset(caretPosition.container(), caretPosition.offset()); + return clientRects; + } + if (isElement$3(caretPosition.container())) { + if (caretPosition.isAtEnd()) { + node = resolveIndex(caretPosition.container(), caretPosition.offset()); + if (isText$4(node)) { + addCharacterOffset(node, node.data.length); + } + if (isValidElementCaretCandidate(node) && !isBr$3(node)) { + addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), false)); + } + } else { + node = resolveIndex(caretPosition.container(), caretPosition.offset()); + if (isText$4(node)) { + addCharacterOffset(node, 0); + } + if (isValidElementCaretCandidate(node) && caretPosition.isAtEnd()) { + addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), false)); + return clientRects; + } + beforeNode = resolveIndex(caretPosition.container(), caretPosition.offset() - 1); + if (isValidElementCaretCandidate(beforeNode) && !isBr$3(beforeNode)) { + if (isBlock$1(beforeNode) || isBlock$1(node) || !isValidElementCaretCandidate(node)) { + addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(beforeNode), false)); + } + } + if (isValidElementCaretCandidate(node)) { + addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), true)); + } + } + } + return clientRects; + }; + var CaretPosition = function (container, offset, clientRects) { + var isAtStart = function () { + if (isText$4(container)) { + return offset === 0; + } + return offset === 0; + }; + var isAtEnd = function () { + if (isText$4(container)) { + return offset >= container.data.length; + } + return offset >= container.childNodes.length; + }; + var toRange = function () { + var range = createRange(container.ownerDocument); + range.setStart(container, offset); + range.setEnd(container, offset); + return range; + }; + var getClientRects = function () { + if (!clientRects) { + clientRects = getCaretPositionClientRects(CaretPosition(container, offset)); + } + return clientRects; + }; + var isVisible = function () { + return getClientRects().length > 0; + }; + var isEqual = function (caretPosition) { + return caretPosition && container === caretPosition.container() && offset === caretPosition.offset(); + }; + var getNode = function (before) { + return resolveIndex(container, before ? offset - 1 : offset); + }; + return { + container: constant(container), + offset: constant(offset), + toRange: toRange, + getClientRects: getClientRects, + isVisible: isVisible, + isAtStart: isAtStart, + isAtEnd: isAtEnd, + isEqual: isEqual, + getNode: getNode + }; + }; + CaretPosition.fromRangeStart = function (range) { + return CaretPosition(range.startContainer, range.startOffset); + }; + CaretPosition.fromRangeEnd = function (range) { + return CaretPosition(range.endContainer, range.endOffset); + }; + CaretPosition.after = function (node) { + return CaretPosition(node.parentNode, nodeIndex(node) + 1); + }; + CaretPosition.before = function (node) { + return CaretPosition(node.parentNode, nodeIndex(node)); + }; + CaretPosition.isAbove = function (pos1, pos2) { + return lift2(head(pos2.getClientRects()), last(pos1.getClientRects()), isAbove).getOr(false); + }; + CaretPosition.isBelow = function (pos1, pos2) { + return lift2(last(pos2.getClientRects()), head(pos1.getClientRects()), isBelow).getOr(false); + }; + CaretPosition.isAtStart = function (pos) { + return pos ? pos.isAtStart() : false; + }; + CaretPosition.isAtEnd = function (pos) { + return pos ? pos.isAtEnd() : false; + }; + CaretPosition.isTextPosition = function (pos) { + return pos ? isText$1(pos.container()) : false; + }; + CaretPosition.isElementPosition = function (pos) { + return CaretPosition.isTextPosition(pos) === false; + }; + + var trimEmptyTextNode = function (dom, node) { + if (isText$1(node) && node.data.length === 0) { + dom.remove(node); + } + }; + var insertNode = function (dom, rng, node) { + rng.insertNode(node); + trimEmptyTextNode(dom, node.previousSibling); + trimEmptyTextNode(dom, node.nextSibling); + }; + var insertFragment = function (dom, rng, frag) { + var firstChild = Optional.from(frag.firstChild); + var lastChild = Optional.from(frag.lastChild); + rng.insertNode(frag); + firstChild.each(function (child) { + return trimEmptyTextNode(dom, child.previousSibling); + }); + lastChild.each(function (child) { + return trimEmptyTextNode(dom, child.nextSibling); + }); + }; + var rangeInsertNode = function (dom, rng, node) { + if (isDocumentFragment$1(node)) { + insertFragment(dom, rng, node); + } else { + insertNode(dom, rng, node); + } + }; + + var isText$5 = isText$1; + var isBogus$2 = isBogus; + var nodeIndex$1 = DOMUtils.nodeIndex; + var normalizedParent = function (node) { + var parentNode = node.parentNode; + if (isBogus$2(parentNode)) { + return normalizedParent(parentNode); + } + return parentNode; + }; + var getChildNodes = function (node) { + if (!node) { + return []; + } + return reduce(node.childNodes, function (result, node) { + if (isBogus$2(node) && node.nodeName !== 'BR') { + result = result.concat(getChildNodes(node)); + } else { + result.push(node); + } + return result; + }, []); + }; + var normalizedTextOffset = function (node, offset) { + while (node = node.previousSibling) { + if (!isText$5(node)) { + break; + } + offset += node.data.length; + } + return offset; + }; + var equal$1 = function (a) { + return function (b) { + return a === b; + }; + }; + var normalizedNodeIndex = function (node) { + var nodes, index; + nodes = getChildNodes(normalizedParent(node)); + index = findIndex$1(nodes, equal$1(node), node); + nodes = nodes.slice(0, index + 1); + var numTextFragments = reduce(nodes, function (result, node, i) { + if (isText$5(node) && isText$5(nodes[i - 1])) { + result++; + } + return result; + }, 0); + nodes = filter$2(nodes, matchNodeNames([node.nodeName])); + index = findIndex$1(nodes, equal$1(node), node); + return index - numTextFragments; + }; + var createPathItem = function (node) { + var name; + if (isText$5(node)) { + name = 'text()'; + } else { + name = node.nodeName.toLowerCase(); + } + return name + '[' + normalizedNodeIndex(node) + ']'; + }; + var parentsUntil = function (root, node, predicate) { + var parents = []; + for (node = node.parentNode; node !== root; node = node.parentNode) { + if (predicate && predicate(node)) { + break; + } + parents.push(node); + } + return parents; + }; + var create$3 = function (root, caretPosition) { + var container, offset, path = [], outputOffset, childNodes, parents; + container = caretPosition.container(); + offset = caretPosition.offset(); + if (isText$5(container)) { + outputOffset = normalizedTextOffset(container, offset); + } else { + childNodes = container.childNodes; + if (offset >= childNodes.length) { + outputOffset = 'after'; + offset = childNodes.length - 1; + } else { + outputOffset = 'before'; + } + container = childNodes[offset]; + } + path.push(createPathItem(container)); + parents = parentsUntil(root, container); + parents = filter$2(parents, not(isBogus)); + path = path.concat(map$2(parents, function (node) { + return createPathItem(node); + })); + return path.reverse().join('/') + ',' + outputOffset; + }; + var resolvePathItem = function (node, name, index) { + var nodes = getChildNodes(node); + nodes = filter$2(nodes, function (node, index) { + return !isText$5(node) || !isText$5(nodes[index - 1]); + }); + nodes = filter$2(nodes, matchNodeNames([name])); + return nodes[index]; + }; + var findTextPosition = function (container, offset) { + var node = container, targetOffset = 0, dataLen; + while (isText$5(node)) { + dataLen = node.data.length; + if (offset >= targetOffset && offset <= targetOffset + dataLen) { + container = node; + offset = offset - targetOffset; + break; + } + if (!isText$5(node.nextSibling)) { + container = node; + offset = dataLen; + break; + } + targetOffset += dataLen; + node = node.nextSibling; + } + if (isText$5(container) && offset > container.data.length) { + offset = container.data.length; + } + return CaretPosition(container, offset); + }; + var resolve$1 = function (root, path) { + var offset; + if (!path) { + return null; + } + var parts = path.split(','); + var paths = parts[0].split('/'); + offset = parts.length > 1 ? parts[1] : 'before'; + var container = reduce(paths, function (result, value) { + var match = /([\w\-\(\)]+)\[([0-9]+)\]/.exec(value); + if (!match) { + return null; + } + if (match[1] === 'text()') { + match[1] = '#text'; + } + return resolvePathItem(result, match[1], parseInt(match[2], 10)); + }, root); + if (!container) { + return null; + } + if (!isText$5(container)) { + if (offset === 'after') { + offset = nodeIndex$1(container) + 1; + } else { + offset = nodeIndex$1(container); + } + return CaretPosition(container.parentNode, offset); + } + return findTextPosition(container, parseInt(offset, 10)); + }; + + var isContentEditableFalse$2 = isContentEditableFalse; + var getNormalizedTextOffset = function (trim, container, offset) { + var node, trimmedOffset; + trimmedOffset = trim(container.data.slice(0, offset)).length; + for (node = container.previousSibling; node && isText$1(node); node = node.previousSibling) { + trimmedOffset += trim(node.data).length; + } + return trimmedOffset; + }; + var getPoint = function (dom, trim, normalized, rng, start) { + var container = rng[start ? 'startContainer' : 'endContainer']; + var offset = rng[start ? 'startOffset' : 'endOffset']; + var point = []; + var childNodes, after = 0; + var root = dom.getRoot(); + if (isText$1(container)) { + point.push(normalized ? getNormalizedTextOffset(trim, container, offset) : offset); + } else { + childNodes = container.childNodes; + if (offset >= childNodes.length && childNodes.length) { + after = 1; + offset = Math.max(0, childNodes.length - 1); + } + point.push(dom.nodeIndex(childNodes[offset], normalized) + after); + } + for (; container && container !== root; container = container.parentNode) { + point.push(dom.nodeIndex(container, normalized)); + } + return point; + }; + var getLocation = function (trim, selection, normalized, rng) { + var dom = selection.dom, bookmark = {}; + bookmark.start = getPoint(dom, trim, normalized, rng, true); + if (!selection.isCollapsed()) { + bookmark.end = getPoint(dom, trim, normalized, rng, false); + } + return bookmark; + }; + var findIndex$2 = function (dom, name, element) { + var count = 0; + Tools.each(dom.select(name), function (node) { + if (node.getAttribute('data-mce-bogus') === 'all') { + return; + } + if (node === element) { + return false; + } + count++; + }); + return count; + }; + var moveEndPoint = function (rng, start) { + var container, offset, childNodes; + var prefix = start ? 'start' : 'end'; + container = rng[prefix + 'Container']; + offset = rng[prefix + 'Offset']; + if (isElement$1(container) && container.nodeName === 'TR') { + childNodes = container.childNodes; + container = childNodes[Math.min(start ? offset : offset - 1, childNodes.length - 1)]; + if (container) { + offset = start ? 0 : container.childNodes.length; + rng['set' + (start ? 'Start' : 'End')](container, offset); + } + } + }; + var normalizeTableCellSelection = function (rng) { + moveEndPoint(rng, true); + moveEndPoint(rng, false); + return rng; + }; + var findSibling = function (node, offset) { + var sibling; + if (isElement$1(node)) { + node = getNode(node, offset); + if (isContentEditableFalse$2(node)) { + return node; + } + } + if (isCaretContainer(node)) { + if (isText$1(node) && isCaretContainerBlock(node)) { + node = node.parentNode; + } + sibling = node.previousSibling; + if (isContentEditableFalse$2(sibling)) { + return sibling; + } + sibling = node.nextSibling; + if (isContentEditableFalse$2(sibling)) { + return sibling; + } + } + }; + var findAdjacentContentEditableFalseElm = function (rng) { + return findSibling(rng.startContainer, rng.startOffset) || findSibling(rng.endContainer, rng.endOffset); + }; + var getOffsetBookmark = function (trim, normalized, selection) { + var element = selection.getNode(); + var name = element ? element.nodeName : null; + var rng = selection.getRng(); + if (isContentEditableFalse$2(element) || name === 'IMG') { + return { + name: name, + index: findIndex$2(selection.dom, name, element) + }; + } + var sibling = findAdjacentContentEditableFalseElm(rng); + if (sibling) { + name = sibling.tagName; + return { + name: name, + index: findIndex$2(selection.dom, name, sibling) + }; + } + return getLocation(trim, selection, normalized, rng); + }; + var getCaretBookmark = function (selection) { + var rng = selection.getRng(); + return { + start: create$3(selection.dom.getRoot(), CaretPosition.fromRangeStart(rng)), + end: create$3(selection.dom.getRoot(), CaretPosition.fromRangeEnd(rng)) + }; + }; + var getRangeBookmark = function (selection) { + return { rng: selection.getRng() }; + }; + var createBookmarkSpan = function (dom, id, filled) { + var args = { + 'data-mce-type': 'bookmark', + id: id, + 'style': 'overflow:hidden;line-height:0px' + }; + return filled ? dom.create('span', args, '') : dom.create('span', args); + }; + var getPersistentBookmark = function (selection, filled) { + var dom = selection.dom; + var rng = selection.getRng(); + var id = dom.uniqueId(); + var collapsed = selection.isCollapsed(); + var element = selection.getNode(); + var name = element.nodeName; + if (name === 'IMG') { + return { + name: name, + index: findIndex$2(dom, name, element) + }; + } + var rng2 = normalizeTableCellSelection(rng.cloneRange()); + if (!collapsed) { + rng2.collapse(false); + var endBookmarkNode = createBookmarkSpan(dom, id + '_end', filled); + rangeInsertNode(dom, rng2, endBookmarkNode); + } + rng = normalizeTableCellSelection(rng); + rng.collapse(true); + var startBookmarkNode = createBookmarkSpan(dom, id + '_start', filled); + rangeInsertNode(dom, rng, startBookmarkNode); + selection.moveToBookmark({ + id: id, + keep: true + }); + return { id: id }; + }; + var getBookmark = function (selection, type, normalized) { + if (type === 2) { + return getOffsetBookmark(trim$2, normalized, selection); + } else if (type === 3) { + return getCaretBookmark(selection); + } else if (type) { + return getRangeBookmark(selection); + } else { + return getPersistentBookmark(selection, false); + } + }; + var getUndoBookmark = curry(getOffsetBookmark, identity, true); + + var DOM$1 = DOMUtils.DOM; + var defaultPreviewStyles = 'font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow'; + var getBodySetting = function (editor, name, defaultValue) { + var value = editor.getParam(name, defaultValue); + if (value.indexOf('=') !== -1) { + var bodyObj = editor.getParam(name, '', 'hash'); + return bodyObj.hasOwnProperty(editor.id) ? bodyObj[editor.id] : defaultValue; + } else { + return value; + } + }; + var getIframeAttrs = function (editor) { + return editor.getParam('iframe_attrs', {}); + }; + var getDocType = function (editor) { + return editor.getParam('doctype', ''); + }; + var getDocumentBaseUrl = function (editor) { + return editor.getParam('document_base_url', ''); + }; + var getBodyId = function (editor) { + return getBodySetting(editor, 'body_id', 'tinymce'); + }; + var getBodyClass = function (editor) { + return getBodySetting(editor, 'body_class', ''); + }; + var getContentSecurityPolicy = function (editor) { + return editor.getParam('content_security_policy', ''); + }; + var shouldPutBrInPre = function (editor) { + return editor.getParam('br_in_pre', true); + }; + var getForcedRootBlock = function (editor) { + if (editor.getParam('force_p_newlines', false)) { + return 'p'; + } + var block = editor.getParam('forced_root_block', 'p'); + if (block === false) { + return ''; + } else if (block === true) { + return 'p'; + } else { + return block; + } + }; + var getForcedRootBlockAttrs = function (editor) { + return editor.getParam('forced_root_block_attrs', {}); + }; + var getBrNewLineSelector = function (editor) { + return editor.getParam('br_newline_selector', '.mce-toc h2,figcaption,caption'); + }; + var getNoNewLineSelector = function (editor) { + return editor.getParam('no_newline_selector', ''); + }; + var shouldKeepStyles = function (editor) { + return editor.getParam('keep_styles', true); + }; + var shouldEndContainerOnEmptyBlock = function (editor) { + return editor.getParam('end_container_on_empty_block', false); + }; + var getFontStyleValues = function (editor) { + return Tools.explode(editor.getParam('font_size_style_values', 'xx-small,x-small,small,medium,large,x-large,xx-large')); + }; + var getFontSizeClasses = function (editor) { + return Tools.explode(editor.getParam('font_size_classes', '')); + }; + var getImagesDataImgFilter = function (editor) { + return editor.getParam('images_dataimg_filter', always, 'function'); + }; + var isAutomaticUploadsEnabled = function (editor) { + return editor.getParam('automatic_uploads', true, 'boolean'); + }; + var shouldReuseFileName = function (editor) { + return editor.getParam('images_reuse_filename', false, 'boolean'); + }; + var shouldReplaceBlobUris = function (editor) { + return editor.getParam('images_replace_blob_uris', true, 'boolean'); + }; + var getIconPackName = function (editor) { + return editor.getParam('icons', '', 'string'); + }; + var getIconsUrl = function (editor) { + return editor.getParam('icons_url', '', 'string'); + }; + var getImageUploadUrl = function (editor) { + return editor.getParam('images_upload_url', '', 'string'); + }; + var getImageUploadBasePath = function (editor) { + return editor.getParam('images_upload_base_path', '', 'string'); + }; + var getImagesUploadCredentials = function (editor) { + return editor.getParam('images_upload_credentials', false, 'boolean'); + }; + var getImagesUploadHandler = function (editor) { + return editor.getParam('images_upload_handler', null, 'function'); + }; + var shouldUseContentCssCors = function (editor) { + return editor.getParam('content_css_cors', false, 'boolean'); + }; + var getReferrerPolicy = function (editor) { + return editor.getParam('referrer_policy', '', 'string'); + }; + var getLanguageCode = function (editor) { + return editor.getParam('language', 'en', 'string'); + }; + var getLanguageUrl = function (editor) { + return editor.getParam('language_url', '', 'string'); + }; + var shouldIndentUseMargin = function (editor) { + return editor.getParam('indent_use_margin', false); + }; + var getIndentation = function (editor) { + return editor.getParam('indentation', '40px', 'string'); + }; + var getContentCss = function (editor) { + var contentCss = editor.getParam('content_css'); + if (isString(contentCss)) { + return map(contentCss.split(','), trim); + } else if (isArray(contentCss)) { + return contentCss; + } else if (contentCss === false || editor.inline) { + return []; + } else { + return ['default']; + } + }; + var getFontCss = function (editor) { + var fontCss = editor.getParam('font_css', []); + return isArray(fontCss) ? fontCss : map(fontCss.split(','), trim); + }; + var getDirectionality = function (editor) { + return editor.getParam('directionality', I18n.isRtl() ? 'rtl' : undefined); + }; + var getInlineBoundarySelector = function (editor) { + return editor.getParam('inline_boundaries_selector', 'a[href],code,.mce-annotation', 'string'); + }; + var getObjectResizing = function (editor) { + var selector = editor.getParam('object_resizing'); + if (selector === false || Env.iOS) { + return false; + } else { + return isString(selector) ? selector : 'table,img,figure.image,div,video,iframe'; + } + }; + var getResizeImgProportional = function (editor) { + return editor.getParam('resize_img_proportional', true, 'boolean'); + }; + var getPlaceholder = function (editor) { + return editor.getParam('placeholder', DOM$1.getAttrib(editor.getElement(), 'placeholder'), 'string'); + }; + var getEventRoot = function (editor) { + return editor.getParam('event_root'); + }; + var getServiceMessage = function (editor) { + return editor.getParam('service_message'); + }; + var getTheme = function (editor) { + return editor.getParam('theme'); + }; + var shouldValidate = function (editor) { + return editor.getParam('validate'); + }; + var isInlineBoundariesEnabled = function (editor) { + return editor.getParam('inline_boundaries') !== false; + }; + var getFormats = function (editor) { + return editor.getParam('formats'); + }; + var getPreviewStyles = function (editor) { + var style = editor.getParam('preview_styles', defaultPreviewStyles); + if (isString(style)) { + return style; + } else { + return ''; + } + }; + var canFormatEmptyLines = function (editor) { + return editor.getParam('format_empty_lines', false, 'boolean'); + }; + var getCustomUiSelector = function (editor) { + return editor.getParam('custom_ui_selector', '', 'string'); + }; + var getThemeUrl = function (editor) { + return editor.getParam('theme_url'); + }; + var isInline$1 = function (editor) { + return editor.getParam('inline'); + }; + var hasHiddenInput = function (editor) { + return editor.getParam('hidden_input'); + }; + var shouldPatchSubmit = function (editor) { + return editor.getParam('submit_patch'); + }; + var isEncodingXml = function (editor) { + return editor.getParam('encoding') === 'xml'; + }; + var shouldAddFormSubmitTrigger = function (editor) { + return editor.getParam('add_form_submit_trigger'); + }; + var shouldAddUnloadTrigger = function (editor) { + return editor.getParam('add_unload_trigger'); + }; + var hasForcedRootBlock = function (editor) { + return getForcedRootBlock(editor) !== ''; + }; + var getCustomUndoRedoLevels = function (editor) { + return editor.getParam('custom_undo_redo_levels', 0, 'number'); + }; + var shouldDisableNodeChange = function (editor) { + return editor.getParam('disable_nodechange'); + }; + var isReadOnly = function (editor) { + return editor.getParam('readonly'); + }; + var hasContentCssCors = function (editor) { + return editor.getParam('content_css_cors'); + }; + var getPlugins = function (editor) { + return editor.getParam('plugins', '', 'string'); + }; + var getExternalPlugins = function (editor) { + return editor.getParam('external_plugins'); + }; + var shouldBlockUnsupportedDrop = function (editor) { + return editor.getParam('block_unsupported_drop', true, 'boolean'); + }; + var isVisualAidsEnabled = function (editor) { + return editor.getParam('visual', true, 'boolean'); + }; + var getVisualAidsTableClass = function (editor) { + return editor.getParam('visual_table_class', 'mce-item-table', 'string'); + }; + var getVisualAidsAnchorClass = function (editor) { + return editor.getParam('visual_anchor_class', 'mce-item-anchor', 'string'); + }; + + var isElement$4 = isElement$1; + var isText$6 = isText$1; + var removeNode = function (node) { + var parentNode = node.parentNode; + if (parentNode) { + parentNode.removeChild(node); + } + }; + var trimCount = function (text) { + var trimmedText = trim$2(text); + return { + count: text.length - trimmedText.length, + text: trimmedText + }; + }; + var deleteZwspChars = function (caretContainer) { + var idx; + while ((idx = caretContainer.data.lastIndexOf(ZWSP)) !== -1) { + caretContainer.deleteData(idx, 1); + } + }; + var removeUnchanged = function (caretContainer, pos) { + remove$5(caretContainer); + return pos; + }; + var removeTextAndReposition = function (caretContainer, pos) { + var before = trimCount(caretContainer.data.substr(0, pos.offset())); + var after = trimCount(caretContainer.data.substr(pos.offset())); + var text = before.text + after.text; + if (text.length > 0) { + deleteZwspChars(caretContainer); + return CaretPosition(caretContainer, pos.offset() - before.count); + } else { + return pos; + } + }; + var removeElementAndReposition = function (caretContainer, pos) { + var parentNode = pos.container(); + var newPosition = indexOf(from$1(parentNode.childNodes), caretContainer).map(function (index) { + return index < pos.offset() ? CaretPosition(parentNode, pos.offset() - 1) : pos; + }).getOr(pos); + remove$5(caretContainer); + return newPosition; + }; + var removeTextCaretContainer = function (caretContainer, pos) { + return isText$6(caretContainer) && pos.container() === caretContainer ? removeTextAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos); + }; + var removeElementCaretContainer = function (caretContainer, pos) { + return pos.container() === caretContainer.parentNode ? removeElementAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos); + }; + var removeAndReposition = function (container, pos) { + return CaretPosition.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos); + }; + var remove$5 = function (caretContainerNode) { + if (isElement$4(caretContainerNode) && isCaretContainer(caretContainerNode)) { + if (hasContent(caretContainerNode)) { + caretContainerNode.removeAttribute('data-mce-caret'); + } else { + removeNode(caretContainerNode); + } + } + if (isText$6(caretContainerNode)) { + deleteZwspChars(caretContainerNode); + if (caretContainerNode.data.length === 0) { + removeNode(caretContainerNode); + } + } + }; + + var browser$2 = detect$3().browser; + var isContentEditableFalse$3 = isContentEditableFalse; + var isMedia$1 = isMedia; + var isTableCell$2 = isTableCell; + var inlineFakeCaretSelector = '*[contentEditable=false],video,audio,embed,object'; + var getAbsoluteClientRect = function (root, element, before) { + var clientRect = collapse(element.getBoundingClientRect(), before); + var docElm, scrollX, scrollY, margin, rootRect; + if (root.tagName === 'BODY') { + docElm = root.ownerDocument.documentElement; + scrollX = root.scrollLeft || docElm.scrollLeft; + scrollY = root.scrollTop || docElm.scrollTop; + } else { + rootRect = root.getBoundingClientRect(); + scrollX = root.scrollLeft - rootRect.left; + scrollY = root.scrollTop - rootRect.top; + } + clientRect.left += scrollX; + clientRect.right += scrollX; + clientRect.top += scrollY; + clientRect.bottom += scrollY; + clientRect.width = 1; + margin = element.offsetWidth - element.clientWidth; + if (margin > 0) { + if (before) { + margin *= -1; + } + clientRect.left += margin; + clientRect.right += margin; + } + return clientRect; + }; + var trimInlineCaretContainers = function (root) { + var fakeCaretTargetNodes = descendants$1(SugarElement.fromDom(root), inlineFakeCaretSelector); + for (var i = 0; i < fakeCaretTargetNodes.length; i++) { + var node = fakeCaretTargetNodes[i].dom; + var sibling = node.previousSibling; + if (endsWithCaretContainer(sibling)) { + var data = sibling.data; + if (data.length === 1) { + sibling.parentNode.removeChild(sibling); + } else { + sibling.deleteData(data.length - 1, 1); + } + } + sibling = node.nextSibling; + if (startsWithCaretContainer(sibling)) { + var data = sibling.data; + if (data.length === 1) { + sibling.parentNode.removeChild(sibling); + } else { + sibling.deleteData(0, 1); + } + } + } + }; + var FakeCaret = function (editor, root, isBlock, hasFocus) { + var lastVisualCaret = Cell(Optional.none()); + var cursorInterval, caretContainerNode; + var rootBlock = getForcedRootBlock(editor); + var caretBlock = rootBlock.length > 0 ? rootBlock : 'p'; + var show = function (before, element) { + var clientRect, rng; + hide(); + if (isTableCell$2(element)) { + return null; + } + if (isBlock(element)) { + caretContainerNode = insertBlock(caretBlock, element, before); + clientRect = getAbsoluteClientRect(root, element, before); + DomQuery(caretContainerNode).css('top', clientRect.top); + var caret = DomQuery('
').css(clientRect).appendTo(root)[0]; + lastVisualCaret.set(Optional.some({ + caret: caret, + element: element, + before: before + })); + lastVisualCaret.get().each(function (caretState) { + if (before) { + DomQuery(caretState.caret).addClass('mce-visual-caret-before'); + } + }); + startBlink(); + rng = element.ownerDocument.createRange(); + rng.setStart(caretContainerNode, 0); + rng.setEnd(caretContainerNode, 0); + } else { + caretContainerNode = insertInline(element, before); + rng = element.ownerDocument.createRange(); + if (isInlineFakeCaretTarget(caretContainerNode.nextSibling)) { + rng.setStart(caretContainerNode, 0); + rng.setEnd(caretContainerNode, 0); + } else { + rng.setStart(caretContainerNode, 1); + rng.setEnd(caretContainerNode, 1); + } + return rng; + } + return rng; + }; + var hide = function () { + trimInlineCaretContainers(root); + if (caretContainerNode) { + remove$5(caretContainerNode); + caretContainerNode = null; + } + lastVisualCaret.get().each(function (caretState) { + DomQuery(caretState.caret).remove(); + lastVisualCaret.set(Optional.none()); + }); + if (cursorInterval) { + Delay.clearInterval(cursorInterval); + cursorInterval = null; + } + }; + var startBlink = function () { + cursorInterval = Delay.setInterval(function () { + if (hasFocus()) { + DomQuery('div.mce-visual-caret', root).toggleClass('mce-visual-caret-hidden'); + } else { + DomQuery('div.mce-visual-caret', root).addClass('mce-visual-caret-hidden'); + } + }, 500); + }; + var reposition = function () { + lastVisualCaret.get().each(function (caretState) { + var clientRect = getAbsoluteClientRect(root, caretState.element, caretState.before); + DomQuery(caretState.caret).css(__assign({}, clientRect)); + }); + }; + var destroy = function () { + return Delay.clearInterval(cursorInterval); + }; + var getCss = function () { + return '.mce-visual-caret {' + 'position: absolute;' + 'background-color: black;' + 'background-color: currentcolor;' + '}' + '.mce-visual-caret-hidden {' + 'display: none;' + '}' + '*[data-mce-caret] {' + 'position: absolute;' + 'left: -1000px;' + 'right: auto;' + 'top: 0;' + 'margin: 0;' + 'padding: 0;' + '}'; + }; + return { + show: show, + hide: hide, + getCss: getCss, + reposition: reposition, + destroy: destroy + }; + }; + var isFakeCaretTableBrowser = function () { + return browser$2.isIE() || browser$2.isEdge() || browser$2.isFirefox(); + }; + var isInlineFakeCaretTarget = function (node) { + return isContentEditableFalse$3(node) || isMedia$1(node); + }; + var isFakeCaretTarget = function (node) { + return isInlineFakeCaretTarget(node) || isTable(node) && isFakeCaretTableBrowser(); + }; + + var isContentEditableFalse$4 = isContentEditableFalse; + var isMedia$2 = isMedia; + var isBlockLike = matchStyleValues('display', 'block table table-cell table-caption list-item'); + var isCaretContainer$2 = isCaretContainer; + var isCaretContainerBlock$1 = isCaretContainerBlock; + var isElement$5 = isElement$1; + var isCaretCandidate$2 = isCaretCandidate; + var isForwards = function (direction) { + return direction > 0; + }; + var isBackwards = function (direction) { + return direction < 0; + }; + var skipCaretContainers = function (walk, shallow) { + var node; + while (node = walk(shallow)) { + if (!isCaretContainerBlock$1(node)) { + return node; + } + } + return null; + }; + var findNode = function (node, direction, predicateFn, rootNode, shallow) { + var walker = new DomTreeWalker(node, rootNode); + var isCefOrCaretContainer = isContentEditableFalse$4(node) || isCaretContainerBlock$1(node); + if (isBackwards(direction)) { + if (isCefOrCaretContainer) { + node = skipCaretContainers(walker.prev.bind(walker), true); + if (predicateFn(node)) { + return node; + } + } + while (node = skipCaretContainers(walker.prev.bind(walker), shallow)) { + if (predicateFn(node)) { + return node; + } + } + } + if (isForwards(direction)) { + if (isCefOrCaretContainer) { + node = skipCaretContainers(walker.next.bind(walker), true); + if (predicateFn(node)) { + return node; + } + } + while (node = skipCaretContainers(walker.next.bind(walker), shallow)) { + if (predicateFn(node)) { + return node; + } + } + } + return null; + }; + var getParentBlock = function (node, rootNode) { + while (node && node !== rootNode) { + if (isBlockLike(node)) { + return node; + } + node = node.parentNode; + } + return null; + }; + var isInSameBlock = function (caretPosition1, caretPosition2, rootNode) { + return getParentBlock(caretPosition1.container(), rootNode) === getParentBlock(caretPosition2.container(), rootNode); + }; + var getChildNodeAtRelativeOffset = function (relativeOffset, caretPosition) { + if (!caretPosition) { + return null; + } + var container = caretPosition.container(); + var offset = caretPosition.offset(); + if (!isElement$5(container)) { + return null; + } + return container.childNodes[offset + relativeOffset]; + }; + var beforeAfter = function (before, node) { + var range = node.ownerDocument.createRange(); + if (before) { + range.setStartBefore(node); + range.setEndBefore(node); + } else { + range.setStartAfter(node); + range.setEndAfter(node); + } + return range; + }; + var isNodesInSameBlock = function (root, node1, node2) { + return getParentBlock(node1, root) === getParentBlock(node2, root); + }; + var lean = function (left, root, node) { + var sibling, siblingName; + if (left) { + siblingName = 'previousSibling'; + } else { + siblingName = 'nextSibling'; + } + while (node && node !== root) { + sibling = node[siblingName]; + if (isCaretContainer$2(sibling)) { + sibling = sibling[siblingName]; + } + if (isContentEditableFalse$4(sibling) || isMedia$2(sibling)) { + if (isNodesInSameBlock(root, sibling, node)) { + return sibling; + } + break; + } + if (isCaretCandidate$2(sibling)) { + break; + } + node = node.parentNode; + } + return null; + }; + var before$2 = curry(beforeAfter, true); + var after$1 = curry(beforeAfter, false); + var normalizeRange = function (direction, root, range) { + var node, container, location; + var leanLeft = curry(lean, true, root); + var leanRight = curry(lean, false, root); + container = range.startContainer; + var offset = range.startOffset; + if (isCaretContainerBlock(container)) { + if (!isElement$5(container)) { + container = container.parentNode; + } + location = container.getAttribute('data-mce-caret'); + if (location === 'before') { + node = container.nextSibling; + if (isFakeCaretTarget(node)) { + return before$2(node); + } + } + if (location === 'after') { + node = container.previousSibling; + if (isFakeCaretTarget(node)) { + return after$1(node); + } + } + } + if (!range.collapsed) { + return range; + } + if (isText$1(container)) { + if (isCaretContainer$2(container)) { + if (direction === 1) { + node = leanRight(container); + if (node) { + return before$2(node); + } + node = leanLeft(container); + if (node) { + return after$1(node); + } + } + if (direction === -1) { + node = leanLeft(container); + if (node) { + return after$1(node); + } + node = leanRight(container); + if (node) { + return before$2(node); + } + } + return range; + } + if (endsWithCaretContainer(container) && offset >= container.data.length - 1) { + if (direction === 1) { + node = leanRight(container); + if (node) { + return before$2(node); + } + } + return range; + } + if (startsWithCaretContainer(container) && offset <= 1) { + if (direction === -1) { + node = leanLeft(container); + if (node) { + return after$1(node); + } + } + return range; + } + if (offset === container.data.length) { + node = leanRight(container); + if (node) { + return before$2(node); + } + return range; + } + if (offset === 0) { + node = leanLeft(container); + if (node) { + return after$1(node); + } + return range; + } + } + return range; + }; + var getRelativeCefElm = function (forward, caretPosition) { + return Optional.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, caretPosition)).filter(isContentEditableFalse$4); + }; + var getNormalizedRangeEndPoint = function (direction, root, range) { + var normalizedRange = normalizeRange(direction, root, range); + if (direction === -1) { + return CaretPosition.fromRangeStart(normalizedRange); + } + return CaretPosition.fromRangeEnd(normalizedRange); + }; + var getElementFromPosition = function (pos) { + return Optional.from(pos.getNode()).map(SugarElement.fromDom); + }; + var getElementFromPrevPosition = function (pos) { + return Optional.from(pos.getNode(true)).map(SugarElement.fromDom); + }; + var getVisualCaretPosition = function (walkFn, caretPosition) { + while (caretPosition = walkFn(caretPosition)) { + if (caretPosition.isVisible()) { + return caretPosition; + } + } + return caretPosition; + }; + var isMoveInsideSameBlock = function (from, to) { + var inSameBlock = isInSameBlock(from, to); + if (!inSameBlock && isBr(from.getNode())) { + return true; + } + return inSameBlock; + }; + + var HDirection; + (function (HDirection) { + HDirection[HDirection['Backwards'] = -1] = 'Backwards'; + HDirection[HDirection['Forwards'] = 1] = 'Forwards'; + }(HDirection || (HDirection = {}))); + var isContentEditableFalse$5 = isContentEditableFalse; + var isText$7 = isText$1; + var isElement$6 = isElement$1; + var isBr$4 = isBr; + var isCaretCandidate$3 = isCaretCandidate; + var isAtomic$1 = isAtomic; + var isEditableCaretCandidate$1 = isEditableCaretCandidate; + var getParents = function (node, root) { + var parents = []; + while (node && node !== root) { + parents.push(node); + node = node.parentNode; + } + return parents; + }; + var nodeAtIndex = function (container, offset) { + if (container.hasChildNodes() && offset < container.childNodes.length) { + return container.childNodes[offset]; + } + return null; + }; + var getCaretCandidatePosition = function (direction, node) { + if (isForwards(direction)) { + if (isCaretCandidate$3(node.previousSibling) && !isText$7(node.previousSibling)) { + return CaretPosition.before(node); + } + if (isText$7(node)) { + return CaretPosition(node, 0); + } + } + if (isBackwards(direction)) { + if (isCaretCandidate$3(node.nextSibling) && !isText$7(node.nextSibling)) { + return CaretPosition.after(node); + } + if (isText$7(node)) { + return CaretPosition(node, node.data.length); + } + } + if (isBackwards(direction)) { + if (isBr$4(node)) { + return CaretPosition.before(node); + } + return CaretPosition.after(node); + } + return CaretPosition.before(node); + }; + var moveForwardFromBr = function (root, nextNode) { + var nextSibling = nextNode.nextSibling; + if (nextSibling && isCaretCandidate$3(nextSibling)) { + if (isText$7(nextSibling)) { + return CaretPosition(nextSibling, 0); + } else { + return CaretPosition.before(nextSibling); + } + } else { + return findCaretPosition(HDirection.Forwards, CaretPosition.after(nextNode), root); + } + }; + var findCaretPosition = function (direction, startPos, root) { + var node, nextNode, innerNode; + var caretPosition; + if (!isElement$6(root) || !startPos) { + return null; + } + if (startPos.isEqual(CaretPosition.after(root)) && root.lastChild) { + caretPosition = CaretPosition.after(root.lastChild); + if (isBackwards(direction) && isCaretCandidate$3(root.lastChild) && isElement$6(root.lastChild)) { + return isBr$4(root.lastChild) ? CaretPosition.before(root.lastChild) : caretPosition; + } + } else { + caretPosition = startPos; + } + var container = caretPosition.container(); + var offset = caretPosition.offset(); + if (isText$7(container)) { + if (isBackwards(direction) && offset > 0) { + return CaretPosition(container, --offset); + } + if (isForwards(direction) && offset < container.length) { + return CaretPosition(container, ++offset); + } + node = container; + } else { + if (isBackwards(direction) && offset > 0) { + nextNode = nodeAtIndex(container, offset - 1); + if (isCaretCandidate$3(nextNode)) { + if (!isAtomic$1(nextNode)) { + innerNode = findNode(nextNode, direction, isEditableCaretCandidate$1, nextNode); + if (innerNode) { + if (isText$7(innerNode)) { + return CaretPosition(innerNode, innerNode.data.length); + } + return CaretPosition.after(innerNode); + } + } + if (isText$7(nextNode)) { + return CaretPosition(nextNode, nextNode.data.length); + } + return CaretPosition.before(nextNode); + } + } + if (isForwards(direction) && offset < container.childNodes.length) { + nextNode = nodeAtIndex(container, offset); + if (isCaretCandidate$3(nextNode)) { + if (isBr$4(nextNode)) { + return moveForwardFromBr(root, nextNode); + } + if (!isAtomic$1(nextNode)) { + innerNode = findNode(nextNode, direction, isEditableCaretCandidate$1, nextNode); + if (innerNode) { + if (isText$7(innerNode)) { + return CaretPosition(innerNode, 0); + } + return CaretPosition.before(innerNode); + } + } + if (isText$7(nextNode)) { + return CaretPosition(nextNode, 0); + } + return CaretPosition.after(nextNode); + } + } + node = nextNode ? nextNode : caretPosition.getNode(); + } + if (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart()) { + node = findNode(node, direction, always, root, true); + if (isEditableCaretCandidate$1(node, root)) { + return getCaretCandidatePosition(direction, node); + } + } + nextNode = findNode(node, direction, isEditableCaretCandidate$1, root); + var rootContentEditableFalseElm = last$1(filter(getParents(container, root), isContentEditableFalse$5)); + if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) { + if (isForwards(direction)) { + caretPosition = CaretPosition.after(rootContentEditableFalseElm); + } else { + caretPosition = CaretPosition.before(rootContentEditableFalseElm); + } + return caretPosition; + } + if (nextNode) { + return getCaretCandidatePosition(direction, nextNode); + } + return null; + }; + var CaretWalker = function (root) { + return { + next: function (caretPosition) { + return findCaretPosition(HDirection.Forwards, caretPosition, root); + }, + prev: function (caretPosition) { + return findCaretPosition(HDirection.Backwards, caretPosition, root); + } + }; + }; + + var walkToPositionIn = function (forward, root, start) { + var position = forward ? CaretPosition.before(start) : CaretPosition.after(start); + return fromPosition(forward, root, position); + }; + var afterElement = function (node) { + return isBr(node) ? CaretPosition.before(node) : CaretPosition.after(node); + }; + var isBeforeOrStart = function (position) { + if (CaretPosition.isTextPosition(position)) { + return position.offset() === 0; + } else { + return isCaretCandidate(position.getNode()); + } + }; + var isAfterOrEnd = function (position) { + if (CaretPosition.isTextPosition(position)) { + var container = position.container(); + return position.offset() === container.data.length; + } else { + return isCaretCandidate(position.getNode(true)); + } + }; + var isBeforeAfterSameElement = function (from, to) { + return !CaretPosition.isTextPosition(from) && !CaretPosition.isTextPosition(to) && from.getNode() === to.getNode(true); + }; + var isAtBr = function (position) { + return !CaretPosition.isTextPosition(position) && isBr(position.getNode()); + }; + var shouldSkipPosition = function (forward, from, to) { + if (forward) { + return !isBeforeAfterSameElement(from, to) && !isAtBr(from) && isAfterOrEnd(from) && isBeforeOrStart(to); + } else { + return !isBeforeAfterSameElement(to, from) && isBeforeOrStart(from) && isAfterOrEnd(to); + } + }; + var fromPosition = function (forward, root, pos) { + var walker = CaretWalker(root); + return Optional.from(forward ? walker.next(pos) : walker.prev(pos)); + }; + var navigate = function (forward, root, from) { + return fromPosition(forward, root, from).bind(function (to) { + if (isInSameBlock(from, to, root) && shouldSkipPosition(forward, from, to)) { + return fromPosition(forward, root, to); + } else { + return Optional.some(to); + } + }); + }; + var navigateIgnore = function (forward, root, from, ignoreFilter) { + return navigate(forward, root, from).bind(function (pos) { + return ignoreFilter(pos) ? navigateIgnore(forward, root, pos, ignoreFilter) : Optional.some(pos); + }); + }; + var positionIn = function (forward, element) { + var startNode = forward ? element.firstChild : element.lastChild; + if (isText$1(startNode)) { + return Optional.some(CaretPosition(startNode, forward ? 0 : startNode.data.length)); + } else if (startNode) { + if (isCaretCandidate(startNode)) { + return Optional.some(forward ? CaretPosition.before(startNode) : afterElement(startNode)); + } else { + return walkToPositionIn(forward, element, startNode); + } + } else { + return Optional.none(); + } + }; + var nextPosition = curry(fromPosition, true); + var prevPosition = curry(fromPosition, false); + var firstPositionIn = curry(positionIn, true); + var lastPositionIn = curry(positionIn, false); + + var CARET_ID = '_mce_caret'; + var isCaretNode = function (node) { + return isElement$1(node) && node.id === CARET_ID; + }; + var getParentCaretContainer = function (body, node) { + while (node && node !== body) { + if (node.id === CARET_ID) { + return node; + } + node = node.parentNode; + } + return null; + }; + + var isStringPathBookmark = function (bookmark) { + return isString(bookmark.start); + }; + var isRangeBookmark = function (bookmark) { + return bookmark.hasOwnProperty('rng'); + }; + var isIdBookmark = function (bookmark) { + return bookmark.hasOwnProperty('id'); + }; + var isIndexBookmark = function (bookmark) { + return bookmark.hasOwnProperty('name'); + }; + var isPathBookmark = function (bookmark) { + return Tools.isArray(bookmark.start); + }; + + var addBogus = function (dom, node) { + if (isElement$1(node) && dom.isBlock(node) && !node.innerHTML && !Env.ie) { + node.innerHTML = '
'; + } + return node; + }; + var resolveCaretPositionBookmark = function (dom, bookmark) { + var pos; + var rng = dom.createRng(); + pos = resolve$1(dom.getRoot(), bookmark.start); + rng.setStart(pos.container(), pos.offset()); + pos = resolve$1(dom.getRoot(), bookmark.end); + rng.setEnd(pos.container(), pos.offset()); + return rng; + }; + var insertZwsp = function (node, rng) { + var textNode = node.ownerDocument.createTextNode(ZWSP); + node.appendChild(textNode); + rng.setStart(textNode, 0); + rng.setEnd(textNode, 0); + }; + var isEmpty$1 = function (node) { + return node.hasChildNodes() === false; + }; + var tryFindRangePosition = function (node, rng) { + return lastPositionIn(node).fold(never, function (pos) { + rng.setStart(pos.container(), pos.offset()); + rng.setEnd(pos.container(), pos.offset()); + return true; + }); + }; + var padEmptyCaretContainer = function (root, node, rng) { + if (isEmpty$1(node) && getParentCaretContainer(root, node)) { + insertZwsp(node, rng); + return true; + } else { + return false; + } + }; + var setEndPoint = function (dom, start, bookmark, rng) { + var point = bookmark[start ? 'start' : 'end']; + var i, node, offset, children; + var root = dom.getRoot(); + if (point) { + offset = point[0]; + for (node = root, i = point.length - 1; i >= 1; i--) { + children = node.childNodes; + if (padEmptyCaretContainer(root, node, rng)) { + return true; + } + if (point[i] > children.length - 1) { + if (padEmptyCaretContainer(root, node, rng)) { + return true; + } + return tryFindRangePosition(node, rng); + } + node = children[point[i]]; + } + if (node.nodeType === 3) { + offset = Math.min(point[0], node.nodeValue.length); + } + if (node.nodeType === 1) { + offset = Math.min(point[0], node.childNodes.length); + } + if (start) { + rng.setStart(node, offset); + } else { + rng.setEnd(node, offset); + } + } + return true; + }; + var isValidTextNode = function (node) { + return isText$1(node) && node.data.length > 0; + }; + var restoreEndPoint = function (dom, suffix, bookmark) { + var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev; + var keep = bookmark.keep; + var container, offset; + if (marker) { + node = marker.parentNode; + if (suffix === 'start') { + if (!keep) { + idx = dom.nodeIndex(marker); + } else { + if (marker.hasChildNodes()) { + node = marker.firstChild; + idx = 1; + } else if (isValidTextNode(marker.nextSibling)) { + node = marker.nextSibling; + idx = 0; + } else if (isValidTextNode(marker.previousSibling)) { + node = marker.previousSibling; + idx = marker.previousSibling.data.length; + } else { + node = marker.parentNode; + idx = dom.nodeIndex(marker) + 1; + } + } + container = node; + offset = idx; + } else { + if (!keep) { + idx = dom.nodeIndex(marker); + } else { + if (marker.hasChildNodes()) { + node = marker.firstChild; + idx = 1; + } else if (isValidTextNode(marker.previousSibling)) { + node = marker.previousSibling; + idx = marker.previousSibling.data.length; + } else { + node = marker.parentNode; + idx = dom.nodeIndex(marker); + } + } + container = node; + offset = idx; + } + if (!keep) { + prev = marker.previousSibling; + next = marker.nextSibling; + Tools.each(Tools.grep(marker.childNodes), function (node) { + if (isText$1(node)) { + node.nodeValue = node.nodeValue.replace(/\uFEFF/g, ''); + } + }); + while (marker = dom.get(bookmark.id + '_' + suffix)) { + dom.remove(marker, true); + } + if (prev && next && prev.nodeType === next.nodeType && isText$1(prev) && !Env.opera) { + idx = prev.nodeValue.length; + prev.appendData(next.nodeValue); + dom.remove(next); + container = prev; + offset = idx; + } + } + return Optional.some(CaretPosition(container, offset)); + } else { + return Optional.none(); + } + }; + var resolvePaths = function (dom, bookmark) { + var rng = dom.createRng(); + if (setEndPoint(dom, true, bookmark, rng) && setEndPoint(dom, false, bookmark, rng)) { + return Optional.some(rng); + } else { + return Optional.none(); + } + }; + var resolveId = function (dom, bookmark) { + var startPos = restoreEndPoint(dom, 'start', bookmark); + var endPos = restoreEndPoint(dom, 'end', bookmark); + return lift2(startPos, endPos.or(startPos), function (spos, epos) { + var rng = dom.createRng(); + rng.setStart(addBogus(dom, spos.container()), spos.offset()); + rng.setEnd(addBogus(dom, epos.container()), epos.offset()); + return rng; + }); + }; + var resolveIndex$1 = function (dom, bookmark) { + return Optional.from(dom.select(bookmark.name)[bookmark.index]).map(function (elm) { + var rng = dom.createRng(); + rng.selectNode(elm); + return rng; + }); + }; + var resolve$2 = function (selection, bookmark) { + var dom = selection.dom; + if (bookmark) { + if (isPathBookmark(bookmark)) { + return resolvePaths(dom, bookmark); + } else if (isStringPathBookmark(bookmark)) { + return Optional.some(resolveCaretPositionBookmark(dom, bookmark)); + } else if (isIdBookmark(bookmark)) { + return resolveId(dom, bookmark); + } else if (isIndexBookmark(bookmark)) { + return resolveIndex$1(dom, bookmark); + } else if (isRangeBookmark(bookmark)) { + return Optional.some(bookmark.rng); + } + } + return Optional.none(); + }; + + var getBookmark$1 = function (selection, type, normalized) { + return getBookmark(selection, type, normalized); + }; + var moveToBookmark = function (selection, bookmark) { + resolve$2(selection, bookmark).each(function (rng) { + selection.setRng(rng); + }); + }; + var isBookmarkNode$1 = function (node) { + return isElement$1(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark'; + }; + + var is$2 = function (expected) { + return function (actual) { + return expected === actual; + }; + }; + var isNbsp = is$2(nbsp); + var isWhiteSpace$1 = function (chr) { + return chr !== '' && ' \f\n\r\t\x0B'.indexOf(chr) !== -1; + }; + var isContent$1 = function (chr) { + return !isWhiteSpace$1(chr) && !isNbsp(chr); + }; + + var isNode = function (node) { + return !!node.nodeType; + }; + var isInlineBlock = function (node) { + return node && /^(IMG)$/.test(node.nodeName); + }; + var moveStart = function (dom, selection, rng) { + var offset = rng.startOffset; + var container = rng.startContainer, walker, node, nodes; + if (rng.startContainer === rng.endContainer) { + if (isInlineBlock(rng.startContainer.childNodes[rng.startOffset])) { + return; + } + } + if (container.nodeType === 1) { + nodes = container.childNodes; + if (offset < nodes.length) { + container = nodes[offset]; + walker = new DomTreeWalker(container, dom.getParent(container, dom.isBlock)); + } else { + container = nodes[nodes.length - 1]; + walker = new DomTreeWalker(container, dom.getParent(container, dom.isBlock)); + walker.next(true); + } + for (node = walker.current(); node; node = walker.next()) { + if (node.nodeType === 3 && !isWhiteSpaceNode(node)) { + rng.setStart(node, 0); + selection.setRng(rng); + return; + } + } + } + }; + var getNonWhiteSpaceSibling = function (node, next, inc) { + if (node) { + var nextName = next ? 'nextSibling' : 'previousSibling'; + for (node = inc ? node : node[nextName]; node; node = node[nextName]) { + if (node.nodeType === 1 || !isWhiteSpaceNode(node)) { + return node; + } + } + } + }; + var isTextBlock$1 = function (editor, name) { + if (isNode(name)) { + name = name.nodeName; + } + return !!editor.schema.getTextBlockElements()[name.toLowerCase()]; + }; + var isValid = function (ed, parent, child) { + return ed.schema.isValidChild(parent, child); + }; + var isWhiteSpaceNode = function (node, allowSpaces) { + if (allowSpaces === void 0) { + allowSpaces = false; + } + if (isNonNullable(node) && isText$1(node)) { + var data = allowSpaces ? node.data.replace(/ /g, '\xA0') : node.data; + return isWhitespaceText(data); + } else { + return false; + } + }; + var isEmptyTextNode = function (node) { + return isNonNullable(node) && isText$1(node) && node.length === 0; + }; + var replaceVars = function (value, vars) { + if (typeof value !== 'string') { + value = value(vars); + } else if (vars) { + value = value.replace(/%(\w+)/g, function (str, name) { + return vars[name] || str; + }); + } + return value; + }; + var isEq = function (str1, str2) { + str1 = str1 || ''; + str2 = str2 || ''; + str1 = '' + (str1.nodeName || str1); + str2 = '' + (str2.nodeName || str2); + return str1.toLowerCase() === str2.toLowerCase(); + }; + var normalizeStyleValue = function (dom, value, name) { + if (name === 'color' || name === 'backgroundColor') { + value = dom.toHex(value); + } + if (name === 'fontWeight' && value === 700) { + value = 'bold'; + } + if (name === 'fontFamily') { + value = value.replace(/[\'\"]/g, '').replace(/,\s+/g, ','); + } + return '' + value; + }; + var getStyle = function (dom, node, name) { + return normalizeStyleValue(dom, dom.getStyle(node, name), name); + }; + var getTextDecoration = function (dom, node) { + var decoration; + dom.getParent(node, function (n) { + decoration = dom.getStyle(n, 'text-decoration'); + return decoration && decoration !== 'none'; + }); + return decoration; + }; + var getParents$1 = function (dom, node, selector) { + return dom.getParents(node, selector, dom.getRoot()); + }; + var isVariableFormatName = function (editor, formatName) { + var hasVariableValues = function (format) { + var isVariableValue = function (val) { + return val.length > 1 && val.charAt(0) === '%'; + }; + return exists([ + 'styles', + 'attributes' + ], function (key) { + return get$1(format, key).exists(function (field) { + var fieldValues = isArray(field) ? field : values(field); + return exists(fieldValues, isVariableValue); + }); + }); + }; + return exists(editor.formatter.get(formatName), hasVariableValues); + }; + var areSimilarFormats = function (editor, formatName, otherFormatName) { + var validKeys = [ + 'inline', + 'block', + 'selector', + 'attributes', + 'styles', + 'classes' + ]; + var filterObj = function (format) { + return filter$1(format, function (_, key) { + return exists(validKeys, function (validKey) { + return validKey === key; + }); + }); + }; + return exists(editor.formatter.get(formatName), function (fmt1) { + var filteredFmt1 = filterObj(fmt1); + return exists(editor.formatter.get(otherFormatName), function (fmt2) { + var filteredFmt2 = filterObj(fmt2); + return equal(filteredFmt1, filteredFmt2); + }); + }); + }; + var isBlockFormat = function (format) { + return hasNonNullableKey(format, 'block'); + }; + var isSelectorFormat = function (format) { + return hasNonNullableKey(format, 'selector'); + }; + var isInlineFormat = function (format) { + return hasNonNullableKey(format, 'inline'); + }; + var hasBlockChildren = function (dom, elm) { + return exists(elm.childNodes, dom.isBlock); + }; + + var isBookmarkNode$2 = isBookmarkNode$1; + var getParents$2 = getParents$1; + var isWhiteSpaceNode$1 = isWhiteSpaceNode; + var isTextBlock$2 = isTextBlock$1; + var isBogusBr = function (node) { + return isBr(node) && node.getAttribute('data-mce-bogus') && !node.nextSibling; + }; + var findParentContentEditable = function (dom, node) { + var parent = node; + while (parent) { + if (isElement$1(parent) && dom.getContentEditable(parent)) { + return dom.getContentEditable(parent) === 'false' ? parent : node; + } + parent = parent.parentNode; + } + return node; + }; + var walkText = function (start, node, offset, predicate) { + var str = node.data; + for (var i = offset; start ? i >= 0 : i < str.length; start ? i-- : i++) { + if (predicate(str.charAt(i))) { + return start ? i + 1 : i; + } + } + return -1; + }; + var findSpace = function (start, node, offset) { + return walkText(start, node, offset, function (c) { + return isNbsp(c) || isWhiteSpace$1(c); + }); + }; + var findContent = function (start, node, offset) { + return walkText(start, node, offset, isContent$1); + }; + var findWordEndPoint = function (dom, body, container, offset, start, includeTrailingSpaces) { + var lastTextNode; + var rootNode = dom.getParent(container, dom.isBlock) || body; + var walk = function (container, offset, pred) { + var textSeeker = TextSeeker(dom); + var walker = start ? textSeeker.backwards : textSeeker.forwards; + return Optional.from(walker(container, offset, function (text, textOffset) { + if (isBookmarkNode$2(text.parentNode)) { + return -1; + } else { + lastTextNode = text; + return pred(start, text, textOffset); + } + }, rootNode)); + }; + var spaceResult = walk(container, offset, findSpace); + return spaceResult.bind(function (result) { + return includeTrailingSpaces ? walk(result.container, result.offset + (start ? -1 : 0), findContent) : Optional.some(result); + }).orThunk(function () { + return lastTextNode ? Optional.some({ + container: lastTextNode, + offset: start ? 0 : lastTextNode.length + }) : Optional.none(); + }); + }; + var findSelectorEndPoint = function (dom, format, rng, container, siblingName) { + if (isText$1(container) && container.nodeValue.length === 0 && container[siblingName]) { + container = container[siblingName]; + } + var parents = getParents$2(dom, container); + for (var i = 0; i < parents.length; i++) { + for (var y = 0; y < format.length; y++) { + var curFormat = format[y]; + if ('collapsed' in curFormat && curFormat.collapsed !== rng.collapsed) { + continue; + } + if (dom.is(parents[i], curFormat.selector)) { + return parents[i]; + } + } + } + return container; + }; + var findBlockEndPoint = function (editor, format, container, siblingName) { + var node; + var dom = editor.dom; + var root = dom.getRoot(); + if (!format[0].wrapper) { + node = dom.getParent(container, format[0].block, root); + } + if (!node) { + var scopeRoot = dom.getParent(container, 'LI,TD,TH'); + node = dom.getParent(isText$1(container) ? container.parentNode : container, function (node) { + return node !== root && isTextBlock$2(editor, node); + }, scopeRoot); + } + if (node && format[0].wrapper) { + node = getParents$2(dom, node, 'ul,ol').reverse()[0] || node; + } + if (!node) { + node = container; + while (node[siblingName] && !dom.isBlock(node[siblingName])) { + node = node[siblingName]; + if (isEq(node, 'br')) { + break; + } + } + } + return node || container; + }; + var isAtBlockBoundary = function (dom, root, container, siblingName) { + var parent = container.parentNode; + if (isNonNullable(container[siblingName])) { + return false; + } else if (parent === root || isNullable(parent) || dom.isBlock(parent)) { + return true; + } else { + return isAtBlockBoundary(dom, root, parent, siblingName); + } + }; + var findParentContainer = function (dom, format, container, offset, start) { + var parent = container; + var sibling; + var siblingName = start ? 'previousSibling' : 'nextSibling'; + var root = dom.getRoot(); + if (isText$1(container) && !isWhiteSpaceNode$1(container)) { + if (start ? offset > 0 : offset < container.data.length) { + return container; + } + } + while (true) { + if (!format[0].block_expand && dom.isBlock(parent)) { + return parent; + } + for (sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) { + var allowSpaces = isText$1(sibling) && !isAtBlockBoundary(dom, root, sibling, siblingName); + if (!isBookmarkNode$2(sibling) && !isBogusBr(sibling) && !isWhiteSpaceNode$1(sibling, allowSpaces)) { + return parent; + } + } + if (parent === root || parent.parentNode === root) { + container = parent; + break; + } + parent = parent.parentNode; + } + return container; + }; + var isSelfOrParentBookmark = function (container) { + return isBookmarkNode$2(container.parentNode) || isBookmarkNode$2(container); + }; + var expandRng = function (editor, rng, format, includeTrailingSpace) { + if (includeTrailingSpace === void 0) { + includeTrailingSpace = false; + } + var startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset; + var dom = editor.dom; + if (isElement$1(startContainer) && startContainer.hasChildNodes()) { + startContainer = getNode(startContainer, startOffset); + if (isText$1(startContainer)) { + startOffset = 0; + } + } + if (isElement$1(endContainer) && endContainer.hasChildNodes()) { + endContainer = getNode(endContainer, rng.collapsed ? endOffset : endOffset - 1); + if (isText$1(endContainer)) { + endOffset = endContainer.nodeValue.length; + } + } + startContainer = findParentContentEditable(dom, startContainer); + endContainer = findParentContentEditable(dom, endContainer); + if (isSelfOrParentBookmark(startContainer)) { + startContainer = isBookmarkNode$2(startContainer) ? startContainer : startContainer.parentNode; + if (rng.collapsed) { + startContainer = startContainer.previousSibling || startContainer; + } else { + startContainer = startContainer.nextSibling || startContainer; + } + if (isText$1(startContainer)) { + startOffset = rng.collapsed ? startContainer.length : 0; + } + } + if (isSelfOrParentBookmark(endContainer)) { + endContainer = isBookmarkNode$2(endContainer) ? endContainer : endContainer.parentNode; + if (rng.collapsed) { + endContainer = endContainer.nextSibling || endContainer; + } else { + endContainer = endContainer.previousSibling || endContainer; + } + if (isText$1(endContainer)) { + endOffset = rng.collapsed ? 0 : endContainer.length; + } + } + if (rng.collapsed) { + var startPoint = findWordEndPoint(dom, editor.getBody(), startContainer, startOffset, true, includeTrailingSpace); + startPoint.each(function (_a) { + var container = _a.container, offset = _a.offset; + startContainer = container; + startOffset = offset; + }); + var endPoint = findWordEndPoint(dom, editor.getBody(), endContainer, endOffset, false, includeTrailingSpace); + endPoint.each(function (_a) { + var container = _a.container, offset = _a.offset; + endContainer = container; + endOffset = offset; + }); + } + if (format[0].inline || format[0].block_expand) { + if (!format[0].inline || (!isText$1(startContainer) || startOffset === 0)) { + startContainer = findParentContainer(dom, format, startContainer, startOffset, true); + } + if (!format[0].inline || (!isText$1(endContainer) || endOffset === endContainer.nodeValue.length)) { + endContainer = findParentContainer(dom, format, endContainer, endOffset, false); + } + } + if (format[0].selector && format[0].expand !== false && !format[0].inline) { + startContainer = findSelectorEndPoint(dom, format, rng, startContainer, 'previousSibling'); + endContainer = findSelectorEndPoint(dom, format, rng, endContainer, 'nextSibling'); + } + if (format[0].block || format[0].selector) { + startContainer = findBlockEndPoint(editor, format, startContainer, 'previousSibling'); + endContainer = findBlockEndPoint(editor, format, endContainer, 'nextSibling'); + if (format[0].block) { + if (!dom.isBlock(startContainer)) { + startContainer = findParentContainer(dom, format, startContainer, startOffset, true); + } + if (!dom.isBlock(endContainer)) { + endContainer = findParentContainer(dom, format, endContainer, endOffset, false); + } + } + } + if (isElement$1(startContainer)) { + startOffset = dom.nodeIndex(startContainer); + startContainer = startContainer.parentNode; + } + if (isElement$1(endContainer)) { + endOffset = dom.nodeIndex(endContainer) + 1; + endContainer = endContainer.parentNode; + } + return { + startContainer: startContainer, + startOffset: startOffset, + endContainer: endContainer, + endOffset: endOffset + }; + }; + + var clampToExistingChildren = function (container, index) { + var childNodes = container.childNodes; + if (index >= childNodes.length) { + index = childNodes.length - 1; + } else if (index < 0) { + index = 0; + } + return childNodes[index] || container; + }; + var getEndChild = function (container, index) { + return clampToExistingChildren(container, index - 1); + }; + var walk$1 = function (dom, rng, callback) { + var startContainer = rng.startContainer; + var startOffset = rng.startOffset; + var endContainer = rng.endContainer; + var endOffset = rng.endOffset; + var exclude = function (nodes) { + var node; + node = nodes[0]; + if (node.nodeType === 3 && node === startContainer && startOffset >= node.nodeValue.length) { + nodes.splice(0, 1); + } + node = nodes[nodes.length - 1]; + if (endOffset === 0 && nodes.length > 0 && node === endContainer && node.nodeType === 3) { + nodes.splice(nodes.length - 1, 1); + } + return nodes; + }; + var collectSiblings = function (node, name, endNode) { + var siblings = []; + for (; node && node !== endNode; node = node[name]) { + siblings.push(node); + } + return siblings; + }; + var findEndPoint = function (node, root) { + do { + if (node.parentNode === root) { + return node; + } + node = node.parentNode; + } while (node); + }; + var walkBoundary = function (startNode, endNode, next) { + var siblingName = next ? 'nextSibling' : 'previousSibling'; + for (var node = startNode, parent_1 = node.parentNode; node && node !== endNode; node = parent_1) { + parent_1 = node.parentNode; + var siblings_1 = collectSiblings(node === startNode ? node : node[siblingName], siblingName); + if (siblings_1.length) { + if (!next) { + siblings_1.reverse(); + } + callback(exclude(siblings_1)); + } + } + }; + if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) { + startContainer = clampToExistingChildren(startContainer, startOffset); + } + if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) { + endContainer = getEndChild(endContainer, endOffset); + } + if (startContainer === endContainer) { + return callback(exclude([startContainer])); + } + var ancestor = dom.findCommonAncestor(startContainer, endContainer); + for (var node = startContainer; node; node = node.parentNode) { + if (node === endContainer) { + return walkBoundary(startContainer, ancestor, true); + } + if (node === ancestor) { + break; + } + } + for (var node = endContainer; node; node = node.parentNode) { + if (node === startContainer) { + return walkBoundary(endContainer, ancestor); + } + if (node === ancestor) { + break; + } + } + var startPoint = findEndPoint(startContainer, ancestor) || startContainer; + var endPoint = findEndPoint(endContainer, ancestor) || endContainer; + walkBoundary(startContainer, startPoint, true); + var siblings = collectSiblings(startPoint === startContainer ? startPoint : startPoint.nextSibling, 'nextSibling', endPoint === endContainer ? endPoint.nextSibling : endPoint); + if (siblings.length) { + callback(exclude(siblings)); + } + walkBoundary(endContainer, endPoint); + }; + + var getRanges = function (selection) { + var ranges = []; + if (selection) { + for (var i = 0; i < selection.rangeCount; i++) { + ranges.push(selection.getRangeAt(i)); + } + } + return ranges; + }; + var getSelectedNodes = function (ranges) { + return bind(ranges, function (range) { + var node = getSelectedNode(range); + return node ? [SugarElement.fromDom(node)] : []; + }); + }; + var hasMultipleRanges = function (selection) { + return getRanges(selection).length > 1; + }; + + var getCellsFromRanges = function (ranges) { + return filter(getSelectedNodes(ranges), isTableCell$1); + }; + var getCellsFromElement = function (elm) { + return descendants$1(elm, 'td[data-mce-selected],th[data-mce-selected]'); + }; + var getCellsFromElementOrRanges = function (ranges, element) { + var selectedCells = getCellsFromElement(element); + return selectedCells.length > 0 ? selectedCells : getCellsFromRanges(ranges); + }; + var getCellsFromEditor = function (editor) { + return getCellsFromElementOrRanges(getRanges(editor.selection.getSel()), SugarElement.fromDom(editor.getBody())); + }; + + var getStartNode = function (rng) { + var sc = rng.startContainer, so = rng.startOffset; + if (isText$1(sc)) { + return so === 0 ? Optional.some(SugarElement.fromDom(sc)) : Optional.none(); + } else { + return Optional.from(sc.childNodes[so]).map(SugarElement.fromDom); + } + }; + var getEndNode = function (rng) { + var ec = rng.endContainer, eo = rng.endOffset; + if (isText$1(ec)) { + return eo === ec.data.length ? Optional.some(SugarElement.fromDom(ec)) : Optional.none(); + } else { + return Optional.from(ec.childNodes[eo - 1]).map(SugarElement.fromDom); + } + }; + var getFirstChildren = function (node) { + return firstChild(node).fold(constant([node]), function (child) { + return [node].concat(getFirstChildren(child)); + }); + }; + var getLastChildren = function (node) { + return lastChild(node).fold(constant([node]), function (child) { + if (name(child) === 'br') { + return prevSibling(child).map(function (sibling) { + return [node].concat(getLastChildren(sibling)); + }).getOr([]); + } else { + return [node].concat(getLastChildren(child)); + } + }); + }; + var hasAllContentsSelected = function (elm, rng) { + return lift2(getStartNode(rng), getEndNode(rng), function (startNode, endNode) { + var start = find(getFirstChildren(elm), curry(eq$2, startNode)); + var end = find(getLastChildren(elm), curry(eq$2, endNode)); + return start.isSome() && end.isSome(); + }).getOr(false); + }; + var moveEndPoint$1 = function (dom, rng, node, start) { + var root = node, walker = new DomTreeWalker(node, root); + var moveCaretBeforeOnEnterElementsMap = filter$1(dom.schema.getMoveCaretBeforeOnEnterElements(), function (_, name) { + return !contains([ + 'td', + 'th', + 'table' + ], name.toLowerCase()); + }); + do { + if (isText$1(node) && Tools.trim(node.nodeValue).length !== 0) { + if (start) { + rng.setStart(node, 0); + } else { + rng.setEnd(node, node.nodeValue.length); + } + return; + } + if (moveCaretBeforeOnEnterElementsMap[node.nodeName]) { + if (start) { + rng.setStartBefore(node); + } else { + if (node.nodeName === 'BR') { + rng.setEndBefore(node); + } else { + rng.setEndAfter(node); + } + } + return; + } + } while (node = start ? walker.next() : walker.prev()); + if (root.nodeName === 'BODY') { + if (start) { + rng.setStart(root, 0); + } else { + rng.setEnd(root, root.childNodes.length); + } + } + }; + var hasAnyRanges = function (editor) { + var sel = editor.selection.getSel(); + return sel && sel.rangeCount > 0; + }; + var runOnRanges = function (editor, executor) { + var fakeSelectionNodes = getCellsFromEditor(editor); + if (fakeSelectionNodes.length > 0) { + each(fakeSelectionNodes, function (elem) { + var node = elem.dom; + var fakeNodeRng = editor.dom.createRng(); + fakeNodeRng.setStartBefore(node); + fakeNodeRng.setEndAfter(node); + executor(fakeNodeRng, true); + }); + } else { + executor(editor.selection.getRng(), false); + } + }; + var preserve = function (selection, fillBookmark, executor) { + var bookmark = getPersistentBookmark(selection, fillBookmark); + executor(bookmark); + selection.moveToBookmark(bookmark); + }; + + var NodeValue = function (is, name) { + var get = function (element) { + if (!is(element)) { + throw new Error('Can only get ' + name + ' value of a ' + name + ' node'); + } + return getOption(element).getOr(''); + }; + var getOption = function (element) { + return is(element) ? Optional.from(element.dom.nodeValue) : Optional.none(); + }; + var set = function (element, value) { + if (!is(element)) { + throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node'); + } + element.dom.nodeValue = value; + }; + return { + get: get, + getOption: getOption, + set: set + }; + }; + + var api = NodeValue(isText, 'text'); + var get$8 = function (element) { + return api.get(element); + }; + + var isZeroWidth = function (elem) { + return isText(elem) && get$8(elem) === ZWSP; + }; + var context = function (editor, elem, wrapName, nodeName) { + return parent(elem).fold(function () { + return 'skipping'; + }, function (parent) { + if (nodeName === 'br' || isZeroWidth(elem)) { + return 'valid'; + } else if (isAnnotation(elem)) { + return 'existing'; + } else if (isCaretNode(elem.dom)) { + return 'caret'; + } else if (!isValid(editor, wrapName, nodeName) || !isValid(editor, name(parent), wrapName)) { + return 'invalid-child'; + } else { + return 'valid'; + } + }); + }; + + var applyWordGrab = function (editor, rng) { + var r = expandRng(editor, rng, [{ inline: true }]); + rng.setStart(r.startContainer, r.startOffset); + rng.setEnd(r.endContainer, r.endOffset); + editor.selection.setRng(rng); + }; + var makeAnnotation = function (eDoc, _a, annotationName, decorate) { + var _b = _a.uid, uid = _b === void 0 ? generate$1('mce-annotation') : _b, data = __rest(_a, ['uid']); + var master = SugarElement.fromTag('span', eDoc); + add$3(master, annotation()); + set(master, '' + dataAnnotationId(), uid); + set(master, '' + dataAnnotation(), annotationName); + var _c = decorate(uid, data), _d = _c.attributes, attributes = _d === void 0 ? {} : _d, _e = _c.classes, classes = _e === void 0 ? [] : _e; + setAll(master, attributes); + add$4(master, classes); + return master; + }; + var annotate = function (editor, rng, annotationName, decorate, data) { + var newWrappers = []; + var master = makeAnnotation(editor.getDoc(), data, annotationName, decorate); + var wrapper = Cell(Optional.none()); + var finishWrapper = function () { + wrapper.set(Optional.none()); + }; + var getOrOpenWrapper = function () { + return wrapper.get().getOrThunk(function () { + var nu = shallow(master); + newWrappers.push(nu); + wrapper.set(Optional.some(nu)); + return nu; + }); + }; + var processElements = function (elems) { + each(elems, processElement); + }; + var processElement = function (elem) { + var ctx = context(editor, elem, 'span', name(elem)); + switch (ctx) { + case 'invalid-child': { + finishWrapper(); + var children$1 = children(elem); + processElements(children$1); + finishWrapper(); + break; + } + case 'valid': { + var w = getOrOpenWrapper(); + wrap(elem, w); + break; + } + } + }; + var processNodes = function (nodes) { + var elems = map(nodes, SugarElement.fromDom); + processElements(elems); + }; + walk$1(editor.dom, rng, function (nodes) { + finishWrapper(); + processNodes(nodes); + }); + return newWrappers; + }; + var annotateWithBookmark = function (editor, name, settings, data) { + editor.undoManager.transact(function () { + var selection = editor.selection; + var initialRng = selection.getRng(); + var hasFakeSelection = getCellsFromEditor(editor).length > 0; + if (initialRng.collapsed && !hasFakeSelection) { + applyWordGrab(editor, initialRng); + } + if (selection.getRng().collapsed && !hasFakeSelection) { + var wrapper = makeAnnotation(editor.getDoc(), data, name, settings.decorate); + set$1(wrapper, nbsp); + selection.getRng().insertNode(wrapper.dom); + selection.select(wrapper.dom); + } else { + preserve(selection, false, function () { + runOnRanges(editor, function (selectionRng) { + annotate(editor, selectionRng, name, settings.decorate, data); + }); + }); + } + }); + }; + + var Annotator = function (editor) { + var registry = create$2(); + setup$1(editor, registry); + var changes = setup(editor); + return { + register: function (name, settings) { + registry.register(name, settings); + }, + annotate: function (name, data) { + registry.lookup(name).each(function (settings) { + annotateWithBookmark(editor, name, settings, data); + }); + }, + annotationChanged: function (name, callback) { + changes.addListener(name, callback); + }, + remove: function (name) { + identify(editor, Optional.some(name)).each(function (_a) { + var elements = _a.elements; + each(elements, unwrap); + }); + }, + getAll: function (name) { + var directory = findAll(editor, name); + return map$1(directory, function (elems) { + return map(elems, function (elem) { + return elem.dom; + }); + }); + } + }; + }; + + var BookmarkManager = function (selection) { + return { + getBookmark: curry(getBookmark$1, selection), + moveToBookmark: curry(moveToBookmark, selection) + }; + }; + BookmarkManager.isBookmarkNode = isBookmarkNode$1; + + var getContentEditableRoot = function (root, node) { + while (node && node !== root) { + if (isContentEditableTrue(node) || isContentEditableFalse(node)) { + return node; + } + node = node.parentNode; + } + return null; + }; + + var isXYWithinRange = function (clientX, clientY, range) { + if (range.collapsed) { + return false; + } + if (Env.browser.isIE() && range.startOffset === range.endOffset - 1 && range.startContainer === range.endContainer) { + var elm = range.startContainer.childNodes[range.startOffset]; + if (isElement$1(elm)) { + return exists(elm.getClientRects(), function (rect) { + return containsXY(rect, clientX, clientY); + }); + } + } + return exists(range.getClientRects(), function (rect) { + return containsXY(rect, clientX, clientY); + }); + }; + + var firePreProcess = function (editor, args) { + return editor.fire('PreProcess', args); + }; + var firePostProcess = function (editor, args) { + return editor.fire('PostProcess', args); + }; + var fireRemove = function (editor) { + return editor.fire('remove'); + }; + var fireDetach = function (editor) { + return editor.fire('detach'); + }; + var fireSwitchMode = function (editor, mode) { + return editor.fire('SwitchMode', { mode: mode }); + }; + var fireObjectResizeStart = function (editor, target, width, height, origin) { + editor.fire('ObjectResizeStart', { + target: target, + width: width, + height: height, + origin: origin + }); + }; + var fireObjectResized = function (editor, target, width, height, origin) { + editor.fire('ObjectResized', { + target: target, + width: width, + height: height, + origin: origin + }); + }; + var firePreInit = function (editor) { + return editor.fire('PreInit'); + }; + var firePostRender = function (editor) { + return editor.fire('PostRender'); + }; + var fireInit = function (editor) { + return editor.fire('Init'); + }; + var firePlaceholderToggle = function (editor, state) { + return editor.fire('PlaceholderToggle', { state: state }); + }; + var fireError = function (editor, errorType, error) { + return editor.fire(errorType, error); + }; + + var VK = { + BACKSPACE: 8, + DELETE: 46, + DOWN: 40, + ENTER: 13, + LEFT: 37, + RIGHT: 39, + SPACEBAR: 32, + TAB: 9, + UP: 38, + PAGE_UP: 33, + PAGE_DOWN: 34, + END: 35, + HOME: 36, + modifierPressed: function (e) { + return e.shiftKey || e.ctrlKey || e.altKey || VK.metaKeyPressed(e); + }, + metaKeyPressed: function (e) { + return Env.mac ? e.metaKey : e.ctrlKey && !e.altKey; + } + }; + + var isContentEditableFalse$6 = isContentEditableFalse; + var ControlSelection = function (selection, editor) { + var elementSelectionAttr = 'data-mce-selected'; + var dom = editor.dom, each$2 = Tools.each; + var selectedElm, selectedElmGhost, resizeHelper, selectedHandle, resizeBackdrop; + var startX, startY, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted; + var width, height; + var editableDoc = editor.getDoc(), rootDocument = document; + var abs = Math.abs, round = Math.round, rootElement = editor.getBody(); + var startScrollWidth, startScrollHeight; + var resizeHandles = { + nw: [ + 0, + 0, + -1, + -1 + ], + ne: [ + 1, + 0, + 1, + -1 + ], + se: [ + 1, + 1, + 1, + 1 + ], + sw: [ + 0, + 1, + -1, + 1 + ] + }; + var isImage = function (elm) { + return elm && (elm.nodeName === 'IMG' || editor.dom.is(elm, 'figure.image')); + }; + var isMedia$1 = function (elm) { + return isMedia(elm) || dom.hasClass(elm, 'mce-preview-object'); + }; + var isEventOnImageOutsideRange = function (evt, range) { + if (evt.type === 'longpress' || evt.type.indexOf('touch') === 0) { + var touch = evt.touches[0]; + return isImage(evt.target) && !isXYWithinRange(touch.clientX, touch.clientY, range); + } else { + return isImage(evt.target) && !isXYWithinRange(evt.clientX, evt.clientY, range); + } + }; + var contextMenuSelectImage = function (evt) { + var target = evt.target; + if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) { + editor.selection.select(target); + } + }; + var getResizeTargets = function (elm) { + if (dom.is(elm, 'figure.image')) { + return [elm.querySelector('img')]; + } else if (dom.hasClass(elm, 'mce-preview-object') && isNonNullable(elm.firstElementChild)) { + return [ + elm, + elm.firstElementChild + ]; + } else { + return [elm]; + } + }; + var isResizable = function (elm) { + var selector = getObjectResizing(editor); + if (!selector) { + return false; + } + if (elm.getAttribute('data-mce-resize') === 'false') { + return false; + } + if (elm === editor.getBody()) { + return false; + } + if (dom.hasClass(elm, 'mce-preview-object')) { + return is$1(SugarElement.fromDom(elm.firstElementChild), selector); + } else { + return is$1(SugarElement.fromDom(elm), selector); + } + }; + var createGhostElement = function (elm) { + if (isMedia$1(elm)) { + return dom.create('img', { src: Env.transparentSrc }); + } else { + return elm.cloneNode(true); + } + }; + var setSizeProp = function (element, name, value) { + if (isNonNullable(value)) { + var targets = getResizeTargets(element); + each(targets, function (target) { + if (target.style[name] || !editor.schema.isValid(target.nodeName.toLowerCase(), name)) { + dom.setStyle(target, name, value); + } else { + dom.setAttrib(target, name, '' + value); + } + }); + } + }; + var setGhostElmSize = function (ghostElm, width, height) { + setSizeProp(ghostElm, 'width', width); + setSizeProp(ghostElm, 'height', height); + }; + var resizeGhostElement = function (e) { + var deltaX, deltaY, proportional; + var resizeHelperX, resizeHelperY; + deltaX = e.screenX - startX; + deltaY = e.screenY - startY; + width = deltaX * selectedHandle[2] + startW; + height = deltaY * selectedHandle[3] + startH; + width = width < 5 ? 5 : width; + height = height < 5 ? 5 : height; + if ((isImage(selectedElm) || isMedia$1(selectedElm)) && getResizeImgProportional(editor) !== false) { + proportional = !VK.modifierPressed(e); + } else { + proportional = VK.modifierPressed(e); + } + if (proportional) { + if (abs(deltaX) > abs(deltaY)) { + height = round(width * ratio); + width = round(height / ratio); + } else { + width = round(height / ratio); + height = round(width * ratio); + } + } + setGhostElmSize(selectedElmGhost, width, height); + resizeHelperX = selectedHandle.startPos.x + deltaX; + resizeHelperY = selectedHandle.startPos.y + deltaY; + resizeHelperX = resizeHelperX > 0 ? resizeHelperX : 0; + resizeHelperY = resizeHelperY > 0 ? resizeHelperY : 0; + dom.setStyles(resizeHelper, { + left: resizeHelperX, + top: resizeHelperY, + display: 'block' + }); + resizeHelper.innerHTML = width + ' × ' + height; + if (selectedHandle[2] < 0 && selectedElmGhost.clientWidth <= width) { + dom.setStyle(selectedElmGhost, 'left', selectedElmX + (startW - width)); + } + if (selectedHandle[3] < 0 && selectedElmGhost.clientHeight <= height) { + dom.setStyle(selectedElmGhost, 'top', selectedElmY + (startH - height)); + } + deltaX = rootElement.scrollWidth - startScrollWidth; + deltaY = rootElement.scrollHeight - startScrollHeight; + if (deltaX + deltaY !== 0) { + dom.setStyles(resizeHelper, { + left: resizeHelperX - deltaX, + top: resizeHelperY - deltaY + }); + } + if (!resizeStarted) { + fireObjectResizeStart(editor, selectedElm, startW, startH, 'corner-' + selectedHandle.name); + resizeStarted = true; + } + }; + var endGhostResize = function () { + var wasResizeStarted = resizeStarted; + resizeStarted = false; + if (wasResizeStarted) { + setSizeProp(selectedElm, 'width', width); + setSizeProp(selectedElm, 'height', height); + } + dom.unbind(editableDoc, 'mousemove', resizeGhostElement); + dom.unbind(editableDoc, 'mouseup', endGhostResize); + if (rootDocument !== editableDoc) { + dom.unbind(rootDocument, 'mousemove', resizeGhostElement); + dom.unbind(rootDocument, 'mouseup', endGhostResize); + } + dom.remove(selectedElmGhost); + dom.remove(resizeHelper); + dom.remove(resizeBackdrop); + showResizeRect(selectedElm); + if (wasResizeStarted) { + fireObjectResized(editor, selectedElm, width, height, 'corner-' + selectedHandle.name); + dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style')); + } + editor.nodeChanged(); + }; + var showResizeRect = function (targetElm) { + unbindResizeHandleEvents(); + var position = dom.getPos(targetElm, rootElement); + var selectedElmX = position.x; + var selectedElmY = position.y; + var rect = targetElm.getBoundingClientRect(); + var targetWidth = rect.width || rect.right - rect.left; + var targetHeight = rect.height || rect.bottom - rect.top; + if (selectedElm !== targetElm) { + hideResizeRect(); + selectedElm = targetElm; + width = height = 0; + } + var e = editor.fire('ObjectSelected', { target: targetElm }); + var selectedValue = dom.getAttrib(selectedElm, elementSelectionAttr, '1'); + if (isResizable(targetElm) && !e.isDefaultPrevented()) { + each$2(resizeHandles, function (handle, name) { + var handleElm; + var startDrag = function (e) { + var target = getResizeTargets(selectedElm)[0]; + startX = e.screenX; + startY = e.screenY; + startW = target.clientWidth; + startH = target.clientHeight; + ratio = startH / startW; + selectedHandle = handle; + selectedHandle.name = name; + selectedHandle.startPos = { + x: targetWidth * handle[0] + selectedElmX, + y: targetHeight * handle[1] + selectedElmY + }; + startScrollWidth = rootElement.scrollWidth; + startScrollHeight = rootElement.scrollHeight; + resizeBackdrop = dom.add(rootElement, 'div', { class: 'mce-resize-backdrop' }); + dom.setStyles(resizeBackdrop, { + position: 'fixed', + left: '0', + top: '0', + width: '100%', + height: '100%' + }); + selectedElmGhost = createGhostElement(selectedElm); + dom.addClass(selectedElmGhost, 'mce-clonedresizable'); + dom.setAttrib(selectedElmGhost, 'data-mce-bogus', 'all'); + selectedElmGhost.contentEditable = 'false'; + dom.setStyles(selectedElmGhost, { + left: selectedElmX, + top: selectedElmY, + margin: 0 + }); + setGhostElmSize(selectedElmGhost, targetWidth, targetHeight); + selectedElmGhost.removeAttribute(elementSelectionAttr); + rootElement.appendChild(selectedElmGhost); + dom.bind(editableDoc, 'mousemove', resizeGhostElement); + dom.bind(editableDoc, 'mouseup', endGhostResize); + if (rootDocument !== editableDoc) { + dom.bind(rootDocument, 'mousemove', resizeGhostElement); + dom.bind(rootDocument, 'mouseup', endGhostResize); + } + resizeHelper = dom.add(rootElement, 'div', { + 'class': 'mce-resize-helper', + 'data-mce-bogus': 'all' + }, startW + ' × ' + startH); + }; + handleElm = dom.get('mceResizeHandle' + name); + if (handleElm) { + dom.remove(handleElm); + } + handleElm = dom.add(rootElement, 'div', { + 'id': 'mceResizeHandle' + name, + 'data-mce-bogus': 'all', + 'class': 'mce-resizehandle', + 'unselectable': true, + 'style': 'cursor:' + name + '-resize; margin:0; padding:0' + }); + if (Env.ie === 11) { + handleElm.contentEditable = false; + } + dom.bind(handleElm, 'mousedown', function (e) { + e.stopImmediatePropagation(); + e.preventDefault(); + startDrag(e); + }); + handle.elm = handleElm; + dom.setStyles(handleElm, { + left: targetWidth * handle[0] + selectedElmX - handleElm.offsetWidth / 2, + top: targetHeight * handle[1] + selectedElmY - handleElm.offsetHeight / 2 + }); + }); + } else { + hideResizeRect(); + } + if (!dom.getAttrib(selectedElm, elementSelectionAttr)) { + selectedElm.setAttribute(elementSelectionAttr, selectedValue); + } + }; + var hideResizeRect = function () { + unbindResizeHandleEvents(); + if (selectedElm) { + selectedElm.removeAttribute(elementSelectionAttr); + } + each$1(resizeHandles, function (value, name) { + var handleElm = dom.get('mceResizeHandle' + name); + if (handleElm) { + dom.unbind(handleElm); + dom.remove(handleElm); + } + }); + }; + var updateResizeRect = function (e) { + var startElm, controlElm; + var isChildOrEqual = function (node, parent) { + if (node) { + do { + if (node === parent) { + return true; + } + } while (node = node.parentNode); + } + }; + if (resizeStarted || editor.removed) { + return; + } + each$2(dom.select('img[data-mce-selected],hr[data-mce-selected]'), function (img) { + img.removeAttribute(elementSelectionAttr); + }); + controlElm = e.type === 'mousedown' ? e.target : selection.getNode(); + controlElm = dom.$(controlElm).closest('table,img,figure.image,hr,video,span.mce-preview-object')[0]; + if (isChildOrEqual(controlElm, rootElement)) { + disableGeckoResize(); + startElm = selection.getStart(true); + if (isChildOrEqual(startElm, controlElm) && isChildOrEqual(selection.getEnd(true), controlElm)) { + showResizeRect(controlElm); + return; + } + } + hideResizeRect(); + }; + var isWithinContentEditableFalse = function (elm) { + return isContentEditableFalse$6(getContentEditableRoot(editor.getBody(), elm)); + }; + var unbindResizeHandleEvents = function () { + each$1(resizeHandles, function (handle) { + if (handle.elm) { + dom.unbind(handle.elm); + delete handle.elm; + } + }); + }; + var disableGeckoResize = function () { + try { + editor.getDoc().execCommand('enableObjectResizing', false, 'false'); + } catch (ex) { + } + }; + editor.on('init', function () { + disableGeckoResize(); + if (Env.browser.isIE() || Env.browser.isEdge()) { + editor.on('mousedown click', function (e) { + var target = e.target, nodeName = target.nodeName; + if (!resizeStarted && /^(TABLE|IMG|HR)$/.test(nodeName) && !isWithinContentEditableFalse(target)) { + if (e.button !== 2) { + editor.selection.select(target, nodeName === 'TABLE'); + } + if (e.type === 'mousedown') { + editor.nodeChanged(); + } + } + }); + var handleMSControlSelect_1 = function (e) { + var delayedSelect = function (node) { + Delay.setEditorTimeout(editor, function () { + return editor.selection.select(node); + }); + }; + if (isWithinContentEditableFalse(e.target) || isMedia(e.target)) { + e.preventDefault(); + delayedSelect(e.target); + return; + } + if (/^(TABLE|IMG|HR)$/.test(e.target.nodeName)) { + e.preventDefault(); + if (e.target.tagName === 'IMG') { + delayedSelect(e.target); + } + } + }; + dom.bind(rootElement, 'mscontrolselect', handleMSControlSelect_1); + editor.on('remove', function () { + return dom.unbind(rootElement, 'mscontrolselect', handleMSControlSelect_1); + }); + } + var throttledUpdateResizeRect = Delay.throttle(function (e) { + if (!editor.composing) { + updateResizeRect(e); + } + }); + editor.on('nodechange ResizeEditor ResizeWindow ResizeContent drop FullscreenStateChanged', throttledUpdateResizeRect); + editor.on('keyup compositionend', function (e) { + if (selectedElm && selectedElm.nodeName === 'TABLE') { + throttledUpdateResizeRect(e); + } + }); + editor.on('hide blur', hideResizeRect); + editor.on('contextmenu longpress', contextMenuSelectImage, true); + }); + editor.on('remove', unbindResizeHandleEvents); + var destroy = function () { + selectedElm = selectedElmGhost = resizeBackdrop = null; + }; + return { + isResizable: isResizable, + showResizeRect: showResizeRect, + hideResizeRect: hideResizeRect, + updateResizeRect: updateResizeRect, + destroy: destroy + }; + }; + + var hasCeProperty = function (node) { + return isContentEditableTrue(node) || isContentEditableFalse(node); + }; + var findParent = function (node, rootNode, predicate) { + while (node && node !== rootNode) { + if (predicate(node)) { + return node; + } + node = node.parentNode; + } + return null; + }; + var findClosestIeRange = function (clientX, clientY, doc) { + var rects; + var element = doc.elementFromPoint(clientX, clientY); + var rng = doc.body.createTextRange(); + if (!element || element.tagName === 'HTML') { + element = doc.body; + } + rng.moveToElementText(element); + rects = Tools.toArray(rng.getClientRects()); + rects = rects.sort(function (a, b) { + a = Math.abs(Math.max(a.top - clientY, a.bottom - clientY)); + b = Math.abs(Math.max(b.top - clientY, b.bottom - clientY)); + return a - b; + }); + if (rects.length > 0) { + clientY = (rects[0].bottom + rects[0].top) / 2; + try { + rng.moveToPoint(clientX, clientY); + rng.collapse(true); + return rng; + } catch (ex) { + } + } + return null; + }; + var moveOutOfContentEditableFalse = function (rng, rootNode) { + var parentElement = rng && rng.parentElement ? rng.parentElement() : null; + return isContentEditableFalse(findParent(parentElement, rootNode, hasCeProperty)) ? null : rng; + }; + var fromPoint$1 = function (clientX, clientY, doc) { + var rng, point; + var pointDoc = doc; + if (pointDoc.caretPositionFromPoint) { + point = pointDoc.caretPositionFromPoint(clientX, clientY); + if (point) { + rng = doc.createRange(); + rng.setStart(point.offsetNode, point.offset); + rng.collapse(true); + } + } else if (doc.caretRangeFromPoint) { + rng = doc.caretRangeFromPoint(clientX, clientY); + } else if (pointDoc.body.createTextRange) { + rng = pointDoc.body.createTextRange(); + try { + rng.moveToPoint(clientX, clientY); + rng.collapse(true); + } catch (ex) { + rng = findClosestIeRange(clientX, clientY, doc); + } + return moveOutOfContentEditableFalse(rng, doc.body); + } + return rng; + }; + + var isEq$1 = function (rng1, rng2) { + return rng1 && rng2 && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset); + }; + + var findParent$1 = function (node, rootNode, predicate) { + while (node && node !== rootNode) { + if (predicate(node)) { + return node; + } + node = node.parentNode; + } + return null; + }; + var hasParent = function (node, rootNode, predicate) { + return findParent$1(node, rootNode, predicate) !== null; + }; + var hasParentWithName = function (node, rootNode, name) { + return hasParent(node, rootNode, function (node) { + return node.nodeName === name; + }); + }; + var isTable$3 = function (node) { + return node && node.nodeName === 'TABLE'; + }; + var isTableCell$3 = function (node) { + return node && /^(TD|TH|CAPTION)$/.test(node.nodeName); + }; + var isCeFalseCaretContainer = function (node, rootNode) { + return isCaretContainer(node) && hasParent(node, rootNode, isCaretNode) === false; + }; + var hasBrBeforeAfter = function (dom, node, left) { + var walker = new DomTreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || dom.getRoot()); + while (node = walker[left ? 'prev' : 'next']()) { + if (isBr(node)) { + return true; + } + } + }; + var isPrevNode = function (node, name) { + return node.previousSibling && node.previousSibling.nodeName === name; + }; + var hasContentEditableFalseParent = function (body, node) { + while (node && node !== body) { + if (isContentEditableFalse(node)) { + return true; + } + node = node.parentNode; + } + return false; + }; + var findTextNodeRelative = function (dom, isAfterNode, collapsed, left, startNode) { + var lastInlineElement; + var body = dom.getRoot(); + var node; + var nonEmptyElementsMap = dom.schema.getNonEmptyElements(); + var parentBlockContainer = dom.getParent(startNode.parentNode, dom.isBlock) || body; + if (left && isBr(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) { + return Optional.some(CaretPosition(startNode.parentNode, dom.nodeIndex(startNode))); + } + var walker = new DomTreeWalker(startNode, parentBlockContainer); + while (node = walker[left ? 'prev' : 'next']()) { + if (dom.getContentEditableParent(node) === 'false' || isCeFalseCaretContainer(node, body)) { + return Optional.none(); + } + if (isText$1(node) && node.nodeValue.length > 0) { + if (hasParentWithName(node, body, 'A') === false) { + return Optional.some(CaretPosition(node, left ? node.nodeValue.length : 0)); + } + return Optional.none(); + } + if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) { + return Optional.none(); + } + lastInlineElement = node; + } + if (collapsed && lastInlineElement) { + return Optional.some(CaretPosition(lastInlineElement, 0)); + } + return Optional.none(); + }; + var normalizeEndPoint = function (dom, collapsed, start, rng) { + var container, offset; + var body = dom.getRoot(); + var node; + var directionLeft, normalized = false; + container = rng[(start ? 'start' : 'end') + 'Container']; + offset = rng[(start ? 'start' : 'end') + 'Offset']; + var isAfterNode = isElement$1(container) && offset === container.childNodes.length; + var nonEmptyElementsMap = dom.schema.getNonEmptyElements(); + directionLeft = start; + if (isCaretContainer(container)) { + return Optional.none(); + } + if (isElement$1(container) && offset > container.childNodes.length - 1) { + directionLeft = false; + } + if (isDocument$1(container)) { + container = body; + offset = 0; + } + if (container === body) { + if (directionLeft) { + node = container.childNodes[offset > 0 ? offset - 1 : 0]; + if (node) { + if (isCaretContainer(node)) { + return Optional.none(); + } + if (nonEmptyElementsMap[node.nodeName] || isTable$3(node)) { + return Optional.none(); + } + } + } + if (container.hasChildNodes()) { + offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1); + container = container.childNodes[offset]; + offset = isText$1(container) && isAfterNode ? container.data.length : 0; + if (!collapsed && container === body.lastChild && isTable$3(container)) { + return Optional.none(); + } + if (hasContentEditableFalseParent(body, container) || isCaretContainer(container)) { + return Optional.none(); + } + if (container.hasChildNodes() && isTable$3(container) === false) { + node = container; + var walker = new DomTreeWalker(container, body); + do { + if (isContentEditableFalse(node) || isCaretContainer(node)) { + normalized = false; + break; + } + if (isText$1(node) && node.nodeValue.length > 0) { + offset = directionLeft ? 0 : node.nodeValue.length; + container = node; + normalized = true; + break; + } + if (nonEmptyElementsMap[node.nodeName.toLowerCase()] && !isTableCell$3(node)) { + offset = dom.nodeIndex(node); + container = node.parentNode; + if (!directionLeft) { + offset++; + } + normalized = true; + break; + } + } while (node = directionLeft ? walker.next() : walker.prev()); + } + } + } + if (collapsed) { + if (isText$1(container) && offset === 0) { + findTextNodeRelative(dom, isAfterNode, collapsed, true, container).each(function (pos) { + container = pos.container(); + offset = pos.offset(); + normalized = true; + }); + } + if (isElement$1(container)) { + node = container.childNodes[offset]; + if (!node) { + node = container.childNodes[offset - 1]; + } + if (node && isBr(node) && !isPrevNode(node, 'A') && !hasBrBeforeAfter(dom, node, false) && !hasBrBeforeAfter(dom, node, true)) { + findTextNodeRelative(dom, isAfterNode, collapsed, true, node).each(function (pos) { + container = pos.container(); + offset = pos.offset(); + normalized = true; + }); + } + } + } + if (directionLeft && !collapsed && isText$1(container) && offset === container.nodeValue.length) { + findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(function (pos) { + container = pos.container(); + offset = pos.offset(); + normalized = true; + }); + } + return normalized ? Optional.some(CaretPosition(container, offset)) : Optional.none(); + }; + var normalize = function (dom, rng) { + var collapsed = rng.collapsed, normRng = rng.cloneRange(); + var startPos = CaretPosition.fromRangeStart(rng); + normalizeEndPoint(dom, collapsed, true, normRng).each(function (pos) { + if (!collapsed || !CaretPosition.isAbove(startPos, pos)) { + normRng.setStart(pos.container(), pos.offset()); + } + }); + if (!collapsed) { + normalizeEndPoint(dom, collapsed, false, normRng).each(function (pos) { + normRng.setEnd(pos.container(), pos.offset()); + }); + } + if (collapsed) { + normRng.collapse(true); + } + return isEq$1(rng, normRng) ? Optional.none() : Optional.some(normRng); + }; + + var splitText = function (node, offset) { + return node.splitText(offset); + }; + var split$1 = function (rng) { + var startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset; + if (startContainer === endContainer && isText$1(startContainer)) { + if (startOffset > 0 && startOffset < startContainer.nodeValue.length) { + endContainer = splitText(startContainer, startOffset); + startContainer = endContainer.previousSibling; + if (endOffset > startOffset) { + endOffset = endOffset - startOffset; + startContainer = endContainer = splitText(endContainer, endOffset).previousSibling; + endOffset = endContainer.nodeValue.length; + startOffset = 0; + } else { + endOffset = 0; + } + } + } else { + if (isText$1(startContainer) && startOffset > 0 && startOffset < startContainer.nodeValue.length) { + startContainer = splitText(startContainer, startOffset); + startOffset = 0; + } + if (isText$1(endContainer) && endOffset > 0 && endOffset < endContainer.nodeValue.length) { + endContainer = splitText(endContainer, endOffset).previousSibling; + endOffset = endContainer.nodeValue.length; + } + } + return { + startContainer: startContainer, + startOffset: startOffset, + endContainer: endContainer, + endOffset: endOffset + }; + }; + + var RangeUtils = function (dom) { + var walk = function (rng, callback) { + return walk$1(dom, rng, callback); + }; + var split = split$1; + var normalize$1 = function (rng) { + return normalize(dom, rng).fold(never, function (normalizedRng) { + rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset); + rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset); + return true; + }); + }; + return { + walk: walk, + split: split, + normalize: normalize$1 + }; + }; + RangeUtils.compareRanges = isEq$1; + RangeUtils.getCaretRangeFromPoint = fromPoint$1; + RangeUtils.getSelectedNode = getSelectedNode; + RangeUtils.getNode = getNode; + + var Dimension = function (name, getOffset) { + var set = function (element, h) { + if (!isNumber(h) && !h.match(/^[0-9]+$/)) { + throw new Error(name + '.set accepts only positive integer values. Value was ' + h); + } + var dom = element.dom; + if (isSupported$1(dom)) { + dom.style[name] = h + 'px'; + } + }; + var get = function (element) { + var r = getOffset(element); + if (r <= 0 || r === null) { + var css = get$5(element, name); + return parseFloat(css) || 0; + } + return r; + }; + var getOuter = get; + var aggregate = function (element, properties) { + return foldl(properties, function (acc, property) { + var val = get$5(element, property); + var value = val === undefined ? 0 : parseInt(val, 10); + return isNaN(value) ? acc : acc + value; + }, 0); + }; + var max = function (element, value, properties) { + var cumulativeInclusions = aggregate(element, properties); + var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0; + return absoluteMax; + }; + return { + set: set, + get: get, + getOuter: getOuter, + aggregate: aggregate, + max: max + }; + }; + + var api$1 = Dimension('height', function (element) { + var dom = element.dom; + return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight; + }); + var get$9 = function (element) { + return api$1.get(element); + }; + + var walkUp = function (navigation, doc) { + var frame = navigation.view(doc); + return frame.fold(constant([]), function (f) { + var parent = navigation.owner(f); + var rest = walkUp(navigation, parent); + return [f].concat(rest); + }); + }; + var pathTo = function (element, navigation) { + var d = navigation.owner(element); + return walkUp(navigation, d); + }; + + var view = function (doc) { + var _a; + var element = doc.dom === document ? Optional.none() : Optional.from((_a = doc.dom.defaultView) === null || _a === void 0 ? void 0 : _a.frameElement); + return element.map(SugarElement.fromDom); + }; + var owner$1 = function (element) { + return documentOrOwner(element); + }; + + var Navigation = /*#__PURE__*/Object.freeze({ + __proto__: null, + view: view, + owner: owner$1 + }); + + var find$2 = function (element) { + var doc = SugarElement.fromDom(document); + var scroll = get$2(doc); + var frames = pathTo(element, Navigation); + var offset = viewport(element); + var r = foldr(frames, function (b, a) { + var loc = viewport(a); + return { + left: b.left + loc.left, + top: b.top + loc.top + }; + }, { + left: 0, + top: 0 + }); + return SugarPosition(r.left + offset.left + scroll.left, r.top + offset.top + scroll.top); + }; + + var excludeFromDescend = function (element) { + return name(element) === 'textarea'; + }; + var fireScrollIntoViewEvent = function (editor, data) { + var scrollEvent = editor.fire('ScrollIntoView', data); + return scrollEvent.isDefaultPrevented(); + }; + var fireAfterScrollIntoViewEvent = function (editor, data) { + editor.fire('AfterScrollIntoView', data); + }; + var descend = function (element, offset) { + var children$1 = children(element); + if (children$1.length === 0 || excludeFromDescend(element)) { + return { + element: element, + offset: offset + }; + } else if (offset < children$1.length && !excludeFromDescend(children$1[offset])) { + return { + element: children$1[offset], + offset: 0 + }; + } else { + var last = children$1[children$1.length - 1]; + if (excludeFromDescend(last)) { + return { + element: element, + offset: offset + }; + } else { + if (name(last) === 'img') { + return { + element: last, + offset: 1 + }; + } else if (isText(last)) { + return { + element: last, + offset: get$8(last).length + }; + } else { + return { + element: last, + offset: children(last).length + }; + } + } + } + }; + var markerInfo = function (element, cleanupFun) { + var pos = absolute(element); + var height = get$9(element); + return { + element: element, + bottom: pos.top + height, + height: height, + pos: pos, + cleanup: cleanupFun + }; + }; + var createMarker = function (element, offset) { + var startPoint = descend(element, offset); + var span = SugarElement.fromHtml('' + ZWSP + ''); + before(startPoint.element, span); + return markerInfo(span, function () { + return remove(span); + }); + }; + var elementMarker = function (element) { + return markerInfo(SugarElement.fromDom(element), noop); + }; + var withMarker = function (editor, f, rng, alignToTop) { + preserveWith(editor, function (_s, _e) { + return applyWithMarker(editor, f, rng, alignToTop); + }, rng); + }; + var withScrollEvents = function (editor, doc, f, marker, alignToTop) { + var data = { + elm: marker.element.dom, + alignToTop: alignToTop + }; + if (fireScrollIntoViewEvent(editor, data)) { + return; + } + var scrollTop = get$2(doc).top; + f(doc, scrollTop, marker, alignToTop); + fireAfterScrollIntoViewEvent(editor, data); + }; + var applyWithMarker = function (editor, f, rng, alignToTop) { + var body = SugarElement.fromDom(editor.getBody()); + var doc = SugarElement.fromDom(editor.getDoc()); + reflow(body); + var marker = createMarker(SugarElement.fromDom(rng.startContainer), rng.startOffset); + withScrollEvents(editor, doc, f, marker, alignToTop); + marker.cleanup(); + }; + var withElement = function (editor, element, f, alignToTop) { + var doc = SugarElement.fromDom(editor.getDoc()); + withScrollEvents(editor, doc, f, elementMarker(element), alignToTop); + }; + var preserveWith = function (editor, f, rng) { + var startElement = rng.startContainer; + var startOffset = rng.startOffset; + var endElement = rng.endContainer; + var endOffset = rng.endOffset; + f(SugarElement.fromDom(startElement), SugarElement.fromDom(endElement)); + var newRng = editor.dom.createRng(); + newRng.setStart(startElement, startOffset); + newRng.setEnd(endElement, endOffset); + editor.selection.setRng(rng); + }; + var scrollToMarker = function (marker, viewHeight, alignToTop, doc) { + var pos = marker.pos; + if (alignToTop) { + to(pos.left, pos.top, doc); + } else { + var y = pos.top - viewHeight + marker.height; + to(pos.left, y, doc); + } + }; + var intoWindowIfNeeded = function (doc, scrollTop, viewHeight, marker, alignToTop) { + var viewportBottom = viewHeight + scrollTop; + var markerTop = marker.pos.top; + var markerBottom = marker.bottom; + var largerThanViewport = markerBottom - markerTop >= viewHeight; + if (markerTop < scrollTop) { + scrollToMarker(marker, viewHeight, alignToTop !== false, doc); + } else if (markerTop > viewportBottom) { + var align = largerThanViewport ? alignToTop !== false : alignToTop === true; + scrollToMarker(marker, viewHeight, align, doc); + } else if (markerBottom > viewportBottom && !largerThanViewport) { + scrollToMarker(marker, viewHeight, alignToTop === true, doc); + } + }; + var intoWindow = function (doc, scrollTop, marker, alignToTop) { + var viewHeight = doc.dom.defaultView.innerHeight; + intoWindowIfNeeded(doc, scrollTop, viewHeight, marker, alignToTop); + }; + var intoFrame = function (doc, scrollTop, marker, alignToTop) { + var frameViewHeight = doc.dom.defaultView.innerHeight; + intoWindowIfNeeded(doc, scrollTop, frameViewHeight, marker, alignToTop); + var op = find$2(marker.element); + var viewportBounds = getBounds(window); + if (op.top < viewportBounds.y) { + intoView(marker.element, alignToTop !== false); + } else if (op.top > viewportBounds.bottom) { + intoView(marker.element, alignToTop === true); + } + }; + var rangeIntoWindow = function (editor, rng, alignToTop) { + return withMarker(editor, intoWindow, rng, alignToTop); + }; + var elementIntoWindow = function (editor, element, alignToTop) { + return withElement(editor, element, intoWindow, alignToTop); + }; + var rangeIntoFrame = function (editor, rng, alignToTop) { + return withMarker(editor, intoFrame, rng, alignToTop); + }; + var elementIntoFrame = function (editor, element, alignToTop) { + return withElement(editor, element, intoFrame, alignToTop); + }; + var scrollElementIntoView = function (editor, element, alignToTop) { + var scroller = editor.inline ? elementIntoWindow : elementIntoFrame; + scroller(editor, element, alignToTop); + }; + var scrollRangeIntoView = function (editor, rng, alignToTop) { + var scroller = editor.inline ? rangeIntoWindow : rangeIntoFrame; + scroller(editor, rng, alignToTop); + }; + + var getDocument = function () { + return SugarElement.fromDom(document); + }; + + var focus = function (element) { + return element.dom.focus(); + }; + var hasFocus = function (element) { + var root = getRootNode(element).dom; + return element.dom === root.activeElement; + }; + var active = function (root) { + if (root === void 0) { + root = getDocument(); + } + return Optional.from(root.dom.activeElement).map(SugarElement.fromDom); + }; + var search = function (element) { + return active(getRootNode(element)).filter(function (e) { + return element.dom.contains(e.dom); + }); + }; + + var create$4 = function (start, soffset, finish, foffset) { + return { + start: start, + soffset: soffset, + finish: finish, + foffset: foffset + }; + }; + var SimRange = { create: create$4 }; + + var adt = Adt.generate([ + { before: ['element'] }, + { + on: [ + 'element', + 'offset' + ] + }, + { after: ['element'] } + ]); + var cata = function (subject, onBefore, onOn, onAfter) { + return subject.fold(onBefore, onOn, onAfter); + }; + var getStart = function (situ) { + return situ.fold(identity, identity, identity); + }; + var before$3 = adt.before; + var on = adt.on; + var after$2 = adt.after; + var Situ = { + before: before$3, + on: on, + after: after$2, + cata: cata, + getStart: getStart + }; + + var adt$1 = Adt.generate([ + { domRange: ['rng'] }, + { + relative: [ + 'startSitu', + 'finishSitu' + ] + }, + { + exact: [ + 'start', + 'soffset', + 'finish', + 'foffset' + ] + } + ]); + var exactFromRange = function (simRange) { + return adt$1.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset); + }; + var getStart$1 = function (selection) { + return selection.match({ + domRange: function (rng) { + return SugarElement.fromDom(rng.startContainer); + }, + relative: function (startSitu, _finishSitu) { + return Situ.getStart(startSitu); + }, + exact: function (start, _soffset, _finish, _foffset) { + return start; + } + }); + }; + var domRange = adt$1.domRange; + var relative = adt$1.relative; + var exact = adt$1.exact; + var getWin = function (selection) { + var start = getStart$1(selection); + return defaultView(start); + }; + var range = SimRange.create; + var SimSelection = { + domRange: domRange, + relative: relative, + exact: exact, + exactFromRange: exactFromRange, + getWin: getWin, + range: range + }; + + var browser$3 = detect$3().browser; + var clamp = function (offset, element) { + var max = isText(element) ? get$8(element).length : children(element).length + 1; + if (offset > max) { + return max; + } else if (offset < 0) { + return 0; + } + return offset; + }; + var normalizeRng = function (rng) { + return SimSelection.range(rng.start, clamp(rng.soffset, rng.start), rng.finish, clamp(rng.foffset, rng.finish)); + }; + var isOrContains = function (root, elm) { + return !isRestrictedNode(elm.dom) && (contains$2(root, elm) || eq$2(root, elm)); + }; + var isRngInRoot = function (root) { + return function (rng) { + return isOrContains(root, rng.start) && isOrContains(root, rng.finish); + }; + }; + var shouldStore = function (editor) { + return editor.inline === true || browser$3.isIE(); + }; + var nativeRangeToSelectionRange = function (r) { + return SimSelection.range(SugarElement.fromDom(r.startContainer), r.startOffset, SugarElement.fromDom(r.endContainer), r.endOffset); + }; + var readRange = function (win) { + var selection = win.getSelection(); + var rng = !selection || selection.rangeCount === 0 ? Optional.none() : Optional.from(selection.getRangeAt(0)); + return rng.map(nativeRangeToSelectionRange); + }; + var getBookmark$2 = function (root) { + var win = defaultView(root); + return readRange(win.dom).filter(isRngInRoot(root)); + }; + var validate = function (root, bookmark) { + return Optional.from(bookmark).filter(isRngInRoot(root)).map(normalizeRng); + }; + var bookmarkToNativeRng = function (bookmark) { + var rng = document.createRange(); + try { + rng.setStart(bookmark.start.dom, bookmark.soffset); + rng.setEnd(bookmark.finish.dom, bookmark.foffset); + return Optional.some(rng); + } catch (_) { + return Optional.none(); + } + }; + var store = function (editor) { + var newBookmark = shouldStore(editor) ? getBookmark$2(SugarElement.fromDom(editor.getBody())) : Optional.none(); + editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark; + }; + var storeNative = function (editor, rng) { + var root = SugarElement.fromDom(editor.getBody()); + var range = shouldStore(editor) ? Optional.from(rng) : Optional.none(); + var newBookmark = range.map(nativeRangeToSelectionRange).filter(isRngInRoot(root)); + editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark; + }; + var getRng = function (editor) { + var bookmark = editor.bookmark ? editor.bookmark : Optional.none(); + return bookmark.bind(function (x) { + return validate(SugarElement.fromDom(editor.getBody()), x); + }).bind(bookmarkToNativeRng); + }; + var restore = function (editor) { + getRng(editor).each(function (rng) { + return editor.selection.setRng(rng); + }); + }; + + var isEditorUIElement = function (elm) { + var className = elm.className.toString(); + return className.indexOf('tox-') !== -1 || className.indexOf('mce-') !== -1; + }; + var FocusManager = { isEditorUIElement: isEditorUIElement }; + + var isManualNodeChange = function (e) { + return e.type === 'nodechange' && e.selectionChange; + }; + var registerPageMouseUp = function (editor, throttledStore) { + var mouseUpPage = function () { + throttledStore.throttle(); + }; + DOMUtils.DOM.bind(document, 'mouseup', mouseUpPage); + editor.on('remove', function () { + DOMUtils.DOM.unbind(document, 'mouseup', mouseUpPage); + }); + }; + var registerFocusOut = function (editor) { + editor.on('focusout', function () { + store(editor); + }); + }; + var registerMouseUp = function (editor, throttledStore) { + editor.on('mouseup touchend', function (_e) { + throttledStore.throttle(); + }); + }; + var registerEditorEvents = function (editor, throttledStore) { + var browser = detect$3().browser; + if (browser.isIE()) { + registerFocusOut(editor); + } else { + registerMouseUp(editor, throttledStore); + } + editor.on('keyup NodeChange', function (e) { + if (!isManualNodeChange(e)) { + store(editor); + } + }); + }; + var register = function (editor) { + var throttledStore = first(function () { + store(editor); + }, 0); + editor.on('init', function () { + if (editor.inline) { + registerPageMouseUp(editor, throttledStore); + } + registerEditorEvents(editor, throttledStore); + }); + editor.on('remove', function () { + throttledStore.cancel(); + }); + }; + + var documentFocusInHandler; + var DOM$2 = DOMUtils.DOM; + var isEditorUIElement$1 = function (elm) { + return FocusManager.isEditorUIElement(elm); + }; + var isEditorContentAreaElement = function (elm) { + var classList = elm.classList; + if (classList !== undefined) { + return classList.contains('tox-edit-area') || classList.contains('tox-edit-area__iframe') || classList.contains('mce-content-body'); + } else { + return false; + } + }; + var isUIElement = function (editor, elm) { + var customSelector = getCustomUiSelector(editor); + var parent = DOM$2.getParent(elm, function (elm) { + return isEditorUIElement$1(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false); + }); + return parent !== null; + }; + var getActiveElement = function (editor) { + try { + var root = getRootNode(SugarElement.fromDom(editor.getElement())); + return active(root).fold(function () { + return document.body; + }, function (x) { + return x.dom; + }); + } catch (ex) { + return document.body; + } + }; + var registerEvents = function (editorManager, e) { + var editor = e.editor; + register(editor); + editor.on('focusin', function () { + var focusedEditor = editorManager.focusedEditor; + if (focusedEditor !== editor) { + if (focusedEditor) { + focusedEditor.fire('blur', { focusedEditor: editor }); + } + editorManager.setActive(editor); + editorManager.focusedEditor = editor; + editor.fire('focus', { blurredEditor: focusedEditor }); + editor.focus(true); + } + }); + editor.on('focusout', function () { + Delay.setEditorTimeout(editor, function () { + var focusedEditor = editorManager.focusedEditor; + if (!isUIElement(editor, getActiveElement(editor)) && focusedEditor === editor) { + editor.fire('blur', { focusedEditor: null }); + editorManager.focusedEditor = null; + } + }); + }); + if (!documentFocusInHandler) { + documentFocusInHandler = function (e) { + var activeEditor = editorManager.activeEditor; + if (activeEditor) { + getOriginalEventTarget(e).each(function (target) { + if (target.ownerDocument === document) { + if (target !== document.body && !isUIElement(activeEditor, target) && editorManager.focusedEditor === activeEditor) { + activeEditor.fire('blur', { focusedEditor: null }); + editorManager.focusedEditor = null; + } + } + }); + } + }; + DOM$2.bind(document, 'focusin', documentFocusInHandler); + } + }; + var unregisterDocumentEvents = function (editorManager, e) { + if (editorManager.focusedEditor === e.editor) { + editorManager.focusedEditor = null; + } + if (!editorManager.activeEditor) { + DOM$2.unbind(document, 'focusin', documentFocusInHandler); + documentFocusInHandler = null; + } + }; + var setup$2 = function (editorManager) { + editorManager.on('AddEditor', curry(registerEvents, editorManager)); + editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager)); + }; + + var getContentEditableHost = function (editor, node) { + return editor.dom.getParent(node, function (node) { + return editor.dom.getContentEditable(node) === 'true'; + }); + }; + var getCollapsedNode = function (rng) { + return rng.collapsed ? Optional.from(getNode(rng.startContainer, rng.startOffset)).map(SugarElement.fromDom) : Optional.none(); + }; + var getFocusInElement = function (root, rng) { + return getCollapsedNode(rng).bind(function (node) { + if (isTableSection(node)) { + return Optional.some(node); + } else if (contains$2(root, node) === false) { + return Optional.some(root); + } else { + return Optional.none(); + } + }); + }; + var normalizeSelection = function (editor, rng) { + getFocusInElement(SugarElement.fromDom(editor.getBody()), rng).bind(function (elm) { + return firstPositionIn(elm.dom); + }).fold(function () { + editor.selection.normalize(); + return; + }, function (caretPos) { + return editor.selection.setRng(caretPos.toRange()); + }); + }; + var focusBody = function (body) { + if (body.setActive) { + try { + body.setActive(); + } catch (ex) { + body.focus(); + } + } else { + body.focus(); + } + }; + var hasElementFocus = function (elm) { + return hasFocus(elm) || search(elm).isSome(); + }; + var hasIframeFocus = function (editor) { + return editor.iframeElement && hasFocus(SugarElement.fromDom(editor.iframeElement)); + }; + var hasInlineFocus = function (editor) { + var rawBody = editor.getBody(); + return rawBody && hasElementFocus(SugarElement.fromDom(rawBody)); + }; + var hasUiFocus = function (editor) { + var dos = getRootNode(SugarElement.fromDom(editor.getElement())); + return active(dos).filter(function (elem) { + return !isEditorContentAreaElement(elem.dom) && isUIElement(editor, elem.dom); + }).isSome(); + }; + var hasFocus$1 = function (editor) { + return editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor); + }; + var hasEditorOrUiFocus = function (editor) { + return hasFocus$1(editor) || hasUiFocus(editor); + }; + var focusEditor = function (editor) { + var selection = editor.selection; + var body = editor.getBody(); + var rng = selection.getRng(); + editor.quirks.refreshContentEditable(); + if (editor.bookmark !== undefined && hasFocus$1(editor) === false) { + getRng(editor).each(function (bookmarkRng) { + editor.selection.setRng(bookmarkRng); + rng = bookmarkRng; + }); + } + var contentEditableHost = getContentEditableHost(editor, selection.getNode()); + if (editor.$.contains(body, contentEditableHost)) { + focusBody(contentEditableHost); + normalizeSelection(editor, rng); + activateEditor(editor); + return; + } + if (!editor.inline) { + if (!Env.opera) { + focusBody(body); + } + editor.getWin().focus(); + } + if (Env.gecko || editor.inline) { + focusBody(body); + normalizeSelection(editor, rng); + } + activateEditor(editor); + }; + var activateEditor = function (editor) { + return editor.editorManager.setActive(editor); + }; + var focus$1 = function (editor, skipFocus) { + if (editor.removed) { + return; + } + skipFocus ? activateEditor(editor) : focusEditor(editor); + }; + + var getEndpointElement = function (root, rng, start, real, resolve) { + var container = start ? rng.startContainer : rng.endContainer; + var offset = start ? rng.startOffset : rng.endOffset; + return Optional.from(container).map(SugarElement.fromDom).map(function (elm) { + return !real || !rng.collapsed ? child(elm, resolve(elm, offset)).getOr(elm) : elm; + }).bind(function (elm) { + return isElement(elm) ? Optional.some(elm) : parent(elm).filter(isElement); + }).map(function (elm) { + return elm.dom; + }).getOr(root); + }; + var getStart$2 = function (root, rng, real) { + return getEndpointElement(root, rng, true, real, function (elm, offset) { + return Math.min(childNodesCount(elm), offset); + }); + }; + var getEnd = function (root, rng, real) { + return getEndpointElement(root, rng, false, real, function (elm, offset) { + return offset > 0 ? offset - 1 : offset; + }); + }; + var skipEmptyTextNodes = function (node, forwards) { + var orig = node; + while (node && isText$1(node) && node.length === 0) { + node = forwards ? node.nextSibling : node.previousSibling; + } + return node || orig; + }; + var getNode$1 = function (root, rng) { + var elm, startContainer, endContainer; + if (!rng) { + return root; + } + startContainer = rng.startContainer; + endContainer = rng.endContainer; + var startOffset = rng.startOffset; + var endOffset = rng.endOffset; + elm = rng.commonAncestorContainer; + if (!rng.collapsed) { + if (startContainer === endContainer) { + if (endOffset - startOffset < 2) { + if (startContainer.hasChildNodes()) { + elm = startContainer.childNodes[startOffset]; + } + } + } + if (startContainer.nodeType === 3 && endContainer.nodeType === 3) { + if (startContainer.length === startOffset) { + startContainer = skipEmptyTextNodes(startContainer.nextSibling, true); + } else { + startContainer = startContainer.parentNode; + } + if (endOffset === 0) { + endContainer = skipEmptyTextNodes(endContainer.previousSibling, false); + } else { + endContainer = endContainer.parentNode; + } + if (startContainer && startContainer === endContainer) { + return startContainer; + } + } + } + if (elm && elm.nodeType === 3) { + return elm.parentNode; + } + return elm; + }; + var getSelectedBlocks = function (dom, rng, startElm, endElm) { + var node; + var selectedBlocks = []; + var root = dom.getRoot(); + startElm = dom.getParent(startElm || getStart$2(root, rng, rng.collapsed), dom.isBlock); + endElm = dom.getParent(endElm || getEnd(root, rng, rng.collapsed), dom.isBlock); + if (startElm && startElm !== root) { + selectedBlocks.push(startElm); + } + if (startElm && endElm && startElm !== endElm) { + node = startElm; + var walker = new DomTreeWalker(startElm, root); + while ((node = walker.next()) && node !== endElm) { + if (dom.isBlock(node)) { + selectedBlocks.push(node); + } + } + } + if (endElm && startElm !== endElm && endElm !== root) { + selectedBlocks.push(endElm); + } + return selectedBlocks; + }; + var select$1 = function (dom, node, content) { + return Optional.from(node).map(function (node) { + var idx = dom.nodeIndex(node); + var rng = dom.createRng(); + rng.setStart(node.parentNode, idx); + rng.setEnd(node.parentNode, idx + 1); + if (content) { + moveEndPoint$1(dom, rng, node, true); + moveEndPoint$1(dom, rng, node, false); + } + return rng; + }); + }; + + var processRanges = function (editor, ranges) { + return map(ranges, function (range) { + var evt = editor.fire('GetSelectionRange', { range: range }); + return evt.range !== range ? evt.range : range; + }); + }; + + var typeLookup = { + '#text': 3, + '#comment': 8, + '#cdata': 4, + '#pi': 7, + '#doctype': 10, + '#document-fragment': 11 + }; + var walk$2 = function (node, root, prev) { + var startName = prev ? 'lastChild' : 'firstChild'; + var siblingName = prev ? 'prev' : 'next'; + if (node[startName]) { + return node[startName]; + } + if (node !== root) { + var sibling = node[siblingName]; + if (sibling) { + return sibling; + } + for (var parent_1 = node.parent; parent_1 && parent_1 !== root; parent_1 = parent_1.parent) { + sibling = parent_1[siblingName]; + if (sibling) { + return sibling; + } + } + } + }; + var isEmptyTextNode$1 = function (node) { + if (!isWhitespaceText(node.value)) { + return false; + } + var parentNode = node.parent; + if (parentNode && (parentNode.name !== 'span' || parentNode.attr('style')) && /^[ ]+$/.test(node.value)) { + return false; + } + return true; + }; + var isNonEmptyElement = function (node) { + var isNamedAnchor = node.name === 'a' && !node.attr('href') && node.attr('id'); + return node.attr('name') || node.attr('id') && !node.firstChild || node.attr('data-mce-bookmark') || isNamedAnchor; + }; + var AstNode = function () { + function AstNode(name, type) { + this.name = name; + this.type = type; + if (type === 1) { + this.attributes = []; + this.attributes.map = {}; + } + } + AstNode.create = function (name, attrs) { + var node = new AstNode(name, typeLookup[name] || 1); + if (attrs) { + each$1(attrs, function (value, attrName) { + node.attr(attrName, value); + }); + } + return node; + }; + AstNode.prototype.replace = function (node) { + var self = this; + if (node.parent) { + node.remove(); + } + self.insert(node, self); + self.remove(); + return self; + }; + AstNode.prototype.attr = function (name, value) { + var self = this; + var attrs; + if (typeof name !== 'string') { + if (name !== undefined && name !== null) { + each$1(name, function (value, key) { + self.attr(key, value); + }); + } + return self; + } + if (attrs = self.attributes) { + if (value !== undefined) { + if (value === null) { + if (name in attrs.map) { + delete attrs.map[name]; + var i = attrs.length; + while (i--) { + if (attrs[i].name === name) { + attrs.splice(i, 1); + return self; + } + } + } + return self; + } + if (name in attrs.map) { + var i = attrs.length; + while (i--) { + if (attrs[i].name === name) { + attrs[i].value = value; + break; + } + } + } else { + attrs.push({ + name: name, + value: value + }); + } + attrs.map[name] = value; + return self; + } + return attrs.map[name]; + } + }; + AstNode.prototype.clone = function () { + var self = this; + var clone = new AstNode(self.name, self.type); + var selfAttrs; + if (selfAttrs = self.attributes) { + var cloneAttrs = []; + cloneAttrs.map = {}; + for (var i = 0, l = selfAttrs.length; i < l; i++) { + var selfAttr = selfAttrs[i]; + if (selfAttr.name !== 'id') { + cloneAttrs[cloneAttrs.length] = { + name: selfAttr.name, + value: selfAttr.value + }; + cloneAttrs.map[selfAttr.name] = selfAttr.value; + } + } + clone.attributes = cloneAttrs; + } + clone.value = self.value; + clone.shortEnded = self.shortEnded; + return clone; + }; + AstNode.prototype.wrap = function (wrapper) { + var self = this; + self.parent.insert(wrapper, self); + wrapper.append(self); + return self; + }; + AstNode.prototype.unwrap = function () { + var self = this; + for (var node = self.firstChild; node;) { + var next = node.next; + self.insert(node, self, true); + node = next; + } + self.remove(); + }; + AstNode.prototype.remove = function () { + var self = this, parent = self.parent, next = self.next, prev = self.prev; + if (parent) { + if (parent.firstChild === self) { + parent.firstChild = next; + if (next) { + next.prev = null; + } + } else { + prev.next = next; + } + if (parent.lastChild === self) { + parent.lastChild = prev; + if (prev) { + prev.next = null; + } + } else { + next.prev = prev; + } + self.parent = self.next = self.prev = null; + } + return self; + }; + AstNode.prototype.append = function (node) { + var self = this; + if (node.parent) { + node.remove(); + } + var last = self.lastChild; + if (last) { + last.next = node; + node.prev = last; + self.lastChild = node; + } else { + self.lastChild = self.firstChild = node; + } + node.parent = self; + return node; + }; + AstNode.prototype.insert = function (node, refNode, before) { + if (node.parent) { + node.remove(); + } + var parent = refNode.parent || this; + if (before) { + if (refNode === parent.firstChild) { + parent.firstChild = node; + } else { + refNode.prev.next = node; + } + node.prev = refNode.prev; + node.next = refNode; + refNode.prev = node; + } else { + if (refNode === parent.lastChild) { + parent.lastChild = node; + } else { + refNode.next.prev = node; + } + node.next = refNode.next; + node.prev = refNode; + refNode.next = node; + } + node.parent = parent; + return node; + }; + AstNode.prototype.getAll = function (name) { + var self = this; + var collection = []; + for (var node = self.firstChild; node; node = walk$2(node, self)) { + if (node.name === name) { + collection.push(node); + } + } + return collection; + }; + AstNode.prototype.empty = function () { + var self = this; + if (self.firstChild) { + var nodes = []; + for (var node = self.firstChild; node; node = walk$2(node, self)) { + nodes.push(node); + } + var i = nodes.length; + while (i--) { + var node = nodes[i]; + node.parent = node.firstChild = node.lastChild = node.next = node.prev = null; + } + } + self.firstChild = self.lastChild = null; + return self; + }; + AstNode.prototype.isEmpty = function (elements, whitespace, predicate) { + if (whitespace === void 0) { + whitespace = {}; + } + var self = this; + var node = self.firstChild; + if (isNonEmptyElement(self)) { + return false; + } + if (node) { + do { + if (node.type === 1) { + if (node.attr('data-mce-bogus')) { + continue; + } + if (elements[node.name]) { + return false; + } + if (isNonEmptyElement(node)) { + return false; + } + } + if (node.type === 8) { + return false; + } + if (node.type === 3 && !isEmptyTextNode$1(node)) { + return false; + } + if (node.type === 3 && node.parent && whitespace[node.parent.name] && isWhitespaceText(node.value)) { + return false; + } + if (predicate && predicate(node)) { + return false; + } + } while (node = walk$2(node, self)); + } + return true; + }; + AstNode.prototype.walk = function (prev) { + return walk$2(this, null, prev); + }; + return AstNode; + }(); + + var extractBase64DataUris = function (html) { + var dataImageUri = /data:[^;]+;base64,([a-z0-9\+\/=]+)/gi; + var chunks = []; + var uris = {}; + var prefix = generate$1('img'); + var matches; + var index = 0; + var count = 0; + while (matches = dataImageUri.exec(html)) { + var uri = matches[0]; + var imageId = prefix + '_' + count++; + uris[imageId] = uri; + if (index < matches.index) { + chunks.push(html.substr(index, matches.index - index)); + } + chunks.push(imageId); + index = matches.index + uri.length; + } + var re = new RegExp(prefix + '_[0-9]+', 'g'); + if (index === 0) { + return { + prefix: prefix, + uris: uris, + html: html, + re: re + }; + } else { + if (index < html.length) { + chunks.push(html.substr(index)); + } + return { + prefix: prefix, + uris: uris, + html: chunks.join(''), + re: re + }; + } + }; + var restoreDataUris = function (html, result) { + return html.replace(result.re, function (imageId) { + return get$1(result.uris, imageId).getOr(imageId); + }); + }; + var parseDataUri = function (uri) { + var matches = /data:([^;]+);base64,([a-z0-9\+\/=]+)/i.exec(uri); + if (matches) { + return Optional.some({ + type: matches[1], + data: decodeURIComponent(matches[2]) + }); + } else { + return Optional.none(); + } + }; + + var safeSvgDataUrlElements = [ + 'img', + 'video' + ]; + var isValidPrefixAttrName = function (name) { + return name.indexOf('data-') === 0 || name.indexOf('aria-') === 0; + }; + var blockSvgDataUris = function (allowSvgDataUrls, tagName) { + var allowed = isNullable(allowSvgDataUrls) ? contains(safeSvgDataUrlElements, tagName) : allowSvgDataUrls; + return !allowed; + }; + var isInvalidUri = function (settings, uri, tagName) { + if (settings.allow_html_data_urls) { + return false; + } else if (/^data:image\//i.test(uri)) { + return blockSvgDataUris(settings.allow_svg_data_urls, tagName) && /^data:image\/svg\+xml/i.test(uri); + } else { + return /^data:/i.test(uri); + } + }; + var findEndTagIndex = function (schema, html, startIndex) { + var count = 1, index, matches; + var shortEndedElements = schema.getShortEndedElements(); + var tokenRegExp = /<([!?\/])?([A-Za-z0-9\-_:.]+)(\s(?:[^'">]+(?:"[^"]*"|'[^']*'))*[^"'>]*(?:"[^">]*|'[^'>]*)?|\s*|\/)>/g; + tokenRegExp.lastIndex = index = startIndex; + while (matches = tokenRegExp.exec(html)) { + index = tokenRegExp.lastIndex; + if (matches[1] === '/') { + count--; + } else if (!matches[1]) { + if (matches[2] in shortEndedElements) { + continue; + } + count++; + } + if (count === 0) { + break; + } + } + return index; + }; + var isConditionalComment = function (html, startIndex) { + return /^\s*\[if [\w\W]+\]>.*/.test(html.substr(startIndex)); + }; + var findCommentEndIndex = function (html, isBogus, startIndex) { + if (startIndex === void 0) { + startIndex = 0; + } + var lcHtml = html.toLowerCase(); + if (lcHtml.indexOf('[if ', startIndex) !== -1 && isConditionalComment(lcHtml, startIndex)) { + var endIfIndex = lcHtml.indexOf('[endif]', startIndex); + return lcHtml.indexOf('>', endIfIndex); + } else { + if (isBogus) { + var endIndex = lcHtml.indexOf('>', startIndex); + return endIndex !== -1 ? endIndex : lcHtml.length; + } else { + var endCommentRegexp = /--!?>/g; + endCommentRegexp.lastIndex = startIndex; + var match = endCommentRegexp.exec(html); + return match ? match.index + match[0].length : lcHtml.length; + } + } + }; + var checkBogusAttribute = function (regExp, attrString) { + var matches = regExp.exec(attrString); + if (matches) { + var name_1 = matches[1]; + var value = matches[2]; + return typeof name_1 === 'string' && name_1.toLowerCase() === 'data-mce-bogus' ? value : null; + } else { + return null; + } + }; + var SaxParser = function (settings, schema) { + if (schema === void 0) { + schema = Schema(); + } + settings = settings || {}; + if (settings.fix_self_closing !== false) { + settings.fix_self_closing = true; + } + var comment = settings.comment ? settings.comment : noop; + var cdata = settings.cdata ? settings.cdata : noop; + var text = settings.text ? settings.text : noop; + var start = settings.start ? settings.start : noop; + var end = settings.end ? settings.end : noop; + var pi = settings.pi ? settings.pi : noop; + var doctype = settings.doctype ? settings.doctype : noop; + var parseInternal = function (base64Extract, format) { + if (format === void 0) { + format = 'html'; + } + var html = base64Extract.html; + var matches, index = 0, value, endRegExp; + var stack = []; + var attrList, i, textData, name; + var isInternalElement, isShortEnded; + var elementRule, isValidElement, attr, attribsValue, validAttributesMap, validAttributePatterns; + var attributesRequired, attributesDefault, attributesForced; + var anyAttributesRequired, attrValue, idCount = 0; + var decode = Entities.decode; + var filteredUrlAttrs = Tools.makeMap('src,href,data,background,action,formaction,poster,xlink:href'); + var scriptUriRegExp = /((java|vb)script|mhtml):/i; + var parsingMode = format === 'html' ? 0 : 1; + var processEndTag = function (name) { + var pos, i; + pos = stack.length; + while (pos--) { + if (stack[pos].name === name) { + break; + } + } + if (pos >= 0) { + for (i = stack.length - 1; i >= pos; i--) { + name = stack[i]; + if (name.valid) { + end(name.name); + } + } + stack.length = pos; + } + }; + var processText = function (value, raw) { + return text(restoreDataUris(value, base64Extract), raw); + }; + var processComment = function (value) { + if (value === '') { + return; + } + if (value.charAt(0) === '>') { + value = ' ' + value; + } + if (!settings.allow_conditional_comments && value.substr(0, 3).toLowerCase() === '[if') { + value = ' ' + value; + } + comment(restoreDataUris(value, base64Extract)); + }; + var processAttr = function (value) { + return restoreDataUris(value, base64Extract); + }; + var processMalformedComment = function (value, startIndex) { + var startTag = value || ''; + var isBogus = !startsWith(startTag, '--'); + var endIndex = findCommentEndIndex(html, isBogus, startIndex); + value = html.substr(startIndex, endIndex - startIndex); + processComment(isBogus ? startTag + value : value); + return endIndex + 1; + }; + var parseAttribute = function (tagName, name, value, val2, val3) { + var attrRule, i; + var trimRegExp = /[\s\u0000-\u001F]+/g; + name = name.toLowerCase(); + value = processAttr(name in fillAttrsMap ? name : decode(value || val2 || val3 || '')); + if (validate && !isInternalElement && isValidPrefixAttrName(name) === false) { + attrRule = validAttributesMap[name]; + if (!attrRule && validAttributePatterns) { + i = validAttributePatterns.length; + while (i--) { + attrRule = validAttributePatterns[i]; + if (attrRule.pattern.test(name)) { + break; + } + } + if (i === -1) { + attrRule = null; + } + } + if (!attrRule) { + return; + } + if (attrRule.validValues && !(value in attrRule.validValues)) { + return; + } + } + if (filteredUrlAttrs[name] && !settings.allow_script_urls) { + var uri = value.replace(trimRegExp, ''); + try { + uri = decodeURIComponent(uri); + } catch (ex) { + uri = unescape(uri); + } + if (scriptUriRegExp.test(uri)) { + return; + } + if (isInvalidUri(settings, uri, tagName)) { + return; + } + } + if (isInternalElement && (name in filteredUrlAttrs || name.indexOf('on') === 0)) { + return; + } + attrList.map[name] = value; + attrList.push({ + name: name, + value: value + }); + }; + var tokenRegExp = new RegExp('<(?:' + '(?:!--([\\w\\W]*?)--!?>)|' + '(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|' + '(?:![Dd][Oo][Cc][Tt][Yy][Pp][Ee]([\\w\\W]*?)>)|' + '(?:!(--)?)|' + '(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|' + '(?:\\/([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)>)|' + '(?:([A-Za-z][A-Za-z0-9\\-_:.]*)(\\s(?:[^\'">]+(?:"[^"]*"|\'[^\']*\'))*[^"\'>]*(?:"[^">]*|\'[^\'>]*)?|\\s*|\\/)>)' + ')', 'g'); + var attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g; + var shortEndedElements = schema.getShortEndedElements(); + var selfClosing = settings.self_closing_elements || schema.getSelfClosingElements(); + var fillAttrsMap = schema.getBoolAttrs(); + var validate = settings.validate; + var removeInternalElements = settings.remove_internals; + var fixSelfClosing = settings.fix_self_closing; + var specialElements = schema.getSpecialElements(); + var processHtml = html + '>'; + while (matches = tokenRegExp.exec(processHtml)) { + var matchText = matches[0]; + if (index < matches.index) { + processText(decode(html.substr(index, matches.index - index))); + } + if (value = matches[7]) { + value = value.toLowerCase(); + if (value.charAt(0) === ':') { + value = value.substr(1); + } + processEndTag(value); + } else if (value = matches[8]) { + if (matches.index + matchText.length > html.length) { + processText(decode(html.substr(matches.index))); + index = matches.index + matchText.length; + continue; + } + value = value.toLowerCase(); + if (value.charAt(0) === ':') { + value = value.substr(1); + } + isShortEnded = value in shortEndedElements; + if (fixSelfClosing && selfClosing[value] && stack.length > 0 && stack[stack.length - 1].name === value) { + processEndTag(value); + } + var bogusValue = checkBogusAttribute(attrRegExp, matches[9]); + if (bogusValue !== null) { + if (bogusValue === 'all') { + index = findEndTagIndex(schema, html, tokenRegExp.lastIndex); + tokenRegExp.lastIndex = index; + continue; + } + isValidElement = false; + } + if (!validate || (elementRule = schema.getElementRule(value))) { + isValidElement = true; + if (validate) { + validAttributesMap = elementRule.attributes; + validAttributePatterns = elementRule.attributePatterns; + } + if (attribsValue = matches[9]) { + isInternalElement = attribsValue.indexOf('data-mce-type') !== -1; + if (isInternalElement && removeInternalElements) { + isValidElement = false; + } + attrList = []; + attrList.map = {}; + attribsValue.replace(attrRegExp, function (match, name, val, val2, val3) { + parseAttribute(value, name, val, val2, val3); + return ''; + }); + } else { + attrList = []; + attrList.map = {}; + } + if (validate && !isInternalElement) { + attributesRequired = elementRule.attributesRequired; + attributesDefault = elementRule.attributesDefault; + attributesForced = elementRule.attributesForced; + anyAttributesRequired = elementRule.removeEmptyAttrs; + if (anyAttributesRequired && !attrList.length) { + isValidElement = false; + } + if (attributesForced) { + i = attributesForced.length; + while (i--) { + attr = attributesForced[i]; + name = attr.name; + attrValue = attr.value; + if (attrValue === '{$uid}') { + attrValue = 'mce_' + idCount++; + } + attrList.map[name] = attrValue; + attrList.push({ + name: name, + value: attrValue + }); + } + } + if (attributesDefault) { + i = attributesDefault.length; + while (i--) { + attr = attributesDefault[i]; + name = attr.name; + if (!(name in attrList.map)) { + attrValue = attr.value; + if (attrValue === '{$uid}') { + attrValue = 'mce_' + idCount++; + } + attrList.map[name] = attrValue; + attrList.push({ + name: name, + value: attrValue + }); + } + } + } + if (attributesRequired) { + i = attributesRequired.length; + while (i--) { + if (attributesRequired[i] in attrList.map) { + break; + } + } + if (i === -1) { + isValidElement = false; + } + } + if (attr = attrList.map['data-mce-bogus']) { + if (attr === 'all') { + index = findEndTagIndex(schema, html, tokenRegExp.lastIndex); + tokenRegExp.lastIndex = index; + continue; + } + isValidElement = false; + } + } + if (isValidElement) { + start(value, attrList, isShortEnded); + } + } else { + isValidElement = false; + } + if (endRegExp = specialElements[value]) { + endRegExp.lastIndex = index = matches.index + matchText.length; + if (matches = endRegExp.exec(html)) { + if (isValidElement) { + textData = html.substr(index, matches.index - index); + } + index = matches.index + matches[0].length; + } else { + textData = html.substr(index); + index = html.length; + } + if (isValidElement) { + if (textData.length > 0) { + processText(textData, true); + } + end(value); + } + tokenRegExp.lastIndex = index; + continue; + } + if (!isShortEnded) { + if (!attribsValue || attribsValue.indexOf('/') !== attribsValue.length - 1) { + stack.push({ + name: value, + valid: isValidElement + }); + } else if (isValidElement) { + end(value); + } + } + } else if (value = matches[1]) { + processComment(value); + } else if (value = matches[2]) { + var isValidCdataSection = parsingMode === 1 || settings.preserve_cdata || stack.length > 0 && schema.isValidChild(stack[stack.length - 1].name, '#cdata'); + if (isValidCdataSection) { + cdata(value); + } else { + index = processMalformedComment('', matches.index + 2); + tokenRegExp.lastIndex = index; + continue; + } + } else if (value = matches[3]) { + doctype(value); + } else if ((value = matches[4]) || matchText === '= 0; i--) { + value = stack[i]; + if (value.valid) { + end(value.name); + } + } + }; + var parse = function (html, format) { + if (format === void 0) { + format = 'html'; + } + parseInternal(extractBase64DataUris(html), format); + }; + return { parse: parse }; + }; + SaxParser.findEndTag = findEndTagIndex; + + var trimHtml = function (tempAttrs, html) { + var trimContentRegExp = new RegExp(['\\s?(' + tempAttrs.join('|') + ')="[^"]+"'].join('|'), 'gi'); + return html.replace(trimContentRegExp, ''); + }; + var trimInternal = function (serializer, html) { + var content = html; + var bogusAllRegExp = /<(\w+) [^>]*data-mce-bogus="all"[^>]*>/g; + var endTagIndex, index, matchLength, matches; + var schema = serializer.schema; + content = trimHtml(serializer.getTempAttrs(), content); + var shortEndedElements = schema.getShortEndedElements(); + while (matches = bogusAllRegExp.exec(content)) { + index = bogusAllRegExp.lastIndex; + matchLength = matches[0].length; + if (shortEndedElements[matches[1]]) { + endTagIndex = index; + } else { + endTagIndex = SaxParser.findEndTag(schema, content, index); + } + content = content.substring(0, index - matchLength) + content.substring(endTagIndex); + bogusAllRegExp.lastIndex = index - matchLength; + } + return trim$2(content); + }; + var trimExternal = trimInternal; + + var trimEmptyContents = function (editor, html) { + var blockName = getForcedRootBlock(editor); + var emptyRegExp = new RegExp('^(<' + blockName + '[^>]*>( | |\\s|\xA0|
|)<\\/' + blockName + '>[\r\n]*|
[\r\n]*)$'); + return html.replace(emptyRegExp, ''); + }; + var getContentFromBody = function (editor, args, format, body) { + var content; + args.format = format; + args.get = true; + args.getInner = true; + if (!args.no_events) { + editor.fire('BeforeGetContent', args); + } + if (args.format === 'raw') { + content = Tools.trim(trimExternal(editor.serializer, body.innerHTML)); + } else if (args.format === 'text') { + content = editor.dom.isEmpty(body) ? '' : trim$2(body.innerText || body.textContent); + } else if (args.format === 'tree') { + content = editor.serializer.serialize(body, args); + } else { + content = trimEmptyContents(editor, editor.serializer.serialize(body, args)); + } + if (!contains([ + 'text', + 'tree' + ], args.format) && !isWsPreserveElement(SugarElement.fromDom(body))) { + args.content = Tools.trim(content); + } else { + args.content = content; + } + if (!args.no_events) { + editor.fire('GetContent', args); + } + return args.content; + }; + var getContentInternal = function (editor, args, format) { + return Optional.from(editor.getBody()).fold(constant(args.format === 'tree' ? new AstNode('body', 11) : ''), function (body) { + return getContentFromBody(editor, args, format, body); + }); + }; + + var each$7 = Tools.each; + var ElementUtils = function (dom) { + var compare = function (node1, node2) { + if (node1.nodeName !== node2.nodeName) { + return false; + } + var getAttribs = function (node) { + var attribs = {}; + each$7(dom.getAttribs(node), function (attr) { + var name = attr.nodeName.toLowerCase(); + if (name.indexOf('_') !== 0 && name !== 'style' && name.indexOf('data-') !== 0) { + attribs[name] = dom.getAttrib(node, name); + } + }); + return attribs; + }; + var compareObjects = function (obj1, obj2) { + var value, name; + for (name in obj1) { + if (obj1.hasOwnProperty(name)) { + value = obj2[name]; + if (typeof value === 'undefined') { + return false; + } + if (obj1[name] !== value) { + return false; + } + delete obj2[name]; + } + } + for (name in obj2) { + if (obj2.hasOwnProperty(name)) { + return false; + } + } + return true; + }; + if (!compareObjects(getAttribs(node1), getAttribs(node2))) { + return false; + } + if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style')))) { + return false; + } + return !isBookmarkNode$1(node1) && !isBookmarkNode$1(node2); + }; + return { compare: compare }; + }; + + var makeMap$3 = Tools.makeMap; + var Writer = function (settings) { + var html = []; + settings = settings || {}; + var indent = settings.indent; + var indentBefore = makeMap$3(settings.indent_before || ''); + var indentAfter = makeMap$3(settings.indent_after || ''); + var encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities); + var htmlOutput = settings.element_format === 'html'; + return { + start: function (name, attrs, empty) { + var i, l, attr, value; + if (indent && indentBefore[name] && html.length > 0) { + value = html[html.length - 1]; + if (value.length > 0 && value !== '\n') { + html.push('\n'); + } + } + html.push('<', name); + if (attrs) { + for (i = 0, l = attrs.length; i < l; i++) { + attr = attrs[i]; + html.push(' ', attr.name, '="', encode(attr.value, true), '"'); + } + } + if (!empty || htmlOutput) { + html[html.length] = '>'; + } else { + html[html.length] = ' />'; + } + if (empty && indent && indentAfter[name] && html.length > 0) { + value = html[html.length - 1]; + if (value.length > 0 && value !== '\n') { + html.push('\n'); + } + } + }, + end: function (name) { + var value; + html.push(''); + if (indent && indentAfter[name] && html.length > 0) { + value = html[html.length - 1]; + if (value.length > 0 && value !== '\n') { + html.push('\n'); + } + } + }, + text: function (text, raw) { + if (text.length > 0) { + html[html.length] = raw ? text : encode(text); + } + }, + cdata: function (text) { + html.push(''); + }, + comment: function (text) { + html.push(''); + }, + pi: function (name, text) { + if (text) { + html.push(''); + } else { + html.push(''); + } + if (indent) { + html.push('\n'); + } + }, + doctype: function (text) { + html.push('', indent ? '\n' : ''); + }, + reset: function () { + html.length = 0; + }, + getContent: function () { + return html.join('').replace(/\n$/, ''); + } + }; + }; + + var HtmlSerializer = function (settings, schema) { + if (schema === void 0) { + schema = Schema(); + } + var writer = Writer(settings); + settings = settings || {}; + settings.validate = 'validate' in settings ? settings.validate : true; + var serialize = function (node) { + var validate = settings.validate; + var handlers = { + 3: function (node) { + writer.text(node.value, node.raw); + }, + 8: function (node) { + writer.comment(node.value); + }, + 7: function (node) { + writer.pi(node.name, node.value); + }, + 10: function (node) { + writer.doctype(node.value); + }, + 4: function (node) { + writer.cdata(node.value); + }, + 11: function (node) { + if (node = node.firstChild) { + do { + walk(node); + } while (node = node.next); + } + } + }; + writer.reset(); + var walk = function (node) { + var handler = handlers[node.type]; + var name, isEmpty, attrs, attrName, attrValue, sortedAttrs, i, l, elementRule; + if (!handler) { + name = node.name; + isEmpty = node.shortEnded; + attrs = node.attributes; + if (validate && attrs && attrs.length > 1) { + sortedAttrs = []; + sortedAttrs.map = {}; + elementRule = schema.getElementRule(node.name); + if (elementRule) { + for (i = 0, l = elementRule.attributesOrder.length; i < l; i++) { + attrName = elementRule.attributesOrder[i]; + if (attrName in attrs.map) { + attrValue = attrs.map[attrName]; + sortedAttrs.map[attrName] = attrValue; + sortedAttrs.push({ + name: attrName, + value: attrValue + }); + } + } + for (i = 0, l = attrs.length; i < l; i++) { + attrName = attrs[i].name; + if (!(attrName in sortedAttrs.map)) { + attrValue = attrs.map[attrName]; + sortedAttrs.map[attrName] = attrValue; + sortedAttrs.push({ + name: attrName, + value: attrValue + }); + } + } + attrs = sortedAttrs; + } + } + writer.start(node.name, attrs, isEmpty); + if (!isEmpty) { + if (node = node.firstChild) { + do { + walk(node); + } while (node = node.next); + } + writer.end(name); + } + } else { + handler(node); + } + }; + if (node.type === 1 && !settings.inner) { + walk(node); + } else { + handlers[11](node); + } + return writer.getContent(); + }; + return { serialize: serialize }; + }; + + var nonInheritableStyles = new Set(); + (function () { + var nonInheritableStylesArr = [ + 'margin', + 'margin-left', + 'margin-right', + 'margin-top', + 'margin-bottom', + 'padding', + 'padding-left', + 'padding-right', + 'padding-top', + 'padding-bottom', + 'border', + 'border-width', + 'border-style', + 'border-color', + 'background', + 'background-attachment', + 'background-clip', + 'background-color', + 'background-image', + 'background-origin', + 'background-position', + 'background-repeat', + 'background-size', + 'float', + 'position', + 'left', + 'right', + 'top', + 'bottom', + 'z-index', + 'display', + 'transform', + 'width', + 'max-width', + 'min-width', + 'height', + 'max-height', + 'min-height', + 'overflow', + 'overflow-x', + 'overflow-y', + 'text-overflow', + 'vertical-align', + 'transition', + 'transition-delay', + 'transition-duration', + 'transition-property', + 'transition-timing-function' + ]; + each(nonInheritableStylesArr, function (style) { + nonInheritableStyles.add(style); + }); + }()); + var shorthandStyleProps = [ + 'font', + 'text-decoration', + 'text-emphasis' + ]; + var getStyleProps = function (dom, node) { + return keys(dom.parseStyle(dom.getAttrib(node, 'style'))); + }; + var isNonInheritableStyle = function (style) { + return nonInheritableStyles.has(style); + }; + var hasInheritableStyles = function (dom, node) { + return forall(getStyleProps(dom, node), function (style) { + return !isNonInheritableStyle(style); + }); + }; + var getLonghandStyleProps = function (styles) { + return filter(styles, function (style) { + return exists(shorthandStyleProps, function (prop) { + return startsWith(style, prop); + }); + }); + }; + var hasStyleConflict = function (dom, node, parentNode) { + var nodeStyleProps = getStyleProps(dom, node); + var parentNodeStyleProps = getStyleProps(dom, parentNode); + var valueMismatch = function (prop) { + var nodeValue = dom.getStyle(node, prop); + var parentValue = dom.getStyle(parentNode, prop); + return isNotEmpty(nodeValue) && isNotEmpty(parentValue) && nodeValue !== parentValue; + }; + return exists(nodeStyleProps, function (nodeStyleProp) { + var propExists = function (props) { + return exists(props, function (prop) { + return prop === nodeStyleProp; + }); + }; + if (!propExists(parentNodeStyleProps) && propExists(shorthandStyleProps)) { + var longhandProps = getLonghandStyleProps(parentNodeStyleProps); + return exists(longhandProps, valueMismatch); + } else { + return valueMismatch(nodeStyleProp); + } + }); + }; + + var isChar = function (forward, predicate, pos) { + return Optional.from(pos.container()).filter(isText$1).exists(function (text) { + var delta = forward ? 0 : -1; + return predicate(text.data.charAt(pos.offset() + delta)); + }); + }; + var isBeforeSpace = curry(isChar, true, isWhiteSpace$1); + var isAfterSpace = curry(isChar, false, isWhiteSpace$1); + var isEmptyText = function (pos) { + var container = pos.container(); + return isText$1(container) && (container.data.length === 0 || isZwsp$1(container.data) && BookmarkManager.isBookmarkNode(container.parentNode)); + }; + var matchesElementPosition = function (before, predicate) { + return function (pos) { + return Optional.from(getChildNodeAtRelativeOffset(before ? 0 : -1, pos)).filter(predicate).isSome(); + }; + }; + var isImageBlock = function (node) { + return isImg(node) && get$5(SugarElement.fromDom(node), 'display') === 'block'; + }; + var isCefNode = function (node) { + return isContentEditableFalse(node) && !isBogusAll(node); + }; + var isBeforeImageBlock = matchesElementPosition(true, isImageBlock); + var isAfterImageBlock = matchesElementPosition(false, isImageBlock); + var isBeforeMedia = matchesElementPosition(true, isMedia); + var isAfterMedia = matchesElementPosition(false, isMedia); + var isBeforeTable = matchesElementPosition(true, isTable); + var isAfterTable = matchesElementPosition(false, isTable); + var isBeforeContentEditableFalse = matchesElementPosition(true, isCefNode); + var isAfterContentEditableFalse = matchesElementPosition(false, isCefNode); + + var getLastChildren$1 = function (elm) { + var children = []; + var rawNode = elm.dom; + while (rawNode) { + children.push(SugarElement.fromDom(rawNode)); + rawNode = rawNode.lastChild; + } + return children; + }; + var removeTrailingBr = function (elm) { + var allBrs = descendants$1(elm, 'br'); + var brs = filter(getLastChildren$1(elm).slice(-1), isBr$1); + if (allBrs.length === brs.length) { + each(brs, remove); + } + }; + var fillWithPaddingBr = function (elm) { + empty(elm); + append(elm, SugarElement.fromHtml('
')); + }; + var trimBlockTrailingBr = function (elm) { + lastChild(elm).each(function (lastChild) { + prevSibling(lastChild).each(function (lastChildPrevSibling) { + if (isBlock(elm) && isBr$1(lastChild) && isBlock(lastChildPrevSibling)) { + remove(lastChild); + } + }); + }); + }; + + var dropLast = function (xs) { + return xs.slice(0, -1); + }; + var parentsUntil$1 = function (start, root, predicate) { + if (contains$2(root, start)) { + return dropLast(parents(start, function (elm) { + return predicate(elm) || eq$2(elm, root); + })); + } else { + return []; + } + }; + var parents$1 = function (start, root) { + return parentsUntil$1(start, root, never); + }; + var parentsAndSelf = function (start, root) { + return [start].concat(parents$1(start, root)); + }; + + var navigateIgnoreEmptyTextNodes = function (forward, root, from) { + return navigateIgnore(forward, root, from, isEmptyText); + }; + var getClosestBlock = function (root, pos) { + return find(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock); + }; + var isAtBeforeAfterBlockBoundary = function (forward, root, pos) { + return navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(function (newPos) { + return getClosestBlock(root, pos).fold(function () { + return isInSameBlock(newPos, pos, root.dom) === false; + }, function (fromBlock) { + return isInSameBlock(newPos, pos, root.dom) === false && contains$2(fromBlock, SugarElement.fromDom(newPos.container())); + }); + }); + }; + var isAtBlockBoundary$1 = function (forward, root, pos) { + return getClosestBlock(root, pos).fold(function () { + return navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(function (newPos) { + return isInSameBlock(newPos, pos, root.dom) === false; + }); + }, function (parent) { + return navigateIgnoreEmptyTextNodes(forward, parent.dom, pos).isNone(); + }); + }; + var isAtStartOfBlock = curry(isAtBlockBoundary$1, false); + var isAtEndOfBlock = curry(isAtBlockBoundary$1, true); + var isBeforeBlock = curry(isAtBeforeAfterBlockBoundary, false); + var isAfterBlock = curry(isAtBeforeAfterBlockBoundary, true); + + var isBr$5 = function (pos) { + return getElementFromPosition(pos).exists(isBr$1); + }; + var findBr = function (forward, root, pos) { + var parentBlocks = filter(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock); + var scope = head(parentBlocks).getOr(root); + return fromPosition(forward, scope.dom, pos).filter(isBr$5); + }; + var isBeforeBr = function (root, pos) { + return getElementFromPosition(pos).exists(isBr$1) || findBr(true, root, pos).isSome(); + }; + var isAfterBr = function (root, pos) { + return getElementFromPrevPosition(pos).exists(isBr$1) || findBr(false, root, pos).isSome(); + }; + var findPreviousBr = curry(findBr, false); + var findNextBr = curry(findBr, true); + + var isInMiddleOfText = function (pos) { + return CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd(); + }; + var getClosestBlock$1 = function (root, pos) { + var parentBlocks = filter(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock); + return head(parentBlocks).getOr(root); + }; + var hasSpaceBefore = function (root, pos) { + if (isInMiddleOfText(pos)) { + return isAfterSpace(pos); + } else { + return isAfterSpace(pos) || prevPosition(getClosestBlock$1(root, pos).dom, pos).exists(isAfterSpace); + } + }; + var hasSpaceAfter = function (root, pos) { + if (isInMiddleOfText(pos)) { + return isBeforeSpace(pos); + } else { + return isBeforeSpace(pos) || nextPosition(getClosestBlock$1(root, pos).dom, pos).exists(isBeforeSpace); + } + }; + var isPreValue = function (value) { + return contains([ + 'pre', + 'pre-wrap' + ], value); + }; + var isInPre = function (pos) { + return getElementFromPosition(pos).bind(function (elm) { + return closest(elm, isElement); + }).exists(function (elm) { + return isPreValue(get$5(elm, 'white-space')); + }); + }; + var isAtBeginningOfBody = function (root, pos) { + return prevPosition(root.dom, pos).isNone(); + }; + var isAtEndOfBody = function (root, pos) { + return nextPosition(root.dom, pos).isNone(); + }; + var isAtLineBoundary = function (root, pos) { + return isAtBeginningOfBody(root, pos) || isAtEndOfBody(root, pos) || isAtStartOfBlock(root, pos) || isAtEndOfBlock(root, pos) || isAfterBr(root, pos) || isBeforeBr(root, pos); + }; + var needsToHaveNbsp = function (root, pos) { + if (isInPre(pos)) { + return false; + } else { + return isAtLineBoundary(root, pos) || hasSpaceBefore(root, pos) || hasSpaceAfter(root, pos); + } + }; + var needsToBeNbspLeft = function (root, pos) { + if (isInPre(pos)) { + return false; + } else { + return isAtStartOfBlock(root, pos) || isBeforeBlock(root, pos) || isAfterBr(root, pos) || hasSpaceBefore(root, pos); + } + }; + var leanRight = function (pos) { + var container = pos.container(); + var offset = pos.offset(); + if (isText$1(container) && offset < container.data.length) { + return CaretPosition(container, offset + 1); + } else { + return pos; + } + }; + var needsToBeNbspRight = function (root, pos) { + if (isInPre(pos)) { + return false; + } else { + return isAtEndOfBlock(root, pos) || isAfterBlock(root, pos) || isBeforeBr(root, pos) || hasSpaceAfter(root, pos); + } + }; + var needsToBeNbsp = function (root, pos) { + return needsToBeNbspLeft(root, pos) || needsToBeNbspRight(root, leanRight(pos)); + }; + var isNbspAt = function (text, offset) { + return isNbsp(text.charAt(offset)); + }; + var hasNbsp = function (pos) { + var container = pos.container(); + return isText$1(container) && contains$1(container.data, nbsp); + }; + var normalizeNbspMiddle = function (text) { + var chars = text.split(''); + return map(chars, function (chr, i) { + if (isNbsp(chr) && i > 0 && i < chars.length - 1 && isContent$1(chars[i - 1]) && isContent$1(chars[i + 1])) { + return ' '; + } else { + return chr; + } + }).join(''); + }; + var normalizeNbspAtStart = function (root, node) { + var text = node.data; + var firstPos = CaretPosition(node, 0); + if (isNbspAt(text, 0) && !needsToBeNbsp(root, firstPos)) { + node.data = ' ' + text.slice(1); + return true; + } else { + return false; + } + }; + var normalizeNbspInMiddleOfTextNode = function (node) { + var text = node.data; + var newText = normalizeNbspMiddle(text); + if (newText !== text) { + node.data = newText; + return true; + } else { + return false; + } + }; + var normalizeNbspAtEnd = function (root, node) { + var text = node.data; + var lastPos = CaretPosition(node, text.length - 1); + if (isNbspAt(text, text.length - 1) && !needsToBeNbsp(root, lastPos)) { + node.data = text.slice(0, -1) + ' '; + return true; + } else { + return false; + } + }; + var normalizeNbsps = function (root, pos) { + return Optional.some(pos).filter(hasNbsp).bind(function (pos) { + var container = pos.container(); + var normalized = normalizeNbspAtStart(root, container) || normalizeNbspInMiddleOfTextNode(container) || normalizeNbspAtEnd(root, container); + return normalized ? Optional.some(pos) : Optional.none(); + }); + }; + var normalizeNbspsInEditor = function (editor) { + var root = SugarElement.fromDom(editor.getBody()); + if (editor.selection.isCollapsed()) { + normalizeNbsps(root, CaretPosition.fromRangeStart(editor.selection.getRng())).each(function (pos) { + editor.selection.setRng(pos.toRange()); + }); + } + }; + + var normalizeContent = function (content, isStartOfContent, isEndOfContent) { + var result = foldl(content, function (acc, c) { + if (isWhiteSpace$1(c) || isNbsp(c)) { + if (acc.previousCharIsSpace || acc.str === '' && isStartOfContent || acc.str.length === content.length - 1 && isEndOfContent) { + return { + previousCharIsSpace: false, + str: acc.str + nbsp + }; + } else { + return { + previousCharIsSpace: true, + str: acc.str + ' ' + }; + } + } else { + return { + previousCharIsSpace: false, + str: acc.str + c + }; + } + }, { + previousCharIsSpace: false, + str: '' + }); + return result.str; + }; + var normalize$1 = function (node, offset, count) { + if (count === 0) { + return; + } + var elm = SugarElement.fromDom(node); + var root = ancestor(elm, isBlock).getOr(elm); + var whitespace = node.data.slice(offset, offset + count); + var isEndOfContent = offset + count >= node.data.length && needsToBeNbspRight(root, CaretPosition(node, node.data.length)); + var isStartOfContent = offset === 0 && needsToBeNbspLeft(root, CaretPosition(node, 0)); + node.replaceData(offset, count, normalizeContent(whitespace, isStartOfContent, isEndOfContent)); + }; + var normalizeWhitespaceAfter = function (node, offset) { + var content = node.data.slice(offset); + var whitespaceCount = content.length - lTrim(content).length; + return normalize$1(node, offset, whitespaceCount); + }; + var normalizeWhitespaceBefore = function (node, offset) { + var content = node.data.slice(0, offset); + var whitespaceCount = content.length - rTrim(content).length; + return normalize$1(node, offset - whitespaceCount, whitespaceCount); + }; + var mergeTextNodes = function (prevNode, nextNode, normalizeWhitespace, mergeToPrev) { + if (mergeToPrev === void 0) { + mergeToPrev = true; + } + var whitespaceOffset = rTrim(prevNode.data).length; + var newNode = mergeToPrev ? prevNode : nextNode; + var removeNode = mergeToPrev ? nextNode : prevNode; + if (mergeToPrev) { + newNode.appendData(removeNode.data); + } else { + newNode.insertData(0, removeNode.data); + } + remove(SugarElement.fromDom(removeNode)); + if (normalizeWhitespace) { + normalizeWhitespaceAfter(newNode, whitespaceOffset); + } + return newNode; + }; + + var needsReposition = function (pos, elm) { + var container = pos.container(); + var offset = pos.offset(); + return CaretPosition.isTextPosition(pos) === false && container === elm.parentNode && offset > CaretPosition.before(elm).offset(); + }; + var reposition = function (elm, pos) { + return needsReposition(pos, elm) ? CaretPosition(pos.container(), pos.offset() - 1) : pos; + }; + var beforeOrStartOf = function (node) { + return isText$1(node) ? CaretPosition(node, 0) : CaretPosition.before(node); + }; + var afterOrEndOf = function (node) { + return isText$1(node) ? CaretPosition(node, node.data.length) : CaretPosition.after(node); + }; + var getPreviousSiblingCaretPosition = function (elm) { + if (isCaretCandidate(elm.previousSibling)) { + return Optional.some(afterOrEndOf(elm.previousSibling)); + } else { + return elm.previousSibling ? lastPositionIn(elm.previousSibling) : Optional.none(); + } + }; + var getNextSiblingCaretPosition = function (elm) { + if (isCaretCandidate(elm.nextSibling)) { + return Optional.some(beforeOrStartOf(elm.nextSibling)); + } else { + return elm.nextSibling ? firstPositionIn(elm.nextSibling) : Optional.none(); + } + }; + var findCaretPositionBackwardsFromElm = function (rootElement, elm) { + var startPosition = CaretPosition.before(elm.previousSibling ? elm.previousSibling : elm.parentNode); + return prevPosition(rootElement, startPosition).fold(function () { + return nextPosition(rootElement, CaretPosition.after(elm)); + }, Optional.some); + }; + var findCaretPositionForwardsFromElm = function (rootElement, elm) { + return nextPosition(rootElement, CaretPosition.after(elm)).fold(function () { + return prevPosition(rootElement, CaretPosition.before(elm)); + }, Optional.some); + }; + var findCaretPositionBackwards = function (rootElement, elm) { + return getPreviousSiblingCaretPosition(elm).orThunk(function () { + return getNextSiblingCaretPosition(elm); + }).orThunk(function () { + return findCaretPositionBackwardsFromElm(rootElement, elm); + }); + }; + var findCaretPositionForward = function (rootElement, elm) { + return getNextSiblingCaretPosition(elm).orThunk(function () { + return getPreviousSiblingCaretPosition(elm); + }).orThunk(function () { + return findCaretPositionForwardsFromElm(rootElement, elm); + }); + }; + var findCaretPosition$1 = function (forward, rootElement, elm) { + return forward ? findCaretPositionForward(rootElement, elm) : findCaretPositionBackwards(rootElement, elm); + }; + var findCaretPosOutsideElmAfterDelete = function (forward, rootElement, elm) { + return findCaretPosition$1(forward, rootElement, elm).map(curry(reposition, elm)); + }; + var setSelection = function (editor, forward, pos) { + pos.fold(function () { + editor.focus(); + }, function (pos) { + editor.selection.setRng(pos.toRange(), forward); + }); + }; + var eqRawNode = function (rawNode) { + return function (elm) { + return elm.dom === rawNode; + }; + }; + var isBlock$2 = function (editor, elm) { + return elm && has(editor.schema.getBlockElements(), name(elm)); + }; + var paddEmptyBlock = function (elm) { + if (isEmpty(elm)) { + var br = SugarElement.fromHtml('
'); + empty(elm); + append(elm, br); + return Optional.some(CaretPosition.before(br.dom)); + } else { + return Optional.none(); + } + }; + var deleteNormalized = function (elm, afterDeletePosOpt, normalizeWhitespace) { + var prevTextOpt = prevSibling(elm).filter(isText); + var nextTextOpt = nextSibling(elm).filter(isText); + remove(elm); + return lift3(prevTextOpt, nextTextOpt, afterDeletePosOpt, function (prev, next, pos) { + var prevNode = prev.dom, nextNode = next.dom; + var offset = prevNode.data.length; + mergeTextNodes(prevNode, nextNode, normalizeWhitespace); + return pos.container() === nextNode ? CaretPosition(prevNode, offset) : pos; + }).orThunk(function () { + if (normalizeWhitespace) { + prevTextOpt.each(function (elm) { + return normalizeWhitespaceBefore(elm.dom, elm.dom.length); + }); + nextTextOpt.each(function (elm) { + return normalizeWhitespaceAfter(elm.dom, 0); + }); + } + return afterDeletePosOpt; + }); + }; + var isInlineElement = function (editor, element) { + return has(editor.schema.getTextInlineElements(), name(element)); + }; + var deleteElement = function (editor, forward, elm, moveCaret) { + if (moveCaret === void 0) { + moveCaret = true; + } + var afterDeletePos = findCaretPosOutsideElmAfterDelete(forward, editor.getBody(), elm.dom); + var parentBlock = ancestor(elm, curry(isBlock$2, editor), eqRawNode(editor.getBody())); + var normalizedAfterDeletePos = deleteNormalized(elm, afterDeletePos, isInlineElement(editor, elm)); + if (editor.dom.isEmpty(editor.getBody())) { + editor.setContent(''); + editor.selection.setCursorLocation(); + } else { + parentBlock.bind(paddEmptyBlock).fold(function () { + if (moveCaret) { + setSelection(editor, forward, normalizedAfterDeletePos); + } + }, function (paddPos) { + if (moveCaret) { + setSelection(editor, forward, Optional.some(paddPos)); + } + }); + } + }; + + var tableCellRng = function (start, end) { + return { + start: start, + end: end + }; + }; + var tableSelection = function (rng, table, cells) { + return { + rng: rng, + table: table, + cells: cells + }; + }; + var deleteAction = Adt.generate([ + { removeTable: ['element'] }, + { emptyCells: ['cells'] }, + { + deleteCellSelection: [ + 'rng', + 'cell' + ] + } + ]); + var isRootFromElement = function (root) { + return function (cur) { + return eq$2(root, cur); + }; + }; + var getClosestCell = function (container, isRoot) { + return closest$1(SugarElement.fromDom(container), 'td,th', isRoot); + }; + var getClosestTable = function (cell, isRoot) { + return ancestor$1(cell, 'table', isRoot); + }; + var isExpandedCellRng = function (cellRng) { + return !eq$2(cellRng.start, cellRng.end); + }; + var getTableFromCellRng = function (cellRng, isRoot) { + return getClosestTable(cellRng.start, isRoot).bind(function (startParentTable) { + return getClosestTable(cellRng.end, isRoot).bind(function (endParentTable) { + return someIf(eq$2(startParentTable, endParentTable), startParentTable); + }); + }); + }; + var isSingleCellTable = function (cellRng, isRoot) { + return !isExpandedCellRng(cellRng) && getTableFromCellRng(cellRng, isRoot).exists(function (table) { + var rows = table.dom.rows; + return rows.length === 1 && rows[0].cells.length === 1; + }); + }; + var getTableCells = function (table) { + return descendants$1(table, 'td,th'); + }; + var getCellRng = function (rng, isRoot) { + var startCell = getClosestCell(rng.startContainer, isRoot); + var endCell = getClosestCell(rng.endContainer, isRoot); + return lift2(startCell, endCell, tableCellRng); + }; + var getCellRangeFromStartTable = function (cellRng, isRoot) { + return getClosestTable(cellRng.start, isRoot).bind(function (table) { + return last(getTableCells(table)).map(function (endCell) { + return tableCellRng(cellRng.start, endCell); + }); + }); + }; + var partialSelection = function (isRoot, rng) { + var startCell = getClosestCell(rng.startContainer, isRoot); + var endCell = getClosestCell(rng.endContainer, isRoot); + return rng.collapsed ? Optional.none() : lift2(startCell, endCell, tableCellRng).fold(function () { + return startCell.fold(function () { + return endCell.bind(function (endCell) { + return getClosestTable(endCell, isRoot).bind(function (table) { + return head(getTableCells(table)).map(function (startCell) { + return tableCellRng(startCell, endCell); + }); + }); + }); + }, function (startCell) { + return getClosestTable(startCell, isRoot).bind(function (table) { + return last(getTableCells(table)).map(function (endCell) { + return tableCellRng(startCell, endCell); + }); + }); + }); + }, function (cellRng) { + return isWithinSameTable(isRoot, cellRng) ? Optional.none() : getCellRangeFromStartTable(cellRng, isRoot); + }); + }; + var isWithinSameTable = function (isRoot, cellRng) { + return getTableFromCellRng(cellRng, isRoot).isSome(); + }; + var getTableSelectionFromCellRng = function (cellRng, isRoot) { + return getTableFromCellRng(cellRng, isRoot).map(function (table) { + return tableSelection(cellRng, table, getTableCells(table)); + }); + }; + var getTableSelection = function (optCellRng, rng, isRoot) { + return optCellRng.filter(function (cellRng) { + return isExpandedCellRng(cellRng) && isWithinSameTable(isRoot, cellRng); + }).orThunk(function () { + return partialSelection(isRoot, rng); + }).bind(function (cRng) { + return getTableSelectionFromCellRng(cRng, isRoot); + }); + }; + var getCellIndex = function (cells, cell) { + return findIndex(cells, function (x) { + return eq$2(x, cell); + }); + }; + var getSelectedCells = function (tableSelection) { + return lift2(getCellIndex(tableSelection.cells, tableSelection.rng.start), getCellIndex(tableSelection.cells, tableSelection.rng.end), function (startIndex, endIndex) { + return tableSelection.cells.slice(startIndex, endIndex + 1); + }); + }; + var isSingleCellTableContentSelected = function (optCellRng, rng, isRoot) { + return optCellRng.filter(function (cellRng) { + return isSingleCellTable(cellRng, isRoot) && hasAllContentsSelected(cellRng.start, rng); + }).map(function (cellRng) { + return cellRng.start; + }); + }; + var getAction = function (tableSelection) { + return getSelectedCells(tableSelection).map(function (selected) { + var cells = tableSelection.cells; + return selected.length === cells.length ? deleteAction.removeTable(tableSelection.table) : deleteAction.emptyCells(selected); + }); + }; + var getActionFromRange = function (root, rng) { + var isRoot = isRootFromElement(root); + var optCellRng = getCellRng(rng, isRoot); + return isSingleCellTableContentSelected(optCellRng, rng, isRoot).map(function (cell) { + return deleteAction.deleteCellSelection(rng, cell); + }).orThunk(function () { + return getTableSelection(optCellRng, rng, isRoot).bind(getAction); + }); + }; + + var freefallRtl = function (root) { + var child = isComment(root) ? prevSibling(root) : lastChild(root); + return child.bind(freefallRtl).orThunk(function () { + return Optional.some(root); + }); + }; + var emptyCells = function (editor, cells) { + each(cells, fillWithPaddingBr); + editor.selection.setCursorLocation(cells[0].dom, 0); + return true; + }; + var deleteCellContents = function (editor, rng, cell) { + rng.deleteContents(); + var lastNode = freefallRtl(cell).getOr(cell); + var lastBlock = SugarElement.fromDom(editor.dom.getParent(lastNode.dom, editor.dom.isBlock)); + if (isEmpty(lastBlock)) { + fillWithPaddingBr(lastBlock); + editor.selection.setCursorLocation(lastBlock.dom, 0); + } + if (!eq$2(cell, lastBlock)) { + var additionalCleanupNodes = parent(lastBlock).is(cell) ? [] : siblings(lastBlock); + each(additionalCleanupNodes.concat(children(cell)), function (node) { + if (!eq$2(node, lastBlock) && !contains$2(node, lastBlock)) { + remove(node); + } + }); + } + return true; + }; + var deleteTableElement = function (editor, table) { + deleteElement(editor, false, table); + return true; + }; + var deleteCellRange = function (editor, rootElm, rng) { + return getActionFromRange(rootElm, rng).map(function (action) { + return action.fold(curry(deleteTableElement, editor), curry(emptyCells, editor), curry(deleteCellContents, editor)); + }); + }; + var deleteCaptionRange = function (editor, caption) { + return emptyElement(editor, caption); + }; + var deleteTableRange = function (editor, rootElm, rng, startElm) { + return getParentCaption(rootElm, startElm).fold(function () { + return deleteCellRange(editor, rootElm, rng); + }, function (caption) { + return deleteCaptionRange(editor, caption); + }).getOr(false); + }; + var deleteRange = function (editor, startElm) { + var rootNode = SugarElement.fromDom(editor.getBody()); + var rng = editor.selection.getRng(); + var selectedCells = getCellsFromEditor(editor); + return selectedCells.length !== 0 ? emptyCells(editor, selectedCells) : deleteTableRange(editor, rootNode, rng, startElm); + }; + var getParentCell = function (rootElm, elm) { + return find(parentsAndSelf(elm, rootElm), isTableCell$1); + }; + var getParentCaption = function (rootElm, elm) { + return find(parentsAndSelf(elm, rootElm), function (elm) { + return name(elm) === 'caption'; + }); + }; + var deleteBetweenCells = function (editor, rootElm, forward, fromCell, from) { + return navigate(forward, editor.getBody(), from).bind(function (to) { + return getParentCell(rootElm, SugarElement.fromDom(to.getNode())).map(function (toCell) { + return eq$2(toCell, fromCell) === false; + }); + }); + }; + var emptyElement = function (editor, elm) { + fillWithPaddingBr(elm); + editor.selection.setCursorLocation(elm.dom, 0); + return Optional.some(true); + }; + var isDeleteOfLastCharPos = function (fromCaption, forward, from, to) { + return firstPositionIn(fromCaption.dom).bind(function (first) { + return lastPositionIn(fromCaption.dom).map(function (last) { + return forward ? from.isEqual(first) && to.isEqual(last) : from.isEqual(last) && to.isEqual(first); + }); + }).getOr(true); + }; + var emptyCaretCaption = function (editor, elm) { + return emptyElement(editor, elm); + }; + var validateCaretCaption = function (rootElm, fromCaption, to) { + return getParentCaption(rootElm, SugarElement.fromDom(to.getNode())).map(function (toCaption) { + return eq$2(toCaption, fromCaption) === false; + }); + }; + var deleteCaretInsideCaption = function (editor, rootElm, forward, fromCaption, from) { + return navigate(forward, editor.getBody(), from).bind(function (to) { + return isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to); + }).or(Optional.some(true)); + }; + var deleteCaretCells = function (editor, forward, rootElm, startElm) { + var from = CaretPosition.fromRangeStart(editor.selection.getRng()); + return getParentCell(rootElm, startElm).bind(function (fromCell) { + return isEmpty(fromCell) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from); + }).getOr(false); + }; + var deleteCaretCaption = function (editor, forward, rootElm, fromCaption) { + var from = CaretPosition.fromRangeStart(editor.selection.getRng()); + return isEmpty(fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from); + }; + var isNearTable = function (forward, pos) { + return forward ? isBeforeTable(pos) : isAfterTable(pos); + }; + var isBeforeOrAfterTable = function (editor, forward) { + var fromPos = CaretPosition.fromRangeStart(editor.selection.getRng()); + return isNearTable(forward, fromPos) || fromPosition(forward, editor.getBody(), fromPos).exists(function (pos) { + return isNearTable(forward, pos); + }); + }; + var deleteCaret = function (editor, forward, startElm) { + var rootElm = SugarElement.fromDom(editor.getBody()); + return getParentCaption(rootElm, startElm).fold(function () { + return deleteCaretCells(editor, forward, rootElm, startElm) || isBeforeOrAfterTable(editor, forward); + }, function (fromCaption) { + return deleteCaretCaption(editor, forward, rootElm, fromCaption).getOr(false); + }); + }; + var backspaceDelete = function (editor, forward) { + var startElm = SugarElement.fromDom(editor.selection.getStart(true)); + var cells = getCellsFromEditor(editor); + return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret(editor, forward, startElm) : deleteRange(editor, startElm); + }; + + var createRange$1 = function (sc, so, ec, eo) { + var rng = document.createRange(); + rng.setStart(sc, so); + rng.setEnd(ec, eo); + return rng; + }; + var normalizeBlockSelectionRange = function (rng) { + var startPos = CaretPosition.fromRangeStart(rng); + var endPos = CaretPosition.fromRangeEnd(rng); + var rootNode = rng.commonAncestorContainer; + return fromPosition(false, rootNode, endPos).map(function (newEndPos) { + if (!isInSameBlock(startPos, endPos, rootNode) && isInSameBlock(startPos, newEndPos, rootNode)) { + return createRange$1(startPos.container(), startPos.offset(), newEndPos.container(), newEndPos.offset()); + } else { + return rng; + } + }).getOr(rng); + }; + var normalize$2 = function (rng) { + return rng.collapsed ? rng : normalizeBlockSelectionRange(rng); + }; + + var hasOnlyOneChild = function (node) { + return node.firstChild && node.firstChild === node.lastChild; + }; + var isPaddingNode = function (node) { + return node.name === 'br' || node.value === nbsp; + }; + var isPaddedEmptyBlock = function (schema, node) { + var blockElements = schema.getBlockElements(); + return blockElements[node.name] && hasOnlyOneChild(node) && isPaddingNode(node.firstChild); + }; + var isEmptyFragmentElement = function (schema, node) { + var nonEmptyElements = schema.getNonEmptyElements(); + return node && (node.isEmpty(nonEmptyElements) || isPaddedEmptyBlock(schema, node)); + }; + var isListFragment = function (schema, fragment) { + var firstChild = fragment.firstChild; + var lastChild = fragment.lastChild; + if (firstChild && firstChild.name === 'meta') { + firstChild = firstChild.next; + } + if (lastChild && lastChild.attr('id') === 'mce_marker') { + lastChild = lastChild.prev; + } + if (isEmptyFragmentElement(schema, lastChild)) { + lastChild = lastChild.prev; + } + if (!firstChild || firstChild !== lastChild) { + return false; + } + return firstChild.name === 'ul' || firstChild.name === 'ol'; + }; + var cleanupDomFragment = function (domFragment) { + var firstChild = domFragment.firstChild; + var lastChild = domFragment.lastChild; + if (firstChild && firstChild.nodeName === 'META') { + firstChild.parentNode.removeChild(firstChild); + } + if (lastChild && lastChild.id === 'mce_marker') { + lastChild.parentNode.removeChild(lastChild); + } + return domFragment; + }; + var toDomFragment = function (dom, serializer, fragment) { + var html = serializer.serialize(fragment); + var domFragment = dom.createFragment(html); + return cleanupDomFragment(domFragment); + }; + var listItems$1 = function (elm) { + return Tools.grep(elm.childNodes, function (child) { + return child.nodeName === 'LI'; + }); + }; + var isPadding = function (node) { + return node.data === nbsp || isBr(node); + }; + var isListItemPadded = function (node) { + return node && node.firstChild && node.firstChild === node.lastChild && isPadding(node.firstChild); + }; + var isEmptyOrPadded = function (elm) { + return !elm.firstChild || isListItemPadded(elm); + }; + var trimListItems = function (elms) { + return elms.length > 0 && isEmptyOrPadded(elms[elms.length - 1]) ? elms.slice(0, -1) : elms; + }; + var getParentLi = function (dom, node) { + var parentBlock = dom.getParent(node, dom.isBlock); + return parentBlock && parentBlock.nodeName === 'LI' ? parentBlock : null; + }; + var isParentBlockLi = function (dom, node) { + return !!getParentLi(dom, node); + }; + var getSplit = function (parentNode, rng) { + var beforeRng = rng.cloneRange(); + var afterRng = rng.cloneRange(); + beforeRng.setStartBefore(parentNode); + afterRng.setEndAfter(parentNode); + return [ + beforeRng.cloneContents(), + afterRng.cloneContents() + ]; + }; + var findFirstIn = function (node, rootNode) { + var caretPos = CaretPosition.before(node); + var caretWalker = CaretWalker(rootNode); + var newCaretPos = caretWalker.next(caretPos); + return newCaretPos ? newCaretPos.toRange() : null; + }; + var findLastOf = function (node, rootNode) { + var caretPos = CaretPosition.after(node); + var caretWalker = CaretWalker(rootNode); + var newCaretPos = caretWalker.prev(caretPos); + return newCaretPos ? newCaretPos.toRange() : null; + }; + var insertMiddle = function (target, elms, rootNode, rng) { + var parts = getSplit(target, rng); + var parentElm = target.parentNode; + parentElm.insertBefore(parts[0], target); + Tools.each(elms, function (li) { + parentElm.insertBefore(li, target); + }); + parentElm.insertBefore(parts[1], target); + parentElm.removeChild(target); + return findLastOf(elms[elms.length - 1], rootNode); + }; + var insertBefore = function (target, elms, rootNode) { + var parentElm = target.parentNode; + Tools.each(elms, function (elm) { + parentElm.insertBefore(elm, target); + }); + return findFirstIn(target, rootNode); + }; + var insertAfter = function (target, elms, rootNode, dom) { + dom.insertAfter(elms.reverse(), target); + return findLastOf(elms[0], rootNode); + }; + var insertAtCaret = function (serializer, dom, rng, fragment) { + var domFragment = toDomFragment(dom, serializer, fragment); + var liTarget = getParentLi(dom, rng.startContainer); + var liElms = trimListItems(listItems$1(domFragment.firstChild)); + var BEGINNING = 1, END = 2; + var rootNode = dom.getRoot(); + var isAt = function (location) { + var caretPos = CaretPosition.fromRangeStart(rng); + var caretWalker = CaretWalker(dom.getRoot()); + var newPos = location === BEGINNING ? caretWalker.prev(caretPos) : caretWalker.next(caretPos); + return newPos ? getParentLi(dom, newPos.getNode()) !== liTarget : true; + }; + if (isAt(BEGINNING)) { + return insertBefore(liTarget, liElms, rootNode); + } else if (isAt(END)) { + return insertAfter(liTarget, liElms, rootNode, dom); + } + return insertMiddle(liTarget, liElms, rootNode, rng); + }; + + var trimOrPadLeftRight = function (dom, rng, html) { + var root = SugarElement.fromDom(dom.getRoot()); + if (needsToBeNbspLeft(root, CaretPosition.fromRangeStart(rng))) { + html = html.replace(/^ /, ' '); + } else { + html = html.replace(/^ /, ' '); + } + if (needsToBeNbspRight(root, CaretPosition.fromRangeEnd(rng))) { + html = html.replace(/( | )()?$/, ' '); + } else { + html = html.replace(/ ()?$/, ' '); + } + return html; + }; + + var isTableCell$4 = isTableCell; + var isTableCellContentSelected = function (dom, rng, cell) { + if (cell !== null) { + var endCell = dom.getParent(rng.endContainer, isTableCell$4); + return cell === endCell && hasAllContentsSelected(SugarElement.fromDom(cell), rng); + } else { + return false; + } + }; + var validInsertion = function (editor, value, parentNode) { + if (parentNode.getAttribute('data-mce-bogus') === 'all') { + parentNode.parentNode.insertBefore(editor.dom.createFragment(value), parentNode); + } else { + var node = parentNode.firstChild; + var node2 = parentNode.lastChild; + if (!node || node === node2 && node.nodeName === 'BR') { + editor.dom.setHTML(parentNode, value); + } else { + editor.selection.setContent(value); + } + } + }; + var trimBrsFromTableCell = function (dom, elm) { + Optional.from(dom.getParent(elm, 'td,th')).map(SugarElement.fromDom).each(trimBlockTrailingBr); + }; + var reduceInlineTextElements = function (editor, merge) { + var textInlineElements = editor.schema.getTextInlineElements(); + var dom = editor.dom; + if (merge) { + var root_1 = editor.getBody(); + var elementUtils_1 = ElementUtils(dom); + Tools.each(dom.select('*[data-mce-fragment]'), function (node) { + var isInline = isNonNullable(textInlineElements[node.nodeName.toLowerCase()]); + if (isInline && hasInheritableStyles(dom, node)) { + for (var parentNode = node.parentNode; isNonNullable(parentNode) && parentNode !== root_1; parentNode = parentNode.parentNode) { + var styleConflict = hasStyleConflict(dom, node, parentNode); + if (styleConflict) { + break; + } + if (elementUtils_1.compare(parentNode, node)) { + dom.remove(node, true); + break; + } + } + } + }); + } + }; + var markFragmentElements = function (fragment) { + var node = fragment; + while (node = node.walk()) { + if (node.type === 1) { + node.attr('data-mce-fragment', '1'); + } + } + }; + var unmarkFragmentElements = function (elm) { + Tools.each(elm.getElementsByTagName('*'), function (elm) { + elm.removeAttribute('data-mce-fragment'); + }); + }; + var isPartOfFragment = function (node) { + return !!node.getAttribute('data-mce-fragment'); + }; + var canHaveChildren = function (editor, node) { + return node && !editor.schema.getShortEndedElements()[node.nodeName]; + }; + var moveSelectionToMarker = function (editor, marker) { + var nextRng; + var dom = editor.dom, selection = editor.selection; + var node2; + var getContentEditableFalseParent = function (node) { + var root = editor.getBody(); + for (; node && node !== root; node = node.parentNode) { + if (dom.getContentEditable(node) === 'false') { + return node; + } + } + return null; + }; + if (!marker) { + return; + } + selection.scrollIntoView(marker); + var parentEditableFalseElm = getContentEditableFalseParent(marker); + if (parentEditableFalseElm) { + dom.remove(marker); + selection.select(parentEditableFalseElm); + return; + } + var rng = dom.createRng(); + var node = marker.previousSibling; + if (node && node.nodeType === 3) { + rng.setStart(node, node.nodeValue.length); + if (!Env.ie) { + node2 = marker.nextSibling; + if (node2 && node2.nodeType === 3) { + node.appendData(node2.data); + node2.parentNode.removeChild(node2); + } + } + } else { + rng.setStartBefore(marker); + rng.setEndBefore(marker); + } + var findNextCaretRng = function (rng) { + var caretPos = CaretPosition.fromRangeStart(rng); + var caretWalker = CaretWalker(editor.getBody()); + caretPos = caretWalker.next(caretPos); + if (caretPos) { + return caretPos.toRange(); + } + }; + var parentBlock = dom.getParent(marker, dom.isBlock); + dom.remove(marker); + if (parentBlock && dom.isEmpty(parentBlock)) { + editor.$(parentBlock).empty(); + rng.setStart(parentBlock, 0); + rng.setEnd(parentBlock, 0); + if (!isTableCell$4(parentBlock) && !isPartOfFragment(parentBlock) && (nextRng = findNextCaretRng(rng))) { + rng = nextRng; + dom.remove(parentBlock); + } else { + dom.add(parentBlock, dom.create('br', { 'data-mce-bogus': '1' })); + } + } + selection.setRng(rng); + }; + var deleteSelectedContent = function (editor) { + var dom = editor.dom; + var rng = normalize$2(editor.selection.getRng()); + editor.selection.setRng(rng); + var startCell = dom.getParent(rng.startContainer, isTableCell$4); + if (isTableCellContentSelected(dom, rng, startCell)) { + deleteCellContents(editor, rng, SugarElement.fromDom(startCell)); + } else { + editor.getDoc().execCommand('Delete', false, null); + } + }; + var insertHtmlAtCaret = function (editor, value, details) { + var parentNode, rootNode, args; + var marker, rng, node; + var selection = editor.selection, dom = editor.dom; + if (/^ | $/.test(value)) { + value = trimOrPadLeftRight(dom, selection.getRng(), value); + } + var parser = editor.parser; + var merge = details.merge; + var serializer = HtmlSerializer({ validate: shouldValidate(editor) }, editor.schema); + var bookmarkHtml = ''; + args = { + content: value, + format: 'html', + selection: true, + paste: details.paste + }; + args = editor.fire('BeforeSetContent', args); + if (args.isDefaultPrevented()) { + editor.fire('SetContent', { + content: args.content, + format: 'html', + selection: true, + paste: details.paste + }); + return; + } + value = args.content; + if (value.indexOf('{$caret}') === -1) { + value += '{$caret}'; + } + value = value.replace(/\{\$caret\}/, bookmarkHtml); + rng = selection.getRng(); + var caretElement = rng.startContainer || (rng.parentElement ? rng.parentElement() : null); + var body = editor.getBody(); + if (caretElement === body && selection.isCollapsed()) { + if (dom.isBlock(body.firstChild) && canHaveChildren(editor, body.firstChild) && dom.isEmpty(body.firstChild)) { + rng = dom.createRng(); + rng.setStart(body.firstChild, 0); + rng.setEnd(body.firstChild, 0); + selection.setRng(rng); + } + } + if (!selection.isCollapsed()) { + deleteSelectedContent(editor); + } + parentNode = selection.getNode(); + var parserArgs = { + context: parentNode.nodeName.toLowerCase(), + data: details.data, + insert: true + }; + var fragment = parser.parse(value, parserArgs); + if (details.paste === true && isListFragment(editor.schema, fragment) && isParentBlockLi(dom, parentNode)) { + rng = insertAtCaret(serializer, dom, selection.getRng(), fragment); + selection.setRng(rng); + editor.fire('SetContent', args); + return; + } + markFragmentElements(fragment); + node = fragment.lastChild; + if (node.attr('id') === 'mce_marker') { + marker = node; + for (node = node.prev; node; node = node.walk(true)) { + if (node.type === 3 || !dom.isBlock(node.name)) { + if (editor.schema.isValidChild(node.parent.name, 'span')) { + node.parent.insert(marker, node, node.name === 'br'); + } + break; + } + } + } + editor._selectionOverrides.showBlockCaretContainer(parentNode); + if (!parserArgs.invalid) { + value = serializer.serialize(fragment); + validInsertion(editor, value, parentNode); + } else { + editor.selection.setContent(bookmarkHtml); + parentNode = selection.getNode(); + rootNode = editor.getBody(); + if (parentNode.nodeType === 9) { + parentNode = node = rootNode; + } else { + node = parentNode; + } + while (node !== rootNode) { + parentNode = node; + node = node.parentNode; + } + value = parentNode === rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode); + value = serializer.serialize(parser.parse(value.replace(//i, function () { + return serializer.serialize(fragment); + }))); + if (parentNode === rootNode) { + dom.setHTML(rootNode, value); + } else { + dom.setOuterHTML(parentNode, value); + } + } + reduceInlineTextElements(editor, merge); + moveSelectionToMarker(editor, dom.get('mce_marker')); + unmarkFragmentElements(editor.getBody()); + trimBrsFromTableCell(dom, selection.getStart()); + editor.fire('SetContent', args); + editor.addVisual(); + }; + + var traverse = function (node, fn) { + fn(node); + if (node.firstChild) { + traverse(node.firstChild, fn); + } + if (node.next) { + traverse(node.next, fn); + } + }; + var findMatchingNodes = function (nodeFilters, attributeFilters, node) { + var nodeMatches = {}; + var attrMatches = {}; + var matches = []; + if (node.firstChild) { + traverse(node.firstChild, function (node) { + each(nodeFilters, function (filter) { + if (filter.name === node.name) { + if (nodeMatches[filter.name]) { + nodeMatches[filter.name].nodes.push(node); + } else { + nodeMatches[filter.name] = { + filter: filter, + nodes: [node] + }; + } + } + }); + each(attributeFilters, function (filter) { + if (typeof node.attr(filter.name) === 'string') { + if (attrMatches[filter.name]) { + attrMatches[filter.name].nodes.push(node); + } else { + attrMatches[filter.name] = { + filter: filter, + nodes: [node] + }; + } + } + }); + }); + } + for (var name_1 in nodeMatches) { + if (nodeMatches.hasOwnProperty(name_1)) { + matches.push(nodeMatches[name_1]); + } + } + for (var name_2 in attrMatches) { + if (attrMatches.hasOwnProperty(name_2)) { + matches.push(attrMatches[name_2]); + } + } + return matches; + }; + var filter$3 = function (nodeFilters, attributeFilters, node) { + var matches = findMatchingNodes(nodeFilters, attributeFilters, node); + each(matches, function (match) { + each(match.filter.callbacks, function (callback) { + callback(match.nodes, match.filter.name, {}); + }); + }); + }; + + var defaultFormat = 'html'; + var isTreeNode = function (content) { + return content instanceof AstNode; + }; + var moveSelection = function (editor) { + if (hasFocus$1(editor)) { + firstPositionIn(editor.getBody()).each(function (pos) { + var node = pos.getNode(); + var caretPos = isTable(node) ? firstPositionIn(node).getOr(pos) : pos; + editor.selection.setRng(caretPos.toRange()); + }); + } + }; + var setEditorHtml = function (editor, html) { + editor.dom.setHTML(editor.getBody(), html); + moveSelection(editor); + }; + var setContentString = function (editor, body, content, args) { + var forcedRootBlockName, padd; + if (content.length === 0 || /^\s+$/.test(content)) { + padd = '
'; + if (body.nodeName === 'TABLE') { + content = '' + padd + ''; + } else if (/^(UL|OL)$/.test(body.nodeName)) { + content = '
  • ' + padd + '
  • '; + } + forcedRootBlockName = getForcedRootBlock(editor); + if (forcedRootBlockName && editor.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) { + content = padd; + content = editor.dom.createHTML(forcedRootBlockName, getForcedRootBlockAttrs(editor), content); + } else if (!content) { + content = '
    '; + } + setEditorHtml(editor, content); + editor.fire('SetContent', args); + } else { + if (args.format !== 'raw') { + content = HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(editor.parser.parse(content, { + isRootContent: true, + insert: true + })); + } + args.content = isWsPreserveElement(SugarElement.fromDom(body)) ? content : Tools.trim(content); + setEditorHtml(editor, args.content); + if (!args.no_events) { + editor.fire('SetContent', args); + } + } + return args.content; + }; + var setContentTree = function (editor, body, content, args) { + filter$3(editor.parser.getNodeFilters(), editor.parser.getAttributeFilters(), content); + var html = HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(content); + args.content = isWsPreserveElement(SugarElement.fromDom(body)) ? html : Tools.trim(html); + setEditorHtml(editor, args.content); + if (!args.no_events) { + editor.fire('SetContent', args); + } + return content; + }; + var setContentInternal = function (editor, content, args) { + args.format = args.format ? args.format : defaultFormat; + args.set = true; + args.content = isTreeNode(content) ? '' : content; + if (!args.no_events) { + editor.fire('BeforeSetContent', args); + } + if (!isTreeNode(content)) { + content = args.content; + } + return Optional.from(editor.getBody()).fold(constant(content), function (body) { + return isTreeNode(content) ? setContentTree(editor, body, content, args) : setContentString(editor, body, content, args); + }); + }; + + var sibling$2 = function (scope, predicate) { + return sibling(scope, predicate).isSome(); + }; + + var ensureIsRoot = function (isRoot) { + return isFunction(isRoot) ? isRoot : never; + }; + var ancestor$3 = function (scope, transform, isRoot) { + var element = scope.dom; + var stop = ensureIsRoot(isRoot); + while (element.parentNode) { + element = element.parentNode; + var el = SugarElement.fromDom(element); + var transformed = transform(el); + if (transformed.isSome()) { + return transformed; + } else if (stop(el)) { + break; + } + } + return Optional.none(); + }; + var closest$2 = function (scope, transform, isRoot) { + var current = transform(scope); + var stop = ensureIsRoot(isRoot); + return current.orThunk(function () { + return stop(scope) ? Optional.none() : ancestor$3(scope, transform, stop); + }); + }; + + var isEq$2 = isEq; + var matchesUnInheritedFormatSelector = function (ed, node, name) { + var formatList = ed.formatter.get(name); + if (formatList) { + for (var i = 0; i < formatList.length; i++) { + if (formatList[i].inherit === false && ed.dom.is(node, formatList[i].selector)) { + return true; + } + } + } + return false; + }; + var matchParents = function (editor, node, name, vars) { + var root = editor.dom.getRoot(); + if (node === root) { + return false; + } + node = editor.dom.getParent(node, function (node) { + if (matchesUnInheritedFormatSelector(editor, node, name)) { + return true; + } + return node.parentNode === root || !!matchNode(editor, node, name, vars, true); + }); + return matchNode(editor, node, name, vars); + }; + var matchName = function (dom, node, format) { + if (isEq$2(node, format.inline)) { + return true; + } + if (isEq$2(node, format.block)) { + return true; + } + if (format.selector) { + return node.nodeType === 1 && dom.is(node, format.selector); + } + }; + var matchItems = function (dom, node, format, itemName, similar, vars) { + var key, value; + var items = format[itemName]; + var i; + if (format.onmatch) { + return format.onmatch(node, format, itemName); + } + if (items) { + if (typeof items.length === 'undefined') { + for (key in items) { + if (items.hasOwnProperty(key)) { + if (itemName === 'attributes') { + value = dom.getAttrib(node, key); + } else { + value = getStyle(dom, node, key); + } + if (similar && !value && !format.exact) { + return; + } + if ((!similar || format.exact) && !isEq$2(value, normalizeStyleValue(dom, replaceVars(items[key], vars), key))) { + return; + } + } + } + } else { + for (i = 0; i < items.length; i++) { + if (itemName === 'attributes' ? dom.getAttrib(node, items[i]) : getStyle(dom, node, items[i])) { + return format; + } + } + } + } + return format; + }; + var matchNode = function (ed, node, name, vars, similar) { + var formatList = ed.formatter.get(name); + var format, i, x, classes; + var dom = ed.dom; + if (formatList && node) { + for (i = 0; i < formatList.length; i++) { + format = formatList[i]; + if (matchName(ed.dom, node, format) && matchItems(dom, node, format, 'attributes', similar, vars) && matchItems(dom, node, format, 'styles', similar, vars)) { + if (classes = format.classes) { + for (x = 0; x < classes.length; x++) { + if (!ed.dom.hasClass(node, replaceVars(classes[x], vars))) { + return; + } + } + } + return format; + } + } + } + }; + var match = function (editor, name, vars, node) { + if (node) { + return matchParents(editor, node, name, vars); + } + node = editor.selection.getNode(); + if (matchParents(editor, node, name, vars)) { + return true; + } + var startNode = editor.selection.getStart(); + if (startNode !== node) { + if (matchParents(editor, startNode, name, vars)) { + return true; + } + } + return false; + }; + var matchAll = function (editor, names, vars) { + var matchedFormatNames = []; + var checkedMap = {}; + var startElement = editor.selection.getStart(); + editor.dom.getParent(startElement, function (node) { + for (var i = 0; i < names.length; i++) { + var name_1 = names[i]; + if (!checkedMap[name_1] && matchNode(editor, node, name_1, vars)) { + checkedMap[name_1] = true; + matchedFormatNames.push(name_1); + } + } + }, editor.dom.getRoot()); + return matchedFormatNames; + }; + var closest$3 = function (editor, names) { + var isRoot = function (elm) { + return eq$2(elm, SugarElement.fromDom(editor.getBody())); + }; + var match = function (elm, name) { + return matchNode(editor, elm.dom, name) ? Optional.some(name) : Optional.none(); + }; + return Optional.from(editor.selection.getStart(true)).bind(function (rawElm) { + return closest$2(SugarElement.fromDom(rawElm), function (elm) { + return findMap(names, function (name) { + return match(elm, name); + }); + }, isRoot); + }).getOrNull(); + }; + var canApply = function (editor, name) { + var formatList = editor.formatter.get(name); + var startNode, parents, i, x, selector; + var dom = editor.dom; + if (formatList) { + startNode = editor.selection.getStart(); + parents = getParents$1(dom, startNode); + for (x = formatList.length - 1; x >= 0; x--) { + selector = formatList[x].selector; + if (!selector || formatList[x].defaultBlock) { + return true; + } + for (i = parents.length - 1; i >= 0; i--) { + if (dom.is(parents[i], selector)) { + return true; + } + } + } + } + return false; + }; + var matchAllOnNode = function (editor, node, formatNames) { + return foldl(formatNames, function (acc, name) { + var matchSimilar = isVariableFormatName(editor, name); + if (editor.formatter.matchNode(node, name, {}, matchSimilar)) { + return acc.concat([name]); + } else { + return acc; + } + }, []); + }; + + var ZWSP$1 = ZWSP, CARET_ID$1 = '_mce_caret'; + var importNode = function (ownerDocument, node) { + return ownerDocument.importNode(node, true); + }; + var getEmptyCaretContainers = function (node) { + var nodes = []; + while (node) { + if (node.nodeType === 3 && node.nodeValue !== ZWSP$1 || node.childNodes.length > 1) { + return []; + } + if (node.nodeType === 1) { + nodes.push(node); + } + node = node.firstChild; + } + return nodes; + }; + var isCaretContainerEmpty = function (node) { + return getEmptyCaretContainers(node).length > 0; + }; + var findFirstTextNode = function (node) { + if (node) { + var walker = new DomTreeWalker(node, node); + for (node = walker.current(); node; node = walker.next()) { + if (isText$1(node)) { + return node; + } + } + } + return null; + }; + var createCaretContainer = function (fill) { + var caretContainer = SugarElement.fromTag('span'); + setAll(caretContainer, { + 'id': CARET_ID$1, + 'data-mce-bogus': '1', + 'data-mce-type': 'format-caret' + }); + if (fill) { + append(caretContainer, SugarElement.fromText(ZWSP$1)); + } + return caretContainer; + }; + var trimZwspFromCaretContainer = function (caretContainerNode) { + var textNode = findFirstTextNode(caretContainerNode); + if (textNode && textNode.nodeValue.charAt(0) === ZWSP$1) { + textNode.deleteData(0, 1); + } + return textNode; + }; + var removeCaretContainerNode = function (editor, node, moveCaret) { + if (moveCaret === void 0) { + moveCaret = true; + } + var dom = editor.dom, selection = editor.selection; + if (isCaretContainerEmpty(node)) { + deleteElement(editor, false, SugarElement.fromDom(node), moveCaret); + } else { + var rng = selection.getRng(); + var block = dom.getParent(node, dom.isBlock); + var startContainer = rng.startContainer; + var startOffset = rng.startOffset; + var endContainer = rng.endContainer; + var endOffset = rng.endOffset; + var textNode = trimZwspFromCaretContainer(node); + dom.remove(node, true); + if (startContainer === textNode && startOffset > 0) { + rng.setStart(textNode, startOffset - 1); + } + if (endContainer === textNode && endOffset > 0) { + rng.setEnd(textNode, endOffset - 1); + } + if (block && dom.isEmpty(block)) { + fillWithPaddingBr(SugarElement.fromDom(block)); + } + selection.setRng(rng); + } + }; + var removeCaretContainer = function (editor, node, moveCaret) { + if (moveCaret === void 0) { + moveCaret = true; + } + var dom = editor.dom, selection = editor.selection; + if (!node) { + node = getParentCaretContainer(editor.getBody(), selection.getStart()); + if (!node) { + while (node = dom.get(CARET_ID$1)) { + removeCaretContainerNode(editor, node, false); + } + } + } else { + removeCaretContainerNode(editor, node, moveCaret); + } + }; + var insertCaretContainerNode = function (editor, caretContainer, formatNode) { + var dom = editor.dom, block = dom.getParent(formatNode, curry(isTextBlock$1, editor)); + if (block && dom.isEmpty(block)) { + formatNode.parentNode.replaceChild(caretContainer, formatNode); + } else { + removeTrailingBr(SugarElement.fromDom(formatNode)); + if (dom.isEmpty(formatNode)) { + formatNode.parentNode.replaceChild(caretContainer, formatNode); + } else { + dom.insertAfter(caretContainer, formatNode); + } + } + }; + var appendNode = function (parentNode, node) { + parentNode.appendChild(node); + return node; + }; + var insertFormatNodesIntoCaretContainer = function (formatNodes, caretContainer) { + var innerMostFormatNode = foldr(formatNodes, function (parentNode, formatNode) { + return appendNode(parentNode, formatNode.cloneNode(false)); + }, caretContainer); + return appendNode(innerMostFormatNode, innerMostFormatNode.ownerDocument.createTextNode(ZWSP$1)); + }; + var cleanFormatNode = function (editor, caretContainer, formatNode, name, vars, similar) { + var formatter = editor.formatter; + var dom = editor.dom; + var validFormats = filter(keys(formatter.get()), function (formatName) { + return formatName !== name && !contains$1(formatName, 'removeformat'); + }); + var matchedFormats = matchAllOnNode(editor, formatNode, validFormats); + var uniqueFormats = filter(matchedFormats, function (fmtName) { + return !areSimilarFormats(editor, fmtName, name); + }); + if (uniqueFormats.length > 0) { + var clonedFormatNode = formatNode.cloneNode(false); + dom.add(caretContainer, clonedFormatNode); + formatter.remove(name, vars, clonedFormatNode, similar); + dom.remove(clonedFormatNode); + return Optional.some(clonedFormatNode); + } else { + return Optional.none(); + } + }; + var applyCaretFormat = function (editor, name, vars) { + var caretContainer, textNode; + var selection = editor.selection; + var selectionRng = selection.getRng(); + var offset = selectionRng.startOffset; + var container = selectionRng.startContainer; + var text = container.nodeValue; + caretContainer = getParentCaretContainer(editor.getBody(), selection.getStart()); + if (caretContainer) { + textNode = findFirstTextNode(caretContainer); + } + var wordcharRegex = /[^\s\u00a0\u00ad\u200b\ufeff]/; + if (text && offset > 0 && offset < text.length && wordcharRegex.test(text.charAt(offset)) && wordcharRegex.test(text.charAt(offset - 1))) { + var bookmark = selection.getBookmark(); + selectionRng.collapse(true); + var rng = expandRng(editor, selectionRng, editor.formatter.get(name)); + rng = split$1(rng); + editor.formatter.apply(name, vars, rng); + selection.moveToBookmark(bookmark); + } else { + if (!caretContainer || textNode.nodeValue !== ZWSP$1) { + caretContainer = importNode(editor.getDoc(), createCaretContainer(true).dom); + textNode = caretContainer.firstChild; + selectionRng.insertNode(caretContainer); + offset = 1; + editor.formatter.apply(name, vars, caretContainer); + } else { + editor.formatter.apply(name, vars, caretContainer); + } + selection.setCursorLocation(textNode, offset); + } + }; + var removeCaretFormat = function (editor, name, vars, similar) { + var dom = editor.dom; + var selection = editor.selection; + var hasContentAfter, node, formatNode; + var parents = []; + var rng = selection.getRng(); + var container = rng.startContainer; + var offset = rng.startOffset; + node = container; + if (container.nodeType === 3) { + if (offset !== container.nodeValue.length) { + hasContentAfter = true; + } + node = node.parentNode; + } + while (node) { + if (matchNode(editor, node, name, vars, similar)) { + formatNode = node; + break; + } + if (node.nextSibling) { + hasContentAfter = true; + } + parents.push(node); + node = node.parentNode; + } + if (!formatNode) { + return; + } + if (hasContentAfter) { + var bookmark = selection.getBookmark(); + rng.collapse(true); + var expandedRng = expandRng(editor, rng, editor.formatter.get(name), true); + expandedRng = split$1(expandedRng); + editor.formatter.remove(name, vars, expandedRng, similar); + selection.moveToBookmark(bookmark); + } else { + var caretContainer = getParentCaretContainer(editor.getBody(), formatNode); + var newCaretContainer = createCaretContainer(false).dom; + insertCaretContainerNode(editor, newCaretContainer, caretContainer !== null ? caretContainer : formatNode); + var cleanedFormatNode = cleanFormatNode(editor, newCaretContainer, formatNode, name, vars, similar); + var caretTextNode = insertFormatNodesIntoCaretContainer(parents.concat(cleanedFormatNode.toArray()), newCaretContainer); + removeCaretContainerNode(editor, caretContainer, false); + selection.setCursorLocation(caretTextNode, 1); + if (dom.isEmpty(formatNode)) { + dom.remove(formatNode); + } + } + }; + var disableCaretContainer = function (editor, keyCode) { + var selection = editor.selection, body = editor.getBody(); + removeCaretContainer(editor, null, false); + if ((keyCode === 8 || keyCode === 46) && selection.isCollapsed() && selection.getStart().innerHTML === ZWSP$1) { + removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart())); + } + if (keyCode === 37 || keyCode === 39) { + removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart())); + } + }; + var setup$3 = function (editor) { + editor.on('mouseup keydown', function (e) { + disableCaretContainer(editor, e.keyCode); + }); + }; + var replaceWithCaretFormat = function (targetNode, formatNodes) { + var caretContainer = createCaretContainer(false); + var innerMost = insertFormatNodesIntoCaretContainer(formatNodes, caretContainer.dom); + before(SugarElement.fromDom(targetNode), caretContainer); + remove(SugarElement.fromDom(targetNode)); + return CaretPosition(innerMost, 0); + }; + var isFormatElement = function (editor, element) { + var inlineElements = editor.schema.getTextInlineElements(); + return inlineElements.hasOwnProperty(name(element)) && !isCaretNode(element.dom) && !isBogus(element.dom); + }; + var isEmptyCaretFormatElement = function (element) { + return isCaretNode(element.dom) && isCaretContainerEmpty(element.dom); + }; + + var postProcessHooks = {}; + var filter$4 = filter$2; + var each$8 = each$2; + var addPostProcessHook = function (name, hook) { + var hooks = postProcessHooks[name]; + if (!hooks) { + postProcessHooks[name] = []; + } + postProcessHooks[name].push(hook); + }; + var postProcess = function (name, editor) { + each$8(postProcessHooks[name], function (hook) { + hook(editor); + }); + }; + addPostProcessHook('pre', function (editor) { + var rng = editor.selection.getRng(); + var blocks; + var hasPreSibling = function (pre) { + return isPre(pre.previousSibling) && indexOf$1(blocks, pre.previousSibling) !== -1; + }; + var joinPre = function (pre1, pre2) { + DomQuery(pre2).remove(); + DomQuery(pre1).append('

    ').append(pre2.childNodes); + }; + var isPre = matchNodeNames(['pre']); + if (!rng.collapsed) { + blocks = editor.selection.getSelectedBlocks(); + each$8(filter$4(filter$4(blocks, isPre), hasPreSibling), function (pre) { + joinPre(pre.previousSibling, pre); + }); + } + }); + + var each$9 = Tools.each; + var isElementNode = function (node) { + return isElement$1(node) && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus(node); + }; + var findElementSibling = function (node, siblingName) { + var sibling; + for (sibling = node; sibling; sibling = sibling[siblingName]) { + if (isText$1(sibling) && sibling.nodeValue.length !== 0) { + return node; + } + if (isElement$1(sibling) && !isBookmarkNode$1(sibling)) { + return sibling; + } + } + return node; + }; + var mergeSiblingsNodes = function (dom, prev, next) { + var sibling, tmpSibling; + var elementUtils = ElementUtils(dom); + if (prev && next) { + prev = findElementSibling(prev, 'previousSibling'); + next = findElementSibling(next, 'nextSibling'); + if (elementUtils.compare(prev, next)) { + for (sibling = prev.nextSibling; sibling && sibling !== next;) { + tmpSibling = sibling; + sibling = sibling.nextSibling; + prev.appendChild(tmpSibling); + } + dom.remove(next); + Tools.each(Tools.grep(next.childNodes), function (node) { + prev.appendChild(node); + }); + return prev; + } + } + return next; + }; + var mergeSiblings = function (dom, format, vars, node) { + if (node && format.merge_siblings !== false) { + var newNode = mergeSiblingsNodes(dom, getNonWhiteSpaceSibling(node), node); + mergeSiblingsNodes(dom, newNode, getNonWhiteSpaceSibling(newNode, true)); + } + }; + var clearChildStyles = function (dom, format, node) { + if (format.clear_child_styles) { + var selector = format.links ? '*:not(a)' : '*'; + each$9(dom.select(selector, node), function (node) { + if (isElementNode(node)) { + each$9(format.styles, function (value, name) { + dom.setStyle(node, name, ''); + }); + } + }); + } + }; + var processChildElements = function (node, filter, process) { + each$9(node.childNodes, function (node) { + if (isElementNode(node)) { + if (filter(node)) { + process(node); + } + if (node.hasChildNodes()) { + processChildElements(node, filter, process); + } + } + }); + }; + var unwrapEmptySpan = function (dom, node) { + if (node.nodeName === 'SPAN' && dom.getAttribs(node).length === 0) { + dom.remove(node, true); + } + }; + var hasStyle = function (dom, name) { + return function (node) { + return !!(node && getStyle(dom, node, name)); + }; + }; + var applyStyle = function (dom, name, value) { + return function (node) { + dom.setStyle(node, name, value); + if (node.getAttribute('style') === '') { + node.removeAttribute('style'); + } + unwrapEmptySpan(dom, node); + }; + }; + + var removeResult = Adt.generate([ + { keep: [] }, + { rename: ['name'] }, + { removed: [] } + ]); + var MCE_ATTR_RE = /^(src|href|style)$/; + var each$a = Tools.each; + var isEq$3 = isEq; + var isTableCellOrRow = function (node) { + return /^(TR|TH|TD)$/.test(node.nodeName); + }; + var isChildOfInlineParent = function (dom, node, parent) { + return dom.isChildOf(node, parent) && node !== parent && !dom.isBlock(parent); + }; + var getContainer = function (ed, rng, start) { + var container, offset; + container = rng[start ? 'startContainer' : 'endContainer']; + offset = rng[start ? 'startOffset' : 'endOffset']; + if (isElement$1(container)) { + var lastIdx = container.childNodes.length - 1; + if (!start && offset) { + offset--; + } + container = container.childNodes[offset > lastIdx ? lastIdx : offset]; + } + if (isText$1(container) && start && offset >= container.nodeValue.length) { + container = new DomTreeWalker(container, ed.getBody()).next() || container; + } + if (isText$1(container) && !start && offset === 0) { + container = new DomTreeWalker(container, ed.getBody()).prev() || container; + } + return container; + }; + var normalizeTableSelection = function (node, start) { + var prop = start ? 'firstChild' : 'lastChild'; + if (isTableCellOrRow(node) && node[prop]) { + var childNode = node[prop]; + if (node.nodeName === 'TR') { + return childNode[prop] || childNode; + } else { + return childNode; + } + } + return node; + }; + var wrap$2 = function (dom, node, name, attrs) { + var wrapper = dom.create(name, attrs); + node.parentNode.insertBefore(wrapper, node); + wrapper.appendChild(node); + return wrapper; + }; + var wrapWithSiblings = function (dom, node, next, name, attrs) { + var start = SugarElement.fromDom(node); + var wrapper = SugarElement.fromDom(dom.create(name, attrs)); + var siblings = next ? nextSiblings(start) : prevSiblings(start); + append$1(wrapper, siblings); + if (next) { + before(start, wrapper); + prepend(wrapper, start); + } else { + after(start, wrapper); + append(wrapper, start); + } + return wrapper.dom; + }; + var matchName$1 = function (dom, node, format) { + if (isEq$3(node, format.inline)) { + return true; + } + if (isEq$3(node, format.block)) { + return true; + } + if (format.selector) { + return isElement$1(node) && dom.is(node, format.selector); + } + }; + var isColorFormatAndAnchor = function (node, format) { + return format.links && node.nodeName === 'A'; + }; + var find$3 = function (dom, node, next, inc) { + node = getNonWhiteSpaceSibling(node, next, inc); + return !node || (node.nodeName === 'BR' || dom.isBlock(node)); + }; + var removeNode$1 = function (ed, node, format) { + var parentNode = node.parentNode; + var rootBlockElm; + var dom = ed.dom, forcedRootBlock = getForcedRootBlock(ed); + if (format.block) { + if (!forcedRootBlock) { + if (dom.isBlock(node) && !dom.isBlock(parentNode)) { + if (!find$3(dom, node, false) && !find$3(dom, node.firstChild, true, true)) { + node.insertBefore(dom.create('br'), node.firstChild); + } + if (!find$3(dom, node, true) && !find$3(dom, node.lastChild, false, true)) { + node.appendChild(dom.create('br')); + } + } + } else { + if (parentNode === dom.getRoot()) { + if (!format.list_block || !isEq$3(node, format.list_block)) { + each(from$1(node.childNodes), function (node) { + if (isValid(ed, forcedRootBlock, node.nodeName.toLowerCase())) { + if (!rootBlockElm) { + rootBlockElm = wrap$2(dom, node, forcedRootBlock); + dom.setAttribs(rootBlockElm, ed.settings.forced_root_block_attrs); + } else { + rootBlockElm.appendChild(node); + } + } else { + rootBlockElm = 0; + } + }); + } + } + } + } + if (format.selector && format.inline && !isEq$3(format.inline, node)) { + return; + } + dom.remove(node, true); + }; + var removeFormatInternal = function (ed, format, vars, node, compareNode) { + var stylesModified; + var dom = ed.dom; + if (!matchName$1(dom, node, format) && !isColorFormatAndAnchor(node, format)) { + return removeResult.keep(); + } + var elm = node; + if (format.inline && format.remove === 'all' && isArray(format.preserve_attributes)) { + var attrsToPreserve = filter(dom.getAttribs(elm), function (attr) { + return contains(format.preserve_attributes, attr.name.toLowerCase()); + }); + dom.removeAllAttribs(elm); + each(attrsToPreserve, function (attr) { + return dom.setAttrib(elm, attr.name, attr.value); + }); + if (attrsToPreserve.length > 0) { + return removeResult.rename('span'); + } + } + if (format.remove !== 'all') { + each$a(format.styles, function (value, name) { + value = normalizeStyleValue(dom, replaceVars(value, vars), name + ''); + if (isNumber(name)) { + name = value; + compareNode = null; + } + if (format.remove_similar || (!compareNode || isEq$3(getStyle(dom, compareNode, name), value))) { + dom.setStyle(elm, name, ''); + } + stylesModified = true; + }); + if (stylesModified && dom.getAttrib(elm, 'style') === '') { + elm.removeAttribute('style'); + elm.removeAttribute('data-mce-style'); + } + each$a(format.attributes, function (value, name) { + var valueOut; + value = replaceVars(value, vars); + if (isNumber(name)) { + name = value; + compareNode = null; + } + if (format.remove_similar || (!compareNode || isEq$3(dom.getAttrib(compareNode, name), value))) { + if (name === 'class') { + value = dom.getAttrib(elm, name); + if (value) { + valueOut = ''; + each(value.split(/\s+/), function (cls) { + if (/mce\-\w+/.test(cls)) { + valueOut += (valueOut ? ' ' : '') + cls; + } + }); + if (valueOut) { + dom.setAttrib(elm, name, valueOut); + return; + } + } + } + if (MCE_ATTR_RE.test(name)) { + elm.removeAttribute('data-mce-' + name); + } + if (name === 'style' && matchNodeNames(['li'])(elm) && dom.getStyle(elm, 'list-style-type') === 'none') { + elm.removeAttribute(name); + dom.setStyle(elm, 'list-style-type', 'none'); + return; + } + if (name === 'class') { + elm.removeAttribute('className'); + } + elm.removeAttribute(name); + } + }); + each$a(format.classes, function (value) { + value = replaceVars(value, vars); + if (!compareNode || dom.hasClass(compareNode, value)) { + dom.removeClass(elm, value); + } + }); + var attrs = dom.getAttribs(elm); + for (var i = 0; i < attrs.length; i++) { + var attrName = attrs[i].nodeName; + if (attrName.indexOf('_') !== 0 && attrName.indexOf('data-') !== 0) { + return removeResult.keep(); + } + } + } + if (format.remove !== 'none') { + removeNode$1(ed, elm, format); + return removeResult.removed(); + } + return removeResult.keep(); + }; + var removeFormat = function (ed, format, vars, node, compareNode) { + return removeFormatInternal(ed, format, vars, node, compareNode).fold(never, function (newName) { + ed.dom.rename(node, newName); + return true; + }, always); + }; + var findFormatRoot = function (editor, container, name, vars, similar) { + var formatRoot; + each(getParents$1(editor.dom, container.parentNode).reverse(), function (parent) { + if (!formatRoot && parent.id !== '_start' && parent.id !== '_end') { + var format = matchNode(editor, parent, name, vars, similar); + if (format && format.split !== false) { + formatRoot = parent; + } + } + }); + return formatRoot; + }; + var removeFormatFromClone = function (editor, format, vars, clone) { + return removeFormatInternal(editor, format, vars, clone, clone).fold(constant(clone), function (newName) { + var fragment = editor.dom.createFragment(); + fragment.appendChild(clone); + return editor.dom.rename(clone, newName); + }, constant(null)); + }; + var wrapAndSplit = function (editor, formatList, formatRoot, container, target, split, format, vars) { + var clone, lastClone, firstClone; + var dom = editor.dom; + if (formatRoot) { + var formatRootParent = formatRoot.parentNode; + for (var parent_1 = container.parentNode; parent_1 && parent_1 !== formatRootParent; parent_1 = parent_1.parentNode) { + clone = dom.clone(parent_1, false); + for (var i = 0; i < formatList.length; i++) { + clone = removeFormatFromClone(editor, formatList[i], vars, clone); + if (clone === null) { + break; + } + } + if (clone) { + if (lastClone) { + clone.appendChild(lastClone); + } + if (!firstClone) { + firstClone = clone; + } + lastClone = clone; + } + } + if (split && (!format.mixed || !dom.isBlock(formatRoot))) { + container = dom.split(formatRoot, container); + } + if (lastClone) { + target.parentNode.insertBefore(lastClone, target); + firstClone.appendChild(target); + if (format.inline) { + mergeSiblings(dom, format, vars, lastClone); + } + } + } + return container; + }; + var remove$6 = function (ed, name, vars, node, similar) { + var formatList = ed.formatter.get(name); + var format = formatList[0]; + var contentEditable = true; + var dom = ed.dom; + var selection = ed.selection; + var splitToFormatRoot = function (container) { + var formatRoot = findFormatRoot(ed, container, name, vars, similar); + return wrapAndSplit(ed, formatList, formatRoot, container, container, true, format, vars); + }; + var isRemoveBookmarkNode = function (node) { + return isBookmarkNode$1(node) && isElement$1(node) && (node.id === '_start' || node.id === '_end'); + }; + var process = function (node) { + var lastContentEditable, hasContentEditableState; + var parentNode = node.parentNode; + if (isText$1(node) && hasBlockChildren(dom, parentNode)) { + removeFormat(ed, format, vars, parentNode, parentNode); + } + if (isElement$1(node) && dom.getContentEditable(node)) { + lastContentEditable = contentEditable; + contentEditable = dom.getContentEditable(node) === 'true'; + hasContentEditableState = true; + } + var children = from$1(node.childNodes); + if (contentEditable && !hasContentEditableState) { + for (var i = 0; i < formatList.length; i++) { + if (removeFormat(ed, formatList[i], vars, node, node)) { + break; + } + } + } + if (format.deep) { + if (children.length) { + for (var i = 0; i < children.length; i++) { + process(children[i]); + } + if (hasContentEditableState) { + contentEditable = lastContentEditable; + } + } + } + }; + var unwrap = function (start) { + var node = dom.get(start ? '_start' : '_end'); + var out = node[start ? 'firstChild' : 'lastChild']; + if (isRemoveBookmarkNode(out)) { + out = out[start ? 'firstChild' : 'lastChild']; + } + if (isText$1(out) && out.data.length === 0) { + out = start ? node.previousSibling || node.nextSibling : node.nextSibling || node.previousSibling; + } + dom.remove(node, true); + return out; + }; + var removeRngStyle = function (rng) { + var startContainer, endContainer; + var expandedRng = expandRng(ed, rng, formatList, rng.collapsed); + if (format.split) { + expandedRng = split$1(expandedRng); + startContainer = getContainer(ed, expandedRng, true); + endContainer = getContainer(ed, expandedRng); + if (startContainer !== endContainer) { + startContainer = normalizeTableSelection(startContainer, true); + endContainer = normalizeTableSelection(endContainer, false); + if (isChildOfInlineParent(dom, startContainer, endContainer)) { + var marker = Optional.from(startContainer.firstChild).getOr(startContainer); + splitToFormatRoot(wrapWithSiblings(dom, marker, true, 'span', { + 'id': '_start', + 'data-mce-type': 'bookmark' + })); + unwrap(true); + return; + } + if (isChildOfInlineParent(dom, endContainer, startContainer)) { + var marker = Optional.from(endContainer.lastChild).getOr(endContainer); + splitToFormatRoot(wrapWithSiblings(dom, marker, false, 'span', { + 'id': '_end', + 'data-mce-type': 'bookmark' + })); + unwrap(false); + return; + } + startContainer = wrap$2(dom, startContainer, 'span', { + 'id': '_start', + 'data-mce-type': 'bookmark' + }); + endContainer = wrap$2(dom, endContainer, 'span', { + 'id': '_end', + 'data-mce-type': 'bookmark' + }); + var newRng = dom.createRng(); + newRng.setStartAfter(startContainer); + newRng.setEndBefore(endContainer); + walk$1(dom, newRng, function (nodes) { + each(nodes, function (n) { + if (!isBookmarkNode$1(n) && !isBookmarkNode$1(n.parentNode)) { + splitToFormatRoot(n); + } + }); + }); + splitToFormatRoot(startContainer); + splitToFormatRoot(endContainer); + startContainer = unwrap(true); + endContainer = unwrap(); + } else { + startContainer = endContainer = splitToFormatRoot(startContainer); + } + expandedRng.startContainer = startContainer.parentNode ? startContainer.parentNode : startContainer; + expandedRng.startOffset = dom.nodeIndex(startContainer); + expandedRng.endContainer = endContainer.parentNode ? endContainer.parentNode : endContainer; + expandedRng.endOffset = dom.nodeIndex(endContainer) + 1; + } + walk$1(dom, expandedRng, function (nodes) { + each(nodes, function (node) { + process(node); + var textDecorations = [ + 'underline', + 'line-through', + 'overline' + ]; + each(textDecorations, function (decoration) { + if (isElement$1(node) && ed.dom.getStyle(node, 'text-decoration') === decoration && node.parentNode && getTextDecoration(dom, node.parentNode) === decoration) { + removeFormat(ed, { + deep: false, + exact: true, + inline: 'span', + styles: { textDecoration: decoration } + }, null, node); + } + }); + }); + }); + }; + if (node) { + if (isNode(node)) { + var rng = dom.createRng(); + rng.setStartBefore(node); + rng.setEndAfter(node); + removeRngStyle(rng); + } else { + removeRngStyle(node); + } + return; + } + if (dom.getContentEditable(selection.getNode()) === 'false') { + node = selection.getNode(); + for (var i = 0; i < formatList.length; i++) { + if (formatList[i].ceFalseOverride) { + if (removeFormat(ed, formatList[i], vars, node, node)) { + break; + } + } + } + return; + } + if (!selection.isCollapsed() || !format.inline || getCellsFromEditor(ed).length) { + preserve(selection, true, function () { + runOnRanges(ed, removeRngStyle); + }); + if (format.inline && match(ed, name, vars, selection.getStart())) { + moveStart(dom, selection, selection.getRng()); + } + ed.nodeChanged(); + } else { + removeCaretFormat(ed, name, vars, similar); + } + }; + + var each$b = Tools.each; + var mergeTextDecorationsAndColor = function (dom, format, vars, node) { + var processTextDecorationsAndColor = function (n) { + if (n.nodeType === 1 && n.parentNode && n.parentNode.nodeType === 1) { + var textDecoration = getTextDecoration(dom, n.parentNode); + if (dom.getStyle(n, 'color') && textDecoration) { + dom.setStyle(n, 'text-decoration', textDecoration); + } else if (dom.getStyle(n, 'text-decoration') === textDecoration) { + dom.setStyle(n, 'text-decoration', null); + } + } + }; + if (format.styles && (format.styles.color || format.styles.textDecoration)) { + Tools.walk(node, processTextDecorationsAndColor, 'childNodes'); + processTextDecorationsAndColor(node); + } + }; + var mergeBackgroundColorAndFontSize = function (dom, format, vars, node) { + if (format.styles && format.styles.backgroundColor) { + processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'backgroundColor', replaceVars(format.styles.backgroundColor, vars))); + } + }; + var mergeSubSup = function (dom, format, vars, node) { + if (format.inline === 'sub' || format.inline === 'sup') { + processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'fontSize', '')); + dom.remove(dom.select(format.inline === 'sup' ? 'sub' : 'sup', node), true); + } + }; + var mergeWithChildren = function (editor, formatList, vars, node) { + each$b(formatList, function (format) { + each$b(editor.dom.select(format.inline, node), function (child) { + if (!isElementNode(child)) { + return; + } + removeFormat(editor, format, vars, child, format.exact ? child : null); + }); + clearChildStyles(editor.dom, format, node); + }); + }; + var mergeWithParents = function (editor, format, name, vars, node) { + if (matchNode(editor, node.parentNode, name, vars)) { + if (removeFormat(editor, format, vars, node)) { + return; + } + } + if (format.merge_with_parents) { + editor.dom.getParent(node.parentNode, function (parent) { + if (matchNode(editor, parent, name, vars)) { + removeFormat(editor, format, vars, node); + return true; + } + }); + } + }; + + var each$c = Tools.each; + var hasFormatProperty = function (format, prop) { + return hasNonNullableKey(format, prop); + }; + var isElementNode$1 = function (node) { + return node && node.nodeType === 1 && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus(node); + }; + var canFormatBR = function (editor, format, node, parentName) { + if (canFormatEmptyLines(editor) && isInlineFormat(format)) { + var validBRParentElements = __assign(__assign({}, editor.schema.getTextBlockElements()), { + td: {}, + th: {}, + li: {}, + dt: {}, + dd: {}, + figcaption: {}, + caption: {}, + details: {}, + summary: {} + }); + var hasCaretNodeSibling = sibling$2(SugarElement.fromDom(node), function (sibling) { + return isCaretNode(sibling.dom); + }); + return hasNonNullableKey(validBRParentElements, parentName) && isEmpty(SugarElement.fromDom(node.parentNode), false) && !hasCaretNodeSibling; + } else { + return false; + } + }; + var applyFormat = function (ed, name, vars, node) { + var formatList = ed.formatter.get(name); + var format = formatList[0]; + var isCollapsed = !node && ed.selection.isCollapsed(); + var dom = ed.dom; + var selection = ed.selection; + var setElementFormat = function (elm, fmt) { + fmt = fmt || format; + if (elm) { + if (fmt.onformat) { + fmt.onformat(elm, fmt, vars, node); + } + each$c(fmt.styles, function (value, name) { + dom.setStyle(elm, name, replaceVars(value, vars)); + }); + if (fmt.styles) { + var styleVal = dom.getAttrib(elm, 'style'); + if (styleVal) { + dom.setAttrib(elm, 'data-mce-style', styleVal); + } + } + each$c(fmt.attributes, function (value, name) { + dom.setAttrib(elm, name, replaceVars(value, vars)); + }); + each$c(fmt.classes, function (value) { + value = replaceVars(value, vars); + if (!dom.hasClass(elm, value)) { + dom.addClass(elm, value); + } + }); + } + }; + var applyNodeStyle = function (formatList, node) { + var found = false; + if (!isSelectorFormat(format)) { + return false; + } + each$c(formatList, function (format) { + if ('collapsed' in format && format.collapsed !== isCollapsed) { + return; + } + if (dom.is(node, format.selector) && !isCaretNode(node)) { + setElementFormat(node, format); + found = true; + return false; + } + }); + return found; + }; + var applyRngStyle = function (dom, rng, bookmark, nodeSpecific) { + var newWrappers = []; + var contentEditable = true; + var wrapName = format.inline || format.block; + var wrapElm = dom.create(wrapName); + setElementFormat(wrapElm); + walk$1(dom, rng, function (nodes) { + var currentWrapElm; + var process = function (node) { + var hasContentEditableState = false; + var lastContentEditable = contentEditable; + var nodeName = node.nodeName.toLowerCase(); + var parentName = node.parentNode.nodeName.toLowerCase(); + if (isElement$1(node) && dom.getContentEditable(node)) { + lastContentEditable = contentEditable; + contentEditable = dom.getContentEditable(node) === 'true'; + hasContentEditableState = true; + } + if (isBr(node) && !canFormatBR(ed, format, node, parentName)) { + currentWrapElm = null; + if (isBlockFormat(format)) { + dom.remove(node); + } + return; + } + if (format.wrapper && matchNode(ed, node, name, vars)) { + currentWrapElm = null; + return; + } + if (contentEditable && !hasContentEditableState && isBlockFormat(format) && !format.wrapper && isTextBlock$1(ed, nodeName) && isValid(ed, parentName, wrapName)) { + var elm = dom.rename(node, wrapName); + setElementFormat(elm); + newWrappers.push(elm); + currentWrapElm = null; + return; + } + if (isSelectorFormat(format)) { + var found = applyNodeStyle(formatList, node); + if (isText$1(node) && hasBlockChildren(dom, node.parentNode)) { + applyNodeStyle(formatList, node.parentNode); + } + if (!hasFormatProperty(format, 'inline') || found) { + currentWrapElm = null; + return; + } + } + if (contentEditable && !hasContentEditableState && isValid(ed, wrapName, nodeName) && isValid(ed, parentName, wrapName) && !(!nodeSpecific && node.nodeType === 3 && node.nodeValue.length === 1 && node.nodeValue.charCodeAt(0) === 65279) && !isCaretNode(node) && (!hasFormatProperty(format, 'inline') || !dom.isBlock(node))) { + if (!currentWrapElm) { + currentWrapElm = dom.clone(wrapElm, false); + node.parentNode.insertBefore(currentWrapElm, node); + newWrappers.push(currentWrapElm); + } + currentWrapElm.appendChild(node); + } else { + currentWrapElm = null; + each$c(Tools.grep(node.childNodes), process); + if (hasContentEditableState) { + contentEditable = lastContentEditable; + } + currentWrapElm = null; + } + }; + each$c(nodes, process); + }); + if (format.links === true) { + each$c(newWrappers, function (node) { + var process = function (node) { + if (node.nodeName === 'A') { + setElementFormat(node, format); + } + each$c(Tools.grep(node.childNodes), process); + }; + process(node); + }); + } + each$c(newWrappers, function (node) { + var getChildCount = function (node) { + var count = 0; + each$c(node.childNodes, function (node) { + if (!isEmptyTextNode(node) && !isBookmarkNode$1(node)) { + count++; + } + }); + return count; + }; + var getChildElementNode = function (root) { + var child = false; + each$c(root.childNodes, function (node) { + if (isElementNode$1(node)) { + child = node; + return false; + } + }); + return child; + }; + var mergeStyles = function (node) { + var clone; + var child = getChildElementNode(node); + if (child && !isBookmarkNode$1(child) && matchName(dom, child, format)) { + clone = dom.clone(child, false); + setElementFormat(clone); + dom.replace(clone, node, true); + dom.remove(child, true); + } + return clone || node; + }; + var childCount = getChildCount(node); + if ((newWrappers.length > 1 || !dom.isBlock(node)) && childCount === 0) { + dom.remove(node, true); + return; + } + if (isInlineFormat(format) || format.wrapper) { + if (!format.exact && childCount === 1) { + node = mergeStyles(node); + } + mergeWithChildren(ed, formatList, vars, node); + mergeWithParents(ed, format, name, vars, node); + mergeBackgroundColorAndFontSize(dom, format, vars, node); + mergeTextDecorationsAndColor(dom, format, vars, node); + mergeSubSup(dom, format, vars, node); + mergeSiblings(dom, format, vars, node); + } + }); + }; + if (dom.getContentEditable(selection.getNode()) === 'false') { + node = selection.getNode(); + for (var i = 0, l = formatList.length; i < l; i++) { + var formatItem = formatList[i]; + if (formatItem.ceFalseOverride && isSelectorFormat(formatItem) && dom.is(node, formatItem.selector)) { + setElementFormat(node, formatItem); + return; + } + } + return; + } + if (format) { + if (node) { + if (isNode(node)) { + if (!applyNodeStyle(formatList, node)) { + var rng = dom.createRng(); + rng.setStartBefore(node); + rng.setEndAfter(node); + applyRngStyle(dom, expandRng(ed, rng, formatList), null, true); + } + } else { + applyRngStyle(dom, node, null, true); + } + } else { + if (!isCollapsed || !isInlineFormat(format) || getCellsFromEditor(ed).length) { + var curSelNode = selection.getNode(); + var firstFormat = formatList[0]; + if (!ed.settings.forced_root_block && firstFormat.defaultBlock && !dom.getParent(curSelNode, dom.isBlock)) { + applyFormat(ed, firstFormat.defaultBlock); + } + selection.setRng(normalize$2(selection.getRng())); + preserve(selection, true, function (bookmark) { + runOnRanges(ed, function (selectionRng, fake) { + var expandedRng = fake ? selectionRng : expandRng(ed, selectionRng, formatList); + applyRngStyle(dom, expandedRng); + }); + }); + moveStart(dom, selection, selection.getRng()); + ed.nodeChanged(); + } else { + applyCaretFormat(ed, name, vars); + } + } + postProcess(name, ed); + } + }; + + var setup$4 = function (registeredFormatListeners, editor) { + var currentFormats = Cell({}); + registeredFormatListeners.set({}); + editor.on('NodeChange', function (e) { + updateAndFireChangeCallbacks(editor, e.element, currentFormats, registeredFormatListeners.get()); + }); + }; + var updateAndFireChangeCallbacks = function (editor, elm, currentFormats, formatChangeData) { + var formatsList = keys(currentFormats.get()); + var newFormats = {}; + var matchedFormats = {}; + var parents = filter(getParents$1(editor.dom, elm), function (node) { + return node.nodeType === 1 && !node.getAttribute('data-mce-bogus'); + }); + each$1(formatChangeData, function (data, format) { + Tools.each(parents, function (node) { + if (editor.formatter.matchNode(node, format, {}, data.similar)) { + if (formatsList.indexOf(format) === -1) { + each(data.callbacks, function (callback) { + callback(true, { + node: node, + format: format, + parents: parents + }); + }); + newFormats[format] = data.callbacks; + } + matchedFormats[format] = data.callbacks; + return false; + } + if (matchesUnInheritedFormatSelector(editor, node, format)) { + return false; + } + }); + }); + var remainingFormats = filterRemainingFormats(currentFormats.get(), matchedFormats, elm, parents); + currentFormats.set(__assign(__assign({}, newFormats), remainingFormats)); + }; + var filterRemainingFormats = function (currentFormats, matchedFormats, elm, parents) { + return bifilter(currentFormats, function (callbacks, format) { + if (!has(matchedFormats, format)) { + each(callbacks, function (callback) { + callback(false, { + node: elm, + format: format, + parents: parents + }); + }); + return false; + } else { + return true; + } + }).t; + }; + var addListeners = function (registeredFormatListeners, formats, callback, similar) { + var formatChangeItems = registeredFormatListeners.get(); + each(formats.split(','), function (format) { + if (!formatChangeItems[format]) { + formatChangeItems[format] = { + similar: similar, + callbacks: [] + }; + } + formatChangeItems[format].callbacks.push(callback); + }); + registeredFormatListeners.set(formatChangeItems); + }; + var removeListeners = function (registeredFormatListeners, formats, callback) { + var formatChangeItems = registeredFormatListeners.get(); + each(formats.split(','), function (format) { + formatChangeItems[format].callbacks = filter(formatChangeItems[format].callbacks, function (c) { + return c !== callback; + }); + if (formatChangeItems[format].callbacks.length === 0) { + delete formatChangeItems[format]; + } + }); + registeredFormatListeners.set(formatChangeItems); + }; + var formatChangedInternal = function (editor, registeredFormatListeners, formats, callback, similar) { + if (registeredFormatListeners.get() === null) { + setup$4(registeredFormatListeners, editor); + } + addListeners(registeredFormatListeners, formats, callback, similar); + return { + unbind: function () { + return removeListeners(registeredFormatListeners, formats, callback); + } + }; + }; + + var toggle = function (editor, name, vars, node) { + var fmt = editor.formatter.get(name); + if (match(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) { + remove$6(editor, name, vars, node); + } else { + applyFormat(editor, name, vars, node); + } + }; + + var fromElements = function (elements, scope) { + var doc = scope || document; + var fragment = doc.createDocumentFragment(); + each(elements, function (element) { + fragment.appendChild(element.dom); + }); + return SugarElement.fromDom(fragment); + }; + + var tableModel = function (element, width, rows) { + return { + element: element, + width: width, + rows: rows + }; + }; + var tableRow = function (element, cells) { + return { + element: element, + cells: cells + }; + }; + var cellPosition = function (x, y) { + return { + x: x, + y: y + }; + }; + var getSpan = function (td, key) { + var value = parseInt(get$4(td, key), 10); + return isNaN(value) ? 1 : value; + }; + var fillout = function (table, x, y, tr, td) { + var rowspan = getSpan(td, 'rowspan'); + var colspan = getSpan(td, 'colspan'); + var rows = table.rows; + for (var y2 = y; y2 < y + rowspan; y2++) { + if (!rows[y2]) { + rows[y2] = tableRow(deep(tr), []); + } + for (var x2 = x; x2 < x + colspan; x2++) { + var cells = rows[y2].cells; + cells[x2] = y2 === y && x2 === x ? td : shallow(td); + } + } + }; + var cellExists = function (table, x, y) { + var rows = table.rows; + var cells = rows[y] ? rows[y].cells : []; + return !!cells[x]; + }; + var skipCellsX = function (table, x, y) { + while (cellExists(table, x, y)) { + x++; + } + return x; + }; + var getWidth = function (rows) { + return foldl(rows, function (acc, row) { + return row.cells.length > acc ? row.cells.length : acc; + }, 0); + }; + var findElementPos = function (table, element) { + var rows = table.rows; + for (var y = 0; y < rows.length; y++) { + var cells = rows[y].cells; + for (var x = 0; x < cells.length; x++) { + if (eq$2(cells[x], element)) { + return Optional.some(cellPosition(x, y)); + } + } + } + return Optional.none(); + }; + var extractRows = function (table, sx, sy, ex, ey) { + var newRows = []; + var rows = table.rows; + for (var y = sy; y <= ey; y++) { + var cells = rows[y].cells; + var slice = sx < ex ? cells.slice(sx, ex + 1) : cells.slice(ex, sx + 1); + newRows.push(tableRow(rows[y].element, slice)); + } + return newRows; + }; + var subTable = function (table, startPos, endPos) { + var sx = startPos.x, sy = startPos.y; + var ex = endPos.x, ey = endPos.y; + var newRows = sy < ey ? extractRows(table, sx, sy, ex, ey) : extractRows(table, sx, ey, ex, sy); + return tableModel(table.element, getWidth(newRows), newRows); + }; + var createDomTable = function (table, rows) { + var tableElement = shallow(table.element); + var tableBody = SugarElement.fromTag('tbody'); + append$1(tableBody, rows); + append(tableElement, tableBody); + return tableElement; + }; + var modelRowsToDomRows = function (table) { + return map(table.rows, function (row) { + var cells = map(row.cells, function (cell) { + var td = deep(cell); + remove$1(td, 'colspan'); + remove$1(td, 'rowspan'); + return td; + }); + var tr = shallow(row.element); + append$1(tr, cells); + return tr; + }); + }; + var fromDom$1 = function (tableElm) { + var table = tableModel(shallow(tableElm), 0, []); + each(descendants$1(tableElm, 'tr'), function (tr, y) { + each(descendants$1(tr, 'td,th'), function (td, x) { + fillout(table, skipCellsX(table, x, y), y, tr, td); + }); + }); + return tableModel(table.element, getWidth(table.rows), table.rows); + }; + var toDom = function (table) { + return createDomTable(table, modelRowsToDomRows(table)); + }; + var subsection = function (table, startElement, endElement) { + return findElementPos(table, startElement).bind(function (startPos) { + return findElementPos(table, endElement).map(function (endPos) { + return subTable(table, startPos, endPos); + }); + }); + }; + + var findParentListContainer = function (parents) { + return find(parents, function (elm) { + return name(elm) === 'ul' || name(elm) === 'ol'; + }); + }; + var getFullySelectedListWrappers = function (parents, rng) { + return find(parents, function (elm) { + return name(elm) === 'li' && hasAllContentsSelected(elm, rng); + }).fold(constant([]), function (_li) { + return findParentListContainer(parents).map(function (listCont) { + var listElm = SugarElement.fromTag(name(listCont)); + var listStyles = filter$1(getAllRaw(listCont), function (_style, name) { + return startsWith(name, 'list-style'); + }); + setAll$1(listElm, listStyles); + return [ + SugarElement.fromTag('li'), + listElm + ]; + }).getOr([]); + }); + }; + var wrap$3 = function (innerElm, elms) { + var wrapped = foldl(elms, function (acc, elm) { + append(elm, acc); + return elm; + }, innerElm); + return elms.length > 0 ? fromElements([wrapped]) : wrapped; + }; + var directListWrappers = function (commonAnchorContainer) { + if (isListItem(commonAnchorContainer)) { + return parent(commonAnchorContainer).filter(isList).fold(constant([]), function (listElm) { + return [ + commonAnchorContainer, + listElm + ]; + }); + } else { + return isList(commonAnchorContainer) ? [commonAnchorContainer] : []; + } + }; + var getWrapElements = function (rootNode, rng) { + var commonAnchorContainer = SugarElement.fromDom(rng.commonAncestorContainer); + var parents = parentsAndSelf(commonAnchorContainer, rootNode); + var wrapElements = filter(parents, function (elm) { + return isInline(elm) || isHeading(elm); + }); + var listWrappers = getFullySelectedListWrappers(parents, rng); + var allWrappers = wrapElements.concat(listWrappers.length ? listWrappers : directListWrappers(commonAnchorContainer)); + return map(allWrappers, shallow); + }; + var emptyFragment = function () { + return fromElements([]); + }; + var getFragmentFromRange = function (rootNode, rng) { + return wrap$3(SugarElement.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng)); + }; + var getParentTable = function (rootElm, cell) { + return ancestor$1(cell, 'table', curry(eq$2, rootElm)); + }; + var getTableFragment = function (rootNode, selectedTableCells) { + return getParentTable(rootNode, selectedTableCells[0]).bind(function (tableElm) { + var firstCell = selectedTableCells[0]; + var lastCell = selectedTableCells[selectedTableCells.length - 1]; + var fullTableModel = fromDom$1(tableElm); + return subsection(fullTableModel, firstCell, lastCell).map(function (sectionedTableModel) { + return fromElements([toDom(sectionedTableModel)]); + }); + }).getOrThunk(emptyFragment); + }; + var getSelectionFragment = function (rootNode, ranges) { + return ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0]); + }; + var read$1 = function (rootNode, ranges) { + var selectedCells = getCellsFromElementOrRanges(ranges, rootNode); + return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges); + }; + + var trimLeadingCollapsibleText = function (text) { + return text.replace(/^[ \f\n\r\t\v]+/, ''); + }; + var isCollapsibleWhitespace = function (text, index) { + return index >= 0 && index < text.length && isWhiteSpace$1(text.charAt(index)); + }; + var getInnerText = function (bin, shouldTrim) { + var text = trim$2(bin.innerText); + return shouldTrim ? trimLeadingCollapsibleText(text) : text; + }; + var getContextNodeName = function (parentBlockOpt) { + return parentBlockOpt.map(function (block) { + return block.nodeName; + }).getOr('div').toLowerCase(); + }; + var getTextContent = function (editor) { + return Optional.from(editor.selection.getRng()).map(function (rng) { + var parentBlockOpt = Optional.from(editor.dom.getParent(rng.commonAncestorContainer, editor.dom.isBlock)); + var body = editor.getBody(); + var contextNodeName = getContextNodeName(parentBlockOpt); + var shouldTrimSpaces = Env.browser.isIE() && contextNodeName !== 'pre'; + var bin = editor.dom.add(body, contextNodeName, { + 'data-mce-bogus': 'all', + 'style': 'overflow: hidden; opacity: 0;' + }, rng.cloneContents()); + var text = getInnerText(bin, shouldTrimSpaces); + var nonRenderedText = trim$2(bin.textContent); + editor.dom.remove(bin); + if (isCollapsibleWhitespace(nonRenderedText, 0) || isCollapsibleWhitespace(nonRenderedText, nonRenderedText.length - 1)) { + var parentBlock = parentBlockOpt.getOr(body); + var parentBlockText = getInnerText(parentBlock, shouldTrimSpaces); + var textIndex = parentBlockText.indexOf(text); + if (textIndex === -1) { + return text; + } else { + var hasProceedingSpace = isCollapsibleWhitespace(parentBlockText, textIndex - 1); + var hasTrailingSpace = isCollapsibleWhitespace(parentBlockText, textIndex + text.length); + return (hasProceedingSpace ? ' ' : '') + text + (hasTrailingSpace ? ' ' : ''); + } + } else { + return text; + } + }).getOr(''); + }; + var getSerializedContent = function (editor, args) { + var rng = editor.selection.getRng(), tmpElm = editor.dom.create('body'); + var sel = editor.selection.getSel(); + var ranges = processRanges(editor, getRanges(sel)); + var fragment = args.contextual ? read$1(SugarElement.fromDom(editor.getBody()), ranges).dom : rng.cloneContents(); + if (fragment) { + tmpElm.appendChild(fragment); + } + return editor.selection.serializer.serialize(tmpElm, args); + }; + var getSelectedContentInternal = function (editor, format, args) { + if (args === void 0) { + args = {}; + } + args.get = true; + args.format = format; + args.selection = true; + args = editor.fire('BeforeGetContent', args); + if (args.isDefaultPrevented()) { + editor.fire('GetContent', args); + return args.content; + } + if (args.format === 'text') { + return getTextContent(editor); + } else { + args.getInner = true; + var content = getSerializedContent(editor, args); + if (args.format === 'tree') { + return content; + } else { + args.content = editor.selection.isCollapsed() ? '' : content; + editor.fire('GetContent', args); + return args.content; + } + } + }; + + var KEEP = 0, INSERT = 1, DELETE = 2; + var diff = function (left, right) { + var size = left.length + right.length + 2; + var vDown = new Array(size); + var vUp = new Array(size); + var snake = function (start, end, diag) { + return { + start: start, + end: end, + diag: diag + }; + }; + var buildScript = function (start1, end1, start2, end2, script) { + var middle = getMiddleSnake(start1, end1, start2, end2); + if (middle === null || middle.start === end1 && middle.diag === end1 - end2 || middle.end === start1 && middle.diag === start1 - start2) { + var i = start1; + var j = start2; + while (i < end1 || j < end2) { + if (i < end1 && j < end2 && left[i] === right[j]) { + script.push([ + KEEP, + left[i] + ]); + ++i; + ++j; + } else { + if (end1 - start1 > end2 - start2) { + script.push([ + DELETE, + left[i] + ]); + ++i; + } else { + script.push([ + INSERT, + right[j] + ]); + ++j; + } + } + } + } else { + buildScript(start1, middle.start, start2, middle.start - middle.diag, script); + for (var i2 = middle.start; i2 < middle.end; ++i2) { + script.push([ + KEEP, + left[i2] + ]); + } + buildScript(middle.end, end1, middle.end - middle.diag, end2, script); + } + }; + var buildSnake = function (start, diag, end1, end2) { + var end = start; + while (end - diag < end2 && end < end1 && left[end] === right[end - diag]) { + ++end; + } + return snake(start, end, diag); + }; + var getMiddleSnake = function (start1, end1, start2, end2) { + var m = end1 - start1; + var n = end2 - start2; + if (m === 0 || n === 0) { + return null; + } + var delta = m - n; + var sum = n + m; + var offset = (sum % 2 === 0 ? sum : sum + 1) / 2; + vDown[1 + offset] = start1; + vUp[1 + offset] = end1 + 1; + var d, k, i, x, y; + for (d = 0; d <= offset; ++d) { + for (k = -d; k <= d; k += 2) { + i = k + offset; + if (k === -d || k !== d && vDown[i - 1] < vDown[i + 1]) { + vDown[i] = vDown[i + 1]; + } else { + vDown[i] = vDown[i - 1] + 1; + } + x = vDown[i]; + y = x - start1 + start2 - k; + while (x < end1 && y < end2 && left[x] === right[y]) { + vDown[i] = ++x; + ++y; + } + if (delta % 2 !== 0 && delta - d <= k && k <= delta + d) { + if (vUp[i - delta] <= vDown[i]) { + return buildSnake(vUp[i - delta], k + start1 - start2, end1, end2); + } + } + } + for (k = delta - d; k <= delta + d; k += 2) { + i = k + offset - delta; + if (k === delta - d || k !== delta + d && vUp[i + 1] <= vUp[i - 1]) { + vUp[i] = vUp[i + 1] - 1; + } else { + vUp[i] = vUp[i - 1]; + } + x = vUp[i] - 1; + y = x - start1 + start2 - k; + while (x >= start1 && y >= start2 && left[x] === right[y]) { + vUp[i] = x--; + y--; + } + if (delta % 2 === 0 && -d <= k && k <= d) { + if (vUp[i] <= vDown[i + delta]) { + return buildSnake(vUp[i], k + start1 - start2, end1, end2); + } + } + } + } + }; + var script = []; + buildScript(0, left.length, 0, right.length, script); + return script; + }; + + var getOuterHtml = function (elm) { + if (isElement$1(elm)) { + return elm.outerHTML; + } else if (isText$1(elm)) { + return Entities.encodeRaw(elm.data, false); + } else if (isComment$1(elm)) { + return ''; + } + return ''; + }; + var createFragment$1 = function (html) { + var node; + var container = document.createElement('div'); + var frag = document.createDocumentFragment(); + if (html) { + container.innerHTML = html; + } + while (node = container.firstChild) { + frag.appendChild(node); + } + return frag; + }; + var insertAt = function (elm, html, index) { + var fragment = createFragment$1(html); + if (elm.hasChildNodes() && index < elm.childNodes.length) { + var target = elm.childNodes[index]; + target.parentNode.insertBefore(fragment, target); + } else { + elm.appendChild(fragment); + } + }; + var removeAt = function (elm, index) { + if (elm.hasChildNodes() && index < elm.childNodes.length) { + var target = elm.childNodes[index]; + target.parentNode.removeChild(target); + } + }; + var applyDiff = function (diff, elm) { + var index = 0; + each(diff, function (action) { + if (action[0] === KEEP) { + index++; + } else if (action[0] === INSERT) { + insertAt(elm, action[1], index); + index++; + } else if (action[0] === DELETE) { + removeAt(elm, index); + } + }); + }; + var read$2 = function (elm) { + return filter(map(from$1(elm.childNodes), getOuterHtml), function (item) { + return item.length > 0; + }); + }; + var write = function (fragments, elm) { + var currentFragments = map(from$1(elm.childNodes), getOuterHtml); + applyDiff(diff(currentFragments, fragments), elm); + return elm; + }; + + var undoLevelDocument = Cell(Optional.none()); + var lazyTempDocument = function () { + return undoLevelDocument.get().getOrThunk(function () { + var doc = document.implementation.createHTMLDocument('undo'); + undoLevelDocument.set(Optional.some(doc)); + return doc; + }); + }; + var hasIframes = function (html) { + return html.indexOf('') !== -1; + }; + var createFragmentedLevel = function (fragments) { + return { + type: 'fragmented', + fragments: fragments, + content: '', + bookmark: null, + beforeBookmark: null + }; + }; + var createCompleteLevel = function (content) { + return { + type: 'complete', + fragments: null, + content: content, + bookmark: null, + beforeBookmark: null + }; + }; + var createFromEditor = function (editor) { + var fragments = read$2(editor.getBody()); + var trimmedFragments = bind(fragments, function (html) { + var trimmed = trimInternal(editor.serializer, html); + return trimmed.length > 0 ? [trimmed] : []; + }); + var content = trimmedFragments.join(''); + return hasIframes(content) ? createFragmentedLevel(trimmedFragments) : createCompleteLevel(content); + }; + var applyToEditor = function (editor, level, before) { + if (level.type === 'fragmented') { + write(level.fragments, editor.getBody()); + } else { + editor.setContent(level.content, { format: 'raw' }); + } + editor.selection.moveToBookmark(before ? level.beforeBookmark : level.bookmark); + }; + var getLevelContent = function (level) { + return level.type === 'fragmented' ? level.fragments.join('') : level.content; + }; + var getCleanLevelContent = function (level) { + var elm = SugarElement.fromTag('body', lazyTempDocument()); + set$1(elm, getLevelContent(level)); + each(descendants$1(elm, '*[data-mce-bogus]'), unwrap); + return get$7(elm); + }; + var hasEqualContent = function (level1, level2) { + return getLevelContent(level1) === getLevelContent(level2); + }; + var hasEqualCleanedContent = function (level1, level2) { + return getCleanLevelContent(level1) === getCleanLevelContent(level2); + }; + var isEq$4 = function (level1, level2) { + if (!level1 || !level2) { + return false; + } else if (hasEqualContent(level1, level2)) { + return true; + } else { + return hasEqualCleanedContent(level1, level2); + } + }; + + var isUnlocked = function (locks) { + return locks.get() === 0; + }; + + var setTyping = function (undoManager, typing, locks) { + if (isUnlocked(locks)) { + undoManager.typing = typing; + } + }; + var endTyping = function (undoManager, locks) { + if (undoManager.typing) { + setTyping(undoManager, false, locks); + undoManager.add(); + } + }; + var endTypingLevelIgnoreLocks = function (undoManager) { + if (undoManager.typing) { + undoManager.typing = false; + undoManager.add(); + } + }; + + var beforeChange = function (editor, locks, beforeBookmark) { + if (isUnlocked(locks)) { + beforeBookmark.set(Optional.some(getUndoBookmark(editor.selection))); + } + }; + var addUndoLevel = function (editor, undoManager, index, locks, beforeBookmark, level, event) { + var currentLevel = createFromEditor(editor); + level = level || {}; + level = Tools.extend(level, currentLevel); + if (isUnlocked(locks) === false || editor.removed) { + return null; + } + var lastLevel = undoManager.data[index.get()]; + if (editor.fire('BeforeAddUndo', { + level: level, + lastLevel: lastLevel, + originalEvent: event + }).isDefaultPrevented()) { + return null; + } + if (lastLevel && isEq$4(lastLevel, level)) { + return null; + } + if (undoManager.data[index.get()]) { + beforeBookmark.get().each(function (bm) { + undoManager.data[index.get()].beforeBookmark = bm; + }); + } + var customUndoRedoLevels = getCustomUndoRedoLevels(editor); + if (customUndoRedoLevels) { + if (undoManager.data.length > customUndoRedoLevels) { + for (var i = 0; i < undoManager.data.length - 1; i++) { + undoManager.data[i] = undoManager.data[i + 1]; + } + undoManager.data.length--; + index.set(undoManager.data.length); + } + } + level.bookmark = getUndoBookmark(editor.selection); + if (index.get() < undoManager.data.length - 1) { + undoManager.data.length = index.get() + 1; + } + undoManager.data.push(level); + index.set(undoManager.data.length - 1); + var args = { + level: level, + lastLevel: lastLevel, + originalEvent: event + }; + if (index.get() > 0) { + editor.setDirty(true); + editor.fire('AddUndo', args); + editor.fire('change', args); + } else { + editor.fire('AddUndo', args); + } + return level; + }; + var clear = function (editor, undoManager, index) { + undoManager.data = []; + index.set(0); + undoManager.typing = false; + editor.fire('ClearUndos'); + }; + var extra = function (editor, undoManager, index, callback1, callback2) { + if (undoManager.transact(callback1)) { + var bookmark = undoManager.data[index.get()].bookmark; + var lastLevel = undoManager.data[index.get() - 1]; + applyToEditor(editor, lastLevel, true); + if (undoManager.transact(callback2)) { + undoManager.data[index.get() - 1].beforeBookmark = bookmark; + } + } + }; + var redo = function (editor, index, data) { + var level; + if (index.get() < data.length - 1) { + index.set(index.get() + 1); + level = data[index.get()]; + applyToEditor(editor, level, false); + editor.setDirty(true); + editor.fire('Redo', { level: level }); + } + return level; + }; + var undo = function (editor, undoManager, locks, index) { + var level; + if (undoManager.typing) { + undoManager.add(); + undoManager.typing = false; + setTyping(undoManager, false, locks); + } + if (index.get() > 0) { + index.set(index.get() - 1); + level = undoManager.data[index.get()]; + applyToEditor(editor, level, true); + editor.setDirty(true); + editor.fire('Undo', { level: level }); + } + return level; + }; + var reset = function (undoManager) { + undoManager.clear(); + undoManager.add(); + }; + var hasUndo = function (editor, undoManager, index) { + return index.get() > 0 || undoManager.typing && undoManager.data[0] && !isEq$4(createFromEditor(editor), undoManager.data[0]); + }; + var hasRedo = function (undoManager, index) { + return index.get() < undoManager.data.length - 1 && !undoManager.typing; + }; + var transact = function (undoManager, locks, callback) { + endTyping(undoManager, locks); + undoManager.beforeChange(); + undoManager.ignore(callback); + return undoManager.add(); + }; + var ignore = function (locks, callback) { + try { + locks.set(locks.get() + 1); + callback(); + } finally { + locks.set(locks.get() - 1); + } + }; + + var addVisualInternal = function (editor, elm) { + var dom = editor.dom; + var scope = isNonNullable(elm) ? elm : editor.getBody(); + if (isUndefined(editor.hasVisual)) { + editor.hasVisual = isVisualAidsEnabled(editor); + } + each(dom.select('table,a', scope), function (matchedElm) { + switch (matchedElm.nodeName) { + case 'TABLE': + var cls = getVisualAidsTableClass(editor); + var value = dom.getAttrib(matchedElm, 'border'); + if ((!value || value === '0') && editor.hasVisual) { + dom.addClass(matchedElm, cls); + } else { + dom.removeClass(matchedElm, cls); + } + break; + case 'A': + if (!dom.getAttrib(matchedElm, 'href')) { + var value_1 = dom.getAttrib(matchedElm, 'name') || matchedElm.id; + var cls_1 = getVisualAidsAnchorClass(editor); + if (value_1 && editor.hasVisual) { + dom.addClass(matchedElm, cls_1); + } else { + dom.removeClass(matchedElm, cls_1); + } + } + break; + } + }); + editor.fire('VisualAid', { + element: elm, + hasVisual: editor.hasVisual + }); + }; + + var makePlainAdaptor = function (editor) { + return { + undoManager: { + beforeChange: function (locks, beforeBookmark) { + return beforeChange(editor, locks, beforeBookmark); + }, + addUndoLevel: function (undoManager, index, locks, beforeBookmark, level, event) { + return addUndoLevel(editor, undoManager, index, locks, beforeBookmark, level, event); + }, + undo: function (undoManager, locks, index) { + return undo(editor, undoManager, locks, index); + }, + redo: function (index, data) { + return redo(editor, index, data); + }, + clear: function (undoManager, index) { + return clear(editor, undoManager, index); + }, + reset: function (undoManager) { + return reset(undoManager); + }, + hasUndo: function (undoManager, index) { + return hasUndo(editor, undoManager, index); + }, + hasRedo: function (undoManager, index) { + return hasRedo(undoManager, index); + }, + transact: function (undoManager, locks, callback) { + return transact(undoManager, locks, callback); + }, + ignore: function (locks, callback) { + return ignore(locks, callback); + }, + extra: function (undoManager, index, callback1, callback2) { + return extra(editor, undoManager, index, callback1, callback2); + } + }, + formatter: { + match: function (name, vars, node) { + return match(editor, name, vars, node); + }, + matchAll: function (names, vars) { + return matchAll(editor, names, vars); + }, + matchNode: function (node, name, vars, similar) { + return matchNode(editor, node, name, vars, similar); + }, + canApply: function (name) { + return canApply(editor, name); + }, + closest: function (names) { + return closest$3(editor, names); + }, + apply: function (name, vars, node) { + return applyFormat(editor, name, vars, node); + }, + remove: function (name, vars, node, similar) { + return remove$6(editor, name, vars, node, similar); + }, + toggle: function (name, vars, node) { + return toggle(editor, name, vars, node); + }, + formatChanged: function (registeredFormatListeners, formats, callback, similar) { + return formatChangedInternal(editor, registeredFormatListeners, formats, callback, similar); + } + }, + editor: { + getContent: function (args, format) { + return getContentInternal(editor, args, format); + }, + setContent: function (content, args) { + return setContentInternal(editor, content, args); + }, + insertContent: function (value, details) { + return insertHtmlAtCaret(editor, value, details); + }, + addVisual: function (elm) { + return addVisualInternal(editor, elm); + } + }, + selection: { + getContent: function (format, args) { + return getSelectedContentInternal(editor, format, args); + } + }, + raw: { + getModel: function () { + return Optional.none(); + } + } + }; + }; + var makeRtcAdaptor = function (rtcEditor) { + var defaultVars = function (vars) { + return isObject(vars) ? vars : {}; + }; + var unsupported = die('Unimplemented feature for rtc'); + var undoManager = rtcEditor.undoManager, formatter = rtcEditor.formatter, editor = rtcEditor.editor, selection = rtcEditor.selection, raw = rtcEditor.raw; + var ignore = noop; + return { + undoManager: { + beforeChange: ignore, + addUndoLevel: unsupported, + undo: function () { + return undoManager.undo(); + }, + redo: function () { + return undoManager.redo(); + }, + clear: function () { + return undoManager.clear(); + }, + reset: function () { + return undoManager.reset(); + }, + hasUndo: function () { + return undoManager.hasUndo(); + }, + hasRedo: function () { + return undoManager.hasRedo(); + }, + transact: function (_undoManager, _locks, fn) { + return undoManager.transact(fn); + }, + ignore: function (_locks, callback) { + return undoManager.ignore(callback); + }, + extra: function (_undoManager, _index, callback1, callback2) { + return undoManager.extra(callback1, callback2); + } + }, + formatter: { + match: function (name, vars, _node) { + return formatter.match(name, defaultVars(vars)); + }, + matchAll: unsupported, + matchNode: unsupported, + canApply: function (name) { + return formatter.canApply(name); + }, + closest: function (names) { + return formatter.closest(names); + }, + apply: function (name, vars, _node) { + return formatter.apply(name, defaultVars(vars)); + }, + remove: function (name, vars, _node, _similar) { + return formatter.remove(name, defaultVars(vars)); + }, + toggle: function (name, vars, _node) { + return formatter.toggle(name, defaultVars(vars)); + }, + formatChanged: function (_rfl, formats, callback, similar) { + return formatter.formatChanged(formats, callback, similar); + } + }, + editor: { + getContent: function (args, _format) { + return editor.getContent(args); + }, + setContent: function (content, args) { + return editor.setContent(content, args); + }, + insertContent: function (content, _details) { + return editor.insertContent(content); + }, + addVisual: ignore + }, + selection: { + getContent: function (_format, args) { + return selection.getContent(args); + } + }, + raw: { + getModel: function () { + return Optional.some(raw.getRawModel()); + } + } + }; + }; + var makeNoopAdaptor = function () { + var nul = constant(null); + var empty = constant(''); + return { + undoManager: { + beforeChange: noop, + addUndoLevel: nul, + undo: nul, + redo: nul, + clear: noop, + reset: noop, + hasUndo: never, + hasRedo: never, + transact: nul, + ignore: noop, + extra: noop + }, + formatter: { + match: never, + matchAll: constant([]), + matchNode: never, + canApply: never, + closest: empty, + apply: noop, + remove: noop, + toggle: noop, + formatChanged: constant({ unbind: noop }) + }, + editor: { + getContent: empty, + setContent: empty, + insertContent: noop, + addVisual: noop + }, + selection: { getContent: empty }, + raw: { getModel: constant(Optional.none()) } + }; + }; + var isRtc = function (editor) { + return has(editor.plugins, 'rtc'); + }; + var getRtcSetup = function (editor) { + return get$1(editor.plugins, 'rtc').bind(function (rtcPlugin) { + return Optional.from(rtcPlugin.setup); + }); + }; + var setup$5 = function (editor) { + var editorCast = editor; + return getRtcSetup(editor).fold(function () { + editorCast.rtcInstance = makePlainAdaptor(editor); + return Optional.none(); + }, function (setup) { + return Optional.some(setup().then(function (rtcEditor) { + editorCast.rtcInstance = makeRtcAdaptor(rtcEditor); + return rtcEditor.rtc.isRemote; + }, function (err) { + editorCast.rtcInstance = makeNoopAdaptor(); + return promiseObj.reject(err); + })); + }); + }; + var getRtcInstanceWithFallback = function (editor) { + return editor.rtcInstance ? editor.rtcInstance : makePlainAdaptor(editor); + }; + var getRtcInstanceWithError = function (editor) { + var rtcInstance = editor.rtcInstance; + if (!rtcInstance) { + throw new Error('Failed to get RTC instance not yet initialized.'); + } else { + return rtcInstance; + } + }; + var beforeChange$1 = function (editor, locks, beforeBookmark) { + getRtcInstanceWithError(editor).undoManager.beforeChange(locks, beforeBookmark); + }; + var addUndoLevel$1 = function (editor, undoManager, index, locks, beforeBookmark, level, event) { + return getRtcInstanceWithError(editor).undoManager.addUndoLevel(undoManager, index, locks, beforeBookmark, level, event); + }; + var undo$1 = function (editor, undoManager, locks, index) { + return getRtcInstanceWithError(editor).undoManager.undo(undoManager, locks, index); + }; + var redo$1 = function (editor, index, data) { + return getRtcInstanceWithError(editor).undoManager.redo(index, data); + }; + var clear$1 = function (editor, undoManager, index) { + getRtcInstanceWithError(editor).undoManager.clear(undoManager, index); + }; + var reset$1 = function (editor, undoManager) { + getRtcInstanceWithError(editor).undoManager.reset(undoManager); + }; + var hasUndo$1 = function (editor, undoManager, index) { + return getRtcInstanceWithError(editor).undoManager.hasUndo(undoManager, index); + }; + var hasRedo$1 = function (editor, undoManager, index) { + return getRtcInstanceWithError(editor).undoManager.hasRedo(undoManager, index); + }; + var transact$1 = function (editor, undoManager, locks, callback) { + return getRtcInstanceWithError(editor).undoManager.transact(undoManager, locks, callback); + }; + var ignore$1 = function (editor, locks, callback) { + getRtcInstanceWithError(editor).undoManager.ignore(locks, callback); + }; + var extra$1 = function (editor, undoManager, index, callback1, callback2) { + getRtcInstanceWithError(editor).undoManager.extra(undoManager, index, callback1, callback2); + }; + var matchFormat = function (editor, name, vars, node) { + return getRtcInstanceWithError(editor).formatter.match(name, vars, node); + }; + var matchAllFormats = function (editor, names, vars) { + return getRtcInstanceWithError(editor).formatter.matchAll(names, vars); + }; + var matchNodeFormat = function (editor, node, name, vars, similar) { + return getRtcInstanceWithError(editor).formatter.matchNode(node, name, vars, similar); + }; + var canApplyFormat = function (editor, name) { + return getRtcInstanceWithError(editor).formatter.canApply(name); + }; + var closestFormat = function (editor, names) { + return getRtcInstanceWithError(editor).formatter.closest(names); + }; + var applyFormat$1 = function (editor, name, vars, node) { + getRtcInstanceWithError(editor).formatter.apply(name, vars, node); + }; + var removeFormat$1 = function (editor, name, vars, node, similar) { + getRtcInstanceWithError(editor).formatter.remove(name, vars, node, similar); + }; + var toggleFormat = function (editor, name, vars, node) { + getRtcInstanceWithError(editor).formatter.toggle(name, vars, node); + }; + var formatChanged = function (editor, registeredFormatListeners, formats, callback, similar) { + if (similar === void 0) { + similar = false; + } + return getRtcInstanceWithError(editor).formatter.formatChanged(registeredFormatListeners, formats, callback, similar); + }; + var getContent = function (editor, args, format) { + return getRtcInstanceWithFallback(editor).editor.getContent(args, format); + }; + var setContent = function (editor, content, args) { + return getRtcInstanceWithFallback(editor).editor.setContent(content, args); + }; + var insertContent = function (editor, value, details) { + return getRtcInstanceWithFallback(editor).editor.insertContent(value, details); + }; + var getSelectedContent = function (editor, format, args) { + return getRtcInstanceWithError(editor).selection.getContent(format, args); + }; + var addVisual = function (editor, elm) { + return getRtcInstanceWithError(editor).editor.addVisual(elm); + }; + + var getContent$1 = function (editor, args) { + if (args === void 0) { + args = {}; + } + var format = args.format ? args.format : 'html'; + return getSelectedContent(editor, format, args); + }; + + var removeEmpty = function (text) { + if (text.dom.length === 0) { + remove(text); + return Optional.none(); + } else { + return Optional.some(text); + } + }; + var walkPastBookmark = function (node, start) { + return node.filter(function (elm) { + return BookmarkManager.isBookmarkNode(elm.dom); + }).bind(start ? nextSibling : prevSibling); + }; + var merge = function (outer, inner, rng, start) { + var outerElm = outer.dom; + var innerElm = inner.dom; + var oldLength = start ? outerElm.length : innerElm.length; + if (start) { + mergeTextNodes(outerElm, innerElm, false, !start); + rng.setStart(innerElm, oldLength); + } else { + mergeTextNodes(innerElm, outerElm, false, !start); + rng.setEnd(innerElm, oldLength); + } + }; + var normalizeTextIfRequired = function (inner, start) { + parent(inner).each(function (root) { + var text = inner.dom; + if (start && needsToBeNbspLeft(root, CaretPosition(text, 0))) { + normalizeWhitespaceAfter(text, 0); + } else if (!start && needsToBeNbspRight(root, CaretPosition(text, text.length))) { + normalizeWhitespaceBefore(text, text.length); + } + }); + }; + var mergeAndNormalizeText = function (outerNode, innerNode, rng, start) { + outerNode.bind(function (outer) { + var normalizer = start ? normalizeWhitespaceBefore : normalizeWhitespaceAfter; + normalizer(outer.dom, start ? outer.dom.length : 0); + return innerNode.filter(isText).map(function (inner) { + return merge(outer, inner, rng, start); + }); + }).orThunk(function () { + var innerTextNode = walkPastBookmark(innerNode, start).or(innerNode).filter(isText); + return innerTextNode.map(function (inner) { + return normalizeTextIfRequired(inner, start); + }); + }); + }; + var rngSetContent = function (rng, fragment) { + var firstChild = Optional.from(fragment.firstChild).map(SugarElement.fromDom); + var lastChild = Optional.from(fragment.lastChild).map(SugarElement.fromDom); + rng.deleteContents(); + rng.insertNode(fragment); + var prevText = firstChild.bind(prevSibling).filter(isText).bind(removeEmpty); + var nextText = lastChild.bind(nextSibling).filter(isText).bind(removeEmpty); + mergeAndNormalizeText(prevText, firstChild, rng, true); + mergeAndNormalizeText(nextText, lastChild, rng, false); + rng.collapse(false); + }; + var setupArgs = function (args, content) { + return __assign(__assign({ format: 'html' }, args), { + set: true, + selection: true, + content: content + }); + }; + var cleanContent = function (editor, args) { + if (args.format !== 'raw') { + var rng = editor.selection.getRng(); + var contextBlock = editor.dom.getParent(rng.commonAncestorContainer, editor.dom.isBlock); + var contextArgs = contextBlock ? { context: contextBlock.nodeName.toLowerCase() } : {}; + var node = editor.parser.parse(args.content, __assign(__assign({ + isRootContent: true, + forced_root_block: false + }, contextArgs), args)); + return HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(node); + } else { + return args.content; + } + }; + var setContent$1 = function (editor, content, args) { + if (args === void 0) { + args = {}; + } + var contentArgs = setupArgs(args, content); + if (!contentArgs.no_events) { + contentArgs = editor.fire('BeforeSetContent', contentArgs); + if (contentArgs.isDefaultPrevented()) { + editor.fire('SetContent', contentArgs); + return; + } + } + args.content = cleanContent(editor, contentArgs); + var rng = editor.selection.getRng(); + rngSetContent(rng, rng.createContextualFragment(args.content)); + editor.selection.setRng(rng); + scrollRangeIntoView(editor, rng); + if (!contentArgs.no_events) { + editor.fire('SetContent', contentArgs); + } + }; + + var deleteFromCallbackMap = function (callbackMap, selector, callback) { + if (callbackMap && callbackMap.hasOwnProperty(selector)) { + var newCallbacks = filter(callbackMap[selector], function (cb) { + return cb !== callback; + }); + if (newCallbacks.length === 0) { + delete callbackMap[selector]; + } else { + callbackMap[selector] = newCallbacks; + } + } + }; + function SelectorChanged (dom, editor) { + var selectorChangedData; + var currentSelectors; + return { + selectorChangedWithUnbind: function (selector, callback) { + if (!selectorChangedData) { + selectorChangedData = {}; + currentSelectors = {}; + editor.on('NodeChange', function (e) { + var node = e.element, parents = dom.getParents(node, null, dom.getRoot()), matchedSelectors = {}; + Tools.each(selectorChangedData, function (callbacks, selector) { + Tools.each(parents, function (node) { + if (dom.is(node, selector)) { + if (!currentSelectors[selector]) { + Tools.each(callbacks, function (callback) { + callback(true, { + node: node, + selector: selector, + parents: parents + }); + }); + currentSelectors[selector] = callbacks; + } + matchedSelectors[selector] = callbacks; + return false; + } + }); + }); + Tools.each(currentSelectors, function (callbacks, selector) { + if (!matchedSelectors[selector]) { + delete currentSelectors[selector]; + Tools.each(callbacks, function (callback) { + callback(false, { + node: node, + selector: selector, + parents: parents + }); + }); + } + }); + }); + } + if (!selectorChangedData[selector]) { + selectorChangedData[selector] = []; + } + selectorChangedData[selector].push(callback); + return { + unbind: function () { + deleteFromCallbackMap(selectorChangedData, selector, callback); + deleteFromCallbackMap(currentSelectors, selector, callback); + } + }; + } + }; + } + + var isNativeIeSelection = function (rng) { + return !!rng.select; + }; + var isAttachedToDom = function (node) { + return !!(node && node.ownerDocument) && contains$2(SugarElement.fromDom(node.ownerDocument), SugarElement.fromDom(node)); + }; + var isValidRange = function (rng) { + if (!rng) { + return false; + } else if (isNativeIeSelection(rng)) { + return true; + } else { + return isAttachedToDom(rng.startContainer) && isAttachedToDom(rng.endContainer); + } + }; + var EditorSelection = function (dom, win, serializer, editor) { + var selectedRange; + var explicitRange; + var selectorChangedWithUnbind = SelectorChanged(dom, editor).selectorChangedWithUnbind; + var setCursorLocation = function (node, offset) { + var rng = dom.createRng(); + if (isNonNullable(node) && isNonNullable(offset)) { + rng.setStart(node, offset); + rng.setEnd(node, offset); + setRng(rng); + collapse(false); + } else { + moveEndPoint$1(dom, rng, editor.getBody(), true); + setRng(rng); + } + }; + var getContent = function (args) { + return getContent$1(editor, args); + }; + var setContent = function (content, args) { + return setContent$1(editor, content, args); + }; + var getStart = function (real) { + return getStart$2(editor.getBody(), getRng$1(), real); + }; + var getEnd$1 = function (real) { + return getEnd(editor.getBody(), getRng$1(), real); + }; + var getBookmark = function (type, normalized) { + return bookmarkManager.getBookmark(type, normalized); + }; + var moveToBookmark = function (bookmark) { + return bookmarkManager.moveToBookmark(bookmark); + }; + var select = function (node, content) { + select$1(dom, node, content).each(setRng); + return node; + }; + var isCollapsed = function () { + var rng = getRng$1(), sel = getSel(); + if (!rng || rng.item) { + return false; + } + if (rng.compareEndPoints) { + return rng.compareEndPoints('StartToEnd', rng) === 0; + } + return !sel || rng.collapsed; + }; + var collapse = function (toStart) { + var rng = getRng$1(); + rng.collapse(!!toStart); + setRng(rng); + }; + var getSel = function () { + return win.getSelection ? win.getSelection() : win.document.selection; + }; + var getRng$1 = function () { + var selection, rng, elm; + var tryCompareBoundaryPoints = function (how, sourceRange, destinationRange) { + try { + return sourceRange.compareBoundaryPoints(how, destinationRange); + } catch (ex) { + return -1; + } + }; + var doc = win.document; + if (editor.bookmark !== undefined && hasFocus$1(editor) === false) { + var bookmark = getRng(editor); + if (bookmark.isSome()) { + return bookmark.map(function (r) { + return processRanges(editor, [r])[0]; + }).getOr(doc.createRange()); + } + } + try { + if ((selection = getSel()) && !isRestrictedNode(selection.anchorNode)) { + if (selection.rangeCount > 0) { + rng = selection.getRangeAt(0); + } else { + rng = selection.createRange ? selection.createRange() : doc.createRange(); + } + rng = processRanges(editor, [rng])[0]; + } + } catch (ex) { + } + if (!rng) { + rng = doc.createRange ? doc.createRange() : doc.body.createTextRange(); + } + if (rng.setStart && rng.startContainer.nodeType === 9 && rng.collapsed) { + elm = dom.getRoot(); + rng.setStart(elm, 0); + rng.setEnd(elm, 0); + } + if (selectedRange && explicitRange) { + if (tryCompareBoundaryPoints(rng.START_TO_START, rng, selectedRange) === 0 && tryCompareBoundaryPoints(rng.END_TO_END, rng, selectedRange) === 0) { + rng = explicitRange; + } else { + selectedRange = null; + explicitRange = null; + } + } + return rng; + }; + var setRng = function (rng, forward) { + var node; + if (!isValidRange(rng)) { + return; + } + var ieRange = isNativeIeSelection(rng) ? rng : null; + if (ieRange) { + explicitRange = null; + try { + ieRange.select(); + } catch (ex) { + } + return; + } + var sel = getSel(); + var evt = editor.fire('SetSelectionRange', { + range: rng, + forward: forward + }); + rng = evt.range; + if (sel) { + explicitRange = rng; + try { + sel.removeAllRanges(); + sel.addRange(rng); + } catch (ex) { + } + if (forward === false && sel.extend) { + sel.collapse(rng.endContainer, rng.endOffset); + sel.extend(rng.startContainer, rng.startOffset); + } + selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null; + } + if (!rng.collapsed && rng.startContainer === rng.endContainer && sel.setBaseAndExtent && !Env.ie) { + if (rng.endOffset - rng.startOffset < 2) { + if (rng.startContainer.hasChildNodes()) { + node = rng.startContainer.childNodes[rng.startOffset]; + if (node && node.tagName === 'IMG') { + sel.setBaseAndExtent(rng.startContainer, rng.startOffset, rng.endContainer, rng.endOffset); + if (sel.anchorNode !== rng.startContainer || sel.focusNode !== rng.endContainer) { + sel.setBaseAndExtent(node, 0, node, 1); + } + } + } + } + } + editor.fire('AfterSetSelectionRange', { + range: rng, + forward: forward + }); + }; + var setNode = function (elm) { + setContent(dom.getOuterHTML(elm)); + return elm; + }; + var getNode = function () { + return getNode$1(editor.getBody(), getRng$1()); + }; + var getSelectedBlocks$1 = function (startElm, endElm) { + return getSelectedBlocks(dom, getRng$1(), startElm, endElm); + }; + var isForward = function () { + var sel = getSel(); + var anchorNode = sel === null || sel === void 0 ? void 0 : sel.anchorNode; + var focusNode = sel === null || sel === void 0 ? void 0 : sel.focusNode; + if (!sel || !anchorNode || !focusNode || isRestrictedNode(anchorNode) || isRestrictedNode(focusNode)) { + return true; + } + var anchorRange = dom.createRng(); + anchorRange.setStart(anchorNode, sel.anchorOffset); + anchorRange.collapse(true); + var focusRange = dom.createRng(); + focusRange.setStart(focusNode, sel.focusOffset); + focusRange.collapse(true); + return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0; + }; + var normalize$1 = function () { + var rng = getRng$1(); + var sel = getSel(); + if (!hasMultipleRanges(sel) && hasAnyRanges(editor)) { + var normRng = normalize(dom, rng); + normRng.each(function (normRng) { + setRng(normRng, isForward()); + }); + return normRng.getOr(rng); + } + return rng; + }; + var selectorChanged = function (selector, callback) { + selectorChangedWithUnbind(selector, callback); + return exports; + }; + var getScrollContainer = function () { + var scrollContainer; + var node = dom.getRoot(); + while (node && node.nodeName !== 'BODY') { + if (node.scrollHeight > node.clientHeight) { + scrollContainer = node; + break; + } + node = node.parentNode; + } + return scrollContainer; + }; + var scrollIntoView = function (elm, alignToTop) { + return scrollElementIntoView(editor, elm, alignToTop); + }; + var placeCaretAt = function (clientX, clientY) { + return setRng(fromPoint$1(clientX, clientY, editor.getDoc())); + }; + var getBoundingClientRect = function () { + var rng = getRng$1(); + return rng.collapsed ? CaretPosition.fromRangeStart(rng).getClientRects()[0] : rng.getBoundingClientRect(); + }; + var destroy = function () { + win = selectedRange = explicitRange = null; + controlSelection.destroy(); + }; + var exports = { + bookmarkManager: null, + controlSelection: null, + dom: dom, + win: win, + serializer: serializer, + editor: editor, + collapse: collapse, + setCursorLocation: setCursorLocation, + getContent: getContent, + setContent: setContent, + getBookmark: getBookmark, + moveToBookmark: moveToBookmark, + select: select, + isCollapsed: isCollapsed, + isForward: isForward, + setNode: setNode, + getNode: getNode, + getSel: getSel, + setRng: setRng, + getRng: getRng$1, + getStart: getStart, + getEnd: getEnd$1, + getSelectedBlocks: getSelectedBlocks$1, + normalize: normalize$1, + selectorChanged: selectorChanged, + selectorChangedWithUnbind: selectorChangedWithUnbind, + getScrollContainer: getScrollContainer, + scrollIntoView: scrollIntoView, + placeCaretAt: placeCaretAt, + getBoundingClientRect: getBoundingClientRect, + destroy: destroy + }; + var bookmarkManager = BookmarkManager(exports); + var controlSelection = ControlSelection(exports, editor); + exports.bookmarkManager = bookmarkManager; + exports.controlSelection = controlSelection; + return exports; + }; + + var removeAttrs = function (node, names) { + each(names, function (name) { + node.attr(name, null); + }); + }; + var addFontToSpansFilter = function (domParser, styles, fontSizes) { + domParser.addNodeFilter('font', function (nodes) { + each(nodes, function (node) { + var props = styles.parse(node.attr('style')); + var color = node.attr('color'); + var face = node.attr('face'); + var size = node.attr('size'); + if (color) { + props.color = color; + } + if (face) { + props['font-family'] = face; + } + if (size) { + props['font-size'] = fontSizes[parseInt(node.attr('size'), 10) - 1]; + } + node.name = 'span'; + node.attr('style', styles.serialize(props)); + removeAttrs(node, [ + 'color', + 'face', + 'size' + ]); + }); + }); + }; + var addStrikeToSpanFilter = function (domParser, styles) { + domParser.addNodeFilter('strike', function (nodes) { + each(nodes, function (node) { + var props = styles.parse(node.attr('style')); + props['text-decoration'] = 'line-through'; + node.name = 'span'; + node.attr('style', styles.serialize(props)); + }); + }); + }; + var addFilters = function (domParser, settings) { + var styles = Styles(); + if (settings.convert_fonts_to_spans) { + addFontToSpansFilter(domParser, styles, Tools.explode(settings.font_size_legacy_values)); + } + addStrikeToSpanFilter(domParser, styles); + }; + var register$1 = function (domParser, settings) { + if (settings.inline_styles) { + addFilters(domParser, settings); + } + }; + + var blobUriToBlob = function (url) { + return new promiseObj(function (resolve, reject) { + var rejectWithError = function () { + reject('Cannot convert ' + url + ' to Blob. Resource might not exist or is inaccessible.'); + }; + try { + var xhr_1 = new XMLHttpRequest(); + xhr_1.open('GET', url, true); + xhr_1.responseType = 'blob'; + xhr_1.onload = function () { + if (xhr_1.status === 200) { + resolve(xhr_1.response); + } else { + rejectWithError(); + } + }; + xhr_1.onerror = rejectWithError; + xhr_1.send(); + } catch (ex) { + rejectWithError(); + } + }); + }; + var parseDataUri$1 = function (uri) { + var type; + var uriParts = decodeURIComponent(uri).split(','); + var matches = /data:([^;]+)/.exec(uriParts[0]); + if (matches) { + type = matches[1]; + } + return { + type: type, + data: uriParts[1] + }; + }; + var buildBlob = function (type, data) { + var str; + try { + str = atob(data); + } catch (e) { + return Optional.none(); + } + var arr = new Uint8Array(str.length); + for (var i = 0; i < arr.length; i++) { + arr[i] = str.charCodeAt(i); + } + return Optional.some(new Blob([arr], { type: type })); + }; + var dataUriToBlob = function (uri) { + return new promiseObj(function (resolve) { + var _a = parseDataUri$1(uri), type = _a.type, data = _a.data; + buildBlob(type, data).fold(function () { + return resolve(new Blob([])); + }, resolve); + }); + }; + var uriToBlob = function (url) { + if (url.indexOf('blob:') === 0) { + return blobUriToBlob(url); + } + if (url.indexOf('data:') === 0) { + return dataUriToBlob(url); + } + return null; + }; + var blobToDataUri = function (blob) { + return new promiseObj(function (resolve) { + var reader = new FileReader(); + reader.onloadend = function () { + resolve(reader.result); + }; + reader.readAsDataURL(blob); + }); + }; + + var count = 0; + var uniqueId = function (prefix) { + return (prefix || 'blobid') + count++; + }; + var imageToBlobInfo = function (blobCache, img, resolve, reject) { + var base64, blobInfo; + if (img.src.indexOf('blob:') === 0) { + blobInfo = blobCache.getByUri(img.src); + if (blobInfo) { + resolve({ + image: img, + blobInfo: blobInfo + }); + } else { + uriToBlob(img.src).then(function (blob) { + blobToDataUri(blob).then(function (dataUri) { + base64 = parseDataUri$1(dataUri).data; + blobInfo = blobCache.create(uniqueId(), blob, base64); + blobCache.add(blobInfo); + resolve({ + image: img, + blobInfo: blobInfo + }); + }); + }, function (err) { + reject(err); + }); + } + return; + } + var _a = parseDataUri$1(img.src), data = _a.data, type = _a.type; + base64 = data; + blobInfo = blobCache.getByData(base64, type); + if (blobInfo) { + resolve({ + image: img, + blobInfo: blobInfo + }); + } else { + uriToBlob(img.src).then(function (blob) { + blobInfo = blobCache.create(uniqueId(), blob, base64); + blobCache.add(blobInfo); + resolve({ + image: img, + blobInfo: blobInfo + }); + }, function (err) { + reject(err); + }); + } + }; + var getAllImages = function (elm) { + return elm ? from$1(elm.getElementsByTagName('img')) : []; + }; + var ImageScanner = function (uploadStatus, blobCache) { + var cachedPromises = {}; + var findAll = function (elm, predicate) { + if (!predicate) { + predicate = always; + } + var images = filter(getAllImages(elm), function (img) { + var src = img.src; + if (!Env.fileApi) { + return false; + } + if (img.hasAttribute('data-mce-bogus')) { + return false; + } + if (img.hasAttribute('data-mce-placeholder')) { + return false; + } + if (!src || src === Env.transparentSrc) { + return false; + } + if (src.indexOf('blob:') === 0) { + return !uploadStatus.isUploaded(src) && predicate(img); + } + if (src.indexOf('data:') === 0) { + return predicate(img); + } + return false; + }); + var promises = map(images, function (img) { + if (cachedPromises[img.src] !== undefined) { + return new promiseObj(function (resolve) { + cachedPromises[img.src].then(function (imageInfo) { + if (typeof imageInfo === 'string') { + return imageInfo; + } + resolve({ + image: img, + blobInfo: imageInfo.blobInfo + }); + }); + }); + } + var newPromise = new promiseObj(function (resolve, reject) { + imageToBlobInfo(blobCache, img, resolve, reject); + }).then(function (result) { + delete cachedPromises[result.image.src]; + return result; + }).catch(function (error) { + delete cachedPromises[img.src]; + return error; + }); + cachedPromises[img.src] = newPromise; + return newPromise; + }); + return promiseObj.all(promises); + }; + return { findAll: findAll }; + }; + + var paddEmptyNode = function (settings, args, blockElements, node) { + var brPreferred = settings.padd_empty_with_br || args.insert; + if (brPreferred && blockElements[node.name]) { + node.empty().append(new AstNode('br', 1)).shortEnded = true; + } else { + node.empty().append(new AstNode('#text', 3)).value = nbsp; + } + }; + var isPaddedWithNbsp = function (node) { + return hasOnlyChild(node, '#text') && node.firstChild.value === nbsp; + }; + var hasOnlyChild = function (node, name) { + return node && node.firstChild && node.firstChild === node.lastChild && node.firstChild.name === name; + }; + var isPadded = function (schema, node) { + var rule = schema.getElementRule(node.name); + return rule && rule.paddEmpty; + }; + var isEmpty$2 = function (schema, nonEmptyElements, whitespaceElements, node) { + return node.isEmpty(nonEmptyElements, whitespaceElements, function (node) { + return isPadded(schema, node); + }); + }; + var isLineBreakNode = function (node, blockElements) { + return node && (blockElements[node.name] || node.name === 'br'); + }; + + var isBogusImage = function (img) { + return img.attr('data-mce-bogus'); + }; + var isInternalImageSource = function (img) { + return img.attr('src') === Env.transparentSrc || img.attr('data-mce-placeholder'); + }; + var isValidDataImg = function (img, settings) { + if (settings.images_dataimg_filter) { + var imgElem_1 = new Image(); + imgElem_1.src = img.attr('src'); + each$1(img.attributes.map, function (value, key) { + imgElem_1.setAttribute(key, value); + }); + return settings.images_dataimg_filter(imgElem_1); + } else { + return true; + } + }; + var registerBase64ImageFilter = function (parser, settings) { + var blobCache = settings.blob_cache; + var processImage = function (img) { + var inputSrc = img.attr('src'); + if (isInternalImageSource(img) || isBogusImage(img)) { + return; + } + parseDataUri(inputSrc).filter(function () { + return isValidDataImg(img, settings); + }).bind(function (_a) { + var type = _a.type, data = _a.data; + return Optional.from(blobCache.getByData(data, type)).orThunk(function () { + return buildBlob(type, data).map(function (blob) { + var blobInfo = blobCache.create(uniqueId(), blob, data); + blobCache.add(blobInfo); + return blobInfo; + }); + }); + }).each(function (blobInfo) { + img.attr('src', blobInfo.blobUri()); + }); + }; + if (blobCache) { + parser.addAttributeFilter('src', function (nodes) { + return each(nodes, processImage); + }); + } + }; + var register$2 = function (parser, settings) { + var schema = parser.schema; + if (settings.remove_trailing_brs) { + parser.addNodeFilter('br', function (nodes, _, args) { + var i; + var l = nodes.length; + var node; + var blockElements = Tools.extend({}, schema.getBlockElements()); + var nonEmptyElements = schema.getNonEmptyElements(); + var parent, lastParent, prev, prevName; + var whiteSpaceElements = schema.getWhiteSpaceElements(); + var elementRule, textNode; + blockElements.body = 1; + for (i = 0; i < l; i++) { + node = nodes[i]; + parent = node.parent; + if (blockElements[node.parent.name] && node === parent.lastChild) { + prev = node.prev; + while (prev) { + prevName = prev.name; + if (prevName !== 'span' || prev.attr('data-mce-type') !== 'bookmark') { + if (prevName === 'br') { + node = null; + } + break; + } + prev = prev.prev; + } + if (node) { + node.remove(); + if (isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, parent)) { + elementRule = schema.getElementRule(parent.name); + if (elementRule) { + if (elementRule.removeEmpty) { + parent.remove(); + } else if (elementRule.paddEmpty) { + paddEmptyNode(settings, args, blockElements, parent); + } + } + } + } + } else { + lastParent = node; + while (parent && parent.firstChild === lastParent && parent.lastChild === lastParent) { + lastParent = parent; + if (blockElements[parent.name]) { + break; + } + parent = parent.parent; + } + if (lastParent === parent && settings.padd_empty_with_br !== true) { + textNode = new AstNode('#text', 3); + textNode.value = nbsp; + node.replace(textNode); + } + } + } + }); + } + parser.addAttributeFilter('href', function (nodes) { + var i = nodes.length; + var appendRel = function (rel) { + var parts = rel.split(' ').filter(function (p) { + return p.length > 0; + }); + return parts.concat(['noopener']).sort().join(' '); + }; + var addNoOpener = function (rel) { + var newRel = rel ? Tools.trim(rel) : ''; + if (!/\b(noopener)\b/g.test(newRel)) { + return appendRel(newRel); + } else { + return newRel; + } + }; + if (!settings.allow_unsafe_link_target) { + while (i--) { + var node = nodes[i]; + if (node.name === 'a' && node.attr('target') === '_blank') { + node.attr('rel', addNoOpener(node.attr('rel'))); + } + } + } + }); + if (!settings.allow_html_in_named_anchor) { + parser.addAttributeFilter('id,name', function (nodes) { + var i = nodes.length, sibling, prevSibling, parent, node; + while (i--) { + node = nodes[i]; + if (node.name === 'a' && node.firstChild && !node.attr('href')) { + parent = node.parent; + sibling = node.lastChild; + do { + prevSibling = sibling.prev; + parent.insert(sibling, node); + sibling = prevSibling; + } while (sibling); + } + } + }); + } + if (settings.fix_list_elements) { + parser.addNodeFilter('ul,ol', function (nodes) { + var i = nodes.length, node, parentNode; + while (i--) { + node = nodes[i]; + parentNode = node.parent; + if (parentNode.name === 'ul' || parentNode.name === 'ol') { + if (node.prev && node.prev.name === 'li') { + node.prev.append(node); + } else { + var li = new AstNode('li', 1); + li.attr('style', 'list-style-type: none'); + node.wrap(li); + } + } + } + }); + } + if (settings.validate && schema.getValidClasses()) { + parser.addAttributeFilter('class', function (nodes) { + var i = nodes.length, node, classList, ci, className, classValue; + var validClasses = schema.getValidClasses(); + var validClassesMap, valid; + while (i--) { + node = nodes[i]; + classList = node.attr('class').split(' '); + classValue = ''; + for (ci = 0; ci < classList.length; ci++) { + className = classList[ci]; + valid = false; + validClassesMap = validClasses['*']; + if (validClassesMap && validClassesMap[className]) { + valid = true; + } + validClassesMap = validClasses[node.name]; + if (!valid && validClassesMap && validClassesMap[className]) { + valid = true; + } + if (valid) { + if (classValue) { + classValue += ' '; + } + classValue += className; + } + } + if (!classValue.length) { + classValue = null; + } + node.attr('class', classValue); + } + }); + } + registerBase64ImageFilter(parser, settings); + }; + + var makeMap$4 = Tools.makeMap, each$d = Tools.each, explode$2 = Tools.explode, extend$2 = Tools.extend; + var DomParser = function (settings, schema) { + if (schema === void 0) { + schema = Schema(); + } + var nodeFilters = {}; + var attributeFilters = []; + var matchedNodes = {}; + var matchedAttributes = {}; + settings = settings || {}; + settings.validate = 'validate' in settings ? settings.validate : true; + settings.root_name = settings.root_name || 'body'; + var fixInvalidChildren = function (nodes) { + var ni, node, parent, parents, newParent, currentNode, tempNode, childNode, i; + var sibling, nextNode; + var nonSplitableElements = makeMap$4('tr,td,th,tbody,thead,tfoot,table'); + var nonEmptyElements = schema.getNonEmptyElements(); + var whitespaceElements = schema.getWhiteSpaceElements(); + var textBlockElements = schema.getTextBlockElements(); + var specialElements = schema.getSpecialElements(); + for (ni = 0; ni < nodes.length; ni++) { + node = nodes[ni]; + if (!node.parent || node.fixed) { + continue; + } + if (textBlockElements[node.name] && node.parent.name === 'li') { + sibling = node.next; + while (sibling) { + if (textBlockElements[sibling.name]) { + sibling.name = 'li'; + sibling.fixed = true; + node.parent.insert(sibling, node.parent); + } else { + break; + } + sibling = sibling.next; + } + node.unwrap(node); + continue; + } + parents = [node]; + for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && !nonSplitableElements[parent.name]; parent = parent.parent) { + parents.push(parent); + } + if (parent && parents.length > 1) { + parents.reverse(); + newParent = currentNode = filterNode(parents[0].clone()); + for (i = 0; i < parents.length - 1; i++) { + if (schema.isValidChild(currentNode.name, parents[i].name)) { + tempNode = filterNode(parents[i].clone()); + currentNode.append(tempNode); + } else { + tempNode = currentNode; + } + for (childNode = parents[i].firstChild; childNode && childNode !== parents[i + 1];) { + nextNode = childNode.next; + tempNode.append(childNode); + childNode = nextNode; + } + currentNode = tempNode; + } + if (!isEmpty$2(schema, nonEmptyElements, whitespaceElements, newParent)) { + parent.insert(newParent, parents[0], true); + parent.insert(node, newParent); + } else { + parent.insert(node, parents[0], true); + } + parent = parents[0]; + if (isEmpty$2(schema, nonEmptyElements, whitespaceElements, parent) || hasOnlyChild(parent, 'br')) { + parent.empty().remove(); + } + } else if (node.parent) { + if (node.name === 'li') { + sibling = node.prev; + if (sibling && (sibling.name === 'ul' || sibling.name === 'ol')) { + sibling.append(node); + continue; + } + sibling = node.next; + if (sibling && (sibling.name === 'ul' || sibling.name === 'ol')) { + sibling.insert(node, sibling.firstChild, true); + continue; + } + node.wrap(filterNode(new AstNode('ul', 1))); + continue; + } + if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) { + node.wrap(filterNode(new AstNode('div', 1))); + } else { + if (specialElements[node.name]) { + node.empty().remove(); + } else { + node.unwrap(); + } + } + } + } + }; + var filterNode = function (node) { + var i, name, list; + name = node.name; + if (name in nodeFilters) { + list = matchedNodes[name]; + if (list) { + list.push(node); + } else { + matchedNodes[name] = [node]; + } + } + i = attributeFilters.length; + while (i--) { + name = attributeFilters[i].name; + if (name in node.attributes.map) { + list = matchedAttributes[name]; + if (list) { + list.push(node); + } else { + matchedAttributes[name] = [node]; + } + } + } + return node; + }; + var addNodeFilter = function (name, callback) { + each$d(explode$2(name), function (name) { + var list = nodeFilters[name]; + if (!list) { + nodeFilters[name] = list = []; + } + list.push(callback); + }); + }; + var getNodeFilters = function () { + var out = []; + for (var name_1 in nodeFilters) { + if (nodeFilters.hasOwnProperty(name_1)) { + out.push({ + name: name_1, + callbacks: nodeFilters[name_1] + }); + } + } + return out; + }; + var addAttributeFilter = function (name, callback) { + each$d(explode$2(name), function (name) { + var i; + for (i = 0; i < attributeFilters.length; i++) { + if (attributeFilters[i].name === name) { + attributeFilters[i].callbacks.push(callback); + return; + } + } + attributeFilters.push({ + name: name, + callbacks: [callback] + }); + }); + }; + var getAttributeFilters = function () { + return [].concat(attributeFilters); + }; + var parse = function (html, args) { + var nodes, i, l, fi, fl, list, name; + var invalidChildren = []; + var isInWhiteSpacePreservedElement; + var node; + var getRootBlockName = function (name) { + if (name === false) { + return ''; + } else if (name === true) { + return 'p'; + } else { + return name; + } + }; + args = args || {}; + matchedNodes = {}; + matchedAttributes = {}; + var blockElements = extend$2(makeMap$4('script,style,head,html,body,title,meta,param'), schema.getBlockElements()); + var nonEmptyElements = schema.getNonEmptyElements(); + var children = schema.children; + var validate = settings.validate; + var forcedRootBlockName = 'forced_root_block' in args ? args.forced_root_block : settings.forced_root_block; + var rootBlockName = getRootBlockName(forcedRootBlockName); + var whiteSpaceElements = schema.getWhiteSpaceElements(); + var startWhiteSpaceRegExp = /^[ \t\r\n]+/; + var endWhiteSpaceRegExp = /[ \t\r\n]+$/; + var allWhiteSpaceRegExp = /[ \t\r\n]+/g; + var isAllWhiteSpaceRegExp = /^[ \t\r\n]+$/; + isInWhiteSpacePreservedElement = whiteSpaceElements.hasOwnProperty(args.context) || whiteSpaceElements.hasOwnProperty(settings.root_name); + var addRootBlocks = function () { + var node = rootNode.firstChild, next, rootBlockNode; + var trim = function (rootBlockNode) { + if (rootBlockNode) { + node = rootBlockNode.firstChild; + if (node && node.type === 3) { + node.value = node.value.replace(startWhiteSpaceRegExp, ''); + } + node = rootBlockNode.lastChild; + if (node && node.type === 3) { + node.value = node.value.replace(endWhiteSpaceRegExp, ''); + } + } + }; + if (!schema.isValidChild(rootNode.name, rootBlockName.toLowerCase())) { + return; + } + while (node) { + next = node.next; + if (node.type === 3 || node.type === 1 && node.name !== 'p' && !blockElements[node.name] && !node.attr('data-mce-type')) { + if (!rootBlockNode) { + rootBlockNode = createNode(rootBlockName, 1); + rootBlockNode.attr(settings.forced_root_block_attrs); + rootNode.insert(rootBlockNode, node); + rootBlockNode.append(node); + } else { + rootBlockNode.append(node); + } + } else { + trim(rootBlockNode); + rootBlockNode = null; + } + node = next; + } + trim(rootBlockNode); + }; + var createNode = function (name, type) { + var node = new AstNode(name, type); + var list; + if (name in nodeFilters) { + list = matchedNodes[name]; + if (list) { + list.push(node); + } else { + matchedNodes[name] = [node]; + } + } + return node; + }; + var removeWhitespaceBefore = function (node) { + var textNode, textNodeNext, textVal, sibling; + var blockElements = schema.getBlockElements(); + for (textNode = node.prev; textNode && textNode.type === 3;) { + textVal = textNode.value.replace(endWhiteSpaceRegExp, ''); + if (textVal.length > 0) { + textNode.value = textVal; + return; + } + textNodeNext = textNode.next; + if (textNodeNext) { + if (textNodeNext.type === 3 && textNodeNext.value.length) { + textNode = textNode.prev; + continue; + } + if (!blockElements[textNodeNext.name] && textNodeNext.name !== 'script' && textNodeNext.name !== 'style') { + textNode = textNode.prev; + continue; + } + } + sibling = textNode.prev; + textNode.remove(); + textNode = sibling; + } + }; + var cloneAndExcludeBlocks = function (input) { + var name; + var output = {}; + for (name in input) { + if (name !== 'li' && name !== 'p') { + output[name] = input[name]; + } + } + return output; + }; + var parser = SaxParser({ + validate: validate, + allow_html_data_urls: settings.allow_html_data_urls, + allow_svg_data_urls: settings.allow_svg_data_urls, + allow_script_urls: settings.allow_script_urls, + allow_conditional_comments: settings.allow_conditional_comments, + preserve_cdata: settings.preserve_cdata, + self_closing_elements: cloneAndExcludeBlocks(schema.getSelfClosingElements()), + cdata: function (text) { + node.append(createNode('#cdata', 4)).value = text; + }, + text: function (text, raw) { + var textNode; + if (!isInWhiteSpacePreservedElement) { + text = text.replace(allWhiteSpaceRegExp, ' '); + if (isLineBreakNode(node.lastChild, blockElements)) { + text = text.replace(startWhiteSpaceRegExp, ''); + } + } + if (text.length !== 0) { + textNode = createNode('#text', 3); + textNode.raw = !!raw; + node.append(textNode).value = text; + } + }, + comment: function (text) { + node.append(createNode('#comment', 8)).value = text; + }, + pi: function (name, text) { + node.append(createNode(name, 7)).value = text; + removeWhitespaceBefore(node); + }, + doctype: function (text) { + var newNode = node.append(createNode('#doctype', 10)); + newNode.value = text; + removeWhitespaceBefore(node); + }, + start: function (name, attrs, empty) { + var newNode, attrFiltersLen, attrName, parent; + var elementRule = validate ? schema.getElementRule(name) : {}; + if (elementRule) { + newNode = createNode(elementRule.outputName || name, 1); + newNode.attributes = attrs; + newNode.shortEnded = empty; + node.append(newNode); + parent = children[node.name]; + if (parent && children[newNode.name] && !parent[newNode.name]) { + invalidChildren.push(newNode); + } + attrFiltersLen = attributeFilters.length; + while (attrFiltersLen--) { + attrName = attributeFilters[attrFiltersLen].name; + if (attrName in attrs.map) { + list = matchedAttributes[attrName]; + if (list) { + list.push(newNode); + } else { + matchedAttributes[attrName] = [newNode]; + } + } + } + if (blockElements[name]) { + removeWhitespaceBefore(newNode); + } + if (!empty) { + node = newNode; + } + if (!isInWhiteSpacePreservedElement && whiteSpaceElements[name]) { + isInWhiteSpacePreservedElement = true; + } + } + }, + end: function (name) { + var textNode, text, sibling, tempNode; + var elementRule = validate ? schema.getElementRule(name) : {}; + if (elementRule) { + if (blockElements[name]) { + if (!isInWhiteSpacePreservedElement) { + textNode = node.firstChild; + if (textNode && textNode.type === 3) { + text = textNode.value.replace(startWhiteSpaceRegExp, ''); + if (text.length > 0) { + textNode.value = text; + textNode = textNode.next; + } else { + sibling = textNode.next; + textNode.remove(); + textNode = sibling; + while (textNode && textNode.type === 3) { + text = textNode.value; + sibling = textNode.next; + if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) { + textNode.remove(); + textNode = sibling; + } + textNode = sibling; + } + } + } + textNode = node.lastChild; + if (textNode && textNode.type === 3) { + text = textNode.value.replace(endWhiteSpaceRegExp, ''); + if (text.length > 0) { + textNode.value = text; + textNode = textNode.prev; + } else { + sibling = textNode.prev; + textNode.remove(); + textNode = sibling; + while (textNode && textNode.type === 3) { + text = textNode.value; + sibling = textNode.prev; + if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) { + textNode.remove(); + textNode = sibling; + } + textNode = sibling; + } + } + } + } + } + if (isInWhiteSpacePreservedElement && whiteSpaceElements[name]) { + isInWhiteSpacePreservedElement = false; + } + if (elementRule.removeEmpty && isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, node)) { + tempNode = node.parent; + if (blockElements[node.name]) { + node.empty().remove(); + } else { + node.unwrap(); + } + node = tempNode; + return; + } + if (elementRule.paddEmpty && (isPaddedWithNbsp(node) || isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, node))) { + paddEmptyNode(settings, args, blockElements, node); + } + node = node.parent; + } + } + }, schema); + var rootNode = node = new AstNode(args.context || settings.root_name, 11); + parser.parse(html, args.format); + if (validate && invalidChildren.length) { + if (!args.context) { + fixInvalidChildren(invalidChildren); + } else { + args.invalid = true; + } + } + if (rootBlockName && (rootNode.name === 'body' || args.isRootContent)) { + addRootBlocks(); + } + if (!args.invalid) { + for (name in matchedNodes) { + if (!matchedNodes.hasOwnProperty(name)) { + continue; + } + list = nodeFilters[name]; + nodes = matchedNodes[name]; + fi = nodes.length; + while (fi--) { + if (!nodes[fi].parent) { + nodes.splice(fi, 1); + } + } + for (i = 0, l = list.length; i < l; i++) { + list[i](nodes, name, args); + } + } + for (i = 0, l = attributeFilters.length; i < l; i++) { + list = attributeFilters[i]; + if (list.name in matchedAttributes) { + nodes = matchedAttributes[list.name]; + fi = nodes.length; + while (fi--) { + if (!nodes[fi].parent) { + nodes.splice(fi, 1); + } + } + for (fi = 0, fl = list.callbacks.length; fi < fl; fi++) { + list.callbacks[fi](nodes, list.name, args); + } + } + } + } + return rootNode; + }; + var exports = { + schema: schema, + addAttributeFilter: addAttributeFilter, + getAttributeFilters: getAttributeFilters, + addNodeFilter: addNodeFilter, + getNodeFilters: getNodeFilters, + filterNode: filterNode, + parse: parse + }; + register$2(exports, settings); + register$1(exports, settings); + return exports; + }; + + var register$3 = function (htmlParser, settings, dom) { + htmlParser.addAttributeFilter('data-mce-tabindex', function (nodes, name) { + var i = nodes.length, node; + while (i--) { + node = nodes[i]; + node.attr('tabindex', node.attr('data-mce-tabindex')); + node.attr(name, null); + } + }); + htmlParser.addAttributeFilter('src,href,style', function (nodes, name) { + var i = nodes.length, node, value; + var internalName = 'data-mce-' + name; + var urlConverter = settings.url_converter; + var urlConverterScope = settings.url_converter_scope; + while (i--) { + node = nodes[i]; + value = node.attr(internalName); + if (value !== undefined) { + node.attr(name, value.length > 0 ? value : null); + node.attr(internalName, null); + } else { + value = node.attr(name); + if (name === 'style') { + value = dom.serializeStyle(dom.parseStyle(value), node.name); + } else if (urlConverter) { + value = urlConverter.call(urlConverterScope, value, name, node.name); + } + node.attr(name, value.length > 0 ? value : null); + } + } + }); + htmlParser.addAttributeFilter('class', function (nodes) { + var i = nodes.length, node, value; + while (i--) { + node = nodes[i]; + value = node.attr('class'); + if (value) { + value = node.attr('class').replace(/(?:^|\s)mce-item-\w+(?!\S)/g, ''); + node.attr('class', value.length > 0 ? value : null); + } + } + }); + htmlParser.addAttributeFilter('data-mce-type', function (nodes, name, args) { + var i = nodes.length, node; + while (i--) { + node = nodes[i]; + if (node.attr('data-mce-type') === 'bookmark' && !args.cleanup) { + var hasChildren = Optional.from(node.firstChild).exists(function (firstChild) { + return !isZwsp$1(firstChild.value); + }); + if (hasChildren) { + node.unwrap(); + } else { + node.remove(); + } + } + } + }); + htmlParser.addNodeFilter('noscript', function (nodes) { + var i = nodes.length, node; + while (i--) { + node = nodes[i].firstChild; + if (node) { + node.value = Entities.decode(node.value); + } + } + }); + htmlParser.addNodeFilter('script,style', function (nodes, name) { + var i = nodes.length, node, value, type; + var trim = function (value) { + return value.replace(/()/g, '\n').replace(/^[\r\n]*|[\r\n]*$/g, '').replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g, ''); + }; + while (i--) { + node = nodes[i]; + value = node.firstChild ? node.firstChild.value : ''; + if (name === 'script') { + type = node.attr('type'); + if (type) { + node.attr('type', type === 'mce-no/type' ? null : type.replace(/^mce\-/, '')); + } + if (settings.element_format === 'xhtml' && value.length > 0) { + node.firstChild.value = '// '; + } + } else { + if (settings.element_format === 'xhtml' && value.length > 0) { + node.firstChild.value = ''; + } + } + } + }); + htmlParser.addNodeFilter('#comment', function (nodes) { + var i = nodes.length, node; + while (i--) { + node = nodes[i]; + if (settings.preserve_cdata && node.value.indexOf('[CDATA[') === 0) { + node.name = '#cdata'; + node.type = 4; + node.value = dom.decode(node.value.replace(/^\[CDATA\[|\]\]$/g, '')); + } else if (node.value.indexOf('mce:protected ') === 0) { + node.name = '#text'; + node.type = 3; + node.raw = true; + node.value = unescape(node.value).substr(14); + } + } + }); + htmlParser.addNodeFilter('xml:namespace,input', function (nodes, name) { + var i = nodes.length, node; + while (i--) { + node = nodes[i]; + if (node.type === 7) { + node.remove(); + } else if (node.type === 1) { + if (name === 'input' && !node.attr('type')) { + node.attr('type', 'text'); + } + } + } + }); + htmlParser.addAttributeFilter('data-mce-type', function (nodes) { + each(nodes, function (node) { + if (node.attr('data-mce-type') === 'format-caret') { + if (node.isEmpty(htmlParser.schema.getNonEmptyElements())) { + node.remove(); + } else { + node.unwrap(); + } + } + }); + }); + htmlParser.addAttributeFilter('data-mce-src,data-mce-href,data-mce-style,' + 'data-mce-selected,data-mce-expando,' + 'data-mce-type,data-mce-resize,data-mce-placeholder', function (nodes, name) { + var i = nodes.length; + while (i--) { + nodes[i].attr(name, null); + } + }); + }; + var trimTrailingBr = function (rootNode) { + var isBr = function (node) { + return node && node.name === 'br'; + }; + var brNode1 = rootNode.lastChild; + if (isBr(brNode1)) { + var brNode2 = brNode1.prev; + if (isBr(brNode2)) { + brNode1.remove(); + brNode2.remove(); + } + } + }; + + var preProcess = function (editor, node, args) { + var doc, oldDoc; + var dom = editor.dom; + node = node.cloneNode(true); + var impl = document.implementation; + if (impl.createHTMLDocument) { + doc = impl.createHTMLDocument(''); + Tools.each(node.nodeName === 'BODY' ? node.childNodes : [node], function (node) { + doc.body.appendChild(doc.importNode(node, true)); + }); + if (node.nodeName !== 'BODY') { + node = doc.body.firstChild; + } else { + node = doc.body; + } + oldDoc = dom.doc; + dom.doc = doc; + } + firePreProcess(editor, __assign(__assign({}, args), { node: node })); + if (oldDoc) { + dom.doc = oldDoc; + } + return node; + }; + var shouldFireEvent = function (editor, args) { + return editor && editor.hasEventListeners('PreProcess') && !args.no_events; + }; + var process = function (editor, node, args) { + return shouldFireEvent(editor, args) ? preProcess(editor, node, args) : node; + }; + + var addTempAttr = function (htmlParser, tempAttrs, name) { + if (Tools.inArray(tempAttrs, name) === -1) { + htmlParser.addAttributeFilter(name, function (nodes, name) { + var i = nodes.length; + while (i--) { + nodes[i].attr(name, null); + } + }); + tempAttrs.push(name); + } + }; + var postProcess$1 = function (editor, args, content) { + if (!args.no_events && editor) { + var outArgs = firePostProcess(editor, __assign(__assign({}, args), { content: content })); + return outArgs.content; + } else { + return content; + } + }; + var getHtmlFromNode = function (dom, node, args) { + var html = trim$2(args.getInner ? node.innerHTML : dom.getOuterHTML(node)); + return args.selection || isWsPreserveElement(SugarElement.fromDom(node)) ? html : Tools.trim(html); + }; + var parseHtml = function (htmlParser, html, args) { + var parserArgs = args.selection ? __assign({ forced_root_block: false }, args) : args; + var rootNode = htmlParser.parse(html, parserArgs); + trimTrailingBr(rootNode); + return rootNode; + }; + var serializeNode = function (settings, schema, node) { + var htmlSerializer = HtmlSerializer(settings, schema); + return htmlSerializer.serialize(node); + }; + var toHtml = function (editor, settings, schema, rootNode, args) { + var content = serializeNode(settings, schema, rootNode); + return postProcess$1(editor, args, content); + }; + var DomSerializerImpl = function (settings, editor) { + var tempAttrs = ['data-mce-selected']; + var dom = editor && editor.dom ? editor.dom : DOMUtils.DOM; + var schema = editor && editor.schema ? editor.schema : Schema(settings); + settings.entity_encoding = settings.entity_encoding || 'named'; + settings.remove_trailing_brs = 'remove_trailing_brs' in settings ? settings.remove_trailing_brs : true; + var htmlParser = DomParser(settings, schema); + register$3(htmlParser, settings, dom); + var serialize = function (node, parserArgs) { + if (parserArgs === void 0) { + parserArgs = {}; + } + var args = __assign({ format: 'html' }, parserArgs); + var targetNode = process(editor, node, args); + var html = getHtmlFromNode(dom, targetNode, args); + var rootNode = parseHtml(htmlParser, html, args); + return args.format === 'tree' ? rootNode : toHtml(editor, settings, schema, rootNode, args); + }; + return { + schema: schema, + addNodeFilter: htmlParser.addNodeFilter, + addAttributeFilter: htmlParser.addAttributeFilter, + serialize: serialize, + addRules: function (rules) { + schema.addValidElements(rules); + }, + setRules: function (rules) { + schema.setValidElements(rules); + }, + addTempAttr: curry(addTempAttr, htmlParser, tempAttrs), + getTempAttrs: constant(tempAttrs), + getNodeFilters: htmlParser.getNodeFilters, + getAttributeFilters: htmlParser.getAttributeFilters + }; + }; + + var DomSerializer = function (settings, editor) { + var domSerializer = DomSerializerImpl(settings, editor); + return { + schema: domSerializer.schema, + addNodeFilter: domSerializer.addNodeFilter, + addAttributeFilter: domSerializer.addAttributeFilter, + serialize: domSerializer.serialize, + addRules: domSerializer.addRules, + setRules: domSerializer.setRules, + addTempAttr: domSerializer.addTempAttr, + getTempAttrs: domSerializer.getTempAttrs, + getNodeFilters: domSerializer.getNodeFilters, + getAttributeFilters: domSerializer.getAttributeFilters + }; + }; + + var defaultFormat$1 = 'html'; + var getContent$2 = function (editor, args) { + if (args === void 0) { + args = {}; + } + var format = args.format ? args.format : defaultFormat$1; + return getContent(editor, args, format); + }; + + var setContent$2 = function (editor, content, args) { + if (args === void 0) { + args = {}; + } + return setContent(editor, content, args); + }; + + var DOM$3 = DOMUtils.DOM; + var restoreOriginalStyles = function (editor) { + DOM$3.setStyle(editor.id, 'display', editor.orgDisplay); + }; + var safeDestroy = function (x) { + return Optional.from(x).each(function (x) { + return x.destroy(); + }); + }; + var clearDomReferences = function (editor) { + editor.contentAreaContainer = editor.formElement = editor.container = editor.editorContainer = null; + editor.bodyElement = editor.contentDocument = editor.contentWindow = null; + editor.iframeElement = editor.targetElm = null; + if (editor.selection) { + editor.selection = editor.selection.win = editor.selection.dom = editor.selection.dom.doc = null; + } + }; + var restoreForm = function (editor) { + var form = editor.formElement; + if (form) { + if (form._mceOldSubmit) { + form.submit = form._mceOldSubmit; + form._mceOldSubmit = null; + } + DOM$3.unbind(form, 'submit reset', editor.formEventDelegate); + } + }; + var remove$7 = function (editor) { + if (!editor.removed) { + var _selectionOverrides = editor._selectionOverrides, editorUpload = editor.editorUpload; + var body = editor.getBody(); + var element = editor.getElement(); + if (body) { + editor.save({ is_removing: true }); + } + editor.removed = true; + editor.unbindAllNativeEvents(); + if (editor.hasHiddenInput && element) { + DOM$3.remove(element.nextSibling); + } + fireRemove(editor); + editor.editorManager.remove(editor); + if (!editor.inline && body) { + restoreOriginalStyles(editor); + } + fireDetach(editor); + DOM$3.remove(editor.getContainer()); + safeDestroy(_selectionOverrides); + safeDestroy(editorUpload); + editor.destroy(); + } + }; + var destroy = function (editor, automatic) { + var selection = editor.selection, dom = editor.dom; + if (editor.destroyed) { + return; + } + if (!automatic && !editor.removed) { + editor.remove(); + return; + } + if (!automatic) { + editor.editorManager.off('beforeunload', editor._beforeUnload); + if (editor.theme && editor.theme.destroy) { + editor.theme.destroy(); + } + safeDestroy(selection); + safeDestroy(dom); + } + restoreForm(editor); + clearDomReferences(editor); + editor.destroyed = true; + }; + + var hasOwnProperty$2 = Object.prototype.hasOwnProperty; + var deep$1 = function (old, nu) { + var bothObjects = isObject(old) && isObject(nu); + return bothObjects ? deepMerge(old, nu) : nu; + }; + var baseMerge = function (merger) { + return function () { + var objects = []; + for (var _i = 0; _i < arguments.length; _i++) { + objects[_i] = arguments[_i]; + } + if (objects.length === 0) { + throw new Error('Can\'t merge zero objects'); + } + var ret = {}; + for (var j = 0; j < objects.length; j++) { + var curObject = objects[j]; + for (var key in curObject) { + if (hasOwnProperty$2.call(curObject, key)) { + ret[key] = merger(ret[key], curObject[key]); + } + } + } + return ret; + }; + }; + var deepMerge = baseMerge(deep$1); + + var sectionResult = function (sections, settings) { + return { + sections: constant(sections), + settings: constant(settings) + }; + }; + var deviceDetection = detect$3().deviceType; + var isTouch = deviceDetection.isTouch(); + var isPhone = deviceDetection.isPhone(); + var isTablet = deviceDetection.isTablet(); + var legacyMobilePlugins = [ + 'lists', + 'autolink', + 'autosave' + ]; + var defaultTouchSettings = { + table_grid: false, + object_resizing: false, + resize: false + }; + var normalizePlugins = function (plugins) { + var pluginNames = isArray(plugins) ? plugins.join(' ') : plugins; + var trimmedPlugins = map(isString(pluginNames) ? pluginNames.split(' ') : [], trim); + return filter(trimmedPlugins, function (item) { + return item.length > 0; + }); + }; + var filterLegacyMobilePlugins = function (plugins) { + return filter(plugins, curry(contains, legacyMobilePlugins)); + }; + var extractSections = function (keys, settings) { + var result = bifilter(settings, function (value, key) { + return contains(keys, key); + }); + return sectionResult(result.t, result.f); + }; + var getSection = function (sectionResult, name, defaults) { + if (defaults === void 0) { + defaults = {}; + } + var sections = sectionResult.sections(); + var sectionSettings = sections.hasOwnProperty(name) ? sections[name] : {}; + return Tools.extend({}, defaults, sectionSettings); + }; + var hasSection = function (sectionResult, name) { + return sectionResult.sections().hasOwnProperty(name); + }; + var isSectionTheme = function (sectionResult, name, theme) { + var section = sectionResult.sections(); + return hasSection(sectionResult, name) && section[name].theme === theme; + }; + var getSectionConfig = function (sectionResult, name) { + return hasSection(sectionResult, name) ? sectionResult.sections()[name] : {}; + }; + var getToolbarMode = function (settings, defaultVal) { + return get$1(settings, 'toolbar_mode').orThunk(function () { + return get$1(settings, 'toolbar_drawer').map(function (val) { + return val === false ? 'wrap' : val; + }); + }).getOr(defaultVal); + }; + var getDefaultSettings = function (settings, id, documentBaseUrl, isTouch, editor) { + var baseDefaults = { + id: id, + theme: 'silver', + toolbar_mode: getToolbarMode(settings, 'floating'), + plugins: '', + document_base_url: documentBaseUrl, + add_form_submit_trigger: true, + submit_patch: true, + add_unload_trigger: true, + convert_urls: true, + relative_urls: true, + remove_script_host: true, + object_resizing: true, + doctype: '', + visual: true, + font_size_legacy_values: 'xx-small,small,medium,large,x-large,xx-large,300%', + forced_root_block: 'p', + hidden_input: true, + inline_styles: true, + convert_fonts_to_spans: true, + indent: true, + indent_before: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist', + indent_after: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist', + entity_encoding: 'named', + url_converter: editor.convertURL, + url_converter_scope: editor + }; + return __assign(__assign({}, baseDefaults), isTouch ? defaultTouchSettings : {}); + }; + var getDefaultMobileSettings = function (mobileSettings, isPhone) { + var defaultMobileSettings = { + resize: false, + toolbar_mode: getToolbarMode(mobileSettings, 'scrolling'), + toolbar_sticky: false + }; + var defaultPhoneSettings = { menubar: false }; + return __assign(__assign(__assign({}, defaultTouchSettings), defaultMobileSettings), isPhone ? defaultPhoneSettings : {}); + }; + var getExternalPlugins$1 = function (overrideSettings, settings) { + var userDefinedExternalPlugins = settings.external_plugins ? settings.external_plugins : {}; + if (overrideSettings && overrideSettings.external_plugins) { + return Tools.extend({}, overrideSettings.external_plugins, userDefinedExternalPlugins); + } else { + return userDefinedExternalPlugins; + } + }; + var combinePlugins = function (forcedPlugins, plugins) { + return [].concat(normalizePlugins(forcedPlugins)).concat(normalizePlugins(plugins)); + }; + var getPlatformPlugins = function (isMobileDevice, sectionResult, desktopPlugins, mobilePlugins) { + if (isMobileDevice && isSectionTheme(sectionResult, 'mobile', 'mobile')) { + return filterLegacyMobilePlugins(mobilePlugins); + } else if (isMobileDevice && hasSection(sectionResult, 'mobile')) { + return mobilePlugins; + } else { + return desktopPlugins; + } + }; + var processPlugins = function (isMobileDevice, sectionResult, defaultOverrideSettings, settings) { + var forcedPlugins = normalizePlugins(defaultOverrideSettings.forced_plugins); + var desktopPlugins = normalizePlugins(settings.plugins); + var mobileConfig = getSectionConfig(sectionResult, 'mobile'); + var mobilePlugins = mobileConfig.plugins ? normalizePlugins(mobileConfig.plugins) : desktopPlugins; + var platformPlugins = getPlatformPlugins(isMobileDevice, sectionResult, desktopPlugins, mobilePlugins); + var combinedPlugins = combinePlugins(forcedPlugins, platformPlugins); + if (Env.browser.isIE() && contains(combinedPlugins, 'rtc')) { + throw new Error('RTC plugin is not supported on IE 11.'); + } + return Tools.extend(settings, { plugins: combinedPlugins.join(' ') }); + }; + var isOnMobile = function (isMobileDevice, sectionResult) { + return isMobileDevice && hasSection(sectionResult, 'mobile'); + }; + var combineSettings = function (isMobileDevice, isPhone, defaultSettings, defaultOverrideSettings, settings) { + var defaultDeviceSettings = isMobileDevice ? { mobile: getDefaultMobileSettings(settings.mobile || {}, isPhone) } : {}; + var sectionResult = extractSections(['mobile'], deepMerge(defaultDeviceSettings, settings)); + var extendedSettings = Tools.extend(defaultSettings, defaultOverrideSettings, sectionResult.settings(), isOnMobile(isMobileDevice, sectionResult) ? getSection(sectionResult, 'mobile') : {}, { + validate: true, + external_plugins: getExternalPlugins$1(defaultOverrideSettings, sectionResult.settings()) + }); + return processPlugins(isMobileDevice, sectionResult, defaultOverrideSettings, extendedSettings); + }; + var getEditorSettings = function (editor, id, documentBaseUrl, defaultOverrideSettings, settings) { + var defaultSettings = getDefaultSettings(settings, id, documentBaseUrl, isTouch, editor); + return combineSettings(isPhone || isTablet, isPhone, defaultSettings, defaultOverrideSettings, settings); + }; + var getFiltered = function (predicate, editor, name) { + return Optional.from(editor.settings[name]).filter(predicate); + }; + var getParamObject = function (value) { + var output = {}; + if (typeof value === 'string') { + each(value.indexOf('=') > 0 ? value.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value.split(','), function (val) { + var arr = val.split('='); + if (arr.length > 1) { + output[Tools.trim(arr[0])] = Tools.trim(arr[1]); + } else { + output[Tools.trim(arr[0])] = Tools.trim(arr[0]); + } + }); + } else { + output = value; + } + return output; + }; + var isArrayOf = function (p) { + return function (a) { + return isArray(a) && forall(a, p); + }; + }; + var getParam = function (editor, name, defaultVal, type) { + var value = name in editor.settings ? editor.settings[name] : defaultVal; + if (type === 'hash') { + return getParamObject(value); + } else if (type === 'string') { + return getFiltered(isString, editor, name).getOr(defaultVal); + } else if (type === 'number') { + return getFiltered(isNumber, editor, name).getOr(defaultVal); + } else if (type === 'boolean') { + return getFiltered(isBoolean, editor, name).getOr(defaultVal); + } else if (type === 'object') { + return getFiltered(isObject, editor, name).getOr(defaultVal); + } else if (type === 'array') { + return getFiltered(isArray, editor, name).getOr(defaultVal); + } else if (type === 'string[]') { + return getFiltered(isArrayOf(isString), editor, name).getOr(defaultVal); + } else if (type === 'function') { + return getFiltered(isFunction, editor, name).getOr(defaultVal); + } else { + return value; + } + }; + + var CreateIconManager = function () { + var lookup = {}; + var add = function (id, iconPack) { + lookup[id] = iconPack; + }; + var get = function (id) { + if (lookup[id]) { + return lookup[id]; + } + return { icons: {} }; + }; + var has$1 = function (id) { + return has(lookup, id); + }; + return { + add: add, + get: get, + has: has$1 + }; + }; + var IconManager = CreateIconManager(); + + var getProp = function (propName, elm) { + var rawElm = elm.dom; + return rawElm[propName]; + }; + var getComputedSizeProp = function (propName, elm) { + return parseInt(get$5(elm, propName), 10); + }; + var getClientWidth = curry(getProp, 'clientWidth'); + var getClientHeight = curry(getProp, 'clientHeight'); + var getMarginTop = curry(getComputedSizeProp, 'margin-top'); + var getMarginLeft = curry(getComputedSizeProp, 'margin-left'); + var getBoundingClientRect$1 = function (elm) { + return elm.dom.getBoundingClientRect(); + }; + var isInsideElementContentArea = function (bodyElm, clientX, clientY) { + var clientWidth = getClientWidth(bodyElm); + var clientHeight = getClientHeight(bodyElm); + return clientX >= 0 && clientY >= 0 && clientX <= clientWidth && clientY <= clientHeight; + }; + var transpose = function (inline, elm, clientX, clientY) { + var clientRect = getBoundingClientRect$1(elm); + var deltaX = inline ? clientRect.left + elm.dom.clientLeft + getMarginLeft(elm) : 0; + var deltaY = inline ? clientRect.top + elm.dom.clientTop + getMarginTop(elm) : 0; + var x = clientX - deltaX; + var y = clientY - deltaY; + return { + x: x, + y: y + }; + }; + var isXYInContentArea = function (editor, clientX, clientY) { + var bodyElm = SugarElement.fromDom(editor.getBody()); + var targetElm = editor.inline ? bodyElm : documentElement(bodyElm); + var transposedPoint = transpose(editor.inline, targetElm, clientX, clientY); + return isInsideElementContentArea(targetElm, transposedPoint.x, transposedPoint.y); + }; + var fromDomSafe = function (node) { + return Optional.from(node).map(SugarElement.fromDom); + }; + var isEditorAttachedToDom = function (editor) { + var rawContainer = editor.inline ? editor.getBody() : editor.getContentAreaContainer(); + return fromDomSafe(rawContainer).map(inBody).getOr(false); + }; + + var NotificationManagerImpl = function () { + var unimplemented = function () { + throw new Error('Theme did not provide a NotificationManager implementation.'); + }; + return { + open: unimplemented, + close: unimplemented, + reposition: unimplemented, + getArgs: unimplemented + }; + }; + + var NotificationManager = function (editor) { + var notifications = []; + var getImplementation = function () { + var theme = editor.theme; + return theme && theme.getNotificationManagerImpl ? theme.getNotificationManagerImpl() : NotificationManagerImpl(); + }; + var getTopNotification = function () { + return Optional.from(notifications[0]); + }; + var isEqual = function (a, b) { + return a.type === b.type && a.text === b.text && !a.progressBar && !a.timeout && !b.progressBar && !b.timeout; + }; + var reposition = function () { + if (notifications.length > 0) { + getImplementation().reposition(notifications); + } + }; + var addNotification = function (notification) { + notifications.push(notification); + }; + var closeNotification = function (notification) { + findIndex(notifications, function (otherNotification) { + return otherNotification === notification; + }).each(function (index) { + notifications.splice(index, 1); + }); + }; + var open = function (spec, fireEvent) { + if (fireEvent === void 0) { + fireEvent = true; + } + if (editor.removed || !isEditorAttachedToDom(editor)) { + return; + } + if (fireEvent) { + editor.fire('BeforeOpenNotification', { notification: spec }); + } + return find(notifications, function (notification) { + return isEqual(getImplementation().getArgs(notification), spec); + }).getOrThunk(function () { + editor.editorManager.setActive(editor); + var notification = getImplementation().open(spec, function () { + closeNotification(notification); + reposition(); + getTopNotification().fold(function () { + return editor.focus(); + }, function (top) { + return focus(SugarElement.fromDom(top.getEl())); + }); + }); + addNotification(notification); + reposition(); + editor.fire('OpenNotification', { notification: __assign({}, notification) }); + return notification; + }); + }; + var close = function () { + getTopNotification().each(function (notification) { + getImplementation().close(notification); + closeNotification(notification); + reposition(); + }); + }; + var getNotifications = function () { + return notifications; + }; + var registerEvents = function (editor) { + editor.on('SkinLoaded', function () { + var serviceMessage = getServiceMessage(editor); + if (serviceMessage) { + open({ + text: serviceMessage, + type: 'warning', + timeout: 0 + }, false); + } + }); + editor.on('ResizeEditor ResizeWindow NodeChange', function () { + Delay.requestAnimationFrame(reposition); + }); + editor.on('remove', function () { + each(notifications.slice(), function (notification) { + getImplementation().close(notification); + }); + }); + }; + registerEvents(editor); + return { + open: open, + close: close, + getNotifications: getNotifications + }; + }; + + var PluginManager = AddOnManager.PluginManager; + + var ThemeManager = AddOnManager.ThemeManager; + + function WindowManagerImpl () { + var unimplemented = function () { + throw new Error('Theme did not provide a WindowManager implementation.'); + }; + return { + open: unimplemented, + openUrl: unimplemented, + alert: unimplemented, + confirm: unimplemented, + close: unimplemented, + getParams: unimplemented, + setParams: unimplemented + }; + } + + var WindowManager = function (editor) { + var dialogs = []; + var getImplementation = function () { + var theme = editor.theme; + return theme && theme.getWindowManagerImpl ? theme.getWindowManagerImpl() : WindowManagerImpl(); + }; + var funcBind = function (scope, f) { + return function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return f ? f.apply(scope, args) : undefined; + }; + }; + var fireOpenEvent = function (dialog) { + editor.fire('OpenWindow', { dialog: dialog }); + }; + var fireCloseEvent = function (dialog) { + editor.fire('CloseWindow', { dialog: dialog }); + }; + var addDialog = function (dialog) { + dialogs.push(dialog); + fireOpenEvent(dialog); + }; + var closeDialog = function (dialog) { + fireCloseEvent(dialog); + dialogs = filter(dialogs, function (otherDialog) { + return otherDialog !== dialog; + }); + if (dialogs.length === 0) { + editor.focus(); + } + }; + var getTopDialog = function () { + return Optional.from(dialogs[dialogs.length - 1]); + }; + var storeSelectionAndOpenDialog = function (openDialog) { + editor.editorManager.setActive(editor); + store(editor); + var dialog = openDialog(); + addDialog(dialog); + return dialog; + }; + var open = function (args, params) { + return storeSelectionAndOpenDialog(function () { + return getImplementation().open(args, params, closeDialog); + }); + }; + var openUrl = function (args) { + return storeSelectionAndOpenDialog(function () { + return getImplementation().openUrl(args, closeDialog); + }); + }; + var alert = function (message, callback, scope) { + var windowManagerImpl = getImplementation(); + windowManagerImpl.alert(message, funcBind(scope ? scope : windowManagerImpl, callback)); + }; + var confirm = function (message, callback, scope) { + var windowManagerImpl = getImplementation(); + windowManagerImpl.confirm(message, funcBind(scope ? scope : windowManagerImpl, callback)); + }; + var close = function () { + getTopDialog().each(function (dialog) { + getImplementation().close(dialog); + closeDialog(dialog); + }); + }; + editor.on('remove', function () { + each(dialogs, function (dialog) { + getImplementation().close(dialog); + }); + }); + return { + open: open, + openUrl: openUrl, + alert: alert, + confirm: confirm, + close: close + }; + }; + + var displayNotification = function (editor, message) { + editor.notificationManager.open({ + type: 'error', + text: message + }); + }; + var displayError = function (editor, message) { + if (editor._skinLoaded) { + displayNotification(editor, message); + } else { + editor.on('SkinLoaded', function () { + displayNotification(editor, message); + }); + } + }; + var uploadError = function (editor, message) { + displayError(editor, I18n.translate([ + 'Failed to upload image: {0}', + message + ])); + }; + var logError = function (editor, errorType, msg) { + fireError(editor, errorType, { message: msg }); + console.error(msg); + }; + var createLoadError = function (type, url, name) { + return name ? 'Failed to load ' + type + ': ' + name + ' from url ' + url : 'Failed to load ' + type + ' url: ' + url; + }; + var pluginLoadError = function (editor, url, name) { + logError(editor, 'PluginLoadError', createLoadError('plugin', url, name)); + }; + var iconsLoadError = function (editor, url, name) { + logError(editor, 'IconsLoadError', createLoadError('icons', url, name)); + }; + var languageLoadError = function (editor, url, name) { + logError(editor, 'LanguageLoadError', createLoadError('language', url, name)); + }; + var pluginInitError = function (editor, name, err) { + var message = I18n.translate([ + 'Failed to initialize plugin: {0}', + name + ]); + fireError(editor, 'PluginLoadError', { message: message }); + initError(message, err); + displayError(editor, message); + }; + var initError = function (message) { + var x = []; + for (var _i = 1; _i < arguments.length; _i++) { + x[_i - 1] = arguments[_i]; + } + var console = window.console; + if (console) { + if (console.error) { + console.error.apply(console, __spreadArrays([message], x)); + } else { + console.log.apply(console, __spreadArrays([message], x)); + } + } + }; + + var isContentCssSkinName = function (url) { + return /^[a-z0-9\-]+$/i.test(url); + }; + var getContentCssUrls = function (editor) { + return transformToUrls(editor, getContentCss(editor)); + }; + var getFontCssUrls = function (editor) { + return transformToUrls(editor, getFontCss(editor)); + }; + var transformToUrls = function (editor, cssLinks) { + var skinUrl = editor.editorManager.baseURL + '/skins/content'; + var suffix = editor.editorManager.suffix; + var contentCssFile = 'content' + suffix + '.css'; + var inline = editor.inline === true; + return map(cssLinks, function (url) { + if (isContentCssSkinName(url) && !inline) { + return skinUrl + '/' + url + '/' + contentCssFile; + } else { + return editor.documentBaseURI.toAbsolute(url); + } + }); + }; + var appendContentCssFromSettings = function (editor) { + editor.contentCSS = editor.contentCSS.concat(getContentCssUrls(editor), getFontCssUrls(editor)); + }; + + var UploadStatus = function () { + var PENDING = 1, UPLOADED = 2; + var blobUriStatuses = {}; + var createStatus = function (status, resultUri) { + return { + status: status, + resultUri: resultUri + }; + }; + var hasBlobUri = function (blobUri) { + return blobUri in blobUriStatuses; + }; + var getResultUri = function (blobUri) { + var result = blobUriStatuses[blobUri]; + return result ? result.resultUri : null; + }; + var isPending = function (blobUri) { + return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === PENDING : false; + }; + var isUploaded = function (blobUri) { + return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === UPLOADED : false; + }; + var markPending = function (blobUri) { + blobUriStatuses[blobUri] = createStatus(PENDING, null); + }; + var markUploaded = function (blobUri, resultUri) { + blobUriStatuses[blobUri] = createStatus(UPLOADED, resultUri); + }; + var removeFailed = function (blobUri) { + delete blobUriStatuses[blobUri]; + }; + var destroy = function () { + blobUriStatuses = {}; + }; + return { + hasBlobUri: hasBlobUri, + getResultUri: getResultUri, + isPending: isPending, + isUploaded: isUploaded, + markPending: markPending, + markUploaded: markUploaded, + removeFailed: removeFailed, + destroy: destroy + }; + }; + + var count$1 = 0; + var seed = function () { + var rnd = function () { + return Math.round(Math.random() * 4294967295).toString(36); + }; + var now = new Date().getTime(); + return 's' + now.toString(36) + rnd() + rnd() + rnd(); + }; + var uuid = function (prefix) { + return prefix + count$1++ + seed(); + }; + + var BlobCache = function () { + var cache = []; + var mimeToExt = function (mime) { + var mimes = { + 'image/jpeg': 'jpg', + 'image/jpg': 'jpg', + 'image/gif': 'gif', + 'image/png': 'png', + 'image/apng': 'apng', + 'image/avif': 'avif', + 'image/svg+xml': 'svg', + 'image/webp': 'webp', + 'image/bmp': 'bmp', + 'image/tiff': 'tiff' + }; + return mimes[mime.toLowerCase()] || 'dat'; + }; + var create = function (o, blob, base64, name, filename) { + if (isString(o)) { + var id = o; + return toBlobInfo({ + id: id, + name: name, + filename: filename, + blob: blob, + base64: base64 + }); + } else if (isObject(o)) { + return toBlobInfo(o); + } else { + throw new Error('Unknown input type'); + } + }; + var toBlobInfo = function (o) { + if (!o.blob || !o.base64) { + throw new Error('blob and base64 representations of the image are required for BlobInfo to be created'); + } + var id = o.id || uuid('blobid'); + var name = o.name || id; + var blob = o.blob; + return { + id: constant(id), + name: constant(name), + filename: constant(o.filename || name + '.' + mimeToExt(blob.type)), + blob: constant(blob), + base64: constant(o.base64), + blobUri: constant(o.blobUri || URL.createObjectURL(blob)), + uri: constant(o.uri) + }; + }; + var add = function (blobInfo) { + if (!get(blobInfo.id())) { + cache.push(blobInfo); + } + }; + var findFirst = function (predicate) { + return find(cache, predicate).getOrUndefined(); + }; + var get = function (id) { + return findFirst(function (cachedBlobInfo) { + return cachedBlobInfo.id() === id; + }); + }; + var getByUri = function (blobUri) { + return findFirst(function (blobInfo) { + return blobInfo.blobUri() === blobUri; + }); + }; + var getByData = function (base64, type) { + return findFirst(function (blobInfo) { + return blobInfo.base64() === base64 && blobInfo.blob().type === type; + }); + }; + var removeByUri = function (blobUri) { + cache = filter(cache, function (blobInfo) { + if (blobInfo.blobUri() === blobUri) { + URL.revokeObjectURL(blobInfo.blobUri()); + return false; + } + return true; + }); + }; + var destroy = function () { + each(cache, function (cachedBlobInfo) { + URL.revokeObjectURL(cachedBlobInfo.blobUri()); + }); + cache = []; + }; + return { + create: create, + add: add, + get: get, + getByUri: getByUri, + getByData: getByData, + findFirst: findFirst, + removeByUri: removeByUri, + destroy: destroy + }; + }; + + var Uploader = function (uploadStatus, settings) { + var pendingPromises = {}; + var pathJoin = function (path1, path2) { + if (path1) { + return path1.replace(/\/$/, '') + '/' + path2.replace(/^\//, ''); + } + return path2; + }; + var defaultHandler = function (blobInfo, success, failure, progress) { + var xhr = new XMLHttpRequest(); + xhr.open('POST', settings.url); + xhr.withCredentials = settings.credentials; + xhr.upload.onprogress = function (e) { + progress(e.loaded / e.total * 100); + }; + xhr.onerror = function () { + failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status); + }; + xhr.onload = function () { + if (xhr.status < 200 || xhr.status >= 300) { + failure('HTTP Error: ' + xhr.status); + return; + } + var json = JSON.parse(xhr.responseText); + if (!json || typeof json.location !== 'string') { + failure('Invalid JSON: ' + xhr.responseText); + return; + } + success(pathJoin(settings.basePath, json.location)); + }; + var formData = new FormData(); + formData.append('file', blobInfo.blob(), blobInfo.filename()); + xhr.send(formData); + }; + var noUpload = function () { + return new promiseObj(function (resolve) { + resolve([]); + }); + }; + var handlerSuccess = function (blobInfo, url) { + return { + url: url, + blobInfo: blobInfo, + status: true + }; + }; + var handlerFailure = function (blobInfo, message, options) { + return { + url: '', + blobInfo: blobInfo, + status: false, + error: { + message: message, + options: options + } + }; + }; + var resolvePending = function (blobUri, result) { + Tools.each(pendingPromises[blobUri], function (resolve) { + resolve(result); + }); + delete pendingPromises[blobUri]; + }; + var uploadBlobInfo = function (blobInfo, handler, openNotification) { + uploadStatus.markPending(blobInfo.blobUri()); + return new promiseObj(function (resolve) { + var notification, progress; + try { + var closeNotification_1 = function () { + if (notification) { + notification.close(); + progress = noop; + } + }; + var success = function (url) { + closeNotification_1(); + uploadStatus.markUploaded(blobInfo.blobUri(), url); + resolvePending(blobInfo.blobUri(), handlerSuccess(blobInfo, url)); + resolve(handlerSuccess(blobInfo, url)); + }; + var failure = function (error, options) { + var failureOptions = options ? options : {}; + closeNotification_1(); + uploadStatus.removeFailed(blobInfo.blobUri()); + resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, error, failureOptions)); + resolve(handlerFailure(blobInfo, error, failureOptions)); + }; + progress = function (percent) { + if (percent < 0 || percent > 100) { + return; + } + Optional.from(notification).orThunk(function () { + return Optional.from(openNotification).map(apply); + }).each(function (n) { + notification = n; + n.progressBar.value(percent); + }); + }; + handler(blobInfo, success, failure, progress); + } catch (ex) { + resolve(handlerFailure(blobInfo, ex.message, {})); + } + }); + }; + var isDefaultHandler = function (handler) { + return handler === defaultHandler; + }; + var pendingUploadBlobInfo = function (blobInfo) { + var blobUri = blobInfo.blobUri(); + return new promiseObj(function (resolve) { + pendingPromises[blobUri] = pendingPromises[blobUri] || []; + pendingPromises[blobUri].push(resolve); + }); + }; + var uploadBlobs = function (blobInfos, openNotification) { + blobInfos = Tools.grep(blobInfos, function (blobInfo) { + return !uploadStatus.isUploaded(blobInfo.blobUri()); + }); + return promiseObj.all(Tools.map(blobInfos, function (blobInfo) { + return uploadStatus.isPending(blobInfo.blobUri()) ? pendingUploadBlobInfo(blobInfo) : uploadBlobInfo(blobInfo, settings.handler, openNotification); + })); + }; + var upload = function (blobInfos, openNotification) { + return !settings.url && isDefaultHandler(settings.handler) ? noUpload() : uploadBlobs(blobInfos, openNotification); + }; + if (isFunction(settings.handler) === false) { + settings.handler = defaultHandler; + } + return { upload: upload }; + }; + + var openNotification = function (editor) { + return function () { + return editor.notificationManager.open({ + text: editor.translate('Image uploading...'), + type: 'info', + timeout: -1, + progressBar: true + }); + }; + }; + var createUploader = function (editor, uploadStatus) { + return Uploader(uploadStatus, { + url: getImageUploadUrl(editor), + basePath: getImageUploadBasePath(editor), + credentials: getImagesUploadCredentials(editor), + handler: getImagesUploadHandler(editor) + }); + }; + var ImageUploader = function (editor) { + var uploadStatus = UploadStatus(); + var uploader = createUploader(editor, uploadStatus); + return { + upload: function (blobInfos, showNotification) { + if (showNotification === void 0) { + showNotification = true; + } + return uploader.upload(blobInfos, showNotification ? openNotification(editor) : undefined); + } + }; + }; + + var UploadChangeHandler = function (editor) { + var lastChangedLevel = Cell(null); + editor.on('change AddUndo', function (e) { + lastChangedLevel.set(__assign({}, e.level)); + }); + var fireIfChanged = function () { + var data = editor.undoManager.data; + last(data).filter(function (level) { + return !isEq$4(lastChangedLevel.get(), level); + }).each(function (level) { + editor.setDirty(true); + editor.fire('change', { + level: level, + lastLevel: get(data, data.length - 2).getOrNull() + }); + }); + }; + return { fireIfChanged: fireIfChanged }; + }; + var EditorUpload = function (editor) { + var blobCache = BlobCache(); + var uploader, imageScanner; + var uploadStatus = UploadStatus(); + var urlFilters = []; + var changeHandler = UploadChangeHandler(editor); + var aliveGuard = function (callback) { + return function (result) { + if (editor.selection) { + return callback(result); + } + return []; + }; + }; + var cacheInvalidator = function (url) { + return url + (url.indexOf('?') === -1 ? '?' : '&') + new Date().getTime(); + }; + var replaceString = function (content, search, replace) { + var index = 0; + do { + index = content.indexOf(search, index); + if (index !== -1) { + content = content.substring(0, index) + replace + content.substr(index + search.length); + index += replace.length - search.length + 1; + } + } while (index !== -1); + return content; + }; + var replaceImageUrl = function (content, targetUrl, replacementUrl) { + var replacementString = 'src="' + replacementUrl + '"' + (replacementUrl === Env.transparentSrc ? ' data-mce-placeholder="1"' : ''); + content = replaceString(content, 'src="' + targetUrl + '"', replacementString); + content = replaceString(content, 'data-mce-src="' + targetUrl + '"', 'data-mce-src="' + replacementUrl + '"'); + return content; + }; + var replaceUrlInUndoStack = function (targetUrl, replacementUrl) { + each(editor.undoManager.data, function (level) { + if (level.type === 'fragmented') { + level.fragments = map(level.fragments, function (fragment) { + return replaceImageUrl(fragment, targetUrl, replacementUrl); + }); + } else { + level.content = replaceImageUrl(level.content, targetUrl, replacementUrl); + } + }); + }; + var replaceImageUriInView = function (image, resultUri) { + var src = editor.convertURL(resultUri, 'src'); + replaceUrlInUndoStack(image.src, resultUri); + editor.$(image).attr({ + 'src': shouldReuseFileName(editor) ? cacheInvalidator(resultUri) : resultUri, + 'data-mce-src': src + }); + }; + var uploadImages = function (callback) { + if (!uploader) { + uploader = createUploader(editor, uploadStatus); + } + return scanForImages().then(aliveGuard(function (imageInfos) { + var blobInfos = map(imageInfos, function (imageInfo) { + return imageInfo.blobInfo; + }); + return uploader.upload(blobInfos, openNotification(editor)).then(aliveGuard(function (result) { + var imagesToRemove = []; + var filteredResult = map(result, function (uploadInfo, index) { + var blobInfo = imageInfos[index].blobInfo; + var image = imageInfos[index].image; + if (uploadInfo.status && shouldReplaceBlobUris(editor)) { + blobCache.removeByUri(image.src); + replaceImageUriInView(image, uploadInfo.url); + } else if (uploadInfo.error) { + if (uploadInfo.error.options.remove) { + replaceUrlInUndoStack(image.getAttribute('src'), Env.transparentSrc); + imagesToRemove.push(image); + } + uploadError(editor, uploadInfo.error.message); + } + return { + element: image, + status: uploadInfo.status, + uploadUri: uploadInfo.url, + blobInfo: blobInfo + }; + }); + if (filteredResult.length > 0) { + changeHandler.fireIfChanged(); + } + if (imagesToRemove.length > 0) { + if (isRtc(editor)) { + console.error('Removing images on failed uploads is currently unsupported for RTC'); + } else { + editor.undoManager.transact(function () { + each(imagesToRemove, function (element) { + editor.dom.remove(element); + blobCache.removeByUri(element.src); + }); + }); + } + } + if (callback) { + callback(filteredResult); + } + return filteredResult; + })); + })); + }; + var uploadImagesAuto = function (callback) { + if (isAutomaticUploadsEnabled(editor)) { + return uploadImages(callback); + } + }; + var isValidDataUriImage = function (imgElm) { + if (forall(urlFilters, function (filter) { + return filter(imgElm); + }) === false) { + return false; + } + if (imgElm.getAttribute('src').indexOf('data:') === 0) { + var dataImgFilter = getImagesDataImgFilter(editor); + return dataImgFilter(imgElm); + } + return true; + }; + var addFilter = function (filter) { + urlFilters.push(filter); + }; + var scanForImages = function () { + if (!imageScanner) { + imageScanner = ImageScanner(uploadStatus, blobCache); + } + return imageScanner.findAll(editor.getBody(), isValidDataUriImage).then(aliveGuard(function (result) { + result = filter(result, function (resultItem) { + if (typeof resultItem === 'string') { + displayError(editor, resultItem); + return false; + } + return true; + }); + each(result, function (resultItem) { + replaceUrlInUndoStack(resultItem.image.src, resultItem.blobInfo.blobUri()); + resultItem.image.src = resultItem.blobInfo.blobUri(); + resultItem.image.removeAttribute('data-mce-src'); + }); + return result; + })); + }; + var destroy = function () { + blobCache.destroy(); + uploadStatus.destroy(); + imageScanner = uploader = null; + }; + var replaceBlobUris = function (content) { + return content.replace(/src="(blob:[^"]+)"/g, function (match, blobUri) { + var resultUri = uploadStatus.getResultUri(blobUri); + if (resultUri) { + return 'src="' + resultUri + '"'; + } + var blobInfo = blobCache.getByUri(blobUri); + if (!blobInfo) { + blobInfo = foldl(editor.editorManager.get(), function (result, editor) { + return result || editor.editorUpload && editor.editorUpload.blobCache.getByUri(blobUri); + }, null); + } + if (blobInfo) { + var blob = blobInfo.blob(); + return 'src="data:' + blob.type + ';base64,' + blobInfo.base64() + '"'; + } + return match; + }); + }; + editor.on('SetContent', function () { + if (isAutomaticUploadsEnabled(editor)) { + uploadImagesAuto(); + } else { + scanForImages(); + } + }); + editor.on('RawSaveContent', function (e) { + e.content = replaceBlobUris(e.content); + }); + editor.on('GetContent', function (e) { + if (e.source_view || e.format === 'raw' || e.format === 'tree') { + return; + } + e.content = replaceBlobUris(e.content); + }); + editor.on('PostRender', function () { + editor.parser.addNodeFilter('img', function (images) { + each(images, function (img) { + var src = img.attr('src'); + if (blobCache.getByUri(src)) { + return; + } + var resultUri = uploadStatus.getResultUri(src); + if (resultUri) { + img.attr('src', resultUri); + } + }); + }); + }); + return { + blobCache: blobCache, + addFilter: addFilter, + uploadImages: uploadImages, + uploadImagesAuto: uploadImagesAuto, + scanForImages: scanForImages, + destroy: destroy + }; + }; + + var get$a = function (dom) { + var formats = { + valigntop: [{ + selector: 'td,th', + styles: { verticalAlign: 'top' } + }], + valignmiddle: [{ + selector: 'td,th', + styles: { verticalAlign: 'middle' } + }], + valignbottom: [{ + selector: 'td,th', + styles: { verticalAlign: 'bottom' } + }], + alignleft: [ + { + selector: 'figure.image', + collapsed: false, + classes: 'align-left', + ceFalseOverride: true, + preview: 'font-family font-size' + }, + { + selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', + styles: { textAlign: 'left' }, + inherit: false, + preview: false, + defaultBlock: 'div' + }, + { + selector: 'img,table,audio,video', + collapsed: false, + styles: { float: 'left' }, + preview: 'font-family font-size' + } + ], + aligncenter: [ + { + selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', + styles: { textAlign: 'center' }, + inherit: false, + preview: 'font-family font-size', + defaultBlock: 'div' + }, + { + selector: 'figure.image', + collapsed: false, + classes: 'align-center', + ceFalseOverride: true, + preview: 'font-family font-size' + }, + { + selector: 'img,audio,video', + collapsed: false, + styles: { + display: 'block', + marginLeft: 'auto', + marginRight: 'auto' + }, + preview: false + }, + { + selector: 'table', + collapsed: false, + styles: { + marginLeft: 'auto', + marginRight: 'auto' + }, + preview: 'font-family font-size' + } + ], + alignright: [ + { + selector: 'figure.image', + collapsed: false, + classes: 'align-right', + ceFalseOverride: true, + preview: 'font-family font-size' + }, + { + selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', + styles: { textAlign: 'right' }, + inherit: false, + preview: 'font-family font-size', + defaultBlock: 'div' + }, + { + selector: 'img,table,audio,video', + collapsed: false, + styles: { float: 'right' }, + preview: 'font-family font-size' + } + ], + alignjustify: [{ + selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', + styles: { textAlign: 'justify' }, + inherit: false, + defaultBlock: 'div', + preview: 'font-family font-size' + }], + bold: [ + { + inline: 'strong', + remove: 'all', + preserve_attributes: [ + 'class', + 'style' + ] + }, + { + inline: 'span', + styles: { fontWeight: 'bold' } + }, + { + inline: 'b', + remove: 'all', + preserve_attributes: [ + 'class', + 'style' + ] + } + ], + italic: [ + { + inline: 'em', + remove: 'all', + preserve_attributes: [ + 'class', + 'style' + ] + }, + { + inline: 'span', + styles: { fontStyle: 'italic' } + }, + { + inline: 'i', + remove: 'all', + preserve_attributes: [ + 'class', + 'style' + ] + } + ], + underline: [ + { + inline: 'span', + styles: { textDecoration: 'underline' }, + exact: true + }, + { + inline: 'u', + remove: 'all', + preserve_attributes: [ + 'class', + 'style' + ] + } + ], + strikethrough: [ + { + inline: 'span', + styles: { textDecoration: 'line-through' }, + exact: true + }, + { + inline: 'strike', + remove: 'all', + preserve_attributes: [ + 'class', + 'style' + ] + }, + { + inline: 's', + remove: 'all', + preserve_attributes: [ + 'class', + 'style' + ] + } + ], + forecolor: { + inline: 'span', + styles: { color: '%value' }, + links: true, + remove_similar: true, + clear_child_styles: true + }, + hilitecolor: { + inline: 'span', + styles: { backgroundColor: '%value' }, + links: true, + remove_similar: true, + clear_child_styles: true + }, + fontname: { + inline: 'span', + toggle: false, + styles: { fontFamily: '%value' }, + clear_child_styles: true + }, + fontsize: { + inline: 'span', + toggle: false, + styles: { fontSize: '%value' }, + clear_child_styles: true + }, + lineheight: { + selector: 'h1,h2,h3,h4,h5,h6,p,li,td,th,div', + defaultBlock: 'p', + styles: { lineHeight: '%value' } + }, + fontsize_class: { + inline: 'span', + attributes: { class: '%value' } + }, + blockquote: { + block: 'blockquote', + wrapper: true, + remove: 'all' + }, + subscript: { inline: 'sub' }, + superscript: { inline: 'sup' }, + code: { inline: 'code' }, + link: { + inline: 'a', + selector: 'a', + remove: 'all', + split: true, + deep: true, + onmatch: function (node, _fmt, _itemName) { + return isElement$1(node) && node.hasAttribute('href'); + }, + onformat: function (elm, _fmt, vars) { + Tools.each(vars, function (value, key) { + dom.setAttrib(elm, key, value); + }); + } + }, + removeformat: [ + { + selector: 'b,strong,em,i,font,u,strike,s,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins,small', + remove: 'all', + split: true, + expand: false, + block_expand: true, + deep: true + }, + { + selector: 'span', + attributes: [ + 'style', + 'class' + ], + remove: 'empty', + split: true, + expand: false, + deep: true + }, + { + selector: '*', + attributes: [ + 'style', + 'class' + ], + split: false, + expand: false, + deep: true + } + ] + }; + Tools.each('p h1 h2 h3 h4 h5 h6 div address pre dt dd samp'.split(/\s/), function (name) { + formats[name] = { + block: name, + remove: 'all' + }; + }); + return formats; + }; + + var FormatRegistry = function (editor) { + var formats = {}; + var get = function (name) { + return name ? formats[name] : formats; + }; + var has$1 = function (name) { + return has(formats, name); + }; + var register = function (name, format) { + if (name) { + if (typeof name !== 'string') { + Tools.each(name, function (format, name) { + register(name, format); + }); + } else { + if (!isArray(format)) { + format = [format]; + } + Tools.each(format, function (format) { + if (typeof format.deep === 'undefined') { + format.deep = !format.selector; + } + if (typeof format.split === 'undefined') { + format.split = !format.selector || format.inline; + } + if (typeof format.remove === 'undefined' && format.selector && !format.inline) { + format.remove = 'none'; + } + if (format.selector && format.inline) { + format.mixed = true; + format.block_expand = true; + } + if (typeof format.classes === 'string') { + format.classes = format.classes.split(/\s+/); + } + }); + formats[name] = format; + } + } + }; + var unregister = function (name) { + if (name && formats[name]) { + delete formats[name]; + } + return formats; + }; + register(get$a(editor.dom)); + register(getFormats(editor)); + return { + get: get, + has: has$1, + register: register, + unregister: unregister + }; + }; + + var each$e = Tools.each; + var dom = DOMUtils.DOM; + var parsedSelectorToHtml = function (ancestry, editor) { + var elm, item, fragment; + var schema = editor && editor.schema || Schema({}); + var decorate = function (elm, item) { + if (item.classes.length) { + dom.addClass(elm, item.classes.join(' ')); + } + dom.setAttribs(elm, item.attrs); + }; + var createElement = function (sItem) { + item = typeof sItem === 'string' ? { + name: sItem, + classes: [], + attrs: {} + } : sItem; + var elm = dom.create(item.name); + decorate(elm, item); + return elm; + }; + var getRequiredParent = function (elm, candidate) { + var name = typeof elm !== 'string' ? elm.nodeName.toLowerCase() : elm; + var elmRule = schema.getElementRule(name); + var parentsRequired = elmRule && elmRule.parentsRequired; + if (parentsRequired && parentsRequired.length) { + return candidate && Tools.inArray(parentsRequired, candidate) !== -1 ? candidate : parentsRequired[0]; + } else { + return false; + } + }; + var wrapInHtml = function (elm, ancestry, siblings) { + var parent, parentCandidate; + var ancestor = ancestry.length > 0 && ancestry[0]; + var ancestorName = ancestor && ancestor.name; + var parentRequired = getRequiredParent(elm, ancestorName); + if (parentRequired) { + if (ancestorName === parentRequired) { + parentCandidate = ancestry[0]; + ancestry = ancestry.slice(1); + } else { + parentCandidate = parentRequired; + } + } else if (ancestor) { + parentCandidate = ancestry[0]; + ancestry = ancestry.slice(1); + } else if (!siblings) { + return elm; + } + if (parentCandidate) { + parent = createElement(parentCandidate); + parent.appendChild(elm); + } + if (siblings) { + if (!parent) { + parent = dom.create('div'); + parent.appendChild(elm); + } + Tools.each(siblings, function (sibling) { + var siblingElm = createElement(sibling); + parent.insertBefore(siblingElm, elm); + }); + } + return wrapInHtml(parent, ancestry, parentCandidate && parentCandidate.siblings); + }; + if (ancestry && ancestry.length) { + item = ancestry[0]; + elm = createElement(item); + fragment = dom.create('div'); + fragment.appendChild(wrapInHtml(elm, ancestry.slice(1), item.siblings)); + return fragment; + } else { + return ''; + } + }; + var parseSelectorItem = function (item) { + var tagName; + var obj = { + classes: [], + attrs: {} + }; + item = obj.selector = Tools.trim(item); + if (item !== '*') { + tagName = item.replace(/(?:([#\.]|::?)([\w\-]+)|(\[)([^\]]+)\]?)/g, function ($0, $1, $2, $3, $4) { + switch ($1) { + case '#': + obj.attrs.id = $2; + break; + case '.': + obj.classes.push($2); + break; + case ':': + if (Tools.inArray('checked disabled enabled read-only required'.split(' '), $2) !== -1) { + obj.attrs[$2] = $2; + } + break; + } + if ($3 === '[') { + var m = $4.match(/([\w\-]+)(?:\=\"([^\"]+))?/); + if (m) { + obj.attrs[m[1]] = m[2]; + } + } + return ''; + }); + } + obj.name = tagName || 'div'; + return obj; + }; + var parseSelector = function (selector) { + if (!selector || typeof selector !== 'string') { + return []; + } + selector = selector.split(/\s*,\s*/)[0]; + selector = selector.replace(/\s*(~\+|~|\+|>)\s*/g, '$1'); + return Tools.map(selector.split(/(?:>|\s+(?![^\[\]]+\]))/), function (item) { + var siblings = Tools.map(item.split(/(?:~\+|~|\+)/), parseSelectorItem); + var obj = siblings.pop(); + if (siblings.length) { + obj.siblings = siblings; + } + return obj; + }).reverse(); + }; + var getCssText = function (editor, format) { + var name, previewFrag; + var previewCss = '', parentFontSize; + var previewStyles = getPreviewStyles(editor); + if (previewStyles === '') { + return ''; + } + var removeVars = function (val) { + return val.replace(/%(\w+)/g, ''); + }; + if (typeof format === 'string') { + format = editor.formatter.get(format); + if (!format) { + return; + } + format = format[0]; + } + if ('preview' in format) { + var previewOpt = get$1(format, 'preview'); + if (previewOpt.is(false)) { + return ''; + } else { + previewStyles = previewOpt.getOr(previewStyles); + } + } + name = format.block || format.inline || 'span'; + var items = parseSelector(format.selector); + if (items.length) { + if (!items[0].name) { + items[0].name = name; + } + name = format.selector; + previewFrag = parsedSelectorToHtml(items, editor); + } else { + previewFrag = parsedSelectorToHtml([name], editor); + } + var previewElm = dom.select(name, previewFrag)[0] || previewFrag.firstChild; + each$e(format.styles, function (value, name) { + var newValue = removeVars(value); + if (newValue) { + dom.setStyle(previewElm, name, newValue); + } + }); + each$e(format.attributes, function (value, name) { + var newValue = removeVars(value); + if (newValue) { + dom.setAttrib(previewElm, name, newValue); + } + }); + each$e(format.classes, function (value) { + var newValue = removeVars(value); + if (!dom.hasClass(previewElm, newValue)) { + dom.addClass(previewElm, newValue); + } + }); + editor.fire('PreviewFormats'); + dom.setStyles(previewFrag, { + position: 'absolute', + left: -65535 + }); + editor.getBody().appendChild(previewFrag); + parentFontSize = dom.getStyle(editor.getBody(), 'fontSize', true); + parentFontSize = /px$/.test(parentFontSize) ? parseInt(parentFontSize, 10) : 0; + each$e(previewStyles.split(' '), function (name) { + var value = dom.getStyle(previewElm, name, true); + if (name === 'background-color' && /transparent|rgba\s*\([^)]+,\s*0\)/.test(value)) { + value = dom.getStyle(editor.getBody(), name, true); + if (dom.toHex(value).toLowerCase() === '#ffffff') { + return; + } + } + if (name === 'color') { + if (dom.toHex(value).toLowerCase() === '#000000') { + return; + } + } + if (name === 'font-size') { + if (/em|%$/.test(value)) { + if (parentFontSize === 0) { + return; + } + var numValue = parseFloat(value) / (/%$/.test(value) ? 100 : 1); + value = numValue * parentFontSize + 'px'; + } + } + if (name === 'border' && value) { + previewCss += 'padding:0 2px;'; + } + previewCss += name + ':' + value + ';'; + }); + editor.fire('AfterPreviewFormats'); + dom.remove(previewFrag); + return previewCss; + }; + + var setup$6 = function (editor) { + editor.addShortcut('meta+b', '', 'Bold'); + editor.addShortcut('meta+i', '', 'Italic'); + editor.addShortcut('meta+u', '', 'Underline'); + for (var i = 1; i <= 6; i++) { + editor.addShortcut('access+' + i, '', [ + 'FormatBlock', + false, + 'h' + i + ]); + } + editor.addShortcut('access+7', '', [ + 'FormatBlock', + false, + 'p' + ]); + editor.addShortcut('access+8', '', [ + 'FormatBlock', + false, + 'div' + ]); + editor.addShortcut('access+9', '', [ + 'FormatBlock', + false, + 'address' + ]); + }; + + var Formatter = function (editor) { + var formats = FormatRegistry(editor); + var formatChangeState = Cell(null); + setup$6(editor); + setup$3(editor); + return { + get: formats.get, + has: formats.has, + register: formats.register, + unregister: formats.unregister, + apply: function (name, vars, node) { + applyFormat$1(editor, name, vars, node); + }, + remove: function (name, vars, node, similar) { + removeFormat$1(editor, name, vars, node, similar); + }, + toggle: function (name, vars, node) { + toggleFormat(editor, name, vars, node); + }, + match: function (name, vars, node) { + return matchFormat(editor, name, vars, node); + }, + closest: function (names) { + return closestFormat(editor, names); + }, + matchAll: function (names, vars) { + return matchAllFormats(editor, names, vars); + }, + matchNode: function (node, names, vars, similar) { + return matchNodeFormat(editor, node, names, vars, similar); + }, + canApply: function (name) { + return canApplyFormat(editor, name); + }, + formatChanged: function (formats, callback, similar) { + return formatChanged(editor, formatChangeState, formats, callback, similar); + }, + getCssText: curry(getCssText, editor) + }; + }; + + var registerEvents$1 = function (editor, undoManager, locks) { + var isFirstTypedCharacter = Cell(false); + var addNonTypingUndoLevel = function (e) { + setTyping(undoManager, false, locks); + undoManager.add({}, e); + }; + editor.on('init', function () { + undoManager.add(); + }); + editor.on('BeforeExecCommand', function (e) { + var cmd = e.command.toLowerCase(); + if (cmd !== 'undo' && cmd !== 'redo' && cmd !== 'mcerepaint') { + endTyping(undoManager, locks); + undoManager.beforeChange(); + } + }); + editor.on('ExecCommand', function (e) { + var cmd = e.command.toLowerCase(); + if (cmd !== 'undo' && cmd !== 'redo' && cmd !== 'mcerepaint') { + addNonTypingUndoLevel(e); + } + }); + editor.on('ObjectResizeStart cut', function () { + undoManager.beforeChange(); + }); + editor.on('SaveContent ObjectResized blur', addNonTypingUndoLevel); + editor.on('dragend', addNonTypingUndoLevel); + editor.on('keyup', function (e) { + var keyCode = e.keyCode; + if (e.isDefaultPrevented()) { + return; + } + if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45 || e.ctrlKey) { + addNonTypingUndoLevel(); + editor.nodeChanged(); + } + if (keyCode === 46 || keyCode === 8) { + editor.nodeChanged(); + } + if (isFirstTypedCharacter.get() && undoManager.typing && isEq$4(createFromEditor(editor), undoManager.data[0]) === false) { + if (editor.isDirty() === false) { + editor.setDirty(true); + editor.fire('change', { + level: undoManager.data[0], + lastLevel: null + }); + } + editor.fire('TypingUndo'); + isFirstTypedCharacter.set(false); + editor.nodeChanged(); + } + }); + editor.on('keydown', function (e) { + var keyCode = e.keyCode; + if (e.isDefaultPrevented()) { + return; + } + if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45) { + if (undoManager.typing) { + addNonTypingUndoLevel(e); + } + return; + } + var modKey = e.ctrlKey && !e.altKey || e.metaKey; + if ((keyCode < 16 || keyCode > 20) && keyCode !== 224 && keyCode !== 91 && !undoManager.typing && !modKey) { + undoManager.beforeChange(); + setTyping(undoManager, true, locks); + undoManager.add({}, e); + isFirstTypedCharacter.set(true); + } + }); + editor.on('mousedown', function (e) { + if (undoManager.typing) { + addNonTypingUndoLevel(e); + } + }); + var isInsertReplacementText = function (event) { + return event.inputType === 'insertReplacementText'; + }; + var isInsertTextDataNull = function (event) { + return event.inputType === 'insertText' && event.data === null; + }; + var isInsertFromPasteOrDrop = function (event) { + return event.inputType === 'insertFromPaste' || event.inputType === 'insertFromDrop'; + }; + editor.on('input', function (e) { + if (e.inputType && (isInsertReplacementText(e) || isInsertTextDataNull(e) || isInsertFromPasteOrDrop(e))) { + addNonTypingUndoLevel(e); + } + }); + editor.on('AddUndo Undo Redo ClearUndos', function (e) { + if (!e.isDefaultPrevented()) { + editor.nodeChanged(); + } + }); + }; + var addKeyboardShortcuts = function (editor) { + editor.addShortcut('meta+z', '', 'Undo'); + editor.addShortcut('meta+y,meta+shift+z', '', 'Redo'); + }; + + var UndoManager = function (editor) { + var beforeBookmark = Cell(Optional.none()); + var locks = Cell(0); + var index = Cell(0); + var undoManager = { + data: [], + typing: false, + beforeChange: function () { + beforeChange$1(editor, locks, beforeBookmark); + }, + add: function (level, event) { + return addUndoLevel$1(editor, undoManager, index, locks, beforeBookmark, level, event); + }, + undo: function () { + return undo$1(editor, undoManager, locks, index); + }, + redo: function () { + return redo$1(editor, index, undoManager.data); + }, + clear: function () { + clear$1(editor, undoManager, index); + }, + reset: function () { + reset$1(editor, undoManager); + }, + hasUndo: function () { + return hasUndo$1(editor, undoManager, index); + }, + hasRedo: function () { + return hasRedo$1(editor, undoManager, index); + }, + transact: function (callback) { + return transact$1(editor, undoManager, locks, callback); + }, + ignore: function (callback) { + ignore$1(editor, locks, callback); + }, + extra: function (callback1, callback2) { + extra$1(editor, undoManager, index, callback1, callback2); + } + }; + if (!isRtc(editor)) { + registerEvents$1(editor, undoManager, locks); + } + addKeyboardShortcuts(editor); + return undoManager; + }; + + var nonTypingKeycodes = [ + 9, + 27, + VK.HOME, + VK.END, + 19, + 20, + 44, + 144, + 145, + 33, + 34, + 45, + 16, + 17, + 18, + 91, + 92, + 93, + VK.DOWN, + VK.UP, + VK.LEFT, + VK.RIGHT + ].concat(Env.browser.isFirefox() ? [224] : []); + var placeholderAttr = 'data-mce-placeholder'; + var isKeyboardEvent = function (e) { + return e.type === 'keydown' || e.type === 'keyup'; + }; + var isDeleteEvent = function (e) { + var keyCode = e.keyCode; + return keyCode === VK.BACKSPACE || keyCode === VK.DELETE; + }; + var isNonTypingKeyboardEvent = function (e) { + if (isKeyboardEvent(e)) { + var keyCode = e.keyCode; + return !isDeleteEvent(e) && (VK.metaKeyPressed(e) || e.altKey || keyCode >= 112 && keyCode <= 123 || contains(nonTypingKeycodes, keyCode)); + } else { + return false; + } + }; + var isTypingKeyboardEvent = function (e) { + return isKeyboardEvent(e) && !(isDeleteEvent(e) || e.type === 'keyup' && e.keyCode === 229); + }; + var isVisuallyEmpty = function (dom, rootElm, forcedRootBlock) { + if (isEmpty(SugarElement.fromDom(rootElm), false)) { + var isForcedRootBlockFalse = forcedRootBlock === ''; + var firstElement = rootElm.firstElementChild; + if (!firstElement) { + return true; + } else if (dom.getStyle(rootElm.firstElementChild, 'padding-left') || dom.getStyle(rootElm.firstElementChild, 'padding-right')) { + return false; + } else { + return isForcedRootBlockFalse ? !dom.isBlock(firstElement) : forcedRootBlock === firstElement.nodeName.toLowerCase(); + } + } else { + return false; + } + }; + var setup$7 = function (editor) { + var dom = editor.dom; + var rootBlock = getForcedRootBlock(editor); + var placeholder = getPlaceholder(editor); + var updatePlaceholder = function (e, initial) { + if (isNonTypingKeyboardEvent(e)) { + return; + } + var body = editor.getBody(); + var showPlaceholder = isTypingKeyboardEvent(e) ? false : isVisuallyEmpty(dom, body, rootBlock); + var isPlaceholderShown = dom.getAttrib(body, placeholderAttr) !== ''; + if (isPlaceholderShown !== showPlaceholder || initial) { + dom.setAttrib(body, placeholderAttr, showPlaceholder ? placeholder : null); + dom.setAttrib(body, 'aria-placeholder', showPlaceholder ? placeholder : null); + firePlaceholderToggle(editor, showPlaceholder); + editor.on(showPlaceholder ? 'keydown' : 'keyup', updatePlaceholder); + editor.off(showPlaceholder ? 'keyup' : 'keydown', updatePlaceholder); + } + }; + if (placeholder) { + editor.on('init', function (e) { + updatePlaceholder(e, true); + editor.on('change SetContent ExecCommand', updatePlaceholder); + editor.on('paste', function (e) { + return Delay.setEditorTimeout(editor, function () { + return updatePlaceholder(e); + }); + }); + }); + } + }; + + var strongRtl = /[\u0591-\u07FF\uFB1D-\uFDFF\uFE70-\uFEFC]/; + var hasStrongRtl = function (text) { + return strongRtl.test(text); + }; + + var isInlineTarget = function (editor, elm) { + return is$1(SugarElement.fromDom(elm), getInlineBoundarySelector(editor)); + }; + var isRtl$1 = function (element) { + return DOMUtils.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl(element.textContent); + }; + var findInlineParents = function (isInlineTarget, rootNode, pos) { + return filter(DOMUtils.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget); + }; + var findRootInline = function (isInlineTarget, rootNode, pos) { + var parents = findInlineParents(isInlineTarget, rootNode, pos); + return Optional.from(parents[parents.length - 1]); + }; + var hasSameParentBlock = function (rootNode, node1, node2) { + var block1 = getParentBlock(node1, rootNode); + var block2 = getParentBlock(node2, rootNode); + return block1 && block1 === block2; + }; + var isAtZwsp = function (pos) { + return isBeforeInline(pos) || isAfterInline(pos); + }; + var normalizePosition = function (forward, pos) { + if (!pos) { + return pos; + } + var container = pos.container(), offset = pos.offset(); + if (forward) { + if (isCaretContainerInline(container)) { + if (isText$1(container.nextSibling)) { + return CaretPosition(container.nextSibling, 0); + } else { + return CaretPosition.after(container); + } + } else { + return isBeforeInline(pos) ? CaretPosition(container, offset + 1) : pos; + } + } else { + if (isCaretContainerInline(container)) { + if (isText$1(container.previousSibling)) { + return CaretPosition(container.previousSibling, container.previousSibling.data.length); + } else { + return CaretPosition.before(container); + } + } else { + return isAfterInline(pos) ? CaretPosition(container, offset - 1) : pos; + } + } + }; + var normalizeForwards = curry(normalizePosition, true); + var normalizeBackwards = curry(normalizePosition, false); + + var isBeforeRoot = function (rootNode) { + return function (elm) { + return eq$2(rootNode, SugarElement.fromDom(elm.dom.parentNode)); + }; + }; + var getParentBlock$1 = function (rootNode, elm) { + return contains$2(rootNode, elm) ? closest(elm, function (element) { + return isTextBlock(element) || isListItem(element); + }, isBeforeRoot(rootNode)) : Optional.none(); + }; + var placeCaretInEmptyBody = function (editor) { + var body = editor.getBody(); + var node = body.firstChild && editor.dom.isBlock(body.firstChild) ? body.firstChild : body; + editor.selection.setCursorLocation(node, 0); + }; + var paddEmptyBody = function (editor) { + if (editor.dom.isEmpty(editor.getBody())) { + editor.setContent(''); + placeCaretInEmptyBody(editor); + } + }; + var willDeleteLastPositionInElement = function (forward, fromPos, elm) { + return lift2(firstPositionIn(elm), lastPositionIn(elm), function (firstPos, lastPos) { + var normalizedFirstPos = normalizePosition(true, firstPos); + var normalizedLastPos = normalizePosition(false, lastPos); + var normalizedFromPos = normalizePosition(false, fromPos); + if (forward) { + return nextPosition(elm, normalizedFromPos).exists(function (nextPos) { + return nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos); + }); + } else { + return prevPosition(elm, normalizedFromPos).exists(function (prevPos) { + return prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos); + }); + } + }).getOr(true); + }; + + var blockPosition = function (block, position) { + return { + block: block, + position: position + }; + }; + var blockBoundary = function (from, to) { + return { + from: from, + to: to + }; + }; + var getBlockPosition = function (rootNode, pos) { + var rootElm = SugarElement.fromDom(rootNode); + var containerElm = SugarElement.fromDom(pos.container()); + return getParentBlock$1(rootElm, containerElm).map(function (block) { + return blockPosition(block, pos); + }); + }; + var isDifferentBlocks = function (blockBoundary) { + return eq$2(blockBoundary.from.block, blockBoundary.to.block) === false; + }; + var hasSameParent = function (blockBoundary) { + return parent(blockBoundary.from.block).bind(function (parent1) { + return parent(blockBoundary.to.block).filter(function (parent2) { + return eq$2(parent1, parent2); + }); + }).isSome(); + }; + var isEditable = function (blockBoundary) { + return isContentEditableFalse(blockBoundary.from.block.dom) === false && isContentEditableFalse(blockBoundary.to.block.dom) === false; + }; + var skipLastBr = function (rootNode, forward, blockPosition) { + if (isBr(blockPosition.position.getNode()) && isEmpty(blockPosition.block) === false) { + return positionIn(false, blockPosition.block.dom).bind(function (lastPositionInBlock) { + if (lastPositionInBlock.isEqual(blockPosition.position)) { + return fromPosition(forward, rootNode, lastPositionInBlock).bind(function (to) { + return getBlockPosition(rootNode, to); + }); + } else { + return Optional.some(blockPosition); + } + }).getOr(blockPosition); + } else { + return blockPosition; + } + }; + var readFromRange = function (rootNode, forward, rng) { + var fromBlockPos = getBlockPosition(rootNode, CaretPosition.fromRangeStart(rng)); + var toBlockPos = fromBlockPos.bind(function (blockPos) { + return fromPosition(forward, rootNode, blockPos.position).bind(function (to) { + return getBlockPosition(rootNode, to).map(function (blockPos) { + return skipLastBr(rootNode, forward, blockPos); + }); + }); + }); + return lift2(fromBlockPos, toBlockPos, blockBoundary).filter(function (blockBoundary) { + return isDifferentBlocks(blockBoundary) && hasSameParent(blockBoundary) && isEditable(blockBoundary); + }); + }; + var read$3 = function (rootNode, forward, rng) { + return rng.collapsed ? readFromRange(rootNode, forward, rng) : Optional.none(); + }; + + var getChildrenUntilBlockBoundary = function (block) { + var children$1 = children(block); + return findIndex(children$1, isBlock).fold(function () { + return children$1; + }, function (index) { + return children$1.slice(0, index); + }); + }; + var extractChildren = function (block) { + var children = getChildrenUntilBlockBoundary(block); + each(children, remove); + return children; + }; + var removeEmptyRoot = function (rootNode, block) { + var parents = parentsAndSelf(block, rootNode); + return find(parents.reverse(), function (element) { + return isEmpty(element); + }).each(remove); + }; + var isEmptyBefore = function (el) { + return filter(prevSiblings(el), function (el) { + return !isEmpty(el); + }).length === 0; + }; + var nestedBlockMerge = function (rootNode, fromBlock, toBlock, insertionPoint) { + if (isEmpty(toBlock)) { + fillWithPaddingBr(toBlock); + return firstPositionIn(toBlock.dom); + } + if (isEmptyBefore(insertionPoint) && isEmpty(fromBlock)) { + before(insertionPoint, SugarElement.fromTag('br')); + } + var position = prevPosition(toBlock.dom, CaretPosition.before(insertionPoint.dom)); + each(extractChildren(fromBlock), function (child) { + before(insertionPoint, child); + }); + removeEmptyRoot(rootNode, fromBlock); + return position; + }; + var sidelongBlockMerge = function (rootNode, fromBlock, toBlock) { + if (isEmpty(toBlock)) { + remove(toBlock); + if (isEmpty(fromBlock)) { + fillWithPaddingBr(fromBlock); + } + return firstPositionIn(fromBlock.dom); + } + var position = lastPositionIn(toBlock.dom); + each(extractChildren(fromBlock), function (child) { + append(toBlock, child); + }); + removeEmptyRoot(rootNode, fromBlock); + return position; + }; + var findInsertionPoint = function (toBlock, block) { + var parentsAndSelf$1 = parentsAndSelf(block, toBlock); + return Optional.from(parentsAndSelf$1[parentsAndSelf$1.length - 1]); + }; + var getInsertionPoint = function (fromBlock, toBlock) { + return contains$2(toBlock, fromBlock) ? findInsertionPoint(toBlock, fromBlock) : Optional.none(); + }; + var trimBr = function (first, block) { + positionIn(first, block.dom).map(function (position) { + return position.getNode(); + }).map(SugarElement.fromDom).filter(isBr$1).each(remove); + }; + var mergeBlockInto = function (rootNode, fromBlock, toBlock) { + trimBr(true, fromBlock); + trimBr(false, toBlock); + return getInsertionPoint(fromBlock, toBlock).fold(curry(sidelongBlockMerge, rootNode, fromBlock, toBlock), curry(nestedBlockMerge, rootNode, fromBlock, toBlock)); + }; + var mergeBlocks = function (rootNode, forward, block1, block2) { + return forward ? mergeBlockInto(rootNode, block2, block1) : mergeBlockInto(rootNode, block1, block2); + }; + + var backspaceDelete$1 = function (editor, forward) { + var rootNode = SugarElement.fromDom(editor.getBody()); + var position = read$3(rootNode.dom, forward, editor.selection.getRng()).bind(function (blockBoundary) { + return mergeBlocks(rootNode, forward, blockBoundary.from.block, blockBoundary.to.block); + }); + position.each(function (pos) { + editor.selection.setRng(pos.toRange()); + }); + return position.isSome(); + }; + + var deleteRangeMergeBlocks = function (rootNode, selection) { + var rng = selection.getRng(); + return lift2(getParentBlock$1(rootNode, SugarElement.fromDom(rng.startContainer)), getParentBlock$1(rootNode, SugarElement.fromDom(rng.endContainer)), function (block1, block2) { + if (eq$2(block1, block2) === false) { + rng.deleteContents(); + mergeBlocks(rootNode, true, block1, block2).each(function (pos) { + selection.setRng(pos.toRange()); + }); + return true; + } else { + return false; + } + }).getOr(false); + }; + var isRawNodeInTable = function (root, rawNode) { + var node = SugarElement.fromDom(rawNode); + var isRoot = curry(eq$2, root); + return ancestor(node, isTableCell$1, isRoot).isSome(); + }; + var isSelectionInTable = function (root, rng) { + return isRawNodeInTable(root, rng.startContainer) || isRawNodeInTable(root, rng.endContainer); + }; + var isEverythingSelected = function (root, rng) { + var noPrevious = prevPosition(root.dom, CaretPosition.fromRangeStart(rng)).isNone(); + var noNext = nextPosition(root.dom, CaretPosition.fromRangeEnd(rng)).isNone(); + return !isSelectionInTable(root, rng) && noPrevious && noNext; + }; + var emptyEditor = function (editor) { + editor.setContent(''); + editor.selection.setCursorLocation(); + return true; + }; + var deleteRange$1 = function (editor) { + var rootNode = SugarElement.fromDom(editor.getBody()); + var rng = editor.selection.getRng(); + return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection); + }; + var backspaceDelete$2 = function (editor, _forward) { + return editor.selection.isCollapsed() ? false : deleteRange$1(editor); + }; + + var isContentEditableTrue$2 = isContentEditableTrue; + var isContentEditableFalse$7 = isContentEditableFalse; + var showCaret = function (direction, editor, node, before, scrollIntoView) { + return Optional.from(editor._selectionOverrides.showCaret(direction, node, before, scrollIntoView)); + }; + var getNodeRange = function (node) { + var rng = node.ownerDocument.createRange(); + rng.selectNode(node); + return rng; + }; + var selectNode = function (editor, node) { + var e = editor.fire('BeforeObjectSelected', { target: node }); + if (e.isDefaultPrevented()) { + return Optional.none(); + } + return Optional.some(getNodeRange(node)); + }; + var renderCaretAtRange = function (editor, range, scrollIntoView) { + var normalizedRange = normalizeRange(1, editor.getBody(), range); + var caretPosition = CaretPosition.fromRangeStart(normalizedRange); + var caretPositionNode = caretPosition.getNode(); + if (isInlineFakeCaretTarget(caretPositionNode)) { + return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false); + } + var caretPositionBeforeNode = caretPosition.getNode(true); + if (isInlineFakeCaretTarget(caretPositionBeforeNode)) { + return showCaret(1, editor, caretPositionBeforeNode, false, false); + } + var ceRoot = editor.dom.getParent(caretPosition.getNode(), function (node) { + return isContentEditableFalse$7(node) || isContentEditableTrue$2(node); + }); + if (isInlineFakeCaretTarget(ceRoot)) { + return showCaret(1, editor, ceRoot, false, scrollIntoView); + } + return Optional.none(); + }; + var renderRangeCaret = function (editor, range, scrollIntoView) { + return range.collapsed ? renderCaretAtRange(editor, range, scrollIntoView).getOr(range) : range; + }; + + var isBeforeBoundary = function (pos) { + return isBeforeContentEditableFalse(pos) || isBeforeMedia(pos); + }; + var isAfterBoundary = function (pos) { + return isAfterContentEditableFalse(pos) || isAfterMedia(pos); + }; + var trimEmptyTextNode$1 = function (dom, node) { + if (isText$1(node) && node.data.length === 0) { + dom.remove(node); + } + }; + var deleteContentAndShowCaret = function (editor, range, node, direction, forward, peekCaretPosition) { + showCaret(direction, editor, peekCaretPosition.getNode(!forward), forward, true).each(function (caretRange) { + if (range.collapsed) { + var deleteRange = range.cloneRange(); + if (forward) { + deleteRange.setEnd(caretRange.startContainer, caretRange.startOffset); + } else { + deleteRange.setStart(caretRange.endContainer, caretRange.endOffset); + } + deleteRange.deleteContents(); + } else { + range.deleteContents(); + } + editor.selection.setRng(caretRange); + }); + trimEmptyTextNode$1(editor.dom, node); + return true; + }; + var deleteBoundaryText = function (editor, forward) { + var range = editor.selection.getRng(); + if (!isText$1(range.commonAncestorContainer)) { + return false; + } + var direction = forward ? HDirection.Forwards : HDirection.Backwards; + var caretWalker = CaretWalker(editor.getBody()); + var getNextPosFn = curry(getVisualCaretPosition, forward ? caretWalker.next : caretWalker.prev); + var isBeforeFn = forward ? isBeforeBoundary : isAfterBoundary; + var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range); + var nextCaretPosition = normalizePosition(forward, getNextPosFn(caretPosition)); + if (!nextCaretPosition || !isMoveInsideSameBlock(caretPosition, nextCaretPosition)) { + return false; + } else if (isBeforeFn(nextCaretPosition)) { + return deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, nextCaretPosition); + } + var peekCaretPosition = getNextPosFn(nextCaretPosition); + if (peekCaretPosition && isBeforeFn(peekCaretPosition)) { + if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) { + return deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, peekCaretPosition); + } + } + return false; + }; + var backspaceDelete$3 = function (editor, forward) { + return deleteBoundaryText(editor, forward); + }; + + var isCompoundElement = function (node) { + return isTableCell$1(SugarElement.fromDom(node)) || isListItem(SugarElement.fromDom(node)); + }; + var DeleteAction = Adt.generate([ + { remove: ['element'] }, + { moveToElement: ['element'] }, + { moveToPosition: ['position'] } + ]); + var isAtContentEditableBlockCaret = function (forward, from) { + var elm = from.getNode(forward === false); + var caretLocation = forward ? 'after' : 'before'; + return isElement$1(elm) && elm.getAttribute('data-mce-caret') === caretLocation; + }; + var isDeleteFromCefDifferentBlocks = function (root, forward, from, to) { + var inSameBlock = function (elm) { + return isInline(SugarElement.fromDom(elm)) && !isInSameBlock(from, to, root); + }; + return getRelativeCefElm(!forward, from).fold(function () { + return getRelativeCefElm(forward, to).fold(never, inSameBlock); + }, inSameBlock); + }; + var deleteEmptyBlockOrMoveToCef = function (root, forward, from, to) { + var toCefElm = to.getNode(forward === false); + return getParentBlock$1(SugarElement.fromDom(root), SugarElement.fromDom(from.getNode())).map(function (blockElm) { + return isEmpty(blockElm) ? DeleteAction.remove(blockElm.dom) : DeleteAction.moveToElement(toCefElm); + }).orThunk(function () { + return Optional.some(DeleteAction.moveToElement(toCefElm)); + }); + }; + var findCefPosition = function (root, forward, from) { + return fromPosition(forward, root, from).bind(function (to) { + if (isCompoundElement(to.getNode())) { + return Optional.none(); + } else if (isDeleteFromCefDifferentBlocks(root, forward, from, to)) { + return Optional.none(); + } else if (forward && isContentEditableFalse(to.getNode())) { + return deleteEmptyBlockOrMoveToCef(root, forward, from, to); + } else if (forward === false && isContentEditableFalse(to.getNode(true))) { + return deleteEmptyBlockOrMoveToCef(root, forward, from, to); + } else if (forward && isAfterContentEditableFalse(from)) { + return Optional.some(DeleteAction.moveToPosition(to)); + } else if (forward === false && isBeforeContentEditableFalse(from)) { + return Optional.some(DeleteAction.moveToPosition(to)); + } else { + return Optional.none(); + } + }); + }; + var getContentEditableBlockAction = function (forward, elm) { + if (forward && isContentEditableFalse(elm.nextSibling)) { + return Optional.some(DeleteAction.moveToElement(elm.nextSibling)); + } else if (forward === false && isContentEditableFalse(elm.previousSibling)) { + return Optional.some(DeleteAction.moveToElement(elm.previousSibling)); + } else { + return Optional.none(); + } + }; + var skipMoveToActionFromInlineCefToContent = function (root, from, deleteAction) { + return deleteAction.fold(function (elm) { + return Optional.some(DeleteAction.remove(elm)); + }, function (elm) { + return Optional.some(DeleteAction.moveToElement(elm)); + }, function (to) { + if (isInSameBlock(from, to, root)) { + return Optional.none(); + } else { + return Optional.some(DeleteAction.moveToPosition(to)); + } + }); + }; + var getContentEditableAction = function (root, forward, from) { + if (isAtContentEditableBlockCaret(forward, from)) { + return getContentEditableBlockAction(forward, from.getNode(forward === false)).fold(function () { + return findCefPosition(root, forward, from); + }, Optional.some); + } else { + return findCefPosition(root, forward, from).bind(function (deleteAction) { + return skipMoveToActionFromInlineCefToContent(root, from, deleteAction); + }); + } + }; + var read$4 = function (root, forward, rng) { + var normalizedRange = normalizeRange(forward ? 1 : -1, root, rng); + var from = CaretPosition.fromRangeStart(normalizedRange); + var rootElement = SugarElement.fromDom(root); + if (forward === false && isAfterContentEditableFalse(from)) { + return Optional.some(DeleteAction.remove(from.getNode(true))); + } else if (forward && isBeforeContentEditableFalse(from)) { + return Optional.some(DeleteAction.remove(from.getNode())); + } else if (forward === false && isBeforeContentEditableFalse(from) && isAfterBr(rootElement, from)) { + return findPreviousBr(rootElement, from).map(function (br) { + return DeleteAction.remove(br.getNode()); + }); + } else if (forward && isAfterContentEditableFalse(from) && isBeforeBr(rootElement, from)) { + return findNextBr(rootElement, from).map(function (br) { + return DeleteAction.remove(br.getNode()); + }); + } else { + return getContentEditableAction(root, forward, from); + } + }; + + var deleteElement$1 = function (editor, forward) { + return function (element) { + editor._selectionOverrides.hideFakeCaret(); + deleteElement(editor, forward, SugarElement.fromDom(element)); + return true; + }; + }; + var moveToElement = function (editor, forward) { + return function (element) { + var pos = forward ? CaretPosition.before(element) : CaretPosition.after(element); + editor.selection.setRng(pos.toRange()); + return true; + }; + }; + var moveToPosition = function (editor) { + return function (pos) { + editor.selection.setRng(pos.toRange()); + return true; + }; + }; + var getAncestorCe = function (editor, node) { + return Optional.from(getContentEditableRoot(editor.getBody(), node)); + }; + var backspaceDeleteCaret = function (editor, forward) { + var selectedNode = editor.selection.getNode(); + return getAncestorCe(editor, selectedNode).filter(isContentEditableFalse).fold(function () { + return read$4(editor.getBody(), forward, editor.selection.getRng()).exists(function (deleteAction) { + return deleteAction.fold(deleteElement$1(editor, forward), moveToElement(editor, forward), moveToPosition(editor)); + }); + }, always); + }; + var deleteOffscreenSelection = function (rootElement) { + each(descendants$1(rootElement, '.mce-offscreen-selection'), remove); + }; + var backspaceDeleteRange = function (editor, forward) { + var selectedNode = editor.selection.getNode(); + if (isContentEditableFalse(selectedNode)) { + var hasCefAncestor = getAncestorCe(editor, selectedNode.parentNode).filter(isContentEditableFalse); + return hasCefAncestor.fold(function () { + deleteOffscreenSelection(SugarElement.fromDom(editor.getBody())); + deleteElement(editor, forward, SugarElement.fromDom(editor.selection.getNode())); + paddEmptyBody(editor); + return true; + }, always); + } + return false; + }; + var paddEmptyElement = function (editor) { + var dom = editor.dom, selection = editor.selection; + var ceRoot = getContentEditableRoot(editor.getBody(), selection.getNode()); + if (isContentEditableTrue(ceRoot) && dom.isBlock(ceRoot) && dom.isEmpty(ceRoot)) { + var br = dom.create('br', { 'data-mce-bogus': '1' }); + dom.setHTML(ceRoot, ''); + ceRoot.appendChild(br); + selection.setRng(CaretPosition.before(br).toRange()); + } + return true; + }; + var backspaceDelete$4 = function (editor, forward) { + if (editor.selection.isCollapsed()) { + return backspaceDeleteCaret(editor, forward); + } else { + return backspaceDeleteRange(editor, forward); + } + }; + + var deleteCaret$1 = function (editor, forward) { + var fromPos = CaretPosition.fromRangeStart(editor.selection.getRng()); + return fromPosition(forward, editor.getBody(), fromPos).filter(function (pos) { + return forward ? isBeforeImageBlock(pos) : isAfterImageBlock(pos); + }).bind(function (pos) { + return Optional.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, pos)); + }).exists(function (elm) { + editor.selection.select(elm); + return true; + }); + }; + var backspaceDelete$5 = function (editor, forward) { + return editor.selection.isCollapsed() ? deleteCaret$1(editor, forward) : false; + }; + + var isText$8 = isText$1; + var startsWithCaretContainer$1 = function (node) { + return isText$8(node) && node.data[0] === ZWSP; + }; + var endsWithCaretContainer$1 = function (node) { + return isText$8(node) && node.data[node.data.length - 1] === ZWSP; + }; + var createZwsp = function (node) { + return node.ownerDocument.createTextNode(ZWSP); + }; + var insertBefore$1 = function (node) { + if (isText$8(node.previousSibling)) { + if (endsWithCaretContainer$1(node.previousSibling)) { + return node.previousSibling; + } else { + node.previousSibling.appendData(ZWSP); + return node.previousSibling; + } + } else if (isText$8(node)) { + if (startsWithCaretContainer$1(node)) { + return node; + } else { + node.insertData(0, ZWSP); + return node; + } + } else { + var newNode = createZwsp(node); + node.parentNode.insertBefore(newNode, node); + return newNode; + } + }; + var insertAfter$1 = function (node) { + if (isText$8(node.nextSibling)) { + if (startsWithCaretContainer$1(node.nextSibling)) { + return node.nextSibling; + } else { + node.nextSibling.insertData(0, ZWSP); + return node.nextSibling; + } + } else if (isText$8(node)) { + if (endsWithCaretContainer$1(node)) { + return node; + } else { + node.appendData(ZWSP); + return node; + } + } else { + var newNode = createZwsp(node); + if (node.nextSibling) { + node.parentNode.insertBefore(newNode, node.nextSibling); + } else { + node.parentNode.appendChild(newNode); + } + return newNode; + } + }; + var insertInline$1 = function (before, node) { + return before ? insertBefore$1(node) : insertAfter$1(node); + }; + var insertInlineBefore = curry(insertInline$1, true); + var insertInlineAfter = curry(insertInline$1, false); + + var insertInlinePos = function (pos, before) { + if (isText$1(pos.container())) { + return insertInline$1(before, pos.container()); + } else { + return insertInline$1(before, pos.getNode()); + } + }; + var isPosCaretContainer = function (pos, caret) { + var caretNode = caret.get(); + return caretNode && pos.container() === caretNode && isCaretContainerInline(caretNode); + }; + var renderCaret = function (caret, location) { + return location.fold(function (element) { + remove$5(caret.get()); + var text = insertInlineBefore(element); + caret.set(text); + return Optional.some(CaretPosition(text, text.length - 1)); + }, function (element) { + return firstPositionIn(element).map(function (pos) { + if (!isPosCaretContainer(pos, caret)) { + remove$5(caret.get()); + var text = insertInlinePos(pos, true); + caret.set(text); + return CaretPosition(text, 1); + } else { + return CaretPosition(caret.get(), 1); + } + }); + }, function (element) { + return lastPositionIn(element).map(function (pos) { + if (!isPosCaretContainer(pos, caret)) { + remove$5(caret.get()); + var text = insertInlinePos(pos, false); + caret.set(text); + return CaretPosition(text, text.length - 1); + } else { + return CaretPosition(caret.get(), caret.get().length - 1); + } + }); + }, function (element) { + remove$5(caret.get()); + var text = insertInlineAfter(element); + caret.set(text); + return Optional.some(CaretPosition(text, 1)); + }); + }; + + var evaluateUntil = function (fns, args) { + for (var i = 0; i < fns.length; i++) { + var result = fns[i].apply(null, args); + if (result.isSome()) { + return result; + } + } + return Optional.none(); + }; + + var Location = Adt.generate([ + { before: ['element'] }, + { start: ['element'] }, + { end: ['element'] }, + { after: ['element'] } + ]); + var rescope = function (rootNode, node) { + var parentBlock = getParentBlock(node, rootNode); + return parentBlock ? parentBlock : rootNode; + }; + var before$4 = function (isInlineTarget, rootNode, pos) { + var nPos = normalizeForwards(pos); + var scope = rescope(rootNode, nPos.container()); + return findRootInline(isInlineTarget, scope, nPos).fold(function () { + return nextPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget, scope)).map(function (inline) { + return Location.before(inline); + }); + }, Optional.none); + }; + var isNotInsideFormatCaretContainer = function (rootNode, elm) { + return getParentCaretContainer(rootNode, elm) === null; + }; + var findInsideRootInline = function (isInlineTarget, rootNode, pos) { + return findRootInline(isInlineTarget, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode)); + }; + var start = function (isInlineTarget, rootNode, pos) { + var nPos = normalizeBackwards(pos); + return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) { + var prevPos = prevPosition(inline, nPos); + return prevPos.isNone() ? Optional.some(Location.start(inline)) : Optional.none(); + }); + }; + var end = function (isInlineTarget, rootNode, pos) { + var nPos = normalizeForwards(pos); + return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) { + var nextPos = nextPosition(inline, nPos); + return nextPos.isNone() ? Optional.some(Location.end(inline)) : Optional.none(); + }); + }; + var after$3 = function (isInlineTarget, rootNode, pos) { + var nPos = normalizeBackwards(pos); + var scope = rescope(rootNode, nPos.container()); + return findRootInline(isInlineTarget, scope, nPos).fold(function () { + return prevPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget, scope)).map(function (inline) { + return Location.after(inline); + }); + }, Optional.none); + }; + var isValidLocation = function (location) { + return isRtl$1(getElement(location)) === false; + }; + var readLocation = function (isInlineTarget, rootNode, pos) { + var location = evaluateUntil([ + before$4, + start, + end, + after$3 + ], [ + isInlineTarget, + rootNode, + pos + ]); + return location.filter(isValidLocation); + }; + var getElement = function (location) { + return location.fold(identity, identity, identity, identity); + }; + var getName = function (location) { + return location.fold(constant('before'), constant('start'), constant('end'), constant('after')); + }; + var outside = function (location) { + return location.fold(Location.before, Location.before, Location.after, Location.after); + }; + var inside = function (location) { + return location.fold(Location.start, Location.start, Location.end, Location.end); + }; + var isEq$5 = function (location1, location2) { + return getName(location1) === getName(location2) && getElement(location1) === getElement(location2); + }; + var betweenInlines = function (forward, isInlineTarget, rootNode, from, to, location) { + return lift2(findRootInline(isInlineTarget, rootNode, from), findRootInline(isInlineTarget, rootNode, to), function (fromInline, toInline) { + if (fromInline !== toInline && hasSameParentBlock(rootNode, fromInline, toInline)) { + return Location.after(forward ? fromInline : toInline); + } else { + return location; + } + }).getOr(location); + }; + var skipNoMovement = function (fromLocation, toLocation) { + return fromLocation.fold(always, function (fromLocation) { + return !isEq$5(fromLocation, toLocation); + }); + }; + var findLocationTraverse = function (forward, isInlineTarget, rootNode, fromLocation, pos) { + var from = normalizePosition(forward, pos); + var to = fromPosition(forward, rootNode, from).map(curry(normalizePosition, forward)); + var location = to.fold(function () { + return fromLocation.map(outside); + }, function (to) { + return readLocation(isInlineTarget, rootNode, to).map(curry(betweenInlines, forward, isInlineTarget, rootNode, from, to)).filter(curry(skipNoMovement, fromLocation)); + }); + return location.filter(isValidLocation); + }; + var findLocationSimple = function (forward, location) { + if (forward) { + return location.fold(compose(Optional.some, Location.start), Optional.none, compose(Optional.some, Location.after), Optional.none); + } else { + return location.fold(Optional.none, compose(Optional.some, Location.before), Optional.none, compose(Optional.some, Location.end)); + } + }; + var findLocation = function (forward, isInlineTarget, rootNode, pos) { + var from = normalizePosition(forward, pos); + var fromLocation = readLocation(isInlineTarget, rootNode, from); + return readLocation(isInlineTarget, rootNode, from).bind(curry(findLocationSimple, forward)).orThunk(function () { + return findLocationTraverse(forward, isInlineTarget, rootNode, fromLocation, pos); + }); + }; + var prevLocation = curry(findLocation, false); + var nextLocation = curry(findLocation, true); + + var hasSelectionModifyApi = function (editor) { + return isFunction(editor.selection.getSel().modify); + }; + var moveRel = function (forward, selection, pos) { + var delta = forward ? 1 : -1; + selection.setRng(CaretPosition(pos.container(), pos.offset() + delta).toRange()); + selection.getSel().modify('move', forward ? 'forward' : 'backward', 'word'); + return true; + }; + var moveByWord = function (forward, editor) { + var rng = editor.selection.getRng(); + var pos = forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng); + if (!hasSelectionModifyApi(editor)) { + return false; + } else if (forward && isBeforeInline(pos)) { + return moveRel(true, editor.selection, pos); + } else if (!forward && isAfterInline(pos)) { + return moveRel(false, editor.selection, pos); + } else { + return false; + } + }; + + var BreakType; + (function (BreakType) { + BreakType[BreakType['Br'] = 0] = 'Br'; + BreakType[BreakType['Block'] = 1] = 'Block'; + BreakType[BreakType['Wrap'] = 2] = 'Wrap'; + BreakType[BreakType['Eol'] = 3] = 'Eol'; + }(BreakType || (BreakType = {}))); + var flip = function (direction, positions) { + return direction === HDirection.Backwards ? reverse(positions) : positions; + }; + var walk$3 = function (direction, caretWalker, pos) { + return direction === HDirection.Forwards ? caretWalker.next(pos) : caretWalker.prev(pos); + }; + var getBreakType = function (scope, direction, currentPos, nextPos) { + if (isBr(nextPos.getNode(direction === HDirection.Forwards))) { + return BreakType.Br; + } else if (isInSameBlock(currentPos, nextPos) === false) { + return BreakType.Block; + } else { + return BreakType.Wrap; + } + }; + var getPositionsUntil = function (predicate, direction, scope, start) { + var caretWalker = CaretWalker(scope); + var currentPos = start, nextPos; + var positions = []; + while (currentPos) { + nextPos = walk$3(direction, caretWalker, currentPos); + if (!nextPos) { + break; + } + if (isBr(nextPos.getNode(false))) { + if (direction === HDirection.Forwards) { + return { + positions: flip(direction, positions).concat([nextPos]), + breakType: BreakType.Br, + breakAt: Optional.some(nextPos) + }; + } else { + return { + positions: flip(direction, positions), + breakType: BreakType.Br, + breakAt: Optional.some(nextPos) + }; + } + } + if (!nextPos.isVisible()) { + currentPos = nextPos; + continue; + } + if (predicate(currentPos, nextPos)) { + var breakType = getBreakType(scope, direction, currentPos, nextPos); + return { + positions: flip(direction, positions), + breakType: breakType, + breakAt: Optional.some(nextPos) + }; + } + positions.push(nextPos); + currentPos = nextPos; + } + return { + positions: flip(direction, positions), + breakType: BreakType.Eol, + breakAt: Optional.none() + }; + }; + var getAdjacentLinePositions = function (direction, getPositionsUntilBreak, scope, start) { + return getPositionsUntilBreak(scope, start).breakAt.map(function (pos) { + var positions = getPositionsUntilBreak(scope, pos).positions; + return direction === HDirection.Backwards ? positions.concat(pos) : [pos].concat(positions); + }).getOr([]); + }; + var findClosestHorizontalPositionFromPoint = function (positions, x) { + return foldl(positions, function (acc, newPos) { + return acc.fold(function () { + return Optional.some(newPos); + }, function (lastPos) { + return lift2(head(lastPos.getClientRects()), head(newPos.getClientRects()), function (lastRect, newRect) { + var lastDist = Math.abs(x - lastRect.left); + var newDist = Math.abs(x - newRect.left); + return newDist <= lastDist ? newPos : lastPos; + }).or(acc); + }); + }, Optional.none()); + }; + var findClosestHorizontalPosition = function (positions, pos) { + return head(pos.getClientRects()).bind(function (targetRect) { + return findClosestHorizontalPositionFromPoint(positions, targetRect.left); + }); + }; + var getPositionsUntilPreviousLine = curry(getPositionsUntil, CaretPosition.isAbove, -1); + var getPositionsUntilNextLine = curry(getPositionsUntil, CaretPosition.isBelow, 1); + var isAtFirstLine = function (scope, pos) { + return getPositionsUntilPreviousLine(scope, pos).breakAt.isNone(); + }; + var isAtLastLine = function (scope, pos) { + return getPositionsUntilNextLine(scope, pos).breakAt.isNone(); + }; + var getPositionsAbove = curry(getAdjacentLinePositions, -1, getPositionsUntilPreviousLine); + var getPositionsBelow = curry(getAdjacentLinePositions, 1, getPositionsUntilNextLine); + var getFirstLinePositions = function (scope) { + return firstPositionIn(scope).map(function (pos) { + return [pos].concat(getPositionsUntilNextLine(scope, pos).positions); + }).getOr([]); + }; + var getLastLinePositions = function (scope) { + return lastPositionIn(scope).map(function (pos) { + return getPositionsUntilPreviousLine(scope, pos).positions.concat(pos); + }).getOr([]); + }; + + var getNodeClientRects = function (node) { + var toArrayWithNode = function (clientRects) { + return map(clientRects, function (clientRect) { + clientRect = clone$2(clientRect); + clientRect.node = node; + return clientRect; + }); + }; + if (isElement$1(node)) { + return toArrayWithNode(node.getClientRects()); + } + if (isText$1(node)) { + var rng = node.ownerDocument.createRange(); + rng.setStart(node, 0); + rng.setEnd(node, node.data.length); + return toArrayWithNode(rng.getClientRects()); + } + }; + var getClientRects = function (nodes) { + return bind(nodes, getNodeClientRects); + }; + + var VDirection; + (function (VDirection) { + VDirection[VDirection['Up'] = -1] = 'Up'; + VDirection[VDirection['Down'] = 1] = 'Down'; + }(VDirection || (VDirection = {}))); + var findUntil$1 = function (direction, root, predicateFn, node) { + while (node = findNode(node, direction, isEditableCaretCandidate, root)) { + if (predicateFn(node)) { + return; + } + } + }; + var walkUntil = function (direction, isAboveFn, isBeflowFn, root, predicateFn, caretPosition) { + var line = 0; + var result = []; + var add = function (node) { + var i, clientRect, clientRects; + clientRects = getClientRects([node]); + if (direction === -1) { + clientRects = clientRects.reverse(); + } + for (i = 0; i < clientRects.length; i++) { + clientRect = clientRects[i]; + if (isBeflowFn(clientRect, targetClientRect)) { + continue; + } + if (result.length > 0 && isAboveFn(clientRect, last$1(result))) { + line++; + } + clientRect.line = line; + if (predicateFn(clientRect)) { + return true; + } + result.push(clientRect); + } + }; + var targetClientRect = last$1(caretPosition.getClientRects()); + if (!targetClientRect) { + return result; + } + var node = caretPosition.getNode(); + add(node); + findUntil$1(direction, root, add, node); + return result; + }; + var aboveLineNumber = function (lineNumber, clientRect) { + return clientRect.line > lineNumber; + }; + var isLineNumber = function (lineNumber, clientRect) { + return clientRect.line === lineNumber; + }; + var upUntil = curry(walkUntil, VDirection.Up, isAbove, isBelow); + var downUntil = curry(walkUntil, VDirection.Down, isBelow, isAbove); + var positionsUntil = function (direction, root, predicateFn, node) { + var caretWalker = CaretWalker(root); + var walkFn, isBelowFn, isAboveFn, caretPosition; + var result = []; + var line = 0, clientRect; + var getClientRect = function (caretPosition) { + if (direction === 1) { + return last$1(caretPosition.getClientRects()); + } + return last$1(caretPosition.getClientRects()); + }; + if (direction === 1) { + walkFn = caretWalker.next; + isBelowFn = isBelow; + isAboveFn = isAbove; + caretPosition = CaretPosition.after(node); + } else { + walkFn = caretWalker.prev; + isBelowFn = isAbove; + isAboveFn = isBelow; + caretPosition = CaretPosition.before(node); + } + var targetClientRect = getClientRect(caretPosition); + do { + if (!caretPosition.isVisible()) { + continue; + } + clientRect = getClientRect(caretPosition); + if (isAboveFn(clientRect, targetClientRect)) { + continue; + } + if (result.length > 0 && isBelowFn(clientRect, last$1(result))) { + line++; + } + clientRect = clone$2(clientRect); + clientRect.position = caretPosition; + clientRect.line = line; + if (predicateFn(clientRect)) { + return result; + } + result.push(clientRect); + } while (caretPosition = walkFn(caretPosition)); + return result; + }; + var isAboveLine = function (lineNumber) { + return function (clientRect) { + return aboveLineNumber(lineNumber, clientRect); + }; + }; + var isLine = function (lineNumber) { + return function (clientRect) { + return isLineNumber(lineNumber, clientRect); + }; + }; + + var isContentEditableFalse$8 = isContentEditableFalse; + var findNode$1 = findNode; + var distanceToRectLeft = function (clientRect, clientX) { + return Math.abs(clientRect.left - clientX); + }; + var distanceToRectRight = function (clientRect, clientX) { + return Math.abs(clientRect.right - clientX); + }; + var isInsideX = function (clientX, clientRect) { + return clientX >= clientRect.left && clientX <= clientRect.right; + }; + var isInsideY = function (clientY, clientRect) { + return clientY >= clientRect.top && clientY <= clientRect.bottom; + }; + var findClosestClientRect = function (clientRects, clientX) { + return reduce(clientRects, function (oldClientRect, clientRect) { + var oldDistance = Math.min(distanceToRectLeft(oldClientRect, clientX), distanceToRectRight(oldClientRect, clientX)); + var newDistance = Math.min(distanceToRectLeft(clientRect, clientX), distanceToRectRight(clientRect, clientX)); + if (isInsideX(clientX, clientRect)) { + return clientRect; + } + if (isInsideX(clientX, oldClientRect)) { + return oldClientRect; + } + if (newDistance === oldDistance && isContentEditableFalse$8(clientRect.node)) { + return clientRect; + } + if (newDistance < oldDistance) { + return clientRect; + } + return oldClientRect; + }); + }; + var walkUntil$1 = function (direction, root, predicateFn, startNode, includeChildren) { + var node = findNode$1(startNode, direction, isEditableCaretCandidate, root, !includeChildren); + do { + if (!node || predicateFn(node)) { + return; + } + } while (node = findNode$1(node, direction, isEditableCaretCandidate, root)); + }; + var findLineNodeRects = function (root, targetNodeRect, includeChildren) { + if (includeChildren === void 0) { + includeChildren = true; + } + var clientRects = []; + var collect = function (checkPosFn, node) { + var lineRects = filter(getClientRects([node]), function (clientRect) { + return !checkPosFn(clientRect, targetNodeRect); + }); + clientRects = clientRects.concat(lineRects); + return lineRects.length === 0; + }; + clientRects.push(targetNodeRect); + walkUntil$1(VDirection.Up, root, curry(collect, isAbove), targetNodeRect.node, includeChildren); + walkUntil$1(VDirection.Down, root, curry(collect, isBelow), targetNodeRect.node, includeChildren); + return clientRects; + }; + var getFakeCaretTargets = function (root) { + return filter(from$1(root.getElementsByTagName('*')), isFakeCaretTarget); + }; + var caretInfo = function (clientRect, clientX) { + return { + node: clientRect.node, + before: distanceToRectLeft(clientRect, clientX) < distanceToRectRight(clientRect, clientX) + }; + }; + var closestFakeCaret = function (root, clientX, clientY) { + var fakeTargetNodeRects = getClientRects(getFakeCaretTargets(root)); + var targetNodeRects = filter(fakeTargetNodeRects, curry(isInsideY, clientY)); + var closestNodeRect = findClosestClientRect(targetNodeRects, clientX); + if (closestNodeRect) { + var includeChildren = !isTable(closestNodeRect.node) && !isMedia(closestNodeRect.node); + closestNodeRect = findClosestClientRect(findLineNodeRects(root, closestNodeRect, includeChildren), clientX); + if (closestNodeRect && isFakeCaretTarget(closestNodeRect.node)) { + return caretInfo(closestNodeRect, clientX); + } + } + return null; + }; + + var moveToRange = function (editor, rng) { + editor.selection.setRng(rng); + scrollRangeIntoView(editor, editor.selection.getRng()); + }; + var renderRangeCaretOpt = function (editor, range, scrollIntoView) { + return Optional.some(renderRangeCaret(editor, range, scrollIntoView)); + }; + var moveHorizontally = function (editor, direction, range, isBefore, isAfter, isElement) { + var forwards = direction === HDirection.Forwards; + var caretWalker = CaretWalker(editor.getBody()); + var getNextPosFn = curry(getVisualCaretPosition, forwards ? caretWalker.next : caretWalker.prev); + var isBeforeFn = forwards ? isBefore : isAfter; + if (!range.collapsed) { + var node = getSelectedNode(range); + if (isElement(node)) { + return showCaret(direction, editor, node, direction === HDirection.Backwards, false); + } + } + var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range); + if (isBeforeFn(caretPosition)) { + return selectNode(editor, caretPosition.getNode(!forwards)); + } + var nextCaretPosition = normalizePosition(forwards, getNextPosFn(caretPosition)); + var rangeIsInContainerBlock = isRangeInCaretContainerBlock(range); + if (!nextCaretPosition) { + return rangeIsInContainerBlock ? Optional.some(range) : Optional.none(); + } + if (isBeforeFn(nextCaretPosition)) { + return showCaret(direction, editor, nextCaretPosition.getNode(!forwards), forwards, false); + } + var peekCaretPosition = getNextPosFn(nextCaretPosition); + if (peekCaretPosition && isBeforeFn(peekCaretPosition)) { + if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) { + return showCaret(direction, editor, peekCaretPosition.getNode(!forwards), forwards, false); + } + } + if (rangeIsInContainerBlock) { + return renderRangeCaretOpt(editor, nextCaretPosition.toRange(), false); + } + return Optional.none(); + }; + var moveVertically = function (editor, direction, range, isBefore, isAfter, isElement) { + var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range); + var caretClientRect = last$1(caretPosition.getClientRects()); + var forwards = direction === VDirection.Down; + if (!caretClientRect) { + return Optional.none(); + } + var walkerFn = forwards ? downUntil : upUntil; + var linePositions = walkerFn(editor.getBody(), isAboveLine(1), caretPosition); + var nextLinePositions = filter(linePositions, isLine(1)); + var clientX = caretClientRect.left; + var nextLineRect = findClosestClientRect(nextLinePositions, clientX); + if (nextLineRect && isElement(nextLineRect.node)) { + var dist1 = Math.abs(clientX - nextLineRect.left); + var dist2 = Math.abs(clientX - nextLineRect.right); + return showCaret(direction, editor, nextLineRect.node, dist1 < dist2, false); + } + var currentNode; + if (isBefore(caretPosition)) { + currentNode = caretPosition.getNode(); + } else if (isAfter(caretPosition)) { + currentNode = caretPosition.getNode(true); + } else { + currentNode = getSelectedNode(range); + } + if (currentNode) { + var caretPositions = positionsUntil(direction, editor.getBody(), isAboveLine(1), currentNode); + var closestNextLineRect = findClosestClientRect(filter(caretPositions, isLine(1)), clientX); + if (closestNextLineRect) { + return renderRangeCaretOpt(editor, closestNextLineRect.position.toRange(), false); + } + closestNextLineRect = last$1(filter(caretPositions, isLine(0))); + if (closestNextLineRect) { + return renderRangeCaretOpt(editor, closestNextLineRect.position.toRange(), false); + } + } + if (nextLinePositions.length === 0) { + return getLineEndPoint(editor, forwards).filter(forwards ? isAfter : isBefore).map(function (pos) { + return renderRangeCaret(editor, pos.toRange(), false); + }); + } + return Optional.none(); + }; + var getLineEndPoint = function (editor, forward) { + var rng = editor.selection.getRng(); + var body = editor.getBody(); + if (forward) { + var from = CaretPosition.fromRangeEnd(rng); + var result = getPositionsUntilNextLine(body, from); + return last(result.positions); + } else { + var from = CaretPosition.fromRangeStart(rng); + var result = getPositionsUntilPreviousLine(body, from); + return head(result.positions); + } + }; + var moveToLineEndPoint = function (editor, forward, isElementPosition) { + return getLineEndPoint(editor, forward).filter(isElementPosition).exists(function (pos) { + editor.selection.setRng(pos.toRange()); + return true; + }); + }; + + var setCaretPosition = function (editor, pos) { + var rng = editor.dom.createRng(); + rng.setStart(pos.container(), pos.offset()); + rng.setEnd(pos.container(), pos.offset()); + editor.selection.setRng(rng); + }; + var setSelected = function (state, elm) { + if (state) { + elm.setAttribute('data-mce-selected', 'inline-boundary'); + } else { + elm.removeAttribute('data-mce-selected'); + } + }; + var renderCaretLocation = function (editor, caret, location) { + return renderCaret(caret, location).map(function (pos) { + setCaretPosition(editor, pos); + return location; + }); + }; + var findLocation$1 = function (editor, caret, forward) { + var rootNode = editor.getBody(); + var from = CaretPosition.fromRangeStart(editor.selection.getRng()); + var isInlineTarget$1 = curry(isInlineTarget, editor); + var location = findLocation(forward, isInlineTarget$1, rootNode, from); + return location.bind(function (location) { + return renderCaretLocation(editor, caret, location); + }); + }; + var toggleInlines = function (isInlineTarget, dom, elms) { + var inlineBoundaries = map(descendants$1(SugarElement.fromDom(dom.getRoot()), '*[data-mce-selected="inline-boundary"]'), function (e) { + return e.dom; + }); + var selectedInlines = filter(inlineBoundaries, isInlineTarget); + var targetInlines = filter(elms, isInlineTarget); + each(difference(selectedInlines, targetInlines), curry(setSelected, false)); + each(difference(targetInlines, selectedInlines), curry(setSelected, true)); + }; + var safeRemoveCaretContainer = function (editor, caret) { + if (editor.selection.isCollapsed() && editor.composing !== true && caret.get()) { + var pos = CaretPosition.fromRangeStart(editor.selection.getRng()); + if (CaretPosition.isTextPosition(pos) && isAtZwsp(pos) === false) { + setCaretPosition(editor, removeAndReposition(caret.get(), pos)); + caret.set(null); + } + } + }; + var renderInsideInlineCaret = function (isInlineTarget, editor, caret, elms) { + if (editor.selection.isCollapsed()) { + var inlines = filter(elms, isInlineTarget); + each(inlines, function (_inline) { + var pos = CaretPosition.fromRangeStart(editor.selection.getRng()); + readLocation(isInlineTarget, editor.getBody(), pos).bind(function (location) { + return renderCaretLocation(editor, caret, location); + }); + }); + } + }; + var move = function (editor, caret, forward) { + return isInlineBoundariesEnabled(editor) ? findLocation$1(editor, caret, forward).isSome() : false; + }; + var moveWord = function (forward, editor, _caret) { + return isInlineBoundariesEnabled(editor) ? moveByWord(forward, editor) : false; + }; + var setupSelectedState = function (editor) { + var caret = Cell(null); + var isInlineTarget$1 = curry(isInlineTarget, editor); + editor.on('NodeChange', function (e) { + if (isInlineBoundariesEnabled(editor) && !(Env.browser.isIE() && e.initial)) { + toggleInlines(isInlineTarget$1, editor.dom, e.parents); + safeRemoveCaretContainer(editor, caret); + renderInsideInlineCaret(isInlineTarget$1, editor, caret, e.parents); + } + }); + return caret; + }; + var moveNextWord = curry(moveWord, true); + var movePrevWord = curry(moveWord, false); + var moveToLineEndPoint$1 = function (editor, forward, caret) { + if (isInlineBoundariesEnabled(editor)) { + var linePoint = getLineEndPoint(editor, forward).getOrThunk(function () { + var rng = editor.selection.getRng(); + return forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng); + }); + return readLocation(curry(isInlineTarget, editor), editor.getBody(), linePoint).exists(function (loc) { + var outsideLoc = outside(loc); + return renderCaret(caret, outsideLoc).exists(function (pos) { + setCaretPosition(editor, pos); + return true; + }); + }); + } else { + return false; + } + }; + + var rangeFromPositions = function (from, to) { + var range = document.createRange(); + range.setStart(from.container(), from.offset()); + range.setEnd(to.container(), to.offset()); + return range; + }; + var hasOnlyTwoOrLessPositionsLeft = function (elm) { + return lift2(firstPositionIn(elm), lastPositionIn(elm), function (firstPos, lastPos) { + var normalizedFirstPos = normalizePosition(true, firstPos); + var normalizedLastPos = normalizePosition(false, lastPos); + return nextPosition(elm, normalizedFirstPos).forall(function (pos) { + return pos.isEqual(normalizedLastPos); + }); + }).getOr(true); + }; + var setCaretLocation = function (editor, caret) { + return function (location) { + return renderCaret(caret, location).exists(function (pos) { + setCaretPosition(editor, pos); + return true; + }); + }; + }; + var deleteFromTo = function (editor, caret, from, to) { + var rootNode = editor.getBody(); + var isInlineTarget$1 = curry(isInlineTarget, editor); + editor.undoManager.ignore(function () { + editor.selection.setRng(rangeFromPositions(from, to)); + editor.execCommand('Delete'); + readLocation(isInlineTarget$1, rootNode, CaretPosition.fromRangeStart(editor.selection.getRng())).map(inside).map(setCaretLocation(editor, caret)); + }); + editor.nodeChanged(); + }; + var rescope$1 = function (rootNode, node) { + var parentBlock = getParentBlock(node, rootNode); + return parentBlock ? parentBlock : rootNode; + }; + var backspaceDeleteCollapsed = function (editor, caret, forward, from) { + var rootNode = rescope$1(editor.getBody(), from.container()); + var isInlineTarget$1 = curry(isInlineTarget, editor); + var fromLocation = readLocation(isInlineTarget$1, rootNode, from); + return fromLocation.bind(function (location) { + if (forward) { + return location.fold(constant(Optional.some(inside(location))), Optional.none, constant(Optional.some(outside(location))), Optional.none); + } else { + return location.fold(Optional.none, constant(Optional.some(outside(location))), Optional.none, constant(Optional.some(inside(location)))); + } + }).map(setCaretLocation(editor, caret)).getOrThunk(function () { + var toPosition = navigate(forward, rootNode, from); + var toLocation = toPosition.bind(function (pos) { + return readLocation(isInlineTarget$1, rootNode, pos); + }); + return lift2(fromLocation, toLocation, function () { + return findRootInline(isInlineTarget$1, rootNode, from).exists(function (elm) { + if (hasOnlyTwoOrLessPositionsLeft(elm)) { + deleteElement(editor, forward, SugarElement.fromDom(elm)); + return true; + } else { + return false; + } + }); + }).orThunk(function () { + return toLocation.bind(function (_) { + return toPosition.map(function (to) { + if (forward) { + deleteFromTo(editor, caret, from, to); + } else { + deleteFromTo(editor, caret, to, from); + } + return true; + }); + }); + }).getOr(false); + }); + }; + var backspaceDelete$6 = function (editor, caret, forward) { + if (editor.selection.isCollapsed() && isInlineBoundariesEnabled(editor)) { + var from = CaretPosition.fromRangeStart(editor.selection.getRng()); + return backspaceDeleteCollapsed(editor, caret, forward, from); + } + return false; + }; + + var getParentInlines = function (rootElm, startElm) { + var parents = parentsAndSelf(startElm, rootElm); + return findIndex(parents, isBlock).fold(constant(parents), function (index) { + return parents.slice(0, index); + }); + }; + var hasOnlyOneChild$1 = function (elm) { + return children(elm).length === 1; + }; + var deleteLastPosition = function (forward, editor, target, parentInlines) { + var isFormatElement$1 = curry(isFormatElement, editor); + var formatNodes = map(filter(parentInlines, isFormatElement$1), function (elm) { + return elm.dom; + }); + if (formatNodes.length === 0) { + deleteElement(editor, forward, target); + } else { + var pos = replaceWithCaretFormat(target.dom, formatNodes); + editor.selection.setRng(pos.toRange()); + } + }; + var deleteCaret$2 = function (editor, forward) { + var rootElm = SugarElement.fromDom(editor.getBody()); + var startElm = SugarElement.fromDom(editor.selection.getStart()); + var parentInlines = filter(getParentInlines(rootElm, startElm), hasOnlyOneChild$1); + return last(parentInlines).exists(function (target) { + var fromPos = CaretPosition.fromRangeStart(editor.selection.getRng()); + if (willDeleteLastPositionInElement(forward, fromPos, target.dom) && !isEmptyCaretFormatElement(target)) { + deleteLastPosition(forward, editor, target, parentInlines); + return true; + } else { + return false; + } + }); + }; + var backspaceDelete$7 = function (editor, forward) { + return editor.selection.isCollapsed() ? deleteCaret$2(editor, forward) : false; + }; + + var deleteElement$2 = function (editor, forward, element) { + editor._selectionOverrides.hideFakeCaret(); + deleteElement(editor, forward, SugarElement.fromDom(element)); + return true; + }; + var deleteCaret$3 = function (editor, forward) { + var isNearMedia = forward ? isBeforeMedia : isAfterMedia; + var direction = forward ? HDirection.Forwards : HDirection.Backwards; + var fromPos = getNormalizedRangeEndPoint(direction, editor.getBody(), editor.selection.getRng()); + if (isNearMedia(fromPos)) { + return deleteElement$2(editor, forward, fromPos.getNode(!forward)); + } else { + return Optional.from(normalizePosition(forward, fromPos)).filter(function (pos) { + return isNearMedia(pos) && isMoveInsideSameBlock(fromPos, pos); + }).exists(function (pos) { + return deleteElement$2(editor, forward, pos.getNode(!forward)); + }); + } + }; + var deleteRange$2 = function (editor, forward) { + var selectedNode = editor.selection.getNode(); + return isMedia(selectedNode) ? deleteElement$2(editor, forward, selectedNode) : false; + }; + var backspaceDelete$8 = function (editor, forward) { + return editor.selection.isCollapsed() ? deleteCaret$3(editor, forward) : deleteRange$2(editor, forward); + }; + + var isEditable$1 = function (target) { + return closest(target, function (elm) { + return isContentEditableTrue(elm.dom) || isContentEditableFalse(elm.dom); + }).exists(function (elm) { + return isContentEditableTrue(elm.dom); + }); + }; + var parseIndentValue = function (value) { + var number = parseInt(value, 10); + return isNaN(number) ? 0 : number; + }; + var getIndentStyleName = function (useMargin, element) { + var indentStyleName = useMargin || isTable$1(element) ? 'margin' : 'padding'; + var suffix = get$5(element, 'direction') === 'rtl' ? '-right' : '-left'; + return indentStyleName + suffix; + }; + var indentElement = function (dom, command, useMargin, value, unit, element) { + var indentStyleName = getIndentStyleName(useMargin, SugarElement.fromDom(element)); + if (command === 'outdent') { + var styleValue = Math.max(0, parseIndentValue(element.style[indentStyleName]) - value); + dom.setStyle(element, indentStyleName, styleValue ? styleValue + unit : ''); + } else { + var styleValue = parseIndentValue(element.style[indentStyleName]) + value + unit; + dom.setStyle(element, indentStyleName, styleValue); + } + }; + var validateBlocks = function (editor, blocks) { + return forall(blocks, function (block) { + var indentStyleName = getIndentStyleName(shouldIndentUseMargin(editor), block); + var intentValue = getRaw(block, indentStyleName).map(parseIndentValue).getOr(0); + var contentEditable = editor.dom.getContentEditable(block.dom); + return contentEditable !== 'false' && intentValue > 0; + }); + }; + var canOutdent = function (editor) { + var blocks = getBlocksToIndent(editor); + return !editor.mode.isReadOnly() && (blocks.length > 1 || validateBlocks(editor, blocks)); + }; + var isListComponent = function (el) { + return isList(el) || isListItem(el); + }; + var parentIsListComponent = function (el) { + return parent(el).map(isListComponent).getOr(false); + }; + var getBlocksToIndent = function (editor) { + return filter(map(editor.selection.getSelectedBlocks(), SugarElement.fromDom), function (el) { + return !isListComponent(el) && !parentIsListComponent(el) && isEditable$1(el); + }); + }; + var handle = function (editor, command) { + var dom = editor.dom, selection = editor.selection, formatter = editor.formatter; + var indentation = getIndentation(editor); + var indentUnit = /[a-z%]+$/i.exec(indentation)[0]; + var indentValue = parseInt(indentation, 10); + var useMargin = shouldIndentUseMargin(editor); + var forcedRootBlock = getForcedRootBlock(editor); + if (!editor.queryCommandState('InsertUnorderedList') && !editor.queryCommandState('InsertOrderedList')) { + if (forcedRootBlock === '' && !dom.getParent(selection.getNode(), dom.isBlock)) { + formatter.apply('div'); + } + } + each(getBlocksToIndent(editor), function (block) { + indentElement(dom, command, useMargin, indentValue, indentUnit, block.dom); + }); + }; + + var backspaceDelete$9 = function (editor, _forward) { + if (editor.selection.isCollapsed() && canOutdent(editor)) { + var dom = editor.dom; + var rng = editor.selection.getRng(); + var pos = CaretPosition.fromRangeStart(rng); + var block = dom.getParent(rng.startContainer, dom.isBlock); + if (block !== null && isAtStartOfBlock(SugarElement.fromDom(block), pos)) { + handle(editor, 'outdent'); + return true; + } + } + return false; + }; + + var nativeCommand = function (editor, command) { + editor.getDoc().execCommand(command, false, null); + }; + var deleteCommand = function (editor, caret) { + if (backspaceDelete$9(editor)) { + return; + } else if (backspaceDelete$4(editor, false)) { + return; + } else if (backspaceDelete$3(editor, false)) { + return; + } else if (backspaceDelete$6(editor, caret, false)) { + return; + } else if (backspaceDelete$1(editor, false)) { + return; + } else if (backspaceDelete(editor)) { + return; + } else if (backspaceDelete$5(editor, false)) { + return; + } else if (backspaceDelete$8(editor, false)) { + return; + } else if (backspaceDelete$2(editor)) { + return; + } else if (backspaceDelete$7(editor, false)) { + return; + } else { + nativeCommand(editor, 'Delete'); + paddEmptyBody(editor); + } + }; + var forwardDeleteCommand = function (editor, caret) { + if (backspaceDelete$4(editor, true)) { + return; + } else if (backspaceDelete$3(editor, true)) { + return; + } else if (backspaceDelete$6(editor, caret, true)) { + return; + } else if (backspaceDelete$1(editor, true)) { + return; + } else if (backspaceDelete(editor)) { + return; + } else if (backspaceDelete$5(editor, true)) { + return; + } else if (backspaceDelete$8(editor, true)) { + return; + } else if (backspaceDelete$2(editor)) { + return; + } else if (backspaceDelete$7(editor, true)) { + return; + } else { + nativeCommand(editor, 'ForwardDelete'); + } + }; + var setup$8 = function (editor, caret) { + editor.addCommand('delete', function () { + deleteCommand(editor, caret); + }); + editor.addCommand('forwardDelete', function () { + forwardDeleteCommand(editor, caret); + }); + }; + + var SIGNIFICANT_MOVE = 5; + var LONGPRESS_DELAY = 400; + var getTouch = function (event) { + if (event.touches === undefined || event.touches.length !== 1) { + return Optional.none(); + } + return Optional.some(event.touches[0]); + }; + var isFarEnough = function (touch, data) { + var distX = Math.abs(touch.clientX - data.x); + var distY = Math.abs(touch.clientY - data.y); + return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE; + }; + var setup$9 = function (editor) { + var startData = Cell(Optional.none()); + var longpressFired = Cell(false); + var debounceLongpress = last$2(function (e) { + editor.fire('longpress', __assign(__assign({}, e), { type: 'longpress' })); + longpressFired.set(true); + }, LONGPRESS_DELAY); + editor.on('touchstart', function (e) { + getTouch(e).each(function (touch) { + debounceLongpress.cancel(); + var data = { + x: touch.clientX, + y: touch.clientY, + target: e.target + }; + debounceLongpress.throttle(e); + longpressFired.set(false); + startData.set(Optional.some(data)); + }); + }, true); + editor.on('touchmove', function (e) { + debounceLongpress.cancel(); + getTouch(e).each(function (touch) { + startData.get().each(function (data) { + if (isFarEnough(touch, data)) { + startData.set(Optional.none()); + longpressFired.set(false); + editor.fire('longpresscancel'); + } + }); + }); + }, true); + editor.on('touchend touchcancel', function (e) { + debounceLongpress.cancel(); + if (e.type === 'touchcancel') { + return; + } + startData.get().filter(function (data) { + return data.target.isEqualNode(e.target); + }).each(function () { + if (longpressFired.get()) { + e.preventDefault(); + } else { + editor.fire('tap', __assign(__assign({}, e), { type: 'tap' })); + } + }); + }, true); + }; + + var isBlockElement = function (blockElements, node) { + return blockElements.hasOwnProperty(node.nodeName); + }; + var isValidTarget = function (blockElements, node) { + if (isText$1(node)) { + return true; + } else if (isElement$1(node)) { + return !isBlockElement(blockElements, node) && !isBookmarkNode$1(node); + } else { + return false; + } + }; + var hasBlockParent = function (blockElements, root, node) { + return exists(parents$1(SugarElement.fromDom(node), SugarElement.fromDom(root)), function (elm) { + return isBlockElement(blockElements, elm.dom); + }); + }; + var shouldRemoveTextNode = function (blockElements, node) { + if (isText$1(node)) { + if (node.nodeValue.length === 0) { + return true; + } else if (/^\s+$/.test(node.nodeValue) && (!node.nextSibling || isBlockElement(blockElements, node.nextSibling))) { + return true; + } + } + return false; + }; + var addRootBlocks = function (editor) { + var dom = editor.dom, selection = editor.selection; + var schema = editor.schema, blockElements = schema.getBlockElements(); + var node = selection.getStart(); + var rootNode = editor.getBody(); + var rootBlockNode, tempNode, wrapped; + var forcedRootBlock = getForcedRootBlock(editor); + if (!node || !isElement$1(node) || !forcedRootBlock) { + return; + } + var rootNodeName = rootNode.nodeName.toLowerCase(); + if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, node)) { + return; + } + var rng = selection.getRng(); + var startContainer = rng.startContainer; + var startOffset = rng.startOffset; + var endContainer = rng.endContainer; + var endOffset = rng.endOffset; + var restoreSelection = hasFocus$1(editor); + node = rootNode.firstChild; + while (node) { + if (isValidTarget(blockElements, node)) { + if (shouldRemoveTextNode(blockElements, node)) { + tempNode = node; + node = node.nextSibling; + dom.remove(tempNode); + continue; + } + if (!rootBlockNode) { + rootBlockNode = dom.create(forcedRootBlock, getForcedRootBlockAttrs(editor)); + node.parentNode.insertBefore(rootBlockNode, node); + wrapped = true; + } + tempNode = node; + node = node.nextSibling; + rootBlockNode.appendChild(tempNode); + } else { + rootBlockNode = null; + node = node.nextSibling; + } + } + if (wrapped && restoreSelection) { + rng.setStart(startContainer, startOffset); + rng.setEnd(endContainer, endOffset); + selection.setRng(rng); + editor.nodeChanged(); + } + }; + var setup$a = function (editor) { + if (getForcedRootBlock(editor)) { + editor.on('NodeChange', curry(addRootBlocks, editor)); + } + }; + + var findBlockCaretContainer = function (editor) { + return descendant(SugarElement.fromDom(editor.getBody()), '*[data-mce-caret]').fold(constant(null), function (elm) { + return elm.dom; + }); + }; + var removeIeControlRect = function (editor) { + editor.selection.setRng(editor.selection.getRng()); + }; + var showBlockCaretContainer = function (editor, blockCaretContainer) { + if (blockCaretContainer.hasAttribute('data-mce-caret')) { + showCaretContainerBlock(blockCaretContainer); + removeIeControlRect(editor); + editor.selection.scrollIntoView(blockCaretContainer); + } + }; + var handleBlockContainer = function (editor, e) { + var blockCaretContainer = findBlockCaretContainer(editor); + if (!blockCaretContainer) { + return; + } + if (e.type === 'compositionstart') { + e.preventDefault(); + e.stopPropagation(); + showBlockCaretContainer(editor, blockCaretContainer); + return; + } + if (hasContent(blockCaretContainer)) { + showBlockCaretContainer(editor, blockCaretContainer); + editor.undoManager.add(); + } + }; + var setup$b = function (editor) { + editor.on('keyup compositionstart', curry(handleBlockContainer, editor)); + }; + + var isContentEditableFalse$9 = isContentEditableFalse; + var moveToCeFalseHorizontally = function (direction, editor, range) { + return moveHorizontally(editor, direction, range, isBeforeContentEditableFalse, isAfterContentEditableFalse, isContentEditableFalse$9); + }; + var moveToCeFalseVertically = function (direction, editor, range) { + var isBefore = function (caretPosition) { + return isBeforeContentEditableFalse(caretPosition) || isBeforeTable(caretPosition); + }; + var isAfter = function (caretPosition) { + return isAfterContentEditableFalse(caretPosition) || isAfterTable(caretPosition); + }; + return moveVertically(editor, direction, range, isBefore, isAfter, isContentEditableFalse$9); + }; + var createTextBlock = function (editor) { + var textBlock = editor.dom.create(getForcedRootBlock(editor)); + if (!Env.ie || Env.ie >= 11) { + textBlock.innerHTML = '
    '; + } + return textBlock; + }; + var exitPreBlock = function (editor, direction, range) { + var caretWalker = CaretWalker(editor.getBody()); + var getVisualCaretPosition$1 = curry(getVisualCaretPosition, direction === 1 ? caretWalker.next : caretWalker.prev); + if (range.collapsed && hasForcedRootBlock(editor)) { + var pre = editor.dom.getParent(range.startContainer, 'PRE'); + if (!pre) { + return; + } + var caretPos = getVisualCaretPosition$1(CaretPosition.fromRangeStart(range)); + if (!caretPos) { + var newBlock = createTextBlock(editor); + if (direction === 1) { + editor.$(pre).after(newBlock); + } else { + editor.$(pre).before(newBlock); + } + editor.selection.select(newBlock, true); + editor.selection.collapse(); + } + } + }; + var getHorizontalRange = function (editor, forward) { + var direction = forward ? HDirection.Forwards : HDirection.Backwards; + var range = editor.selection.getRng(); + return moveToCeFalseHorizontally(direction, editor, range).orThunk(function () { + exitPreBlock(editor, direction, range); + return Optional.none(); + }); + }; + var getVerticalRange = function (editor, down) { + var direction = down ? 1 : -1; + var range = editor.selection.getRng(); + return moveToCeFalseVertically(direction, editor, range).orThunk(function () { + exitPreBlock(editor, direction, range); + return Optional.none(); + }); + }; + var moveH = function (editor, forward) { + return getHorizontalRange(editor, forward).exists(function (newRange) { + moveToRange(editor, newRange); + return true; + }); + }; + var moveV = function (editor, down) { + return getVerticalRange(editor, down).exists(function (newRange) { + moveToRange(editor, newRange); + return true; + }); + }; + var moveToLineEndPoint$2 = function (editor, forward) { + var isCefPosition = forward ? isAfterContentEditableFalse : isBeforeContentEditableFalse; + return moveToLineEndPoint(editor, forward, isCefPosition); + }; + + var isTarget = function (node) { + return contains(['figcaption'], name(node)); + }; + var rangeBefore = function (target) { + var rng = document.createRange(); + rng.setStartBefore(target.dom); + rng.setEndBefore(target.dom); + return rng; + }; + var insertElement = function (root, elm, forward) { + if (forward) { + append(root, elm); + } else { + prepend(root, elm); + } + }; + var insertBr = function (root, forward) { + var br = SugarElement.fromTag('br'); + insertElement(root, br, forward); + return rangeBefore(br); + }; + var insertBlock$1 = function (root, forward, blockName, attrs) { + var block = SugarElement.fromTag(blockName); + var br = SugarElement.fromTag('br'); + setAll(block, attrs); + append(block, br); + insertElement(root, block, forward); + return rangeBefore(br); + }; + var insertEmptyLine = function (root, rootBlockName, attrs, forward) { + if (rootBlockName === '') { + return insertBr(root, forward); + } else { + return insertBlock$1(root, forward, rootBlockName, attrs); + } + }; + var getClosestTargetBlock = function (pos, root) { + var isRoot = curry(eq$2, root); + return closest(SugarElement.fromDom(pos.container()), isBlock, isRoot).filter(isTarget); + }; + var isAtFirstOrLastLine = function (root, forward, pos) { + return forward ? isAtLastLine(root.dom, pos) : isAtFirstLine(root.dom, pos); + }; + var moveCaretToNewEmptyLine = function (editor, forward) { + var root = SugarElement.fromDom(editor.getBody()); + var pos = CaretPosition.fromRangeStart(editor.selection.getRng()); + var rootBlock = getForcedRootBlock(editor); + var rootBlockAttrs = getForcedRootBlockAttrs(editor); + return getClosestTargetBlock(pos, root).exists(function () { + if (isAtFirstOrLastLine(root, forward, pos)) { + var rng = insertEmptyLine(root, rootBlock, rootBlockAttrs, forward); + editor.selection.setRng(rng); + return true; + } else { + return false; + } + }); + }; + var moveV$1 = function (editor, forward) { + if (editor.selection.isCollapsed()) { + return moveCaretToNewEmptyLine(editor, forward); + } else { + return false; + } + }; + + var defaultPatterns = function (patterns) { + return map(patterns, function (pattern) { + return __assign({ + shiftKey: false, + altKey: false, + ctrlKey: false, + metaKey: false, + keyCode: 0, + action: noop + }, pattern); + }); + }; + var matchesEvent = function (pattern, evt) { + return evt.keyCode === pattern.keyCode && evt.shiftKey === pattern.shiftKey && evt.altKey === pattern.altKey && evt.ctrlKey === pattern.ctrlKey && evt.metaKey === pattern.metaKey; + }; + var match$1 = function (patterns, evt) { + return bind(defaultPatterns(patterns), function (pattern) { + return matchesEvent(pattern, evt) ? [pattern] : []; + }); + }; + var action = function (f) { + var x = []; + for (var _i = 1; _i < arguments.length; _i++) { + x[_i - 1] = arguments[_i]; + } + return function () { + return f.apply(null, x); + }; + }; + var execute = function (patterns, evt) { + return find(match$1(patterns, evt), function (pattern) { + return pattern.action(); + }); + }; + + var moveH$1 = function (editor, forward) { + var direction = forward ? HDirection.Forwards : HDirection.Backwards; + var range = editor.selection.getRng(); + return moveHorizontally(editor, direction, range, isBeforeMedia, isAfterMedia, isMedia).exists(function (newRange) { + moveToRange(editor, newRange); + return true; + }); + }; + var moveV$2 = function (editor, down) { + var direction = down ? 1 : -1; + var range = editor.selection.getRng(); + return moveVertically(editor, direction, range, isBeforeMedia, isAfterMedia, isMedia).exists(function (newRange) { + moveToRange(editor, newRange); + return true; + }); + }; + var moveToLineEndPoint$3 = function (editor, forward) { + var isNearMedia = forward ? isAfterMedia : isBeforeMedia; + return moveToLineEndPoint(editor, forward, isNearMedia); + }; + + var deflate = function (rect, delta) { + return { + left: rect.left - delta, + top: rect.top - delta, + right: rect.right + delta * 2, + bottom: rect.bottom + delta * 2, + width: rect.width + delta, + height: rect.height + delta + }; + }; + var getCorners = function (getYAxisValue, tds) { + return bind(tds, function (td) { + var rect = deflate(clone$2(td.getBoundingClientRect()), -1); + return [ + { + x: rect.left, + y: getYAxisValue(rect), + cell: td + }, + { + x: rect.right, + y: getYAxisValue(rect), + cell: td + } + ]; + }); + }; + var findClosestCorner = function (corners, x, y) { + return foldl(corners, function (acc, newCorner) { + return acc.fold(function () { + return Optional.some(newCorner); + }, function (oldCorner) { + var oldDist = Math.sqrt(Math.abs(oldCorner.x - x) + Math.abs(oldCorner.y - y)); + var newDist = Math.sqrt(Math.abs(newCorner.x - x) + Math.abs(newCorner.y - y)); + return Optional.some(newDist < oldDist ? newCorner : oldCorner); + }); + }, Optional.none()); + }; + var getClosestCell$1 = function (getYAxisValue, isTargetCorner, table, x, y) { + var cells = descendants$1(SugarElement.fromDom(table), 'td,th,caption').map(function (e) { + return e.dom; + }); + var corners = filter(getCorners(getYAxisValue, cells), function (corner) { + return isTargetCorner(corner, y); + }); + return findClosestCorner(corners, x, y).map(function (corner) { + return corner.cell; + }); + }; + var getBottomValue = function (rect) { + return rect.bottom; + }; + var getTopValue = function (rect) { + return rect.top; + }; + var isAbove$1 = function (corner, y) { + return corner.y < y; + }; + var isBelow$1 = function (corner, y) { + return corner.y > y; + }; + var getClosestCellAbove = curry(getClosestCell$1, getBottomValue, isAbove$1); + var getClosestCellBelow = curry(getClosestCell$1, getTopValue, isBelow$1); + var findClosestPositionInAboveCell = function (table, pos) { + return head(pos.getClientRects()).bind(function (rect) { + return getClosestCellAbove(table, rect.left, rect.top); + }).bind(function (cell) { + return findClosestHorizontalPosition(getLastLinePositions(cell), pos); + }); + }; + var findClosestPositionInBelowCell = function (table, pos) { + return last(pos.getClientRects()).bind(function (rect) { + return getClosestCellBelow(table, rect.left, rect.top); + }).bind(function (cell) { + return findClosestHorizontalPosition(getFirstLinePositions(cell), pos); + }); + }; + + var hasNextBreak = function (getPositionsUntil, scope, lineInfo) { + return lineInfo.breakAt.exists(function (breakPos) { + return getPositionsUntil(scope, breakPos).breakAt.isSome(); + }); + }; + var startsWithWrapBreak = function (lineInfo) { + return lineInfo.breakType === BreakType.Wrap && lineInfo.positions.length === 0; + }; + var startsWithBrBreak = function (lineInfo) { + return lineInfo.breakType === BreakType.Br && lineInfo.positions.length === 1; + }; + var isAtTableCellLine = function (getPositionsUntil, scope, pos) { + var lineInfo = getPositionsUntil(scope, pos); + if (startsWithWrapBreak(lineInfo) || !isBr(pos.getNode()) && startsWithBrBreak(lineInfo)) { + return !hasNextBreak(getPositionsUntil, scope, lineInfo); + } else { + return lineInfo.breakAt.isNone(); + } + }; + var isAtFirstTableCellLine = curry(isAtTableCellLine, getPositionsUntilPreviousLine); + var isAtLastTableCellLine = curry(isAtTableCellLine, getPositionsUntilNextLine); + var isCaretAtStartOrEndOfTable = function (forward, rng, table) { + var caretPos = CaretPosition.fromRangeStart(rng); + return positionIn(!forward, table).exists(function (pos) { + return pos.isEqual(caretPos); + }); + }; + var navigateHorizontally = function (editor, forward, table, _td) { + var rng = editor.selection.getRng(); + var direction = forward ? 1 : -1; + if (isFakeCaretTableBrowser() && isCaretAtStartOrEndOfTable(forward, rng, table)) { + showCaret(direction, editor, table, !forward, false).each(function (newRng) { + moveToRange(editor, newRng); + }); + return true; + } + return false; + }; + var getClosestAbovePosition = function (root, table, start) { + return findClosestPositionInAboveCell(table, start).orThunk(function () { + return head(start.getClientRects()).bind(function (rect) { + return findClosestHorizontalPositionFromPoint(getPositionsAbove(root, CaretPosition.before(table)), rect.left); + }); + }).getOr(CaretPosition.before(table)); + }; + var getClosestBelowPosition = function (root, table, start) { + return findClosestPositionInBelowCell(table, start).orThunk(function () { + return head(start.getClientRects()).bind(function (rect) { + return findClosestHorizontalPositionFromPoint(getPositionsBelow(root, CaretPosition.after(table)), rect.left); + }); + }).getOr(CaretPosition.after(table)); + }; + var getTable = function (previous, pos) { + var node = pos.getNode(previous); + return isElement$1(node) && node.nodeName === 'TABLE' ? Optional.some(node) : Optional.none(); + }; + var renderBlock = function (down, editor, table, pos) { + var forcedRootBlock = getForcedRootBlock(editor); + if (forcedRootBlock) { + editor.undoManager.transact(function () { + var element = SugarElement.fromTag(forcedRootBlock); + setAll(element, getForcedRootBlockAttrs(editor)); + append(element, SugarElement.fromTag('br')); + if (down) { + after(SugarElement.fromDom(table), element); + } else { + before(SugarElement.fromDom(table), element); + } + var rng = editor.dom.createRng(); + rng.setStart(element.dom, 0); + rng.setEnd(element.dom, 0); + moveToRange(editor, rng); + }); + } else { + moveToRange(editor, pos.toRange()); + } + }; + var moveCaret = function (editor, down, pos) { + var table = down ? getTable(true, pos) : getTable(false, pos); + var last = down === false; + table.fold(function () { + return moveToRange(editor, pos.toRange()); + }, function (table) { + return positionIn(last, editor.getBody()).filter(function (lastPos) { + return lastPos.isEqual(pos); + }).fold(function () { + return moveToRange(editor, pos.toRange()); + }, function (_) { + return renderBlock(down, editor, table, pos); + }); + }); + }; + var navigateVertically = function (editor, down, table, td) { + var rng = editor.selection.getRng(); + var pos = CaretPosition.fromRangeStart(rng); + var root = editor.getBody(); + if (!down && isAtFirstTableCellLine(td, pos)) { + var newPos = getClosestAbovePosition(root, table, pos); + moveCaret(editor, down, newPos); + return true; + } else if (down && isAtLastTableCellLine(td, pos)) { + var newPos = getClosestBelowPosition(root, table, pos); + moveCaret(editor, down, newPos); + return true; + } else { + return false; + } + }; + var move$1 = function (editor, forward, mover) { + return Optional.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) { + return Optional.from(editor.dom.getParent(td, 'table')).map(function (table) { + return mover(editor, forward, table, td); + }); + }).getOr(false); + }; + var moveH$2 = function (editor, forward) { + return move$1(editor, forward, navigateHorizontally); + }; + var moveV$3 = function (editor, forward) { + return move$1(editor, forward, navigateVertically); + }; + + var executeKeydownOverride = function (editor, caret, evt) { + var os = detect$3().os; + execute([ + { + keyCode: VK.RIGHT, + action: action(moveH, editor, true) + }, + { + keyCode: VK.LEFT, + action: action(moveH, editor, false) + }, + { + keyCode: VK.UP, + action: action(moveV, editor, false) + }, + { + keyCode: VK.DOWN, + action: action(moveV, editor, true) + }, + { + keyCode: VK.RIGHT, + action: action(moveH$2, editor, true) + }, + { + keyCode: VK.LEFT, + action: action(moveH$2, editor, false) + }, + { + keyCode: VK.UP, + action: action(moveV$3, editor, false) + }, + { + keyCode: VK.DOWN, + action: action(moveV$3, editor, true) + }, + { + keyCode: VK.RIGHT, + action: action(moveH$1, editor, true) + }, + { + keyCode: VK.LEFT, + action: action(moveH$1, editor, false) + }, + { + keyCode: VK.UP, + action: action(moveV$2, editor, false) + }, + { + keyCode: VK.DOWN, + action: action(moveV$2, editor, true) + }, + { + keyCode: VK.RIGHT, + action: action(move, editor, caret, true) + }, + { + keyCode: VK.LEFT, + action: action(move, editor, caret, false) + }, + { + keyCode: VK.RIGHT, + ctrlKey: !os.isOSX(), + altKey: os.isOSX(), + action: action(moveNextWord, editor, caret) + }, + { + keyCode: VK.LEFT, + ctrlKey: !os.isOSX(), + altKey: os.isOSX(), + action: action(movePrevWord, editor, caret) + }, + { + keyCode: VK.UP, + action: action(moveV$1, editor, false) + }, + { + keyCode: VK.DOWN, + action: action(moveV$1, editor, true) + } + ], evt).each(function (_) { + evt.preventDefault(); + }); + }; + var setup$c = function (editor, caret) { + editor.on('keydown', function (evt) { + if (evt.isDefaultPrevented() === false) { + executeKeydownOverride(editor, caret, evt); + } + }); + }; + + var executeKeydownOverride$1 = function (editor, caret, evt) { + execute([ + { + keyCode: VK.BACKSPACE, + action: action(backspaceDelete$9, editor, false) + }, + { + keyCode: VK.BACKSPACE, + action: action(backspaceDelete$4, editor, false) + }, + { + keyCode: VK.DELETE, + action: action(backspaceDelete$4, editor, true) + }, + { + keyCode: VK.BACKSPACE, + action: action(backspaceDelete$3, editor, false) + }, + { + keyCode: VK.DELETE, + action: action(backspaceDelete$3, editor, true) + }, + { + keyCode: VK.BACKSPACE, + action: action(backspaceDelete$6, editor, caret, false) + }, + { + keyCode: VK.DELETE, + action: action(backspaceDelete$6, editor, caret, true) + }, + { + keyCode: VK.BACKSPACE, + action: action(backspaceDelete, editor, false) + }, + { + keyCode: VK.DELETE, + action: action(backspaceDelete, editor, true) + }, + { + keyCode: VK.BACKSPACE, + action: action(backspaceDelete$5, editor, false) + }, + { + keyCode: VK.DELETE, + action: action(backspaceDelete$5, editor, true) + }, + { + keyCode: VK.BACKSPACE, + action: action(backspaceDelete$8, editor, false) + }, + { + keyCode: VK.DELETE, + action: action(backspaceDelete$8, editor, true) + }, + { + keyCode: VK.BACKSPACE, + action: action(backspaceDelete$2, editor, false) + }, + { + keyCode: VK.DELETE, + action: action(backspaceDelete$2, editor, true) + }, + { + keyCode: VK.BACKSPACE, + action: action(backspaceDelete$1, editor, false) + }, + { + keyCode: VK.DELETE, + action: action(backspaceDelete$1, editor, true) + }, + { + keyCode: VK.BACKSPACE, + action: action(backspaceDelete$7, editor, false) + }, + { + keyCode: VK.DELETE, + action: action(backspaceDelete$7, editor, true) + } + ], evt).each(function (_) { + evt.preventDefault(); + }); + }; + var executeKeyupOverride = function (editor, evt) { + execute([ + { + keyCode: VK.BACKSPACE, + action: action(paddEmptyElement, editor) + }, + { + keyCode: VK.DELETE, + action: action(paddEmptyElement, editor) + } + ], evt); + }; + var setup$d = function (editor, caret) { + editor.on('keydown', function (evt) { + if (evt.isDefaultPrevented() === false) { + executeKeydownOverride$1(editor, caret, evt); + } + }); + editor.on('keyup', function (evt) { + if (evt.isDefaultPrevented() === false) { + executeKeyupOverride(editor, evt); + } + }); + }; + + var firstNonWhiteSpaceNodeSibling = function (node) { + while (node) { + if (node.nodeType === 1 || node.nodeType === 3 && node.data && /[\r\n\s]/.test(node.data)) { + return node; + } + node = node.nextSibling; + } + }; + var moveToCaretPosition = function (editor, root) { + var node, lastNode = root; + var dom = editor.dom; + var moveCaretBeforeOnEnterElementsMap = editor.schema.getMoveCaretBeforeOnEnterElements(); + if (!root) { + return; + } + if (/^(LI|DT|DD)$/.test(root.nodeName)) { + var firstChild = firstNonWhiteSpaceNodeSibling(root.firstChild); + if (firstChild && /^(UL|OL|DL)$/.test(firstChild.nodeName)) { + root.insertBefore(dom.doc.createTextNode(nbsp), root.firstChild); + } + } + var rng = dom.createRng(); + root.normalize(); + if (root.hasChildNodes()) { + var walker = new DomTreeWalker(root, root); + while (node = walker.current()) { + if (isText$1(node)) { + rng.setStart(node, 0); + rng.setEnd(node, 0); + break; + } + if (moveCaretBeforeOnEnterElementsMap[node.nodeName.toLowerCase()]) { + rng.setStartBefore(node); + rng.setEndBefore(node); + break; + } + lastNode = node; + node = walker.next(); + } + if (!node) { + rng.setStart(lastNode, 0); + rng.setEnd(lastNode, 0); + } + } else { + if (isBr(root)) { + if (root.nextSibling && dom.isBlock(root.nextSibling)) { + rng.setStartBefore(root); + rng.setEndBefore(root); + } else { + rng.setStartAfter(root); + rng.setEndAfter(root); + } + } else { + rng.setStart(root, 0); + rng.setEnd(root, 0); + } + } + editor.selection.setRng(rng); + scrollRangeIntoView(editor, rng); + }; + var getEditableRoot = function (dom, node) { + var root = dom.getRoot(); + var parent, editableRoot; + parent = node; + while (parent !== root && dom.getContentEditable(parent) !== 'false') { + if (dom.getContentEditable(parent) === 'true') { + editableRoot = parent; + } + parent = parent.parentNode; + } + return parent !== root ? editableRoot : root; + }; + var getParentBlock$2 = function (editor) { + return Optional.from(editor.dom.getParent(editor.selection.getStart(true), editor.dom.isBlock)); + }; + var getParentBlockName = function (editor) { + return getParentBlock$2(editor).fold(constant(''), function (parentBlock) { + return parentBlock.nodeName.toUpperCase(); + }); + }; + var isListItemParentBlock = function (editor) { + return getParentBlock$2(editor).filter(function (elm) { + return isListItem(SugarElement.fromDom(elm)); + }).isSome(); + }; + + var hasFirstChild = function (elm, name) { + return elm.firstChild && elm.firstChild.nodeName === name; + }; + var isFirstChild = function (elm) { + var _a; + return ((_a = elm.parentNode) === null || _a === void 0 ? void 0 : _a.firstChild) === elm; + }; + var hasParent$1 = function (elm, parentName) { + return elm && elm.parentNode && elm.parentNode.nodeName === parentName; + }; + var isListBlock = function (elm) { + return elm && /^(OL|UL|LI)$/.test(elm.nodeName); + }; + var isNestedList = function (elm) { + return isListBlock(elm) && isListBlock(elm.parentNode); + }; + var getContainerBlock = function (containerBlock) { + var containerBlockParent = containerBlock.parentNode; + if (/^(LI|DT|DD)$/.test(containerBlockParent.nodeName)) { + return containerBlockParent; + } + return containerBlock; + }; + var isFirstOrLastLi = function (containerBlock, parentBlock, first) { + var node = containerBlock[first ? 'firstChild' : 'lastChild']; + while (node) { + if (isElement$1(node)) { + break; + } + node = node[first ? 'nextSibling' : 'previousSibling']; + } + return node === parentBlock; + }; + var insert = function (editor, createNewBlock, containerBlock, parentBlock, newBlockName) { + var dom = editor.dom; + var rng = editor.selection.getRng(); + if (containerBlock === editor.getBody()) { + return; + } + if (isNestedList(containerBlock)) { + newBlockName = 'LI'; + } + var newBlock = newBlockName ? createNewBlock(newBlockName) : dom.create('BR'); + if (isFirstOrLastLi(containerBlock, parentBlock, true) && isFirstOrLastLi(containerBlock, parentBlock, false)) { + if (hasParent$1(containerBlock, 'LI')) { + var containerBlockParent = getContainerBlock(containerBlock); + dom.insertAfter(newBlock, containerBlockParent); + if (isFirstChild(containerBlock)) { + dom.remove(containerBlockParent); + } else { + dom.remove(containerBlock); + } + } else { + dom.replace(newBlock, containerBlock); + } + } else if (isFirstOrLastLi(containerBlock, parentBlock, true)) { + if (hasParent$1(containerBlock, 'LI')) { + dom.insertAfter(newBlock, getContainerBlock(containerBlock)); + newBlock.appendChild(dom.doc.createTextNode(' ')); + newBlock.appendChild(containerBlock); + } else { + containerBlock.parentNode.insertBefore(newBlock, containerBlock); + } + dom.remove(parentBlock); + } else if (isFirstOrLastLi(containerBlock, parentBlock, false)) { + dom.insertAfter(newBlock, getContainerBlock(containerBlock)); + dom.remove(parentBlock); + } else { + containerBlock = getContainerBlock(containerBlock); + var tmpRng = rng.cloneRange(); + tmpRng.setStartAfter(parentBlock); + tmpRng.setEndAfter(containerBlock); + var fragment = tmpRng.extractContents(); + if (newBlockName === 'LI' && hasFirstChild(fragment, 'LI')) { + newBlock = fragment.firstChild; + dom.insertAfter(fragment, containerBlock); + } else { + dom.insertAfter(fragment, containerBlock); + dom.insertAfter(newBlock, containerBlock); + } + dom.remove(parentBlock); + } + moveToCaretPosition(editor, newBlock); + }; + + var trimZwsp = function (fragment) { + each(descendants(SugarElement.fromDom(fragment), isText), function (text) { + var rawNode = text.dom; + rawNode.nodeValue = trim$2(rawNode.nodeValue); + }); + }; + var isEmptyAnchor = function (dom, elm) { + return elm && elm.nodeName === 'A' && dom.isEmpty(elm); + }; + var isTableCell$5 = function (node) { + return node && /^(TD|TH|CAPTION)$/.test(node.nodeName); + }; + var emptyBlock = function (elm) { + elm.innerHTML = '
    '; + }; + var containerAndSiblingName = function (container, nodeName) { + return container.nodeName === nodeName || container.previousSibling && container.previousSibling.nodeName === nodeName; + }; + var canSplitBlock = function (dom, node) { + return node && dom.isBlock(node) && !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) && !/^(fixed|absolute)/i.test(node.style.position) && dom.getContentEditable(node) !== 'true'; + }; + var trimInlineElementsOnLeftSideOfBlock = function (dom, nonEmptyElementsMap, block) { + var node = block; + var firstChilds = []; + var i; + if (!node) { + return; + } + while (node = node.firstChild) { + if (dom.isBlock(node)) { + return; + } + if (isElement$1(node) && !nonEmptyElementsMap[node.nodeName.toLowerCase()]) { + firstChilds.push(node); + } + } + i = firstChilds.length; + while (i--) { + node = firstChilds[i]; + if (!node.hasChildNodes() || node.firstChild === node.lastChild && node.firstChild.nodeValue === '') { + dom.remove(node); + } else { + if (isEmptyAnchor(dom, node)) { + dom.remove(node); + } + } + } + }; + var normalizeZwspOffset = function (start, container, offset) { + if (isText$1(container) === false) { + return offset; + } else if (start) { + return offset === 1 && container.data.charAt(offset - 1) === ZWSP ? 0 : offset; + } else { + return offset === container.data.length - 1 && container.data.charAt(offset) === ZWSP ? container.data.length : offset; + } + }; + var includeZwspInRange = function (rng) { + var newRng = rng.cloneRange(); + newRng.setStart(rng.startContainer, normalizeZwspOffset(true, rng.startContainer, rng.startOffset)); + newRng.setEnd(rng.endContainer, normalizeZwspOffset(false, rng.endContainer, rng.endOffset)); + return newRng; + }; + var trimLeadingLineBreaks = function (node) { + do { + if (isText$1(node)) { + node.nodeValue = node.nodeValue.replace(/^[\r\n]+/, ''); + } + node = node.firstChild; + } while (node); + }; + var getEditableRoot$1 = function (dom, node) { + var root = dom.getRoot(); + var parent, editableRoot; + parent = node; + while (parent !== root && dom.getContentEditable(parent) !== 'false') { + if (dom.getContentEditable(parent) === 'true') { + editableRoot = parent; + } + parent = parent.parentNode; + } + return parent !== root ? editableRoot : root; + }; + var applyAttributes = function (editor, node, forcedRootBlockAttrs) { + var dom = editor.dom; + Optional.from(forcedRootBlockAttrs.style).map(dom.parseStyle).each(function (attrStyles) { + var currentStyles = getAllRaw(SugarElement.fromDom(node)); + var newStyles = __assign(__assign({}, currentStyles), attrStyles); + dom.setStyles(node, newStyles); + }); + var attrClassesOpt = Optional.from(forcedRootBlockAttrs.class).map(function (attrClasses) { + return attrClasses.split(/\s+/); + }); + var currentClassesOpt = Optional.from(node.className).map(function (currentClasses) { + return filter(currentClasses.split(/\s+/), function (clazz) { + return clazz !== ''; + }); + }); + lift2(attrClassesOpt, currentClassesOpt, function (attrClasses, currentClasses) { + var filteredClasses = filter(currentClasses, function (clazz) { + return !contains(attrClasses, clazz); + }); + var newClasses = __spreadArrays(attrClasses, filteredClasses); + dom.setAttrib(node, 'class', newClasses.join(' ')); + }); + var appliedAttrs = [ + 'style', + 'class' + ]; + var remainingAttrs = filter$1(forcedRootBlockAttrs, function (_, attrs) { + return !contains(appliedAttrs, attrs); + }); + dom.setAttribs(node, remainingAttrs); + }; + var setForcedBlockAttrs = function (editor, node) { + var forcedRootBlockName = getForcedRootBlock(editor); + if (forcedRootBlockName && forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) { + var forcedRootBlockAttrs = getForcedRootBlockAttrs(editor); + applyAttributes(editor, node, forcedRootBlockAttrs); + } + }; + var wrapSelfAndSiblingsInDefaultBlock = function (editor, newBlockName, rng, container, offset) { + var newBlock, parentBlock, startNode, node, next, rootBlockName; + var blockName = newBlockName || 'P'; + var dom = editor.dom, editableRoot = getEditableRoot$1(dom, container); + parentBlock = dom.getParent(container, dom.isBlock); + if (!parentBlock || !canSplitBlock(dom, parentBlock)) { + parentBlock = parentBlock || editableRoot; + if (parentBlock === editor.getBody() || isTableCell$5(parentBlock)) { + rootBlockName = parentBlock.nodeName.toLowerCase(); + } else { + rootBlockName = parentBlock.parentNode.nodeName.toLowerCase(); + } + if (!parentBlock.hasChildNodes()) { + newBlock = dom.create(blockName); + setForcedBlockAttrs(editor, newBlock); + parentBlock.appendChild(newBlock); + rng.setStart(newBlock, 0); + rng.setEnd(newBlock, 0); + return newBlock; + } + node = container; + while (node.parentNode !== parentBlock) { + node = node.parentNode; + } + while (node && !dom.isBlock(node)) { + startNode = node; + node = node.previousSibling; + } + if (startNode && editor.schema.isValidChild(rootBlockName, blockName.toLowerCase())) { + newBlock = dom.create(blockName); + setForcedBlockAttrs(editor, newBlock); + startNode.parentNode.insertBefore(newBlock, startNode); + node = startNode; + while (node && !dom.isBlock(node)) { + next = node.nextSibling; + newBlock.appendChild(node); + node = next; + } + rng.setStart(container, offset); + rng.setEnd(container, offset); + } + } + return container; + }; + var addBrToBlockIfNeeded = function (dom, block) { + block.normalize(); + var lastChild = block.lastChild; + if (!lastChild || /^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true))) { + dom.add(block, 'br'); + } + }; + var insert$1 = function (editor, evt) { + var tmpRng, container, offset, parentBlock; + var newBlock, fragment, containerBlock, parentBlockName, newBlockName, isAfterLastNodeInContainer; + var dom = editor.dom; + var schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements(); + var rng = editor.selection.getRng(); + var createNewBlock = function (name) { + var node = container, block, clonedNode, caretNode; + var textInlineElements = schema.getTextInlineElements(); + if (name || parentBlockName === 'TABLE' || parentBlockName === 'HR') { + block = dom.create(name || newBlockName); + } else { + block = parentBlock.cloneNode(false); + } + caretNode = block; + if (shouldKeepStyles(editor) === false) { + dom.setAttrib(block, 'style', null); + dom.setAttrib(block, 'class', null); + } else { + do { + if (textInlineElements[node.nodeName]) { + if (isCaretNode(node) || isBookmarkNode$1(node)) { + continue; + } + clonedNode = node.cloneNode(false); + dom.setAttrib(clonedNode, 'id', ''); + if (block.hasChildNodes()) { + clonedNode.appendChild(block.firstChild); + block.appendChild(clonedNode); + } else { + caretNode = clonedNode; + block.appendChild(clonedNode); + } + } + } while ((node = node.parentNode) && node !== editableRoot); + } + setForcedBlockAttrs(editor, block); + emptyBlock(caretNode); + return block; + }; + var isCaretAtStartOrEndOfBlock = function (start) { + var node, name; + var normalizedOffset = normalizeZwspOffset(start, container, offset); + if (isText$1(container) && (start ? normalizedOffset > 0 : normalizedOffset < container.nodeValue.length)) { + return false; + } + if (container.parentNode === parentBlock && isAfterLastNodeInContainer && !start) { + return true; + } + if (start && isElement$1(container) && container === parentBlock.firstChild) { + return true; + } + if (containerAndSiblingName(container, 'TABLE') || containerAndSiblingName(container, 'HR')) { + return isAfterLastNodeInContainer && !start || !isAfterLastNodeInContainer && start; + } + var walker = new DomTreeWalker(container, parentBlock); + if (isText$1(container)) { + if (start && normalizedOffset === 0) { + walker.prev(); + } else if (!start && normalizedOffset === container.nodeValue.length) { + walker.next(); + } + } + while (node = walker.current()) { + if (isElement$1(node)) { + if (!node.getAttribute('data-mce-bogus')) { + name = node.nodeName.toLowerCase(); + if (nonEmptyElementsMap[name] && name !== 'br') { + return false; + } + } + } else if (isText$1(node) && !isWhitespaceText(node.nodeValue)) { + return false; + } + if (start) { + walker.prev(); + } else { + walker.next(); + } + } + return true; + }; + var insertNewBlockAfter = function () { + if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName !== 'HGROUP') { + newBlock = createNewBlock(newBlockName); + } else { + newBlock = createNewBlock(); + } + if (shouldEndContainerOnEmptyBlock(editor) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock)) { + newBlock = dom.split(containerBlock, parentBlock); + } else { + dom.insertAfter(newBlock, parentBlock); + } + moveToCaretPosition(editor, newBlock); + }; + normalize(dom, rng).each(function (normRng) { + rng.setStart(normRng.startContainer, normRng.startOffset); + rng.setEnd(normRng.endContainer, normRng.endOffset); + }); + container = rng.startContainer; + offset = rng.startOffset; + newBlockName = getForcedRootBlock(editor); + var shiftKey = !!(evt && evt.shiftKey); + var ctrlKey = !!(evt && evt.ctrlKey); + if (isElement$1(container) && container.hasChildNodes()) { + isAfterLastNodeInContainer = offset > container.childNodes.length - 1; + container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container; + if (isAfterLastNodeInContainer && isText$1(container)) { + offset = container.nodeValue.length; + } else { + offset = 0; + } + } + var editableRoot = getEditableRoot$1(dom, container); + if (!editableRoot) { + return; + } + if (newBlockName && !shiftKey || !newBlockName && shiftKey) { + container = wrapSelfAndSiblingsInDefaultBlock(editor, newBlockName, rng, container, offset); + } + parentBlock = dom.getParent(container, dom.isBlock); + containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null; + parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : ''; + var containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : ''; + if (containerBlockName === 'LI' && !ctrlKey) { + parentBlock = containerBlock; + containerBlock = containerBlock.parentNode; + parentBlockName = containerBlockName; + } + if (/^(LI|DT|DD)$/.test(parentBlockName)) { + if (dom.isEmpty(parentBlock)) { + insert(editor, createNewBlock, containerBlock, parentBlock, newBlockName); + return; + } + } + if (newBlockName && parentBlock === editor.getBody()) { + return; + } + newBlockName = newBlockName || 'P'; + if (isCaretContainerBlock(parentBlock)) { + newBlock = showCaretContainerBlock(parentBlock); + if (dom.isEmpty(parentBlock)) { + emptyBlock(parentBlock); + } + setForcedBlockAttrs(editor, newBlock); + moveToCaretPosition(editor, newBlock); + } else if (isCaretAtStartOrEndOfBlock()) { + insertNewBlockAfter(); + } else if (isCaretAtStartOrEndOfBlock(true)) { + newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock); + moveToCaretPosition(editor, containerAndSiblingName(parentBlock, 'HR') ? newBlock : parentBlock); + } else { + tmpRng = includeZwspInRange(rng).cloneRange(); + tmpRng.setEndAfter(parentBlock); + fragment = tmpRng.extractContents(); + trimZwsp(fragment); + trimLeadingLineBreaks(fragment); + newBlock = fragment.firstChild; + dom.insertAfter(fragment, parentBlock); + trimInlineElementsOnLeftSideOfBlock(dom, nonEmptyElementsMap, newBlock); + addBrToBlockIfNeeded(dom, parentBlock); + if (dom.isEmpty(parentBlock)) { + emptyBlock(parentBlock); + } + newBlock.normalize(); + if (dom.isEmpty(newBlock)) { + dom.remove(newBlock); + insertNewBlockAfter(); + } else { + setForcedBlockAttrs(editor, newBlock); + moveToCaretPosition(editor, newBlock); + } + } + dom.setAttrib(newBlock, 'id', ''); + editor.fire('NewBlock', { newBlock: newBlock }); + }; + + var hasRightSideContent = function (schema, container, parentBlock) { + var walker = new DomTreeWalker(container, parentBlock); + var node; + var nonEmptyElementsMap = schema.getNonEmptyElements(); + while (node = walker.next()) { + if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || node.length > 0) { + return true; + } + } + }; + var moveSelectionToBr = function (editor, brElm, extraBr) { + var rng = editor.dom.createRng(); + if (!extraBr) { + rng.setStartAfter(brElm); + rng.setEndAfter(brElm); + } else { + rng.setStartBefore(brElm); + rng.setEndBefore(brElm); + } + editor.selection.setRng(rng); + scrollRangeIntoView(editor, rng); + }; + var insertBrAtCaret = function (editor, evt) { + var selection = editor.selection; + var dom = editor.dom; + var rng = selection.getRng(); + var brElm; + var extraBr; + normalize(dom, rng).each(function (normRng) { + rng.setStart(normRng.startContainer, normRng.startOffset); + rng.setEnd(normRng.endContainer, normRng.endOffset); + }); + var offset = rng.startOffset; + var container = rng.startContainer; + if (container.nodeType === 1 && container.hasChildNodes()) { + var isAfterLastNodeInContainer = offset > container.childNodes.length - 1; + container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container; + if (isAfterLastNodeInContainer && container.nodeType === 3) { + offset = container.nodeValue.length; + } else { + offset = 0; + } + } + var parentBlock = dom.getParent(container, dom.isBlock); + var containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null; + var containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : ''; + var isControlKey = !!(evt && evt.ctrlKey); + if (containerBlockName === 'LI' && !isControlKey) { + parentBlock = containerBlock; + } + if (container && container.nodeType === 3 && offset >= container.nodeValue.length) { + if (!hasRightSideContent(editor.schema, container, parentBlock)) { + brElm = dom.create('br'); + rng.insertNode(brElm); + rng.setStartAfter(brElm); + rng.setEndAfter(brElm); + extraBr = true; + } + } + brElm = dom.create('br'); + rangeInsertNode(dom, rng, brElm); + moveSelectionToBr(editor, brElm, extraBr); + editor.undoManager.add(); + }; + var insertBrBefore = function (editor, inline) { + var br = SugarElement.fromTag('br'); + before(SugarElement.fromDom(inline), br); + editor.undoManager.add(); + }; + var insertBrAfter = function (editor, inline) { + if (!hasBrAfter(editor.getBody(), inline)) { + after(SugarElement.fromDom(inline), SugarElement.fromTag('br')); + } + var br = SugarElement.fromTag('br'); + after(SugarElement.fromDom(inline), br); + moveSelectionToBr(editor, br.dom, false); + editor.undoManager.add(); + }; + var isBeforeBr$1 = function (pos) { + return isBr(pos.getNode()); + }; + var hasBrAfter = function (rootNode, startNode) { + if (isBeforeBr$1(CaretPosition.after(startNode))) { + return true; + } else { + return nextPosition(rootNode, CaretPosition.after(startNode)).map(function (pos) { + return isBr(pos.getNode()); + }).getOr(false); + } + }; + var isAnchorLink = function (elm) { + return elm && elm.nodeName === 'A' && 'href' in elm; + }; + var isInsideAnchor = function (location) { + return location.fold(never, isAnchorLink, isAnchorLink, never); + }; + var readInlineAnchorLocation = function (editor) { + var isInlineTarget$1 = curry(isInlineTarget, editor); + var position = CaretPosition.fromRangeStart(editor.selection.getRng()); + return readLocation(isInlineTarget$1, editor.getBody(), position).filter(isInsideAnchor); + }; + var insertBrOutsideAnchor = function (editor, location) { + location.fold(noop, curry(insertBrBefore, editor), curry(insertBrAfter, editor), noop); + }; + var insert$2 = function (editor, evt) { + var anchorLocation = readInlineAnchorLocation(editor); + if (anchorLocation.isSome()) { + anchorLocation.each(curry(insertBrOutsideAnchor, editor)); + } else { + insertBrAtCaret(editor, evt); + } + }; + + var matchesSelector = function (editor, selector) { + return getParentBlock$2(editor).filter(function (parentBlock) { + return selector.length > 0 && is$1(SugarElement.fromDom(parentBlock), selector); + }).isSome(); + }; + var shouldInsertBr = function (editor) { + return matchesSelector(editor, getBrNewLineSelector(editor)); + }; + var shouldBlockNewLine = function (editor) { + return matchesSelector(editor, getNoNewLineSelector(editor)); + }; + + var newLineAction = Adt.generate([ + { br: [] }, + { block: [] }, + { none: [] } + ]); + var shouldBlockNewLine$1 = function (editor, _shiftKey) { + return shouldBlockNewLine(editor); + }; + var isBrMode = function (requiredState) { + return function (editor, _shiftKey) { + var brMode = getForcedRootBlock(editor) === ''; + return brMode === requiredState; + }; + }; + var inListBlock = function (requiredState) { + return function (editor, _shiftKey) { + return isListItemParentBlock(editor) === requiredState; + }; + }; + var inBlock = function (blockName, requiredState) { + return function (editor, _shiftKey) { + var state = getParentBlockName(editor) === blockName.toUpperCase(); + return state === requiredState; + }; + }; + var inPreBlock = function (requiredState) { + return inBlock('pre', requiredState); + }; + var inSummaryBlock = function () { + return inBlock('summary', true); + }; + var shouldPutBrInPre$1 = function (requiredState) { + return function (editor, _shiftKey) { + return shouldPutBrInPre(editor) === requiredState; + }; + }; + var inBrContext = function (editor, _shiftKey) { + return shouldInsertBr(editor); + }; + var hasShiftKey = function (_editor, shiftKey) { + return shiftKey; + }; + var canInsertIntoEditableRoot = function (editor) { + var forcedRootBlock = getForcedRootBlock(editor); + var rootEditable = getEditableRoot(editor.dom, editor.selection.getStart()); + return rootEditable && editor.schema.isValidChild(rootEditable.nodeName, forcedRootBlock ? forcedRootBlock : 'P'); + }; + var match$2 = function (predicates, action) { + return function (editor, shiftKey) { + var isMatch = foldl(predicates, function (res, p) { + return res && p(editor, shiftKey); + }, true); + return isMatch ? Optional.some(action) : Optional.none(); + }; + }; + var getAction$1 = function (editor, evt) { + return evaluateUntil([ + match$2([shouldBlockNewLine$1], newLineAction.none()), + match$2([inSummaryBlock()], newLineAction.br()), + match$2([ + inPreBlock(true), + shouldPutBrInPre$1(false), + hasShiftKey + ], newLineAction.br()), + match$2([ + inPreBlock(true), + shouldPutBrInPre$1(false) + ], newLineAction.block()), + match$2([ + inPreBlock(true), + shouldPutBrInPre$1(true), + hasShiftKey + ], newLineAction.block()), + match$2([ + inPreBlock(true), + shouldPutBrInPre$1(true) + ], newLineAction.br()), + match$2([ + inListBlock(true), + hasShiftKey + ], newLineAction.br()), + match$2([inListBlock(true)], newLineAction.block()), + match$2([ + isBrMode(true), + hasShiftKey, + canInsertIntoEditableRoot + ], newLineAction.block()), + match$2([isBrMode(true)], newLineAction.br()), + match$2([inBrContext], newLineAction.br()), + match$2([ + isBrMode(false), + hasShiftKey + ], newLineAction.br()), + match$2([canInsertIntoEditableRoot], newLineAction.block()) + ], [ + editor, + !!(evt && evt.shiftKey) + ]).getOr(newLineAction.none()); + }; + + var insert$3 = function (editor, evt) { + getAction$1(editor, evt).fold(function () { + insert$2(editor, evt); + }, function () { + insert$1(editor, evt); + }, noop); + }; + + var handleEnterKeyEvent = function (editor, event) { + if (event.isDefaultPrevented()) { + return; + } + event.preventDefault(); + endTypingLevelIgnoreLocks(editor.undoManager); + editor.undoManager.transact(function () { + if (editor.selection.isCollapsed() === false) { + editor.execCommand('Delete'); + } + insert$3(editor, event); + }); + }; + var setup$e = function (editor) { + editor.on('keydown', function (event) { + if (event.keyCode === VK.ENTER) { + handleEnterKeyEvent(editor, event); + } + }); + }; + + var executeKeydownOverride$2 = function (editor, caret, evt) { + execute([ + { + keyCode: VK.END, + action: action(moveToLineEndPoint$2, editor, true) + }, + { + keyCode: VK.HOME, + action: action(moveToLineEndPoint$2, editor, false) + }, + { + keyCode: VK.END, + action: action(moveToLineEndPoint$3, editor, true) + }, + { + keyCode: VK.HOME, + action: action(moveToLineEndPoint$3, editor, false) + }, + { + keyCode: VK.END, + action: action(moveToLineEndPoint$1, editor, true, caret) + }, + { + keyCode: VK.HOME, + action: action(moveToLineEndPoint$1, editor, false, caret) + } + ], evt).each(function (_) { + evt.preventDefault(); + }); + }; + var setup$f = function (editor, caret) { + editor.on('keydown', function (evt) { + if (evt.isDefaultPrevented() === false) { + executeKeydownOverride$2(editor, caret, evt); + } + }); + }; + + var browser$4 = detect$3().browser; + var setupIeInput = function (editor) { + var keypressThrotter = first(function () { + if (!editor.composing) { + normalizeNbspsInEditor(editor); + } + }, 0); + if (browser$4.isIE()) { + editor.on('keypress', function (_e) { + keypressThrotter.throttle(); + }); + editor.on('remove', function (_e) { + keypressThrotter.cancel(); + }); + } + }; + var setup$g = function (editor) { + setupIeInput(editor); + editor.on('input', function (e) { + if (e.isComposing === false) { + normalizeNbspsInEditor(editor); + } + }); + }; + + var platform$2 = detect$3(); + var executeKeyupAction = function (editor, caret, evt) { + execute([ + { + keyCode: VK.PAGE_UP, + action: action(moveToLineEndPoint$1, editor, false, caret) + }, + { + keyCode: VK.PAGE_DOWN, + action: action(moveToLineEndPoint$1, editor, true, caret) + } + ], evt); + }; + var stopImmediatePropagation = function (e) { + return e.stopImmediatePropagation(); + }; + var isPageUpDown = function (evt) { + return evt.keyCode === VK.PAGE_UP || evt.keyCode === VK.PAGE_DOWN; + }; + var setNodeChangeBlocker = function (blocked, editor, block) { + if (block && !blocked.get()) { + editor.on('NodeChange', stopImmediatePropagation, true); + } else if (!block && blocked.get()) { + editor.off('NodeChange', stopImmediatePropagation); + } + blocked.set(block); + }; + var setup$h = function (editor, caret) { + if (platform$2.os.isOSX()) { + return; + } + var blocked = Cell(false); + editor.on('keydown', function (evt) { + if (isPageUpDown(evt)) { + setNodeChangeBlocker(blocked, editor, true); + } + }); + editor.on('keyup', function (evt) { + if (evt.isDefaultPrevented() === false) { + executeKeyupAction(editor, caret, evt); + } + if (isPageUpDown(evt) && blocked.get()) { + setNodeChangeBlocker(blocked, editor, false); + editor.nodeChanged(); + } + }); + }; + + var insertTextAtPosition = function (text, pos) { + var container = pos.container(); + var offset = pos.offset(); + if (isText$1(container)) { + container.insertData(offset, text); + return Optional.some(CaretPosition(container, offset + text.length)); + } else { + return getElementFromPosition(pos).map(function (elm) { + var textNode = SugarElement.fromText(text); + if (pos.isAtEnd()) { + after(elm, textNode); + } else { + before(elm, textNode); + } + return CaretPosition(textNode.dom, text.length); + }); + } + }; + var insertNbspAtPosition = curry(insertTextAtPosition, nbsp); + var insertSpaceAtPosition = curry(insertTextAtPosition, ' '); + + var locationToCaretPosition = function (root) { + return function (location) { + return location.fold(function (element) { + return prevPosition(root.dom, CaretPosition.before(element)); + }, function (element) { + return firstPositionIn(element); + }, function (element) { + return lastPositionIn(element); + }, function (element) { + return nextPosition(root.dom, CaretPosition.after(element)); + }); + }; + }; + var insertInlineBoundarySpaceOrNbsp = function (root, pos) { + return function (checkPos) { + return needsToHaveNbsp(root, checkPos) ? insertNbspAtPosition(pos) : insertSpaceAtPosition(pos); + }; + }; + var setSelection$1 = function (editor) { + return function (pos) { + editor.selection.setRng(pos.toRange()); + editor.nodeChanged(); + return true; + }; + }; + var insertSpaceOrNbspAtSelection = function (editor) { + var pos = CaretPosition.fromRangeStart(editor.selection.getRng()); + var root = SugarElement.fromDom(editor.getBody()); + if (editor.selection.isCollapsed()) { + var isInlineTarget$1 = curry(isInlineTarget, editor); + var caretPosition = CaretPosition.fromRangeStart(editor.selection.getRng()); + return readLocation(isInlineTarget$1, editor.getBody(), caretPosition).bind(locationToCaretPosition(root)).bind(insertInlineBoundarySpaceOrNbsp(root, pos)).exists(setSelection$1(editor)); + } else { + return false; + } + }; + + var executeKeydownOverride$3 = function (editor, evt) { + execute([{ + keyCode: VK.SPACEBAR, + action: action(insertSpaceOrNbspAtSelection, editor) + }], evt).each(function (_) { + evt.preventDefault(); + }); + }; + var setup$i = function (editor) { + editor.on('keydown', function (evt) { + if (evt.isDefaultPrevented() === false) { + executeKeydownOverride$3(editor, evt); + } + }); + }; + + var registerKeyboardOverrides = function (editor) { + var caret = setupSelectedState(editor); + setup$b(editor); + setup$c(editor, caret); + setup$d(editor, caret); + setup$e(editor); + setup$i(editor); + setup$g(editor); + setup$f(editor, caret); + setup$h(editor, caret); + return caret; + }; + var setup$j = function (editor) { + if (!isRtc(editor)) { + return registerKeyboardOverrides(editor); + } else { + return Cell(null); + } + }; + + var NodeChange = function () { + function NodeChange(editor) { + this.lastPath = []; + this.editor = editor; + var lastRng; + var self = this; + if (!('onselectionchange' in editor.getDoc())) { + editor.on('NodeChange click mouseup keyup focus', function (e) { + var nativeRng = editor.selection.getRng(); + var fakeRng = { + startContainer: nativeRng.startContainer, + startOffset: nativeRng.startOffset, + endContainer: nativeRng.endContainer, + endOffset: nativeRng.endOffset + }; + if (e.type === 'nodechange' || !isEq$1(fakeRng, lastRng)) { + editor.fire('SelectionChange'); + } + lastRng = fakeRng; + }); + } + editor.on('contextmenu', function () { + editor.fire('SelectionChange'); + }); + editor.on('SelectionChange', function () { + var startElm = editor.selection.getStart(true); + if (!startElm || !Env.range && editor.selection.isCollapsed()) { + return; + } + if (hasAnyRanges(editor) && !self.isSameElementPath(startElm) && editor.dom.isChildOf(startElm, editor.getBody())) { + editor.nodeChanged({ selectionChange: true }); + } + }); + editor.on('mouseup', function (e) { + if (!e.isDefaultPrevented() && hasAnyRanges(editor)) { + if (editor.selection.getNode().nodeName === 'IMG') { + Delay.setEditorTimeout(editor, function () { + editor.nodeChanged(); + }); + } else { + editor.nodeChanged(); + } + } + }); + } + NodeChange.prototype.nodeChanged = function (args) { + var selection = this.editor.selection; + var node, parents, root; + if (this.editor.initialized && selection && !shouldDisableNodeChange(this.editor) && !this.editor.mode.isReadOnly()) { + root = this.editor.getBody(); + node = selection.getStart(true) || root; + if (node.ownerDocument !== this.editor.getDoc() || !this.editor.dom.isChildOf(node, root)) { + node = root; + } + parents = []; + this.editor.dom.getParent(node, function (node) { + if (node === root) { + return true; + } + parents.push(node); + }); + args = args || {}; + args.element = node; + args.parents = parents; + this.editor.fire('NodeChange', args); + } + }; + NodeChange.prototype.isSameElementPath = function (startElm) { + var i; + var currentPath = this.editor.$(startElm).parentsUntil(this.editor.getBody()).add(startElm); + if (currentPath.length === this.lastPath.length) { + for (i = currentPath.length; i >= 0; i--) { + if (currentPath[i] !== this.lastPath[i]) { + break; + } + } + if (i === -1) { + this.lastPath = currentPath; + return true; + } + } + this.lastPath = currentPath; + return false; + }; + return NodeChange; + }(); + + var preventSummaryToggle = function (editor) { + editor.on('click', function (e) { + if (editor.dom.getParent(e.target, 'details')) { + e.preventDefault(); + } + }); + }; + var filterDetails = function (editor) { + editor.parser.addNodeFilter('details', function (elms) { + each(elms, function (details) { + details.attr('data-mce-open', details.attr('open')); + details.attr('open', 'open'); + }); + }); + editor.serializer.addNodeFilter('details', function (elms) { + each(elms, function (details) { + var open = details.attr('data-mce-open'); + details.attr('open', isString(open) ? open : null); + details.attr('data-mce-open', null); + }); + }); + }; + var setup$k = function (editor) { + preventSummaryToggle(editor); + filterDetails(editor); + }; + + var isTextBlockNode = function (node) { + return isElement$1(node) && isTextBlock(SugarElement.fromDom(node)); + }; + var normalizeSelection$1 = function (editor) { + var rng = editor.selection.getRng(); + var startPos = CaretPosition.fromRangeStart(rng); + var endPos = CaretPosition.fromRangeEnd(rng); + if (CaretPosition.isElementPosition(startPos)) { + var container = startPos.container(); + if (isTextBlockNode(container)) { + firstPositionIn(container).each(function (pos) { + return rng.setStart(pos.container(), pos.offset()); + }); + } + } + if (CaretPosition.isElementPosition(endPos)) { + var container = startPos.container(); + if (isTextBlockNode(container)) { + lastPositionIn(container).each(function (pos) { + return rng.setEnd(pos.container(), pos.offset()); + }); + } + } + editor.selection.setRng(normalize$2(rng)); + }; + var setup$l = function (editor) { + editor.on('click', function (e) { + if (e.detail >= 3) { + normalizeSelection$1(editor); + } + }); + }; + + var value$1 = function () { + var subject = Cell(Optional.none()); + var clear = function () { + return subject.set(Optional.none()); + }; + var set = function (s) { + return subject.set(Optional.some(s)); + }; + var isSet = function () { + return subject.get().isSome(); + }; + var on = function (f) { + return subject.get().each(f); + }; + return { + clear: clear, + set: set, + isSet: isSet, + on: on + }; + }; + + var getAbsolutePosition = function (elm) { + var clientRect = elm.getBoundingClientRect(); + var doc = elm.ownerDocument; + var docElem = doc.documentElement; + var win = doc.defaultView; + return { + top: clientRect.top + win.pageYOffset - docElem.clientTop, + left: clientRect.left + win.pageXOffset - docElem.clientLeft + }; + }; + var getBodyPosition = function (editor) { + return editor.inline ? getAbsolutePosition(editor.getBody()) : { + left: 0, + top: 0 + }; + }; + var getScrollPosition = function (editor) { + var body = editor.getBody(); + return editor.inline ? { + left: body.scrollLeft, + top: body.scrollTop + } : { + left: 0, + top: 0 + }; + }; + var getBodyScroll = function (editor) { + var body = editor.getBody(), docElm = editor.getDoc().documentElement; + var inlineScroll = { + left: body.scrollLeft, + top: body.scrollTop + }; + var iframeScroll = { + left: body.scrollLeft || docElm.scrollLeft, + top: body.scrollTop || docElm.scrollTop + }; + return editor.inline ? inlineScroll : iframeScroll; + }; + var getMousePosition = function (editor, event) { + if (event.target.ownerDocument !== editor.getDoc()) { + var iframePosition = getAbsolutePosition(editor.getContentAreaContainer()); + var scrollPosition = getBodyScroll(editor); + return { + left: event.pageX - iframePosition.left + scrollPosition.left, + top: event.pageY - iframePosition.top + scrollPosition.top + }; + } + return { + left: event.pageX, + top: event.pageY + }; + }; + var calculatePosition = function (bodyPosition, scrollPosition, mousePosition) { + return { + pageX: mousePosition.left - bodyPosition.left + scrollPosition.left, + pageY: mousePosition.top - bodyPosition.top + scrollPosition.top + }; + }; + var calc = function (editor, event) { + return calculatePosition(getBodyPosition(editor), getScrollPosition(editor), getMousePosition(editor, event)); + }; + + var isContentEditableFalse$a = isContentEditableFalse, isContentEditableTrue$3 = isContentEditableTrue; + var isDraggable = function (rootElm, elm) { + return isContentEditableFalse$a(elm) && elm !== rootElm; + }; + var isValidDropTarget = function (editor, targetElement, dragElement) { + if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) { + return false; + } + return !isContentEditableFalse$a(targetElement); + }; + var cloneElement = function (elm) { + var cloneElm = elm.cloneNode(true); + cloneElm.removeAttribute('data-mce-selected'); + return cloneElm; + }; + var createGhost = function (editor, elm, width, height) { + var dom = editor.dom; + var clonedElm = elm.cloneNode(true); + dom.setStyles(clonedElm, { + width: width, + height: height + }); + dom.setAttrib(clonedElm, 'data-mce-selected', null); + var ghostElm = dom.create('div', { + 'class': 'mce-drag-container', + 'data-mce-bogus': 'all', + 'unselectable': 'on', + 'contenteditable': 'false' + }); + dom.setStyles(ghostElm, { + position: 'absolute', + opacity: 0.5, + overflow: 'hidden', + border: 0, + padding: 0, + margin: 0, + width: width, + height: height + }); + dom.setStyles(clonedElm, { + margin: 0, + boxSizing: 'border-box' + }); + ghostElm.appendChild(clonedElm); + return ghostElm; + }; + var appendGhostToBody = function (ghostElm, bodyElm) { + if (ghostElm.parentNode !== bodyElm) { + bodyElm.appendChild(ghostElm); + } + }; + var moveGhost = function (ghostElm, position, width, height, maxX, maxY) { + var overflowX = 0, overflowY = 0; + ghostElm.style.left = position.pageX + 'px'; + ghostElm.style.top = position.pageY + 'px'; + if (position.pageX + width > maxX) { + overflowX = position.pageX + width - maxX; + } + if (position.pageY + height > maxY) { + overflowY = position.pageY + height - maxY; + } + ghostElm.style.width = width - overflowX + 'px'; + ghostElm.style.height = height - overflowY + 'px'; + }; + var removeElement = function (elm) { + if (elm && elm.parentNode) { + elm.parentNode.removeChild(elm); + } + }; + var isLeftMouseButtonPressed = function (e) { + return e.button === 0; + }; + var applyRelPos = function (state, position) { + return { + pageX: position.pageX - state.relX, + pageY: position.pageY + 5 + }; + }; + var start$1 = function (state, editor) { + return function (e) { + if (isLeftMouseButtonPressed(e)) { + var ceElm = find(editor.dom.getParents(e.target), or(isContentEditableFalse$a, isContentEditableTrue$3)).getOr(null); + if (isDraggable(editor.getBody(), ceElm)) { + var elmPos = editor.dom.getPos(ceElm); + var bodyElm = editor.getBody(); + var docElm = editor.getDoc().documentElement; + state.set({ + element: ceElm, + dragging: false, + screenX: e.screenX, + screenY: e.screenY, + maxX: (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2, + maxY: (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2, + relX: e.pageX - elmPos.x, + relY: e.pageY - elmPos.y, + width: ceElm.offsetWidth, + height: ceElm.offsetHeight, + ghost: createGhost(editor, ceElm, ceElm.offsetWidth, ceElm.offsetHeight) + }); + } + } + }; + }; + var move$2 = function (state, editor) { + var throttledPlaceCaretAt = Delay.throttle(function (clientX, clientY) { + editor._selectionOverrides.hideFakeCaret(); + editor.selection.placeCaretAt(clientX, clientY); + }, 0); + editor.on('remove', throttledPlaceCaretAt.stop); + return function (e) { + return state.on(function (state) { + var movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY)); + if (!state.dragging && movement > 10) { + var args = editor.fire('dragstart', { target: state.element }); + if (args.isDefaultPrevented()) { + return; + } + state.dragging = true; + editor.focus(); + } + if (state.dragging) { + var targetPos = applyRelPos(state, calc(editor, e)); + appendGhostToBody(state.ghost, editor.getBody()); + moveGhost(state.ghost, targetPos, state.width, state.height, state.maxX, state.maxY); + throttledPlaceCaretAt(e.clientX, e.clientY); + } + }); + }; + }; + var getRawTarget = function (selection) { + var rng = selection.getSel().getRangeAt(0); + var startContainer = rng.startContainer; + return startContainer.nodeType === 3 ? startContainer.parentNode : startContainer; + }; + var drop = function (state, editor) { + return function (e) { + state.on(function (state) { + if (state.dragging) { + if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) { + var targetClone_1 = cloneElement(state.element); + var args = editor.fire('drop', { + clientX: e.clientX, + clientY: e.clientY + }); + if (!args.isDefaultPrevented()) { + editor.undoManager.transact(function () { + removeElement(state.element); + editor.insertContent(editor.dom.getOuterHTML(targetClone_1)); + editor._selectionOverrides.hideFakeCaret(); + }); + } + } + } + }); + removeDragState(state); + }; + }; + var stop = function (state, editor) { + return function () { + state.on(function (state) { + if (state.dragging) { + editor.fire('dragend'); + } + }); + removeDragState(state); + }; + }; + var removeDragState = function (state) { + state.on(function (state) { + removeElement(state.ghost); + }); + state.clear(); + }; + var bindFakeDragEvents = function (editor) { + var state = value$1(); + var pageDom = DOMUtils.DOM; + var rootDocument = document; + var dragStartHandler = start$1(state, editor); + var dragHandler = move$2(state, editor); + var dropHandler = drop(state, editor); + var dragEndHandler = stop(state, editor); + editor.on('mousedown', dragStartHandler); + editor.on('mousemove', dragHandler); + editor.on('mouseup', dropHandler); + pageDom.bind(rootDocument, 'mousemove', dragHandler); + pageDom.bind(rootDocument, 'mouseup', dragEndHandler); + editor.on('remove', function () { + pageDom.unbind(rootDocument, 'mousemove', dragHandler); + pageDom.unbind(rootDocument, 'mouseup', dragEndHandler); + }); + }; + var blockIeDrop = function (editor) { + editor.on('drop', function (e) { + var realTarget = typeof e.clientX !== 'undefined' ? editor.getDoc().elementFromPoint(e.clientX, e.clientY) : null; + if (isContentEditableFalse$a(realTarget) || editor.dom.getContentEditableParent(realTarget) === 'false') { + e.preventDefault(); + } + }); + }; + var blockUnsupportedFileDrop = function (editor) { + var preventFileDrop = function (e) { + if (!e.isDefaultPrevented()) { + var dataTransfer = e.dataTransfer; + if (dataTransfer && (contains(dataTransfer.types, 'Files') || dataTransfer.files.length > 0)) { + e.preventDefault(); + if (e.type === 'drop') { + displayError(editor, 'Dropped file type is not supported'); + } + } + } + }; + var preventFileDropIfUIElement = function (e) { + if (isUIElement(editor, e.target)) { + preventFileDrop(e); + } + }; + var setup = function () { + var pageDom = DOMUtils.DOM; + var dom = editor.dom; + var doc = document; + var editorRoot = editor.inline ? editor.getBody() : editor.getDoc(); + var eventNames = [ + 'drop', + 'dragover' + ]; + each(eventNames, function (name) { + pageDom.bind(doc, name, preventFileDropIfUIElement); + dom.bind(editorRoot, name, preventFileDrop); + }); + editor.on('remove', function () { + each(eventNames, function (name) { + pageDom.unbind(doc, name, preventFileDropIfUIElement); + dom.unbind(editorRoot, name, preventFileDrop); + }); + }); + }; + editor.on('init', function () { + Delay.setEditorTimeout(editor, setup, 0); + }); + }; + var init = function (editor) { + bindFakeDragEvents(editor); + blockIeDrop(editor); + if (shouldBlockUnsupportedDrop(editor)) { + blockUnsupportedFileDrop(editor); + } + }; + + var setup$m = function (editor) { + var renderFocusCaret = first(function () { + if (!editor.removed && editor.getBody().contains(document.activeElement)) { + var rng = editor.selection.getRng(); + if (rng.collapsed) { + var caretRange = renderRangeCaret(editor, rng, false); + editor.selection.setRng(caretRange); + } + } + }, 0); + editor.on('focus', function () { + renderFocusCaret.throttle(); + }); + editor.on('blur', function () { + renderFocusCaret.cancel(); + }); + }; + + var setup$n = function (editor) { + editor.on('init', function () { + editor.on('focusin', function (e) { + var target = e.target; + if (isMedia(target)) { + var ceRoot = getContentEditableRoot(editor.getBody(), target); + var node = isContentEditableFalse(ceRoot) ? ceRoot : target; + if (editor.selection.getNode() !== node) { + selectNode(editor, node).each(function (rng) { + return editor.selection.setRng(rng); + }); + } + } + }); + }); + }; + + var isContentEditableTrue$4 = isContentEditableTrue; + var isContentEditableFalse$b = isContentEditableFalse; + var getContentEditableRoot$1 = function (editor, node) { + return getContentEditableRoot(editor.getBody(), node); + }; + var SelectionOverrides = function (editor) { + var selection = editor.selection, dom = editor.dom; + var isBlock = dom.isBlock; + var rootNode = editor.getBody(); + var fakeCaret = FakeCaret(editor, rootNode, isBlock, function () { + return hasFocus$1(editor); + }); + var realSelectionId = 'sel-' + dom.uniqueId(); + var elementSelectionAttr = 'data-mce-selected'; + var selectedElement; + var isFakeSelectionElement = function (node) { + return dom.hasClass(node, 'mce-offscreen-selection'); + }; + var isFakeSelectionTargetElement = function (node) { + return node !== rootNode && (isContentEditableFalse$b(node) || isMedia(node)) && dom.isChildOf(node, rootNode); + }; + var isNearFakeSelectionElement = function (pos) { + return isBeforeContentEditableFalse(pos) || isAfterContentEditableFalse(pos) || isBeforeMedia(pos) || isAfterMedia(pos); + }; + var getRealSelectionElement = function () { + var container = dom.get(realSelectionId); + return container ? container.getElementsByTagName('*')[0] : container; + }; + var setRange = function (range) { + if (range) { + selection.setRng(range); + } + }; + var getRange = selection.getRng; + var showCaret = function (direction, node, before, scrollIntoView) { + if (scrollIntoView === void 0) { + scrollIntoView = true; + } + var e = editor.fire('ShowCaret', { + target: node, + direction: direction, + before: before + }); + if (e.isDefaultPrevented()) { + return null; + } + if (scrollIntoView) { + selection.scrollIntoView(node, direction === -1); + } + return fakeCaret.show(before, node); + }; + var showBlockCaretContainer = function (blockCaretContainer) { + if (blockCaretContainer.hasAttribute('data-mce-caret')) { + showCaretContainerBlock(blockCaretContainer); + setRange(getRange()); + selection.scrollIntoView(blockCaretContainer); + } + }; + var registerEvents = function () { + editor.on('mouseup', function (e) { + var range = getRange(); + if (range.collapsed && isXYInContentArea(editor, e.clientX, e.clientY)) { + renderCaretAtRange(editor, range, false).each(setRange); + } + }); + editor.on('click', function (e) { + var contentEditableRoot = getContentEditableRoot$1(editor, e.target); + if (contentEditableRoot) { + if (isContentEditableFalse$b(contentEditableRoot)) { + e.preventDefault(); + editor.focus(); + } + if (isContentEditableTrue$4(contentEditableRoot)) { + if (dom.isChildOf(contentEditableRoot, selection.getNode())) { + removeElementSelection(); + } + } + } + }); + editor.on('blur NewBlock', removeElementSelection); + editor.on('ResizeWindow FullscreenStateChanged', fakeCaret.reposition); + var hasNormalCaretPosition = function (elm) { + var caretWalker = CaretWalker(elm); + if (!elm.firstChild) { + return false; + } + var startPos = CaretPosition.before(elm.firstChild); + var newPos = caretWalker.next(startPos); + return newPos && !isNearFakeSelectionElement(newPos); + }; + var isInSameBlock = function (node1, node2) { + var block1 = dom.getParent(node1, isBlock); + var block2 = dom.getParent(node2, isBlock); + return block1 === block2; + }; + var hasBetterMouseTarget = function (targetNode, caretNode) { + var targetBlock = dom.getParent(targetNode, isBlock); + var caretBlock = dom.getParent(caretNode, isBlock); + if (targetBlock && targetNode !== caretBlock && dom.isChildOf(targetBlock, caretBlock) && isContentEditableFalse$b(getContentEditableRoot$1(editor, targetBlock)) === false) { + return true; + } + return targetBlock && !isInSameBlock(targetBlock, caretBlock) && hasNormalCaretPosition(targetBlock); + }; + editor.on('tap', function (e) { + var targetElm = e.target; + var contentEditableRoot = getContentEditableRoot$1(editor, targetElm); + if (isContentEditableFalse$b(contentEditableRoot)) { + e.preventDefault(); + selectNode(editor, contentEditableRoot).each(setElementSelection); + } else if (isFakeSelectionTargetElement(targetElm)) { + selectNode(editor, targetElm).each(setElementSelection); + } + }, true); + editor.on('mousedown', function (e) { + var targetElm = e.target; + if (targetElm !== rootNode && targetElm.nodeName !== 'HTML' && !dom.isChildOf(targetElm, rootNode)) { + return; + } + if (isXYInContentArea(editor, e.clientX, e.clientY) === false) { + return; + } + var contentEditableRoot = getContentEditableRoot$1(editor, targetElm); + if (contentEditableRoot) { + if (isContentEditableFalse$b(contentEditableRoot)) { + e.preventDefault(); + selectNode(editor, contentEditableRoot).each(setElementSelection); + } else { + removeElementSelection(); + if (!(isContentEditableTrue$4(contentEditableRoot) && e.shiftKey) && !isXYWithinRange(e.clientX, e.clientY, selection.getRng())) { + hideFakeCaret(); + selection.placeCaretAt(e.clientX, e.clientY); + } + } + } else if (isFakeSelectionTargetElement(targetElm)) { + selectNode(editor, targetElm).each(setElementSelection); + } else if (isFakeCaretTarget(targetElm) === false) { + removeElementSelection(); + hideFakeCaret(); + var fakeCaretInfo = closestFakeCaret(rootNode, e.clientX, e.clientY); + if (fakeCaretInfo) { + if (!hasBetterMouseTarget(targetElm, fakeCaretInfo.node)) { + e.preventDefault(); + var range = showCaret(1, fakeCaretInfo.node, fakeCaretInfo.before, false); + editor.getBody().focus(); + setRange(range); + } + } + } + }); + editor.on('keypress', function (e) { + if (VK.modifierPressed(e)) { + return; + } + if (isContentEditableFalse$b(selection.getNode())) { + e.preventDefault(); + } + }); + editor.on('GetSelectionRange', function (e) { + var rng = e.range; + if (selectedElement) { + if (!selectedElement.parentNode) { + selectedElement = null; + return; + } + rng = rng.cloneRange(); + rng.selectNode(selectedElement); + e.range = rng; + } + }); + editor.on('SetSelectionRange', function (e) { + e.range = normalizeShortEndedElementSelection(e.range); + var rng = setElementSelection(e.range, e.forward); + if (rng) { + e.range = rng; + } + }); + var isPasteBin = function (node) { + return node.id === 'mcepastebin'; + }; + editor.on('AfterSetSelectionRange', function (e) { + var rng = e.range; + var parentNode = rng.startContainer.parentNode; + if (!isRangeInCaretContainer(rng) && !isPasteBin(parentNode)) { + hideFakeCaret(); + } + if (!isFakeSelectionElement(parentNode)) { + removeElementSelection(); + } + }); + editor.on('copy', function (e) { + var clipboardData = e.clipboardData; + if (!e.isDefaultPrevented() && e.clipboardData && !Env.ie) { + var realSelectionElement = getRealSelectionElement(); + if (realSelectionElement) { + e.preventDefault(); + clipboardData.clearData(); + clipboardData.setData('text/html', realSelectionElement.outerHTML); + clipboardData.setData('text/plain', realSelectionElement.outerText || realSelectionElement.innerText); + } + } + }); + init(editor); + setup$m(editor); + setup$n(editor); + }; + var isWithinCaretContainer = function (node) { + return isCaretContainer(node) || startsWithCaretContainer(node) || endsWithCaretContainer(node); + }; + var isRangeInCaretContainer = function (rng) { + return isWithinCaretContainer(rng.startContainer) || isWithinCaretContainer(rng.endContainer); + }; + var normalizeShortEndedElementSelection = function (rng) { + var shortEndedElements = editor.schema.getShortEndedElements(); + var newRng = dom.createRng(); + var startContainer = rng.startContainer; + var startOffset = rng.startOffset; + var endContainer = rng.endContainer; + var endOffset = rng.endOffset; + if (has(shortEndedElements, startContainer.nodeName.toLowerCase())) { + if (startOffset === 0) { + newRng.setStartBefore(startContainer); + } else { + newRng.setStartAfter(startContainer); + } + } else { + newRng.setStart(startContainer, startOffset); + } + if (has(shortEndedElements, endContainer.nodeName.toLowerCase())) { + if (endOffset === 0) { + newRng.setEndBefore(endContainer); + } else { + newRng.setEndAfter(endContainer); + } + } else { + newRng.setEnd(endContainer, endOffset); + } + return newRng; + }; + var setupOffscreenSelection = function (node, targetClone, origTargetClone) { + var $ = editor.$; + var $realSelectionContainer = descendant(SugarElement.fromDom(editor.getBody()), '#' + realSelectionId).fold(function () { + return $([]); + }, function (elm) { + return $([elm.dom]); + }); + if ($realSelectionContainer.length === 0) { + $realSelectionContainer = $('
    ').attr('id', realSelectionId); + $realSelectionContainer.appendTo(editor.getBody()); + } + var newRange = dom.createRng(); + if (targetClone === origTargetClone && Env.ie) { + $realSelectionContainer.empty().append('

    \xA0

    ').append(targetClone); + newRange.setStartAfter($realSelectionContainer[0].firstChild.firstChild); + newRange.setEndAfter(targetClone); + } else { + $realSelectionContainer.empty().append(nbsp).append(targetClone).append(nbsp); + newRange.setStart($realSelectionContainer[0].firstChild, 1); + newRange.setEnd($realSelectionContainer[0].lastChild, 0); + } + $realSelectionContainer.css({ top: dom.getPos(node, editor.getBody()).y }); + $realSelectionContainer[0].focus(); + var sel = selection.getSel(); + sel.removeAllRanges(); + sel.addRange(newRange); + return newRange; + }; + var selectElement = function (elm) { + var targetClone = elm.cloneNode(true); + var e = editor.fire('ObjectSelected', { + target: elm, + targetClone: targetClone + }); + if (e.isDefaultPrevented()) { + return null; + } + var range = setupOffscreenSelection(elm, e.targetClone, targetClone); + var nodeElm = SugarElement.fromDom(elm); + each(descendants$1(SugarElement.fromDom(editor.getBody()), '*[data-mce-selected]'), function (elm) { + if (!eq$2(nodeElm, elm)) { + remove$1(elm, elementSelectionAttr); + } + }); + if (!dom.getAttrib(elm, elementSelectionAttr)) { + elm.setAttribute(elementSelectionAttr, '1'); + } + selectedElement = elm; + hideFakeCaret(); + return range; + }; + var setElementSelection = function (range, forward) { + if (!range) { + return null; + } + if (range.collapsed) { + if (!isRangeInCaretContainer(range)) { + var dir = forward ? 1 : -1; + var caretPosition = getNormalizedRangeEndPoint(dir, rootNode, range); + var beforeNode = caretPosition.getNode(!forward); + if (isFakeCaretTarget(beforeNode)) { + return showCaret(dir, beforeNode, forward ? !caretPosition.isAtEnd() : false, false); + } + var afterNode = caretPosition.getNode(forward); + if (isFakeCaretTarget(afterNode)) { + return showCaret(dir, afterNode, forward ? false : !caretPosition.isAtEnd(), false); + } + } + return null; + } + var startContainer = range.startContainer; + var startOffset = range.startOffset; + var endOffset = range.endOffset; + if (startContainer.nodeType === 3 && startOffset === 0 && isContentEditableFalse$b(startContainer.parentNode)) { + startContainer = startContainer.parentNode; + startOffset = dom.nodeIndex(startContainer); + startContainer = startContainer.parentNode; + } + if (startContainer.nodeType !== 1) { + return null; + } + if (endOffset === startOffset + 1 && startContainer === range.endContainer) { + var node = startContainer.childNodes[startOffset]; + if (isFakeSelectionTargetElement(node)) { + return selectElement(node); + } + } + return null; + }; + var removeElementSelection = function () { + if (selectedElement) { + selectedElement.removeAttribute(elementSelectionAttr); + } + descendant(SugarElement.fromDom(editor.getBody()), '#' + realSelectionId).each(remove); + selectedElement = null; + }; + var destroy = function () { + fakeCaret.destroy(); + selectedElement = null; + }; + var hideFakeCaret = function () { + fakeCaret.hide(); + }; + if (Env.ceFalse && !isRtc(editor)) { + registerEvents(); + } + return { + showCaret: showCaret, + showBlockCaretContainer: showBlockCaretContainer, + hideFakeCaret: hideFakeCaret, + destroy: destroy + }; + }; + + var Quirks = function (editor) { + var each = Tools.each; + var BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, parser = editor.parser; + var isGecko = Env.gecko, isIE = Env.ie, isWebKit = Env.webkit; + var mceInternalUrlPrefix = 'data:text/mce-internal,'; + var mceInternalDataType = isIE ? 'Text' : 'URL'; + var setEditorCommandState = function (cmd, state) { + try { + editor.getDoc().execCommand(cmd, false, state); + } catch (ex) { + } + }; + var isDefaultPrevented = function (e) { + return e.isDefaultPrevented(); + }; + var setMceInternalContent = function (e) { + var selectionHtml, internalContent; + if (e.dataTransfer) { + if (editor.selection.isCollapsed() && e.target.tagName === 'IMG') { + selection.select(e.target); + } + selectionHtml = editor.selection.getContent(); + if (selectionHtml.length > 0) { + internalContent = mceInternalUrlPrefix + escape(editor.id) + ',' + escape(selectionHtml); + e.dataTransfer.setData(mceInternalDataType, internalContent); + } + } + }; + var getMceInternalContent = function (e) { + var internalContent; + if (e.dataTransfer) { + internalContent = e.dataTransfer.getData(mceInternalDataType); + if (internalContent && internalContent.indexOf(mceInternalUrlPrefix) >= 0) { + internalContent = internalContent.substr(mceInternalUrlPrefix.length).split(','); + return { + id: unescape(internalContent[0]), + html: unescape(internalContent[1]) + }; + } + } + return null; + }; + var insertClipboardContents = function (content, internal) { + if (editor.queryCommandSupported('mceInsertClipboardContent')) { + editor.execCommand('mceInsertClipboardContent', false, { + content: content, + internal: internal + }); + } else { + editor.execCommand('mceInsertContent', false, content); + } + }; + var emptyEditorWhenDeleting = function () { + var serializeRng = function (rng) { + var body = dom.create('body'); + var contents = rng.cloneContents(); + body.appendChild(contents); + return selection.serializer.serialize(body, { format: 'html' }); + }; + var allContentsSelected = function (rng) { + var selection = serializeRng(rng); + var allRng = dom.createRng(); + allRng.selectNode(editor.getBody()); + var allSelection = serializeRng(allRng); + return selection === allSelection; + }; + editor.on('keydown', function (e) { + var keyCode = e.keyCode; + var isCollapsed, body; + if (!isDefaultPrevented(e) && (keyCode === DELETE || keyCode === BACKSPACE)) { + isCollapsed = editor.selection.isCollapsed(); + body = editor.getBody(); + if (isCollapsed && !dom.isEmpty(body)) { + return; + } + if (!isCollapsed && !allContentsSelected(editor.selection.getRng())) { + return; + } + e.preventDefault(); + editor.setContent(''); + if (body.firstChild && dom.isBlock(body.firstChild)) { + editor.selection.setCursorLocation(body.firstChild, 0); + } else { + editor.selection.setCursorLocation(body, 0); + } + editor.nodeChanged(); + } + }); + }; + var selectAll = function () { + editor.shortcuts.add('meta+a', null, 'SelectAll'); + }; + var inputMethodFocus = function () { + if (!editor.inline) { + dom.bind(editor.getDoc(), 'mousedown mouseup', function (e) { + var rng; + if (e.target === editor.getDoc().documentElement) { + rng = selection.getRng(); + editor.getBody().focus(); + if (e.type === 'mousedown') { + if (isCaretContainer(rng.startContainer)) { + return; + } + selection.placeCaretAt(e.clientX, e.clientY); + } else { + selection.setRng(rng); + } + } + }); + } + }; + var removeHrOnBackspace = function () { + editor.on('keydown', function (e) { + if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) { + if (!editor.getBody().getElementsByTagName('hr').length) { + return; + } + if (selection.isCollapsed() && selection.getRng().startOffset === 0) { + var node = selection.getNode(); + var previousSibling = node.previousSibling; + if (node.nodeName === 'HR') { + dom.remove(node); + e.preventDefault(); + return; + } + if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'hr') { + dom.remove(previousSibling); + e.preventDefault(); + } + } + } + }); + }; + var focusBody = function () { + if (!Range.prototype.getClientRects) { + editor.on('mousedown', function (e) { + if (!isDefaultPrevented(e) && e.target.nodeName === 'HTML') { + var body_1 = editor.getBody(); + body_1.blur(); + Delay.setEditorTimeout(editor, function () { + body_1.focus(); + }); + } + }); + } + }; + var selectControlElements = function () { + editor.on('click', function (e) { + var target = e.target; + if (/^(IMG|HR)$/.test(target.nodeName) && dom.getContentEditableParent(target) !== 'false') { + e.preventDefault(); + editor.selection.select(target); + editor.nodeChanged(); + } + if (target.nodeName === 'A' && dom.hasClass(target, 'mce-item-anchor')) { + e.preventDefault(); + selection.select(target); + } + }); + }; + var removeStylesWhenDeletingAcrossBlockElements = function () { + var getAttributeApplyFunction = function () { + var template = dom.getAttribs(selection.getStart().cloneNode(false)); + return function () { + var target = selection.getStart(); + if (target !== editor.getBody()) { + dom.setAttrib(target, 'style', null); + each(template, function (attr) { + target.setAttributeNode(attr.cloneNode(true)); + }); + } + }; + }; + var isSelectionAcrossElements = function () { + return !selection.isCollapsed() && dom.getParent(selection.getStart(), dom.isBlock) !== dom.getParent(selection.getEnd(), dom.isBlock); + }; + editor.on('keypress', function (e) { + var applyAttributes; + if (!isDefaultPrevented(e) && (e.keyCode === 8 || e.keyCode === 46) && isSelectionAcrossElements()) { + applyAttributes = getAttributeApplyFunction(); + editor.getDoc().execCommand('delete', false, null); + applyAttributes(); + e.preventDefault(); + return false; + } + }); + dom.bind(editor.getDoc(), 'cut', function (e) { + var applyAttributes; + if (!isDefaultPrevented(e) && isSelectionAcrossElements()) { + applyAttributes = getAttributeApplyFunction(); + Delay.setEditorTimeout(editor, function () { + applyAttributes(); + }); + } + }); + }; + var disableBackspaceIntoATable = function () { + editor.on('keydown', function (e) { + if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) { + if (selection.isCollapsed() && selection.getRng().startOffset === 0) { + var previousSibling = selection.getNode().previousSibling; + if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'table') { + e.preventDefault(); + return false; + } + } + } + }); + }; + var removeBlockQuoteOnBackSpace = function () { + editor.on('keydown', function (e) { + var rng, parent; + if (isDefaultPrevented(e) || e.keyCode !== VK.BACKSPACE) { + return; + } + rng = selection.getRng(); + var container = rng.startContainer; + var offset = rng.startOffset; + var root = dom.getRoot(); + parent = container; + if (!rng.collapsed || offset !== 0) { + return; + } + while (parent && parent.parentNode && parent.parentNode.firstChild === parent && parent.parentNode !== root) { + parent = parent.parentNode; + } + if (parent.tagName === 'BLOCKQUOTE') { + editor.formatter.toggle('blockquote', null, parent); + rng = dom.createRng(); + rng.setStart(container, 0); + rng.setEnd(container, 0); + selection.setRng(rng); + } + }); + }; + var setGeckoEditingOptions = function () { + var setOpts = function () { + setEditorCommandState('StyleWithCSS', false); + setEditorCommandState('enableInlineTableEditing', false); + if (!getObjectResizing(editor)) { + setEditorCommandState('enableObjectResizing', false); + } + }; + if (!isReadOnly(editor)) { + editor.on('BeforeExecCommand mousedown', setOpts); + } + }; + var addBrAfterLastLinks = function () { + var fixLinks = function () { + each(dom.select('a'), function (node) { + var parentNode = node.parentNode; + var root = dom.getRoot(); + if (parentNode.lastChild === node) { + while (parentNode && !dom.isBlock(parentNode)) { + if (parentNode.parentNode.lastChild !== parentNode || parentNode === root) { + return; + } + parentNode = parentNode.parentNode; + } + dom.add(parentNode, 'br', { 'data-mce-bogus': 1 }); + } + }); + }; + editor.on('SetContent ExecCommand', function (e) { + if (e.type === 'setcontent' || e.command === 'mceInsertLink') { + fixLinks(); + } + }); + }; + var setDefaultBlockType = function () { + if (getForcedRootBlock(editor)) { + editor.on('init', function () { + setEditorCommandState('DefaultParagraphSeparator', getForcedRootBlock(editor)); + }); + } + }; + var normalizeSelection = function () { + editor.on('keyup focusin mouseup', function (e) { + if (!VK.modifierPressed(e)) { + selection.normalize(); + } + }, true); + }; + var showBrokenImageIcon = function () { + editor.contentStyles.push('img:-moz-broken {' + '-moz-force-broken-image-icon:1;' + 'min-width:24px;' + 'min-height:24px' + '}'); + }; + var restoreFocusOnKeyDown = function () { + if (!editor.inline) { + editor.on('keydown', function () { + if (document.activeElement === document.body) { + editor.getWin().focus(); + } + }); + } + }; + var bodyHeight = function () { + if (!editor.inline) { + editor.contentStyles.push('body {min-height: 150px}'); + editor.on('click', function (e) { + var rng; + if (e.target.nodeName === 'HTML') { + if (Env.ie > 11) { + editor.getBody().focus(); + return; + } + rng = editor.selection.getRng(); + editor.getBody().focus(); + editor.selection.setRng(rng); + editor.selection.normalize(); + editor.nodeChanged(); + } + }); + } + }; + var blockCmdArrowNavigation = function () { + if (Env.mac) { + editor.on('keydown', function (e) { + if (VK.metaKeyPressed(e) && !e.shiftKey && (e.keyCode === 37 || e.keyCode === 39)) { + e.preventDefault(); + var selection_1 = editor.selection.getSel(); + selection_1.modify('move', e.keyCode === 37 ? 'backward' : 'forward', 'lineboundary'); + } + }); + } + }; + var disableAutoUrlDetect = function () { + setEditorCommandState('AutoUrlDetect', false); + }; + var tapLinksAndImages = function () { + editor.on('click', function (e) { + var elm = e.target; + do { + if (elm.tagName === 'A') { + e.preventDefault(); + return; + } + } while (elm = elm.parentNode); + }); + editor.contentStyles.push('.mce-content-body {-webkit-touch-callout: none}'); + }; + var blockFormSubmitInsideEditor = function () { + editor.on('init', function () { + editor.dom.bind(editor.getBody(), 'submit', function (e) { + e.preventDefault(); + }); + }); + }; + var removeAppleInterchangeBrs = function () { + parser.addNodeFilter('br', function (nodes) { + var i = nodes.length; + while (i--) { + if (nodes[i].attr('class') === 'Apple-interchange-newline') { + nodes[i].remove(); + } + } + }); + }; + var ieInternalDragAndDrop = function () { + editor.on('dragstart', function (e) { + setMceInternalContent(e); + }); + editor.on('drop', function (e) { + if (!isDefaultPrevented(e)) { + var internalContent = getMceInternalContent(e); + if (internalContent && internalContent.id !== editor.id) { + e.preventDefault(); + var rng = fromPoint$1(e.x, e.y, editor.getDoc()); + selection.setRng(rng); + insertClipboardContents(internalContent.html, true); + } + } + }); + }; + var refreshContentEditable = noop; + var isHidden = function () { + if (!isGecko || editor.removed) { + return false; + } + var sel = editor.selection.getSel(); + return !sel || !sel.rangeCount || sel.rangeCount === 0; + }; + var setupRtc = function () { + if (isWebKit) { + selectControlElements(); + blockFormSubmitInsideEditor(); + selectAll(); + if (Env.iOS) { + restoreFocusOnKeyDown(); + bodyHeight(); + tapLinksAndImages(); + } + } + if (isGecko) { + focusBody(); + setGeckoEditingOptions(); + showBrokenImageIcon(); + blockCmdArrowNavigation(); + } + }; + var setup = function () { + removeBlockQuoteOnBackSpace(); + emptyEditorWhenDeleting(); + if (!Env.windowsPhone) { + normalizeSelection(); + } + if (isWebKit) { + inputMethodFocus(); + selectControlElements(); + setDefaultBlockType(); + blockFormSubmitInsideEditor(); + disableBackspaceIntoATable(); + removeAppleInterchangeBrs(); + if (Env.iOS) { + restoreFocusOnKeyDown(); + bodyHeight(); + tapLinksAndImages(); + } else { + selectAll(); + } + } + if (Env.ie >= 11) { + bodyHeight(); + disableBackspaceIntoATable(); + } + if (Env.ie) { + selectAll(); + disableAutoUrlDetect(); + ieInternalDragAndDrop(); + } + if (isGecko) { + removeHrOnBackspace(); + focusBody(); + removeStylesWhenDeletingAcrossBlockElements(); + setGeckoEditingOptions(); + addBrAfterLastLinks(); + showBrokenImageIcon(); + blockCmdArrowNavigation(); + disableBackspaceIntoATable(); + } + }; + if (isRtc(editor)) { + setupRtc(); + } else { + setup(); + } + return { + refreshContentEditable: refreshContentEditable, + isHidden: isHidden + }; + }; + + var DOM$4 = DOMUtils.DOM; + var appendStyle = function (editor, text) { + var body = SugarElement.fromDom(editor.getBody()); + var container = getStyleContainer(getRootNode(body)); + var style = SugarElement.fromTag('style'); + set(style, 'type', 'text/css'); + append(style, SugarElement.fromText(text)); + append(container, style); + editor.on('remove', function () { + remove(style); + }); + }; + var getRootName = function (editor) { + return editor.inline ? editor.getElement().nodeName.toLowerCase() : undefined; + }; + var removeUndefined = function (obj) { + return filter$1(obj, function (v) { + return isUndefined(v) === false; + }); + }; + var mkParserSettings = function (editor) { + var settings = editor.settings; + var blobCache = editor.editorUpload.blobCache; + return removeUndefined({ + allow_conditional_comments: settings.allow_conditional_comments, + allow_html_data_urls: settings.allow_html_data_urls, + allow_svg_data_urls: settings.allow_svg_data_urls, + allow_html_in_named_anchor: settings.allow_html_in_named_anchor, + allow_script_urls: settings.allow_script_urls, + allow_unsafe_link_target: settings.allow_unsafe_link_target, + convert_fonts_to_spans: settings.convert_fonts_to_spans, + fix_list_elements: settings.fix_list_elements, + font_size_legacy_values: settings.font_size_legacy_values, + forced_root_block: settings.forced_root_block, + forced_root_block_attrs: settings.forced_root_block_attrs, + padd_empty_with_br: settings.padd_empty_with_br, + preserve_cdata: settings.preserve_cdata, + remove_trailing_brs: settings.remove_trailing_brs, + inline_styles: settings.inline_styles, + root_name: getRootName(editor), + validate: true, + blob_cache: blobCache, + images_dataimg_filter: settings.images_dataimg_filter + }); + }; + var mkSerializerSettings = function (editor) { + var settings = editor.settings; + return __assign(__assign({}, mkParserSettings(editor)), removeUndefined({ + url_converter: settings.url_converter, + url_converter_scope: settings.url_converter_scope, + element_format: settings.element_format, + entities: settings.entities, + entity_encoding: settings.entity_encoding, + indent: settings.indent, + indent_after: settings.indent_after, + indent_before: settings.indent_before, + block_elements: settings.block_elements, + boolean_attributes: settings.boolean_attributes, + custom_elements: settings.custom_elements, + extended_valid_elements: settings.extended_valid_elements, + invalid_elements: settings.invalid_elements, + invalid_styles: settings.invalid_styles, + move_caret_before_on_enter_elements: settings.move_caret_before_on_enter_elements, + non_empty_elements: settings.non_empty_elements, + schema: settings.schema, + self_closing_elements: settings.self_closing_elements, + short_ended_elements: settings.short_ended_elements, + special: settings.special, + text_block_elements: settings.text_block_elements, + text_inline_elements: settings.text_inline_elements, + valid_children: settings.valid_children, + valid_classes: settings.valid_classes, + valid_elements: settings.valid_elements, + valid_styles: settings.valid_styles, + verify_html: settings.verify_html, + whitespace_elements: settings.whitespace_elements + })); + }; + var createParser = function (editor) { + var parser = DomParser(mkParserSettings(editor), editor.schema); + parser.addAttributeFilter('src,href,style,tabindex', function (nodes, name) { + var i = nodes.length, node, value; + var dom = editor.dom; + var internalName = 'data-mce-' + name; + while (i--) { + node = nodes[i]; + value = node.attr(name); + if (value && !node.attr(internalName)) { + if (value.indexOf('data:') === 0 || value.indexOf('blob:') === 0) { + continue; + } + if (name === 'style') { + value = dom.serializeStyle(dom.parseStyle(value), node.name); + if (!value.length) { + value = null; + } + node.attr(internalName, value); + node.attr(name, value); + } else if (name === 'tabindex') { + node.attr(internalName, value); + node.attr(name, null); + } else { + node.attr(internalName, editor.convertURL(value, name, node.name)); + } + } + } + }); + parser.addNodeFilter('script', function (nodes) { + var i = nodes.length; + while (i--) { + var node = nodes[i]; + var type = node.attr('type') || 'no/type'; + if (type.indexOf('mce-') !== 0) { + node.attr('type', 'mce-' + type); + } + } + }); + if (editor.settings.preserve_cdata) { + parser.addNodeFilter('#cdata', function (nodes) { + var i = nodes.length; + while (i--) { + var node = nodes[i]; + node.type = 8; + node.name = '#comment'; + node.value = '[CDATA[' + editor.dom.encode(node.value) + ']]'; + } + }); + } + parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function (nodes) { + var i = nodes.length; + var nonEmptyElements = editor.schema.getNonEmptyElements(); + while (i--) { + var node = nodes[i]; + if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) { + node.append(new AstNode('br', 1)).shortEnded = true; + } + } + }); + return parser; + }; + var autoFocus = function (editor) { + if (editor.settings.auto_focus) { + Delay.setEditorTimeout(editor, function () { + var focusEditor; + if (editor.settings.auto_focus === true) { + focusEditor = editor; + } else { + focusEditor = editor.editorManager.get(editor.settings.auto_focus); + } + if (!focusEditor.destroyed) { + focusEditor.focus(); + } + }, 100); + } + }; + var moveSelectionToFirstCaretPosition = function (editor) { + var root = editor.dom.getRoot(); + if (!editor.inline && (!hasAnyRanges(editor) || editor.selection.getStart(true) === root)) { + firstPositionIn(root).each(function (pos) { + var node = pos.getNode(); + var caretPos = isTable(node) ? firstPositionIn(node).getOr(pos) : pos; + if (Env.browser.isIE()) { + storeNative(editor, caretPos.toRange()); + } else { + editor.selection.setRng(caretPos.toRange()); + } + }); + } + }; + var initEditor = function (editor) { + editor.bindPendingEventDelegates(); + editor.initialized = true; + fireInit(editor); + editor.focus(true); + moveSelectionToFirstCaretPosition(editor); + editor.nodeChanged({ initial: true }); + editor.execCallback('init_instance_callback', editor); + autoFocus(editor); + }; + var getStyleSheetLoader = function (editor) { + return editor.inline ? editor.ui.styleSheetLoader : editor.dom.styleSheetLoader; + }; + var makeStylesheetLoadingPromises = function (editor, css, framedFonts) { + var promises = [new promiseObj(function (resolve, reject) { + return getStyleSheetLoader(editor).loadAll(css, resolve, reject); + })]; + if (editor.inline) { + return promises; + } else { + return promises.concat([new promiseObj(function (resolve, reject) { + return editor.ui.styleSheetLoader.loadAll(framedFonts, resolve, reject); + })]); + } + }; + var loadContentCss = function (editor, css) { + var styleSheetLoader = getStyleSheetLoader(editor); + var fontCss = getFontCss(editor); + var removeCss = function () { + styleSheetLoader.unloadAll(css); + if (!editor.inline) { + editor.ui.styleSheetLoader.unloadAll(fontCss); + } + }; + var loaded = function () { + if (editor.removed) { + removeCss(); + } else { + editor.on('remove', removeCss); + initEditor(editor); + } + }; + promiseObj.all(makeStylesheetLoadingPromises(editor, css, fontCss)).then(loaded).catch(loaded); + }; + var preInit = function (editor) { + var settings = editor.settings, doc = editor.getDoc(), body = editor.getBody(); + if (!settings.browser_spellcheck && !settings.gecko_spellcheck) { + doc.body.spellcheck = false; + DOM$4.setAttrib(body, 'spellcheck', 'false'); + } + editor.quirks = Quirks(editor); + firePostRender(editor); + var directionality = getDirectionality(editor); + if (directionality !== undefined) { + body.dir = directionality; + } + if (settings.protect) { + editor.on('BeforeSetContent', function (e) { + Tools.each(settings.protect, function (pattern) { + e.content = e.content.replace(pattern, function (str) { + return ''; + }); + }); + }); + } + editor.on('SetContent', function () { + editor.addVisual(editor.getBody()); + }); + if (!isRtc(editor)) { + editor.load({ + initial: true, + format: 'html' + }); + } + editor.startContent = editor.getContent({ format: 'raw' }); + editor.on('compositionstart compositionend', function (e) { + editor.composing = e.type === 'compositionstart'; + }); + if (editor.contentStyles.length > 0) { + var contentCssText_1 = ''; + Tools.each(editor.contentStyles, function (style) { + contentCssText_1 += style + '\r\n'; + }); + editor.dom.addStyle(contentCssText_1); + } + loadContentCss(editor, editor.contentCSS); + if (settings.content_style) { + appendStyle(editor, settings.content_style); + } + }; + var initContentBody = function (editor, skipWrite) { + var settings = editor.settings; + var targetElm = editor.getElement(); + var doc = editor.getDoc(); + if (!settings.inline) { + editor.getElement().style.visibility = editor.orgVisibility; + } + if (!skipWrite && !editor.inline) { + doc.open(); + doc.write(editor.iframeHTML); + doc.close(); + } + if (editor.inline) { + DOM$4.addClass(targetElm, 'mce-content-body'); + editor.contentDocument = doc = document; + editor.contentWindow = window; + editor.bodyElement = targetElm; + editor.contentAreaContainer = targetElm; + } + var body = editor.getBody(); + body.disabled = true; + editor.readonly = !!settings.readonly; + if (!editor.readonly) { + if (editor.inline && DOM$4.getStyle(body, 'position', true) === 'static') { + body.style.position = 'relative'; + } + body.contentEditable = editor.getParam('content_editable_state', true); + } + body.disabled = false; + editor.editorUpload = EditorUpload(editor); + editor.schema = Schema(settings); + editor.dom = DOMUtils(doc, { + keep_values: true, + url_converter: editor.convertURL, + url_converter_scope: editor, + hex_colors: settings.force_hex_style_colors, + update_styles: true, + root_element: editor.inline ? editor.getBody() : null, + collect: function () { + return editor.inline; + }, + schema: editor.schema, + contentCssCors: shouldUseContentCssCors(editor), + referrerPolicy: getReferrerPolicy(editor), + onSetAttrib: function (e) { + editor.fire('SetAttrib', e); + } + }); + editor.parser = createParser(editor); + editor.serializer = DomSerializer(mkSerializerSettings(editor), editor); + editor.selection = EditorSelection(editor.dom, editor.getWin(), editor.serializer, editor); + editor.annotator = Annotator(editor); + editor.formatter = Formatter(editor); + editor.undoManager = UndoManager(editor); + editor._nodeChangeDispatcher = new NodeChange(editor); + editor._selectionOverrides = SelectionOverrides(editor); + setup$9(editor); + setup$k(editor); + if (!isRtc(editor)) { + setup$l(editor); + } + var caret = setup$j(editor); + setup$8(editor, caret); + setup$a(editor); + setup$7(editor); + firePreInit(editor); + setup$5(editor).fold(function () { + preInit(editor); + }, function (loadingRtc) { + editor.setProgressState(true); + loadingRtc.then(function (_rtcMode) { + editor.setProgressState(false); + preInit(editor); + }, function (err) { + editor.notificationManager.open({ + type: 'error', + text: String(err) + }); + preInit(editor); + }); + }); + }; + + var DOM$5 = DOMUtils.DOM; + var relaxDomain = function (editor, ifr) { + if (document.domain !== window.location.hostname && Env.browser.isIE()) { + var bodyUuid = uuid('mce'); + editor[bodyUuid] = function () { + initContentBody(editor); + }; + var domainRelaxUrl = 'javascript:(function(){' + 'document.open();document.domain="' + document.domain + '";' + 'var ed = window.parent.tinymce.get("' + editor.id + '");document.write(ed.iframeHTML);' + 'document.close();ed.' + bodyUuid + '(true);})()'; + DOM$5.setAttrib(ifr, 'src', domainRelaxUrl); + return true; + } + return false; + }; + var createIframeElement = function (id, title, height, customAttrs) { + var iframe = SugarElement.fromTag('iframe'); + setAll(iframe, customAttrs); + setAll(iframe, { + id: id + '_ifr', + frameBorder: '0', + allowTransparency: 'true', + title: title + }); + add$3(iframe, 'tox-edit-area__iframe'); + return iframe; + }; + var getIframeHtml = function (editor) { + var iframeHTML = getDocType(editor) + ''; + if (getDocumentBaseUrl(editor) !== editor.documentBaseUrl) { + iframeHTML += ''; + } + iframeHTML += ''; + var bodyId = getBodyId(editor); + var bodyClass = getBodyClass(editor); + if (getContentSecurityPolicy(editor)) { + iframeHTML += ''; + } + iframeHTML += '
    '; + return iframeHTML; + }; + var createIframe = function (editor, o) { + var title = editor.editorManager.translate('Rich Text Area. Press ALT-0 for help.'); + var ifr = createIframeElement(editor.id, title, o.height, getIframeAttrs(editor)).dom; + ifr.onload = function () { + ifr.onload = null; + editor.fire('load'); + }; + var isDomainRelaxed = relaxDomain(editor, ifr); + editor.contentAreaContainer = o.iframeContainer; + editor.iframeElement = ifr; + editor.iframeHTML = getIframeHtml(editor); + DOM$5.add(o.iframeContainer, ifr); + return isDomainRelaxed; + }; + var init$1 = function (editor, boxInfo) { + var isDomainRelaxed = createIframe(editor, boxInfo); + if (boxInfo.editorContainer) { + DOM$5.get(boxInfo.editorContainer).style.display = editor.orgDisplay; + editor.hidden = DOM$5.isHidden(boxInfo.editorContainer); + } + editor.getElement().style.display = 'none'; + DOM$5.setAttrib(editor.id, 'aria-hidden', 'true'); + if (!isDomainRelaxed) { + initContentBody(editor); + } + }; + + var DOM$6 = DOMUtils.DOM; + var initPlugin = function (editor, initializedPlugins, plugin) { + var Plugin = PluginManager.get(plugin); + var pluginUrl = PluginManager.urls[plugin] || editor.documentBaseUrl.replace(/\/$/, ''); + plugin = Tools.trim(plugin); + if (Plugin && Tools.inArray(initializedPlugins, plugin) === -1) { + Tools.each(PluginManager.dependencies(plugin), function (dep) { + initPlugin(editor, initializedPlugins, dep); + }); + if (editor.plugins[plugin]) { + return; + } + try { + var pluginInstance = new Plugin(editor, pluginUrl, editor.$); + editor.plugins[plugin] = pluginInstance; + if (pluginInstance.init) { + pluginInstance.init(editor, pluginUrl); + initializedPlugins.push(plugin); + } + } catch (e) { + pluginInitError(editor, plugin, e); + } + } + }; + var trimLegacyPrefix = function (name) { + return name.replace(/^\-/, ''); + }; + var initPlugins = function (editor) { + var initializedPlugins = []; + Tools.each(getPlugins(editor).split(/[ ,]/), function (name) { + initPlugin(editor, initializedPlugins, trimLegacyPrefix(name)); + }); + }; + var initIcons = function (editor) { + var iconPackName = Tools.trim(getIconPackName(editor)); + var currentIcons = editor.ui.registry.getAll().icons; + var loadIcons = __assign(__assign({}, IconManager.get('default').icons), IconManager.get(iconPackName).icons); + each$1(loadIcons, function (svgData, icon) { + if (!has(currentIcons, icon)) { + editor.ui.registry.addIcon(icon, svgData); + } + }); + }; + var initTheme = function (editor) { + var theme = getTheme(editor); + if (isString(theme)) { + editor.settings.theme = trimLegacyPrefix(theme); + var Theme = ThemeManager.get(theme); + editor.theme = new Theme(editor, ThemeManager.urls[theme]); + if (editor.theme.init) { + editor.theme.init(editor, ThemeManager.urls[theme] || editor.documentBaseUrl.replace(/\/$/, ''), editor.$); + } + } else { + editor.theme = {}; + } + }; + var renderFromLoadedTheme = function (editor) { + return editor.theme.renderUI(); + }; + var renderFromThemeFunc = function (editor) { + var elm = editor.getElement(); + var theme = getTheme(editor); + var info = theme(editor, elm); + if (info.editorContainer.nodeType) { + info.editorContainer.id = info.editorContainer.id || editor.id + '_parent'; + } + if (info.iframeContainer && info.iframeContainer.nodeType) { + info.iframeContainer.id = info.iframeContainer.id || editor.id + '_iframecontainer'; + } + info.height = info.iframeHeight ? info.iframeHeight : elm.offsetHeight; + return info; + }; + var createThemeFalseResult = function (element) { + return { + editorContainer: element, + iframeContainer: element, + api: {} + }; + }; + var renderThemeFalseIframe = function (targetElement) { + var iframeContainer = DOM$6.create('div'); + DOM$6.insertAfter(iframeContainer, targetElement); + return createThemeFalseResult(iframeContainer); + }; + var renderThemeFalse = function (editor) { + var targetElement = editor.getElement(); + return editor.inline ? createThemeFalseResult(null) : renderThemeFalseIframe(targetElement); + }; + var renderThemeUi = function (editor) { + var elm = editor.getElement(); + editor.orgDisplay = elm.style.display; + if (isString(getTheme(editor))) { + return renderFromLoadedTheme(editor); + } else if (isFunction(getTheme(editor))) { + return renderFromThemeFunc(editor); + } else { + return renderThemeFalse(editor); + } + }; + var augmentEditorUiApi = function (editor, api) { + var uiApiFacade = { + show: Optional.from(api.show).getOr(noop), + hide: Optional.from(api.hide).getOr(noop), + disable: Optional.from(api.disable).getOr(noop), + isDisabled: Optional.from(api.isDisabled).getOr(never), + enable: function () { + if (!editor.mode.isReadOnly()) { + Optional.from(api.enable).map(call); + } + } + }; + editor.ui = __assign(__assign({}, editor.ui), uiApiFacade); + }; + var init$2 = function (editor) { + editor.fire('ScriptsLoaded'); + initIcons(editor); + initTheme(editor); + initPlugins(editor); + var renderInfo = renderThemeUi(editor); + augmentEditorUiApi(editor, Optional.from(renderInfo.api).getOr({})); + var boxInfo = { + editorContainer: renderInfo.editorContainer, + iframeContainer: renderInfo.iframeContainer + }; + editor.editorContainer = boxInfo.editorContainer ? boxInfo.editorContainer : null; + appendContentCssFromSettings(editor); + if (editor.inline) { + return initContentBody(editor); + } else { + return init$1(editor, boxInfo); + } + }; + + var DOM$7 = DOMUtils.DOM; + var hasSkipLoadPrefix = function (name) { + return name.charAt(0) === '-'; + }; + var loadLanguage = function (scriptLoader, editor) { + var languageCode = getLanguageCode(editor); + var languageUrl = getLanguageUrl(editor); + if (I18n.hasCode(languageCode) === false && languageCode !== 'en') { + var url_1 = languageUrl !== '' ? languageUrl : editor.editorManager.baseURL + '/langs/' + languageCode + '.js'; + scriptLoader.add(url_1, noop, undefined, function () { + languageLoadError(editor, url_1, languageCode); + }); + } + }; + var loadTheme = function (scriptLoader, editor, suffix, callback) { + var theme = getTheme(editor); + if (isString(theme)) { + if (!hasSkipLoadPrefix(theme) && !ThemeManager.urls.hasOwnProperty(theme)) { + var themeUrl = getThemeUrl(editor); + if (themeUrl) { + ThemeManager.load(theme, editor.documentBaseURI.toAbsolute(themeUrl)); + } else { + ThemeManager.load(theme, 'themes/' + theme + '/theme' + suffix + '.js'); + } + } + scriptLoader.loadQueue(function () { + ThemeManager.waitFor(theme, callback); + }); + } else { + callback(); + } + }; + var getIconsUrlMetaFromUrl = function (editor) { + return Optional.from(getIconsUrl(editor)).filter(function (url) { + return url.length > 0; + }).map(function (url) { + return { + url: url, + name: Optional.none() + }; + }); + }; + var getIconsUrlMetaFromName = function (editor, name, suffix) { + return Optional.from(name).filter(function (name) { + return name.length > 0 && !IconManager.has(name); + }).map(function (name) { + return { + url: editor.editorManager.baseURL + '/icons/' + name + '/icons' + suffix + '.js', + name: Optional.some(name) + }; + }); + }; + var loadIcons = function (scriptLoader, editor, suffix) { + var defaultIconsUrl = getIconsUrlMetaFromName(editor, 'default', suffix); + var customIconsUrl = getIconsUrlMetaFromUrl(editor).orThunk(function () { + return getIconsUrlMetaFromName(editor, getIconPackName(editor), ''); + }); + each(cat([ + defaultIconsUrl, + customIconsUrl + ]), function (urlMeta) { + scriptLoader.add(urlMeta.url, noop, undefined, function () { + iconsLoadError(editor, urlMeta.url, urlMeta.name.getOrUndefined()); + }); + }); + }; + var loadPlugins = function (editor, suffix) { + Tools.each(getExternalPlugins(editor), function (url, name) { + PluginManager.load(name, url, noop, undefined, function () { + pluginLoadError(editor, url, name); + }); + editor.settings.plugins += ' ' + name; + }); + Tools.each(getPlugins(editor).split(/[ ,]/), function (plugin) { + plugin = Tools.trim(plugin); + if (plugin && !PluginManager.urls[plugin]) { + if (hasSkipLoadPrefix(plugin)) { + plugin = plugin.substr(1, plugin.length); + var dependencies = PluginManager.dependencies(plugin); + Tools.each(dependencies, function (depPlugin) { + var defaultSettings = { + prefix: 'plugins/', + resource: depPlugin, + suffix: '/plugin' + suffix + '.js' + }; + var dep = PluginManager.createUrl(defaultSettings, depPlugin); + PluginManager.load(dep.resource, dep, noop, undefined, function () { + pluginLoadError(editor, dep.prefix + dep.resource + dep.suffix, dep.resource); + }); + }); + } else { + var url_2 = { + prefix: 'plugins/', + resource: plugin, + suffix: '/plugin' + suffix + '.js' + }; + PluginManager.load(plugin, url_2, noop, undefined, function () { + pluginLoadError(editor, url_2.prefix + url_2.resource + url_2.suffix, plugin); + }); + } + } + }); + }; + var loadScripts = function (editor, suffix) { + var scriptLoader = ScriptLoader.ScriptLoader; + loadTheme(scriptLoader, editor, suffix, function () { + loadLanguage(scriptLoader, editor); + loadIcons(scriptLoader, editor, suffix); + loadPlugins(editor, suffix); + scriptLoader.loadQueue(function () { + if (!editor.removed) { + init$2(editor); + } + }, editor, function () { + if (!editor.removed) { + init$2(editor); + } + }); + }); + }; + var getStyleSheetLoader$1 = function (element, editor) { + return instance.forElement(element, { + contentCssCors: hasContentCssCors(editor), + referrerPolicy: getReferrerPolicy(editor) + }); + }; + var render = function (editor) { + var id = editor.id; + I18n.setCode(getLanguageCode(editor)); + var readyHandler = function () { + DOM$7.unbind(window, 'ready', readyHandler); + editor.render(); + }; + if (!EventUtils.Event.domLoaded) { + DOM$7.bind(window, 'ready', readyHandler); + return; + } + if (!editor.getElement()) { + return; + } + if (!Env.contentEditable) { + return; + } + var element = SugarElement.fromDom(editor.getElement()); + var snapshot = clone(element); + editor.on('remove', function () { + eachr(element.dom.attributes, function (attr) { + return remove$1(element, attr.name); + }); + setAll(element, snapshot); + }); + editor.ui.styleSheetLoader = getStyleSheetLoader$1(element, editor); + if (!isInline$1(editor)) { + editor.orgVisibility = editor.getElement().style.visibility; + editor.getElement().style.visibility = 'hidden'; + } else { + editor.inline = true; + } + var form = editor.getElement().form || DOM$7.getParent(id, 'form'); + if (form) { + editor.formElement = form; + if (hasHiddenInput(editor) && !isTextareaOrInput(editor.getElement())) { + DOM$7.insertAfter(DOM$7.create('input', { + type: 'hidden', + name: id + }), id); + editor.hasHiddenInput = true; + } + editor.formEventDelegate = function (e) { + editor.fire(e.type, e); + }; + DOM$7.bind(form, 'submit reset', editor.formEventDelegate); + editor.on('reset', function () { + editor.resetContent(); + }); + if (shouldPatchSubmit(editor) && !form.submit.nodeType && !form.submit.length && !form._mceOldSubmit) { + form._mceOldSubmit = form.submit; + form.submit = function () { + editor.editorManager.triggerSave(); + editor.setDirty(false); + return form._mceOldSubmit(form); + }; + } + } + editor.windowManager = WindowManager(editor); + editor.notificationManager = NotificationManager(editor); + if (isEncodingXml(editor)) { + editor.on('GetContent', function (e) { + if (e.save) { + e.content = DOM$7.encode(e.content); + } + }); + } + if (shouldAddFormSubmitTrigger(editor)) { + editor.on('submit', function () { + if (editor.initialized) { + editor.save(); + } + }); + } + if (shouldAddUnloadTrigger(editor)) { + editor._beforeUnload = function () { + if (editor.initialized && !editor.destroyed && !editor.isHidden()) { + editor.save({ + format: 'raw', + no_events: true, + set_dirty: false + }); + } + }; + editor.editorManager.on('BeforeUnload', editor._beforeUnload); + } + editor.editorManager.add(editor); + loadScripts(editor, editor.suffix); + }; + + var addVisual$1 = function (editor, elm) { + return addVisual(editor, elm); + }; + + var legacyPropNames = { + 'font-size': 'size', + 'font-family': 'face' + }; + var getSpecifiedFontProp = function (propName, rootElm, elm) { + var getProperty = function (elm) { + return getRaw(elm, propName).orThunk(function () { + if (name(elm) === 'font') { + return get$1(legacyPropNames, propName).bind(function (legacyPropName) { + return getOpt(elm, legacyPropName); + }); + } else { + return Optional.none(); + } + }); + }; + var isRoot = function (elm) { + return eq$2(SugarElement.fromDom(rootElm), elm); + }; + return closest$2(SugarElement.fromDom(elm), function (elm) { + return getProperty(elm); + }, isRoot); + }; + var normalizeFontFamily = function (fontFamily) { + return fontFamily.replace(/[\'\"\\]/g, '').replace(/,\s+/g, ','); + }; + var getComputedFontProp = function (propName, elm) { + return Optional.from(DOMUtils.DOM.getStyle(elm, propName, true)); + }; + var getFontProp = function (propName) { + return function (rootElm, elm) { + return Optional.from(elm).map(SugarElement.fromDom).filter(isElement).bind(function (element) { + return getSpecifiedFontProp(propName, rootElm, element.dom).or(getComputedFontProp(propName, element.dom)); + }).getOr(''); + }; + }; + var getFontSize = getFontProp('font-size'); + var getFontFamily = compose(normalizeFontFamily, getFontProp('font-family')); + + var findFirstCaretElement = function (editor) { + return firstPositionIn(editor.getBody()).map(function (caret) { + var container = caret.container(); + return isText$1(container) ? container.parentNode : container; + }); + }; + var getCaretElement = function (editor) { + return Optional.from(editor.selection.getRng()).bind(function (rng) { + var root = editor.getBody(); + var atStartOfNode = rng.startContainer === root && rng.startOffset === 0; + return atStartOfNode ? Optional.none() : Optional.from(editor.selection.getStart(true)); + }); + }; + var mapRange = function (editor, mapper) { + return getCaretElement(editor).orThunk(curry(findFirstCaretElement, editor)).map(SugarElement.fromDom).filter(isElement).map(mapper); + }; + + var fromFontSizeNumber = function (editor, value) { + if (/^[0-9.]+$/.test(value)) { + var fontSizeNumber = parseInt(value, 10); + if (fontSizeNumber >= 1 && fontSizeNumber <= 7) { + var fontSizes = getFontStyleValues(editor); + var fontClasses = getFontSizeClasses(editor); + if (fontClasses) { + return fontClasses[fontSizeNumber - 1] || value; + } else { + return fontSizes[fontSizeNumber - 1] || value; + } + } else { + return value; + } + } else { + return value; + } + }; + var normalizeFontNames = function (font) { + var fonts = font.split(/\s*,\s*/); + return map(fonts, function (font) { + if (font.indexOf(' ') !== -1 && !(startsWith(font, '"') || startsWith(font, '\''))) { + return '\'' + font + '\''; + } else { + return font; + } + }).join(','); + }; + var fontNameAction = function (editor, value) { + var font = fromFontSizeNumber(editor, value); + editor.formatter.toggle('fontname', { value: normalizeFontNames(font) }); + editor.nodeChanged(); + }; + var fontNameQuery = function (editor) { + return mapRange(editor, function (elm) { + return getFontFamily(editor.getBody(), elm.dom); + }).getOr(''); + }; + var fontSizeAction = function (editor, value) { + editor.formatter.toggle('fontsize', { value: fromFontSizeNumber(editor, value) }); + editor.nodeChanged(); + }; + var fontSizeQuery = function (editor) { + return mapRange(editor, function (elm) { + return getFontSize(editor.getBody(), elm.dom); + }).getOr(''); + }; + + var lineHeightQuery = function (editor) { + return mapRange(editor, function (elm) { + var root = SugarElement.fromDom(editor.getBody()); + var specifiedStyle = closest$2(elm, function (elm) { + return getRaw(elm, 'line-height'); + }, curry(eq$2, root)); + var computedStyle = function () { + var lineHeight = parseFloat(get$5(elm, 'line-height')); + var fontSize = parseFloat(get$5(elm, 'font-size')); + return String(lineHeight / fontSize); + }; + return specifiedStyle.getOrThunk(computedStyle); + }).getOr(''); + }; + var lineHeightAction = function (editor, lineHeight) { + editor.formatter.toggle('lineheight', { value: String(lineHeight) }); + editor.nodeChanged(); + }; + + var processValue = function (value) { + var details; + if (typeof value !== 'string') { + details = Tools.extend({ + paste: value.paste, + data: { paste: value.paste } + }, value); + return { + content: value.content, + details: details + }; + } + return { + content: value, + details: {} + }; + }; + var insertAtCaret$1 = function (editor, value) { + var result = processValue(value); + insertContent(editor, result.content, result.details); + }; + + var each$f = Tools.each; + var map$3 = Tools.map, inArray$2 = Tools.inArray; + var EditorCommands = function () { + function EditorCommands(editor) { + this.commands = { + state: {}, + exec: {}, + value: {} + }; + this.editor = editor; + this.setupCommands(editor); + } + EditorCommands.prototype.execCommand = function (command, ui, value, args) { + var func, state = false; + var self = this; + if (self.editor.removed) { + return; + } + if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(command) && (!args || !args.skip_focus)) { + self.editor.focus(); + } else { + restore(self.editor); + } + args = self.editor.fire('BeforeExecCommand', { + command: command, + ui: ui, + value: value + }); + if (args.isDefaultPrevented()) { + return false; + } + var customCommand = command.toLowerCase(); + if (func = self.commands.exec[customCommand]) { + func(customCommand, ui, value); + self.editor.fire('ExecCommand', { + command: command, + ui: ui, + value: value + }); + return true; + } + each$f(this.editor.plugins, function (p) { + if (p.execCommand && p.execCommand(command, ui, value)) { + self.editor.fire('ExecCommand', { + command: command, + ui: ui, + value: value + }); + state = true; + return false; + } + }); + if (state) { + return state; + } + if (self.editor.theme && self.editor.theme.execCommand && self.editor.theme.execCommand(command, ui, value)) { + self.editor.fire('ExecCommand', { + command: command, + ui: ui, + value: value + }); + return true; + } + try { + state = self.editor.getDoc().execCommand(command, ui, value); + } catch (ex) { + } + if (state) { + self.editor.fire('ExecCommand', { + command: command, + ui: ui, + value: value + }); + return true; + } + return false; + }; + EditorCommands.prototype.queryCommandState = function (command) { + var func; + if (this.editor.quirks.isHidden() || this.editor.removed) { + return; + } + command = command.toLowerCase(); + if (func = this.commands.state[command]) { + return func(command); + } + try { + return this.editor.getDoc().queryCommandState(command); + } catch (ex) { + } + return false; + }; + EditorCommands.prototype.queryCommandValue = function (command) { + var func; + if (this.editor.quirks.isHidden() || this.editor.removed) { + return; + } + command = command.toLowerCase(); + if (func = this.commands.value[command]) { + return func(command); + } + try { + return this.editor.getDoc().queryCommandValue(command); + } catch (ex) { + } + }; + EditorCommands.prototype.addCommands = function (commandList, type) { + if (type === void 0) { + type = 'exec'; + } + var self = this; + each$f(commandList, function (callback, command) { + each$f(command.toLowerCase().split(','), function (command) { + self.commands[type][command] = callback; + }); + }); + }; + EditorCommands.prototype.addCommand = function (command, callback, scope) { + var _this = this; + command = command.toLowerCase(); + this.commands.exec[command] = function (command, ui, value, args) { + return callback.call(scope || _this.editor, ui, value, args); + }; + }; + EditorCommands.prototype.queryCommandSupported = function (command) { + command = command.toLowerCase(); + if (this.commands.exec[command]) { + return true; + } + try { + return this.editor.getDoc().queryCommandSupported(command); + } catch (ex) { + } + return false; + }; + EditorCommands.prototype.addQueryStateHandler = function (command, callback, scope) { + var _this = this; + command = command.toLowerCase(); + this.commands.state[command] = function () { + return callback.call(scope || _this.editor); + }; + }; + EditorCommands.prototype.addQueryValueHandler = function (command, callback, scope) { + var _this = this; + command = command.toLowerCase(); + this.commands.value[command] = function () { + return callback.call(scope || _this.editor); + }; + }; + EditorCommands.prototype.hasCustomCommand = function (command) { + command = command.toLowerCase(); + return !!this.commands.exec[command]; + }; + EditorCommands.prototype.execNativeCommand = function (command, ui, value) { + if (ui === undefined) { + ui = false; + } + if (value === undefined) { + value = null; + } + return this.editor.getDoc().execCommand(command, ui, value); + }; + EditorCommands.prototype.isFormatMatch = function (name) { + return this.editor.formatter.match(name); + }; + EditorCommands.prototype.toggleFormat = function (name, value) { + this.editor.formatter.toggle(name, value ? { value: value } : undefined); + this.editor.nodeChanged(); + }; + EditorCommands.prototype.storeSelection = function (type) { + this.selectionBookmark = this.editor.selection.getBookmark(type); + }; + EditorCommands.prototype.restoreSelection = function () { + this.editor.selection.moveToBookmark(this.selectionBookmark); + }; + EditorCommands.prototype.setupCommands = function (editor) { + var self = this; + this.addCommands({ + 'mceResetDesignMode,mceBeginUndoLevel': noop, + 'mceEndUndoLevel,mceAddUndoLevel': function () { + editor.undoManager.add(); + }, + 'Cut,Copy,Paste': function (command) { + var doc = editor.getDoc(); + var failed; + try { + self.execNativeCommand(command); + } catch (ex) { + failed = true; + } + if (command === 'paste' && !doc.queryCommandEnabled(command)) { + failed = true; + } + if (failed || !doc.queryCommandSupported(command)) { + var msg = editor.translate('Your browser doesn\'t support direct access to the clipboard. ' + 'Please use the Ctrl+X/C/V keyboard shortcuts instead.'); + if (Env.mac) { + msg = msg.replace(/Ctrl\+/g, '\u2318+'); + } + editor.notificationManager.open({ + text: msg, + type: 'error' + }); + } + }, + 'unlink': function () { + if (editor.selection.isCollapsed()) { + var elm = editor.dom.getParent(editor.selection.getStart(), 'a'); + if (elm) { + editor.dom.remove(elm, true); + } + return; + } + editor.formatter.remove('link'); + }, + 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone': function (command) { + var align = command.substring(7); + if (align === 'full') { + align = 'justify'; + } + each$f('left,center,right,justify'.split(','), function (name) { + if (align !== name) { + editor.formatter.remove('align' + name); + } + }); + if (align !== 'none') { + self.toggleFormat('align' + align); + } + }, + 'InsertUnorderedList,InsertOrderedList': function (command) { + var listParent; + self.execNativeCommand(command); + var listElm = editor.dom.getParent(editor.selection.getNode(), 'ol,ul'); + if (listElm) { + listParent = listElm.parentNode; + if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) { + self.storeSelection(); + editor.dom.split(listParent, listElm); + self.restoreSelection(); + } + } + }, + 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) { + self.toggleFormat(command); + }, + 'ForeColor,HiliteColor': function (command, ui, value) { + self.toggleFormat(command, value); + }, + 'FontName': function (command, ui, value) { + fontNameAction(editor, value); + }, + 'FontSize': function (command, ui, value) { + fontSizeAction(editor, value); + }, + 'LineHeight': function (command, ui, value) { + lineHeightAction(editor, value); + }, + 'RemoveFormat': function (command) { + editor.formatter.remove(command); + }, + 'mceBlockQuote': function () { + self.toggleFormat('blockquote'); + }, + 'FormatBlock': function (command, ui, value) { + return self.toggleFormat(value || 'p'); + }, + 'mceCleanup': function () { + var bookmark = editor.selection.getBookmark(); + editor.setContent(editor.getContent()); + editor.selection.moveToBookmark(bookmark); + }, + 'mceRemoveNode': function (command, ui, value) { + var node = value || editor.selection.getNode(); + if (node !== editor.getBody()) { + self.storeSelection(); + editor.dom.remove(node, true); + self.restoreSelection(); + } + }, + 'mceSelectNodeDepth': function (command, ui, value) { + var counter = 0; + editor.dom.getParent(editor.selection.getNode(), function (node) { + if (node.nodeType === 1 && counter++ === value) { + editor.selection.select(node); + return false; + } + }, editor.getBody()); + }, + 'mceSelectNode': function (command, ui, value) { + editor.selection.select(value); + }, + 'mceInsertContent': function (command, ui, value) { + insertAtCaret$1(editor, value); + }, + 'mceInsertRawHTML': function (command, ui, value) { + editor.selection.setContent('tiny_mce_marker'); + var content = editor.getContent(); + editor.setContent(content.replace(/tiny_mce_marker/g, function () { + return value; + })); + }, + 'mceInsertNewLine': function (command, ui, value) { + insert$3(editor, value); + }, + 'mceToggleFormat': function (command, ui, value) { + self.toggleFormat(value); + }, + 'mceSetContent': function (command, ui, value) { + editor.setContent(value); + }, + 'Indent,Outdent': function (command) { + handle(editor, command); + }, + 'mceRepaint': noop, + 'InsertHorizontalRule': function () { + editor.execCommand('mceInsertContent', false, '
    '); + }, + 'mceToggleVisualAid': function () { + editor.hasVisual = !editor.hasVisual; + editor.addVisual(); + }, + 'mceReplaceContent': function (command, ui, value) { + editor.execCommand('mceInsertContent', false, value.replace(/\{\$selection\}/g, editor.selection.getContent({ format: 'text' }))); + }, + 'mceInsertLink': function (command, ui, value) { + if (typeof value === 'string') { + value = { href: value }; + } + var anchor = editor.dom.getParent(editor.selection.getNode(), 'a'); + value.href = value.href.replace(/ /g, '%20'); + if (!anchor || !value.href) { + editor.formatter.remove('link'); + } + if (value.href) { + editor.formatter.apply('link', value, anchor); + } + }, + 'selectAll': function () { + var editingHost = editor.dom.getParent(editor.selection.getStart(), isContentEditableTrue); + if (editingHost) { + var rng = editor.dom.createRng(); + rng.selectNodeContents(editingHost); + editor.selection.setRng(rng); + } + }, + 'mceNewDocument': function () { + editor.setContent(''); + }, + 'InsertLineBreak': function (command, ui, value) { + insert$2(editor, value); + return true; + } + }); + var alignStates = function (name) { + return function () { + var selection = editor.selection; + var nodes = selection.isCollapsed() ? [editor.dom.getParent(selection.getNode(), editor.dom.isBlock)] : selection.getSelectedBlocks(); + var matches = map$3(nodes, function (node) { + return !!editor.formatter.matchNode(node, name); + }); + return inArray$2(matches, true) !== -1; + }; + }; + self.addCommands({ + 'JustifyLeft': alignStates('alignleft'), + 'JustifyCenter': alignStates('aligncenter'), + 'JustifyRight': alignStates('alignright'), + 'JustifyFull': alignStates('alignjustify'), + 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) { + return self.isFormatMatch(command); + }, + 'mceBlockQuote': function () { + return self.isFormatMatch('blockquote'); + }, + 'Outdent': function () { + return canOutdent(editor); + }, + 'InsertUnorderedList,InsertOrderedList': function (command) { + var list = editor.dom.getParent(editor.selection.getNode(), 'ul,ol'); + return list && (command === 'insertunorderedlist' && list.tagName === 'UL' || command === 'insertorderedlist' && list.tagName === 'OL'); + } + }, 'state'); + self.addCommands({ + Undo: function () { + editor.undoManager.undo(); + }, + Redo: function () { + editor.undoManager.redo(); + } + }); + self.addQueryValueHandler('FontName', function () { + return fontNameQuery(editor); + }, this); + self.addQueryValueHandler('FontSize', function () { + return fontSizeQuery(editor); + }, this); + self.addQueryValueHandler('LineHeight', function () { + return lineHeightQuery(editor); + }, this); + }; + return EditorCommands; + }(); + + var internalContentEditableAttr = 'data-mce-contenteditable'; + var toggleClass = function (elm, cls, state) { + if (has$2(elm, cls) && state === false) { + remove$4(elm, cls); + } else if (state) { + add$3(elm, cls); + } + }; + var setEditorCommandState = function (editor, cmd, state) { + try { + editor.getDoc().execCommand(cmd, false, String(state)); + } catch (ex) { + } + }; + var setContentEditable = function (elm, state) { + elm.dom.contentEditable = state ? 'true' : 'false'; + }; + var switchOffContentEditableTrue = function (elm) { + each(descendants$1(elm, '*[contenteditable="true"]'), function (elm) { + set(elm, internalContentEditableAttr, 'true'); + setContentEditable(elm, false); + }); + }; + var switchOnContentEditableTrue = function (elm) { + each(descendants$1(elm, '*[' + internalContentEditableAttr + '="true"]'), function (elm) { + remove$1(elm, internalContentEditableAttr); + setContentEditable(elm, true); + }); + }; + var removeFakeSelection = function (editor) { + Optional.from(editor.selection.getNode()).each(function (elm) { + elm.removeAttribute('data-mce-selected'); + }); + }; + var restoreFakeSelection = function (editor) { + editor.selection.setRng(editor.selection.getRng()); + }; + var toggleReadOnly = function (editor, state) { + var body = SugarElement.fromDom(editor.getBody()); + toggleClass(body, 'mce-content-readonly', state); + if (state) { + editor.selection.controlSelection.hideResizeRect(); + editor._selectionOverrides.hideFakeCaret(); + removeFakeSelection(editor); + editor.readonly = true; + setContentEditable(body, false); + switchOffContentEditableTrue(body); + } else { + editor.readonly = false; + setContentEditable(body, true); + switchOnContentEditableTrue(body); + setEditorCommandState(editor, 'StyleWithCSS', false); + setEditorCommandState(editor, 'enableInlineTableEditing', false); + setEditorCommandState(editor, 'enableObjectResizing', false); + if (hasEditorOrUiFocus(editor)) { + editor.focus(); + } + restoreFakeSelection(editor); + editor.nodeChanged(); + } + }; + var isReadOnly$1 = function (editor) { + return editor.readonly; + }; + var registerFilters = function (editor) { + editor.parser.addAttributeFilter('contenteditable', function (nodes) { + if (isReadOnly$1(editor)) { + each(nodes, function (node) { + node.attr(internalContentEditableAttr, node.attr('contenteditable')); + node.attr('contenteditable', 'false'); + }); + } + }); + editor.serializer.addAttributeFilter(internalContentEditableAttr, function (nodes) { + if (isReadOnly$1(editor)) { + each(nodes, function (node) { + node.attr('contenteditable', node.attr(internalContentEditableAttr)); + }); + } + }); + editor.serializer.addTempAttr(internalContentEditableAttr); + }; + var registerReadOnlyContentFilters = function (editor) { + if (editor.serializer) { + registerFilters(editor); + } else { + editor.on('PreInit', function () { + registerFilters(editor); + }); + } + }; + var isClickEvent = function (e) { + return e.type === 'click'; + }; + var getAnchorHrefOpt = function (editor, elm) { + var isRoot = function (elm) { + return eq$2(elm, SugarElement.fromDom(editor.getBody())); + }; + return closest$1(elm, 'a', isRoot).bind(function (a) { + return getOpt(a, 'href'); + }); + }; + var processReadonlyEvents = function (editor, e) { + if (isClickEvent(e) && !VK.metaKeyPressed(e)) { + var elm = SugarElement.fromDom(e.target); + getAnchorHrefOpt(editor, elm).each(function (href) { + e.preventDefault(); + if (/^#/.test(href)) { + var targetEl = editor.dom.select(href + ',[name="' + removeLeading(href, '#') + '"]'); + if (targetEl.length) { + editor.selection.scrollIntoView(targetEl[0], true); + } + } else { + window.open(href, '_blank', 'rel=noopener noreferrer,menubar=yes,toolbar=yes,location=yes,status=yes,resizable=yes,scrollbars=yes'); + } + }); + } + }; + var registerReadOnlySelectionBlockers = function (editor) { + editor.on('ShowCaret', function (e) { + if (isReadOnly$1(editor)) { + e.preventDefault(); + } + }); + editor.on('ObjectSelected', function (e) { + if (isReadOnly$1(editor)) { + e.preventDefault(); + } + }); + }; + + var nativeEvents = Tools.makeMap('focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange ' + 'mouseout mouseenter mouseleave wheel keydown keypress keyup input beforeinput contextmenu dragstart dragend dragover ' + 'draggesture dragdrop drop drag submit ' + 'compositionstart compositionend compositionupdate touchstart touchmove touchend touchcancel', ' '); + var EventDispatcher = function () { + function EventDispatcher(settings) { + this.bindings = {}; + this.settings = settings || {}; + this.scope = this.settings.scope || this; + this.toggleEvent = this.settings.toggleEvent || never; + } + EventDispatcher.isNative = function (name) { + return !!nativeEvents[name.toLowerCase()]; + }; + EventDispatcher.prototype.fire = function (nameIn, argsIn) { + var name = nameIn.toLowerCase(); + var args = argsIn || {}; + args.type = name; + if (!args.target) { + args.target = this.scope; + } + if (!args.preventDefault) { + args.preventDefault = function () { + args.isDefaultPrevented = always; + }; + args.stopPropagation = function () { + args.isPropagationStopped = always; + }; + args.stopImmediatePropagation = function () { + args.isImmediatePropagationStopped = always; + }; + args.isDefaultPrevented = never; + args.isPropagationStopped = never; + args.isImmediatePropagationStopped = never; + } + if (this.settings.beforeFire) { + this.settings.beforeFire(args); + } + var handlers = this.bindings[name]; + if (handlers) { + for (var i = 0, l = handlers.length; i < l; i++) { + var callback = handlers[i]; + if (callback.once) { + this.off(name, callback.func); + } + if (args.isImmediatePropagationStopped()) { + args.stopPropagation(); + return args; + } + if (callback.func.call(this.scope, args) === false) { + args.preventDefault(); + return args; + } + } + } + return args; + }; + EventDispatcher.prototype.on = function (name, callback, prepend, extra) { + if (callback === false) { + callback = never; + } + if (callback) { + var wrappedCallback = { func: callback }; + if (extra) { + Tools.extend(wrappedCallback, extra); + } + var names = name.toLowerCase().split(' '); + var i = names.length; + while (i--) { + var currentName = names[i]; + var handlers = this.bindings[currentName]; + if (!handlers) { + handlers = this.bindings[currentName] = []; + this.toggleEvent(currentName, true); + } + if (prepend) { + handlers.unshift(wrappedCallback); + } else { + handlers.push(wrappedCallback); + } + } + } + return this; + }; + EventDispatcher.prototype.off = function (name, callback) { + var _this = this; + if (name) { + var names = name.toLowerCase().split(' '); + var i = names.length; + while (i--) { + var currentName = names[i]; + var handlers = this.bindings[currentName]; + if (!currentName) { + each$1(this.bindings, function (_value, bindingName) { + _this.toggleEvent(bindingName, false); + delete _this.bindings[bindingName]; + }); + return this; + } + if (handlers) { + if (!callback) { + handlers.length = 0; + } else { + var hi = handlers.length; + while (hi--) { + if (handlers[hi].func === callback) { + handlers = handlers.slice(0, hi).concat(handlers.slice(hi + 1)); + this.bindings[currentName] = handlers; + } + } + } + if (!handlers.length) { + this.toggleEvent(name, false); + delete this.bindings[currentName]; + } + } + } + } else { + each$1(this.bindings, function (_value, name) { + _this.toggleEvent(name, false); + }); + this.bindings = {}; + } + return this; + }; + EventDispatcher.prototype.once = function (name, callback, prepend) { + return this.on(name, callback, prepend, { once: true }); + }; + EventDispatcher.prototype.has = function (name) { + name = name.toLowerCase(); + return !(!this.bindings[name] || this.bindings[name].length === 0); + }; + return EventDispatcher; + }(); + + var getEventDispatcher = function (obj) { + if (!obj._eventDispatcher) { + obj._eventDispatcher = new EventDispatcher({ + scope: obj, + toggleEvent: function (name, state) { + if (EventDispatcher.isNative(name) && obj.toggleNativeEvent) { + obj.toggleNativeEvent(name, state); + } + } + }); + } + return obj._eventDispatcher; + }; + var Observable = { + fire: function (name, args, bubble) { + var self = this; + if (self.removed && name !== 'remove' && name !== 'detach') { + return args; + } + var dispatcherArgs = getEventDispatcher(self).fire(name, args); + if (bubble !== false && self.parent) { + var parent_1 = self.parent(); + while (parent_1 && !dispatcherArgs.isPropagationStopped()) { + parent_1.fire(name, dispatcherArgs, false); + parent_1 = parent_1.parent(); + } + } + return dispatcherArgs; + }, + on: function (name, callback, prepend) { + return getEventDispatcher(this).on(name, callback, prepend); + }, + off: function (name, callback) { + return getEventDispatcher(this).off(name, callback); + }, + once: function (name, callback) { + return getEventDispatcher(this).once(name, callback); + }, + hasEventListeners: function (name) { + return getEventDispatcher(this).has(name); + } + }; + + var DOM$8 = DOMUtils.DOM; + var customEventRootDelegates; + var getEventTarget = function (editor, eventName) { + if (eventName === 'selectionchange') { + return editor.getDoc(); + } + if (!editor.inline && /^mouse|touch|click|contextmenu|drop|dragover|dragend/.test(eventName)) { + return editor.getDoc().documentElement; + } + var eventRoot = getEventRoot(editor); + if (eventRoot) { + if (!editor.eventRoot) { + editor.eventRoot = DOM$8.select(eventRoot)[0]; + } + return editor.eventRoot; + } + return editor.getBody(); + }; + var isListening = function (editor) { + return !editor.hidden && !isReadOnly$1(editor); + }; + var fireEvent = function (editor, eventName, e) { + if (isListening(editor)) { + editor.fire(eventName, e); + } else if (isReadOnly$1(editor)) { + processReadonlyEvents(editor, e); + } + }; + var bindEventDelegate = function (editor, eventName) { + var delegate; + if (!editor.delegates) { + editor.delegates = {}; + } + if (editor.delegates[eventName] || editor.removed) { + return; + } + var eventRootElm = getEventTarget(editor, eventName); + if (getEventRoot(editor)) { + if (!customEventRootDelegates) { + customEventRootDelegates = {}; + editor.editorManager.on('removeEditor', function () { + if (!editor.editorManager.activeEditor) { + if (customEventRootDelegates) { + each$1(customEventRootDelegates, function (_value, name) { + editor.dom.unbind(getEventTarget(editor, name)); + }); + customEventRootDelegates = null; + } + } + }); + } + if (customEventRootDelegates[eventName]) { + return; + } + delegate = function (e) { + var target = e.target; + var editors = editor.editorManager.get(); + var i = editors.length; + while (i--) { + var body = editors[i].getBody(); + if (body === target || DOM$8.isChildOf(target, body)) { + fireEvent(editors[i], eventName, e); + } + } + }; + customEventRootDelegates[eventName] = delegate; + DOM$8.bind(eventRootElm, eventName, delegate); + } else { + delegate = function (e) { + fireEvent(editor, eventName, e); + }; + DOM$8.bind(eventRootElm, eventName, delegate); + editor.delegates[eventName] = delegate; + } + }; + var EditorObservable = __assign(__assign({}, Observable), { + bindPendingEventDelegates: function () { + var self = this; + Tools.each(self._pendingNativeEvents, function (name) { + bindEventDelegate(self, name); + }); + }, + toggleNativeEvent: function (name, state) { + var self = this; + if (name === 'focus' || name === 'blur') { + return; + } + if (state) { + if (self.initialized) { + bindEventDelegate(self, name); + } else { + if (!self._pendingNativeEvents) { + self._pendingNativeEvents = [name]; + } else { + self._pendingNativeEvents.push(name); + } + } + } else if (self.initialized) { + self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]); + delete self.delegates[name]; + } + }, + unbindAllNativeEvents: function () { + var self = this; + var body = self.getBody(); + var dom = self.dom; + if (self.delegates) { + each$1(self.delegates, function (value, name) { + self.dom.unbind(getEventTarget(self, name), name, value); + }); + delete self.delegates; + } + if (!self.inline && body && dom) { + body.onload = null; + dom.unbind(self.getWin()); + dom.unbind(self.getDoc()); + } + if (dom) { + dom.unbind(body); + dom.unbind(self.getContainer()); + } + } + }); + + var defaultModes = [ + 'design', + 'readonly' + ]; + var switchToMode = function (editor, activeMode, availableModes, mode) { + var oldMode = availableModes[activeMode.get()]; + var newMode = availableModes[mode]; + try { + newMode.activate(); + } catch (e) { + console.error('problem while activating editor mode ' + mode + ':', e); + return; + } + oldMode.deactivate(); + if (oldMode.editorReadOnly !== newMode.editorReadOnly) { + toggleReadOnly(editor, newMode.editorReadOnly); + } + activeMode.set(mode); + fireSwitchMode(editor, mode); + }; + var setMode = function (editor, availableModes, activeMode, mode) { + if (mode === activeMode.get()) { + return; + } else if (!has(availableModes, mode)) { + throw new Error('Editor mode \'' + mode + '\' is invalid'); + } + if (editor.initialized) { + switchToMode(editor, activeMode, availableModes, mode); + } else { + editor.on('init', function () { + return switchToMode(editor, activeMode, availableModes, mode); + }); + } + }; + var registerMode = function (availableModes, mode, api) { + var _a; + if (contains(defaultModes, mode)) { + throw new Error('Cannot override default mode ' + mode); + } + return __assign(__assign({}, availableModes), (_a = {}, _a[mode] = __assign(__assign({}, api), { + deactivate: function () { + try { + api.deactivate(); + } catch (e) { + console.error('problem while deactivating editor mode ' + mode + ':', e); + } + } + }), _a)); + }; + + var create$5 = function (editor) { + var activeMode = Cell('design'); + var availableModes = Cell({ + design: { + activate: noop, + deactivate: noop, + editorReadOnly: false + }, + readonly: { + activate: noop, + deactivate: noop, + editorReadOnly: true + } + }); + registerReadOnlyContentFilters(editor); + registerReadOnlySelectionBlockers(editor); + return { + isReadOnly: function () { + return isReadOnly$1(editor); + }, + set: function (mode) { + return setMode(editor, availableModes.get(), activeMode, mode); + }, + get: function () { + return activeMode.get(); + }, + register: function (mode, api) { + availableModes.set(registerMode(availableModes.get(), mode, api)); + } + }; + }; + + var each$g = Tools.each, explode$3 = Tools.explode; + var keyCodeLookup = { + f1: 112, + f2: 113, + f3: 114, + f4: 115, + f5: 116, + f6: 117, + f7: 118, + f8: 119, + f9: 120, + f10: 121, + f11: 122, + f12: 123 + }; + var modifierNames = Tools.makeMap('alt,ctrl,shift,meta,access'); + var parseShortcut = function (pattern) { + var key; + var shortcut = {}; + each$g(explode$3(pattern.toLowerCase(), '+'), function (value) { + if (value in modifierNames) { + shortcut[value] = true; + } else { + if (/^[0-9]{2,}$/.test(value)) { + shortcut.keyCode = parseInt(value, 10); + } else { + shortcut.charCode = value.charCodeAt(0); + shortcut.keyCode = keyCodeLookup[value] || value.toUpperCase().charCodeAt(0); + } + } + }); + var id = [shortcut.keyCode]; + for (key in modifierNames) { + if (shortcut[key]) { + id.push(key); + } else { + shortcut[key] = false; + } + } + shortcut.id = id.join(','); + if (shortcut.access) { + shortcut.alt = true; + if (Env.mac) { + shortcut.ctrl = true; + } else { + shortcut.shift = true; + } + } + if (shortcut.meta) { + if (Env.mac) { + shortcut.meta = true; + } else { + shortcut.ctrl = true; + shortcut.meta = false; + } + } + return shortcut; + }; + var Shortcuts = function () { + function Shortcuts(editor) { + this.shortcuts = {}; + this.pendingPatterns = []; + this.editor = editor; + var self = this; + editor.on('keyup keypress keydown', function (e) { + if ((self.hasModifier(e) || self.isFunctionKey(e)) && !e.isDefaultPrevented()) { + each$g(self.shortcuts, function (shortcut) { + if (self.matchShortcut(e, shortcut)) { + self.pendingPatterns = shortcut.subpatterns.slice(0); + if (e.type === 'keydown') { + self.executeShortcutAction(shortcut); + } + return true; + } + }); + if (self.matchShortcut(e, self.pendingPatterns[0])) { + if (self.pendingPatterns.length === 1) { + if (e.type === 'keydown') { + self.executeShortcutAction(self.pendingPatterns[0]); + } + } + self.pendingPatterns.shift(); + } + } + }); + } + Shortcuts.prototype.add = function (pattern, desc, cmdFunc, scope) { + var self = this; + var func = self.normalizeCommandFunc(cmdFunc); + each$g(explode$3(Tools.trim(pattern)), function (pattern) { + var shortcut = self.createShortcut(pattern, desc, func, scope); + self.shortcuts[shortcut.id] = shortcut; + }); + return true; + }; + Shortcuts.prototype.remove = function (pattern) { + var shortcut = this.createShortcut(pattern); + if (this.shortcuts[shortcut.id]) { + delete this.shortcuts[shortcut.id]; + return true; + } + return false; + }; + Shortcuts.prototype.normalizeCommandFunc = function (cmdFunc) { + var self = this; + var cmd = cmdFunc; + if (typeof cmd === 'string') { + return function () { + self.editor.execCommand(cmd, false, null); + }; + } else if (Tools.isArray(cmd)) { + return function () { + self.editor.execCommand(cmd[0], cmd[1], cmd[2]); + }; + } else { + return cmd; + } + }; + Shortcuts.prototype.createShortcut = function (pattern, desc, cmdFunc, scope) { + var shortcuts = Tools.map(explode$3(pattern, '>'), parseShortcut); + shortcuts[shortcuts.length - 1] = Tools.extend(shortcuts[shortcuts.length - 1], { + func: cmdFunc, + scope: scope || this.editor + }); + return Tools.extend(shortcuts[0], { + desc: this.editor.translate(desc), + subpatterns: shortcuts.slice(1) + }); + }; + Shortcuts.prototype.hasModifier = function (e) { + return e.altKey || e.ctrlKey || e.metaKey; + }; + Shortcuts.prototype.isFunctionKey = function (e) { + return e.type === 'keydown' && e.keyCode >= 112 && e.keyCode <= 123; + }; + Shortcuts.prototype.matchShortcut = function (e, shortcut) { + if (!shortcut) { + return false; + } + if (shortcut.ctrl !== e.ctrlKey || shortcut.meta !== e.metaKey) { + return false; + } + if (shortcut.alt !== e.altKey || shortcut.shift !== e.shiftKey) { + return false; + } + if (e.keyCode === shortcut.keyCode || e.charCode && e.charCode === shortcut.charCode) { + e.preventDefault(); + return true; + } + return false; + }; + Shortcuts.prototype.executeShortcutAction = function (shortcut) { + return shortcut.func ? shortcut.func.call(shortcut.scope) : null; + }; + return Shortcuts; + }(); + + var create$6 = function () { + var buttons = {}; + var menuItems = {}; + var popups = {}; + var icons = {}; + var contextMenus = {}; + var contextToolbars = {}; + var sidebars = {}; + var add = function (collection, type) { + return function (name, spec) { + return collection[name.toLowerCase()] = __assign(__assign({}, spec), { type: type }); + }; + }; + var addIcon = function (name, svgData) { + return icons[name.toLowerCase()] = svgData; + }; + return { + addButton: add(buttons, 'button'), + addGroupToolbarButton: add(buttons, 'grouptoolbarbutton'), + addToggleButton: add(buttons, 'togglebutton'), + addMenuButton: add(buttons, 'menubutton'), + addSplitButton: add(buttons, 'splitbutton'), + addMenuItem: add(menuItems, 'menuitem'), + addNestedMenuItem: add(menuItems, 'nestedmenuitem'), + addToggleMenuItem: add(menuItems, 'togglemenuitem'), + addAutocompleter: add(popups, 'autocompleter'), + addContextMenu: add(contextMenus, 'contextmenu'), + addContextToolbar: add(contextToolbars, 'contexttoolbar'), + addContextForm: add(contextToolbars, 'contextform'), + addSidebar: add(sidebars, 'sidebar'), + addIcon: addIcon, + getAll: function () { + return { + buttons: buttons, + menuItems: menuItems, + icons: icons, + popups: popups, + contextMenus: contextMenus, + contextToolbars: contextToolbars, + sidebars: sidebars + }; + } + }; + }; + + var registry = function () { + var bridge = create$6(); + return { + addAutocompleter: bridge.addAutocompleter, + addButton: bridge.addButton, + addContextForm: bridge.addContextForm, + addContextMenu: bridge.addContextMenu, + addContextToolbar: bridge.addContextToolbar, + addIcon: bridge.addIcon, + addMenuButton: bridge.addMenuButton, + addMenuItem: bridge.addMenuItem, + addNestedMenuItem: bridge.addNestedMenuItem, + addSidebar: bridge.addSidebar, + addSplitButton: bridge.addSplitButton, + addToggleButton: bridge.addToggleButton, + addGroupToolbarButton: bridge.addGroupToolbarButton, + addToggleMenuItem: bridge.addToggleMenuItem, + getAll: bridge.getAll + }; + }; + + var each$h = Tools.each, trim$4 = Tools.trim; + var queryParts = 'source protocol authority userInfo user password host port relative path directory file query anchor'.split(' '); + var DEFAULT_PORTS = { + ftp: 21, + http: 80, + https: 443, + mailto: 25 + }; + var URI = function () { + function URI(url, settings) { + url = trim$4(url); + this.settings = settings || {}; + var baseUri = this.settings.base_uri; + var self = this; + if (/^([\w\-]+):([^\/]{2})/i.test(url) || /^\s*#/.test(url)) { + self.source = url; + return; + } + var isProtocolRelative = url.indexOf('//') === 0; + if (url.indexOf('/') === 0 && !isProtocolRelative) { + url = (baseUri ? baseUri.protocol || 'http' : 'http') + '://mce_host' + url; + } + if (!/^[\w\-]*:?\/\//.test(url)) { + var baseUrl = this.settings.base_uri ? this.settings.base_uri.path : new URI(document.location.href).directory; + if (this.settings.base_uri && this.settings.base_uri.protocol == '') { + url = '//mce_host' + self.toAbsPath(baseUrl, url); + } else { + var match = /([^#?]*)([#?]?.*)/.exec(url); + url = (baseUri && baseUri.protocol || 'http') + '://mce_host' + self.toAbsPath(baseUrl, match[1]) + match[2]; + } + } + url = url.replace(/@@/g, '(mce_at)'); + var urlMatch = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?(\[[a-zA-Z0-9:.%]+\]|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(url); + each$h(queryParts, function (v, i) { + var part = urlMatch[i]; + if (part) { + part = part.replace(/\(mce_at\)/g, '@@'); + } + self[v] = part; + }); + if (baseUri) { + if (!self.protocol) { + self.protocol = baseUri.protocol; + } + if (!self.userInfo) { + self.userInfo = baseUri.userInfo; + } + if (!self.port && self.host === 'mce_host') { + self.port = baseUri.port; + } + if (!self.host || self.host === 'mce_host') { + self.host = baseUri.host; + } + self.source = ''; + } + if (isProtocolRelative) { + self.protocol = ''; + } + } + URI.parseDataUri = function (uri) { + var type; + var uriComponents = decodeURIComponent(uri).split(','); + var matches = /data:([^;]+)/.exec(uriComponents[0]); + if (matches) { + type = matches[1]; + } + return { + type: type, + data: uriComponents[1] + }; + }; + URI.getDocumentBaseUrl = function (loc) { + var baseUrl; + if (loc.protocol.indexOf('http') !== 0 && loc.protocol !== 'file:') { + baseUrl = loc.href; + } else { + baseUrl = loc.protocol + '//' + loc.host + loc.pathname; + } + if (/^[^:]+:\/\/\/?[^\/]+\//.test(baseUrl)) { + baseUrl = baseUrl.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, ''); + if (!/[\/\\]$/.test(baseUrl)) { + baseUrl += '/'; + } + } + return baseUrl; + }; + URI.prototype.setPath = function (path) { + var pathMatch = /^(.*?)\/?(\w+)?$/.exec(path); + this.path = pathMatch[0]; + this.directory = pathMatch[1]; + this.file = pathMatch[2]; + this.source = ''; + this.getURI(); + }; + URI.prototype.toRelative = function (uri) { + var output; + if (uri === './') { + return uri; + } + var relativeUri = new URI(uri, { base_uri: this }); + if (relativeUri.host !== 'mce_host' && this.host !== relativeUri.host && relativeUri.host || this.port !== relativeUri.port || this.protocol !== relativeUri.protocol && relativeUri.protocol !== '') { + return relativeUri.getURI(); + } + var tu = this.getURI(), uu = relativeUri.getURI(); + if (tu === uu || tu.charAt(tu.length - 1) === '/' && tu.substr(0, tu.length - 1) === uu) { + return tu; + } + output = this.toRelPath(this.path, relativeUri.path); + if (relativeUri.query) { + output += '?' + relativeUri.query; + } + if (relativeUri.anchor) { + output += '#' + relativeUri.anchor; + } + return output; + }; + URI.prototype.toAbsolute = function (uri, noHost) { + var absoluteUri = new URI(uri, { base_uri: this }); + return absoluteUri.getURI(noHost && this.isSameOrigin(absoluteUri)); + }; + URI.prototype.isSameOrigin = function (uri) { + if (this.host == uri.host && this.protocol == uri.protocol) { + if (this.port == uri.port) { + return true; + } + var defaultPort = DEFAULT_PORTS[this.protocol]; + if (defaultPort && (this.port || defaultPort) == (uri.port || defaultPort)) { + return true; + } + } + return false; + }; + URI.prototype.toRelPath = function (base, path) { + var breakPoint = 0, out = '', i, l; + var normalizedBase = base.substring(0, base.lastIndexOf('/')).split('/'); + var items = path.split('/'); + if (normalizedBase.length >= items.length) { + for (i = 0, l = normalizedBase.length; i < l; i++) { + if (i >= items.length || normalizedBase[i] !== items[i]) { + breakPoint = i + 1; + break; + } + } + } + if (normalizedBase.length < items.length) { + for (i = 0, l = items.length; i < l; i++) { + if (i >= normalizedBase.length || normalizedBase[i] !== items[i]) { + breakPoint = i + 1; + break; + } + } + } + if (breakPoint === 1) { + return path; + } + for (i = 0, l = normalizedBase.length - (breakPoint - 1); i < l; i++) { + out += '../'; + } + for (i = breakPoint - 1, l = items.length; i < l; i++) { + if (i !== breakPoint - 1) { + out += '/' + items[i]; + } else { + out += items[i]; + } + } + return out; + }; + URI.prototype.toAbsPath = function (base, path) { + var i, nb = 0, o = [], outPath; + var tr = /\/$/.test(path) ? '/' : ''; + var normalizedBase = base.split('/'); + var normalizedPath = path.split('/'); + each$h(normalizedBase, function (k) { + if (k) { + o.push(k); + } + }); + normalizedBase = o; + for (i = normalizedPath.length - 1, o = []; i >= 0; i--) { + if (normalizedPath[i].length === 0 || normalizedPath[i] === '.') { + continue; + } + if (normalizedPath[i] === '..') { + nb++; + continue; + } + if (nb > 0) { + nb--; + continue; + } + o.push(normalizedPath[i]); + } + i = normalizedBase.length - nb; + if (i <= 0) { + outPath = reverse(o).join('/'); + } else { + outPath = normalizedBase.slice(0, i).join('/') + '/' + reverse(o).join('/'); + } + if (outPath.indexOf('/') !== 0) { + outPath = '/' + outPath; + } + if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) { + outPath += tr; + } + return outPath; + }; + URI.prototype.getURI = function (noProtoHost) { + if (noProtoHost === void 0) { + noProtoHost = false; + } + var s; + if (!this.source || noProtoHost) { + s = ''; + if (!noProtoHost) { + if (this.protocol) { + s += this.protocol + '://'; + } else { + s += '//'; + } + if (this.userInfo) { + s += this.userInfo + '@'; + } + if (this.host) { + s += this.host; + } + if (this.port) { + s += ':' + this.port; + } + } + if (this.path) { + s += this.path; + } + if (this.query) { + s += '?' + this.query; + } + if (this.anchor) { + s += '#' + this.anchor; + } + this.source = s; + } + return this.source; + }; + return URI; + }(); + + var DOM$9 = DOMUtils.DOM; + var extend$3 = Tools.extend, each$i = Tools.each; + var resolve$3 = Tools.resolve; + var ie$1 = Env.ie; + var Editor = function () { + function Editor(id, settings, editorManager) { + var _this = this; + this.plugins = {}; + this.contentCSS = []; + this.contentStyles = []; + this.loadedCSS = {}; + this.isNotDirty = false; + this.editorManager = editorManager; + this.documentBaseUrl = editorManager.documentBaseURL; + extend$3(this, EditorObservable); + this.settings = getEditorSettings(this, id, this.documentBaseUrl, editorManager.defaultSettings, settings); + if (this.settings.suffix) { + editorManager.suffix = this.settings.suffix; + } + this.suffix = editorManager.suffix; + if (this.settings.base_url) { + editorManager._setBaseUrl(this.settings.base_url); + } + this.baseUri = editorManager.baseURI; + if (this.settings.referrer_policy) { + ScriptLoader.ScriptLoader._setReferrerPolicy(this.settings.referrer_policy); + DOMUtils.DOM.styleSheetLoader._setReferrerPolicy(this.settings.referrer_policy); + } + AddOnManager.languageLoad = this.settings.language_load; + AddOnManager.baseURL = editorManager.baseURL; + this.id = id; + this.setDirty(false); + this.documentBaseURI = new URI(this.settings.document_base_url, { base_uri: this.baseUri }); + this.baseURI = this.baseUri; + this.inline = !!this.settings.inline; + this.shortcuts = new Shortcuts(this); + this.editorCommands = new EditorCommands(this); + if (this.settings.cache_suffix) { + Env.cacheSuffix = this.settings.cache_suffix.replace(/^[\?\&]+/, ''); + } + this.ui = { + registry: registry(), + styleSheetLoader: undefined, + show: noop, + hide: noop, + enable: noop, + disable: noop, + isDisabled: never + }; + var self = this; + var modeInstance = create$5(self); + this.mode = modeInstance; + this.setMode = modeInstance.set; + editorManager.fire('SetupEditor', { editor: this }); + this.execCallback('setup', this); + this.$ = DomQuery.overrideDefaults(function () { + return { + context: _this.inline ? _this.getBody() : _this.getDoc(), + element: _this.getBody() + }; + }); + } + Editor.prototype.render = function () { + render(this); + }; + Editor.prototype.focus = function (skipFocus) { + focus$1(this, skipFocus); + }; + Editor.prototype.hasFocus = function () { + return hasFocus$1(this); + }; + Editor.prototype.execCallback = function (name) { + var x = []; + for (var _i = 1; _i < arguments.length; _i++) { + x[_i - 1] = arguments[_i]; + } + var self = this; + var callback = self.settings[name], scope; + if (!callback) { + return; + } + if (self.callbackLookup && (scope = self.callbackLookup[name])) { + callback = scope.func; + scope = scope.scope; + } + if (typeof callback === 'string') { + scope = callback.replace(/\.\w+$/, ''); + scope = scope ? resolve$3(scope) : 0; + callback = resolve$3(callback); + self.callbackLookup = self.callbackLookup || {}; + self.callbackLookup[name] = { + func: callback, + scope: scope + }; + } + return callback.apply(scope || self, x); + }; + Editor.prototype.translate = function (text) { + return I18n.translate(text); + }; + Editor.prototype.getParam = function (name, defaultVal, type) { + return getParam(this, name, defaultVal, type); + }; + Editor.prototype.hasPlugin = function (name, loaded) { + var hasPlugin = contains(getPlugins(this).split(/[ ,]/), name); + if (hasPlugin) { + return loaded ? PluginManager.get(name) !== undefined : true; + } else { + return false; + } + }; + Editor.prototype.nodeChanged = function (args) { + this._nodeChangeDispatcher.nodeChanged(args); + }; + Editor.prototype.addCommand = function (name, callback, scope) { + this.editorCommands.addCommand(name, callback, scope); + }; + Editor.prototype.addQueryStateHandler = function (name, callback, scope) { + this.editorCommands.addQueryStateHandler(name, callback, scope); + }; + Editor.prototype.addQueryValueHandler = function (name, callback, scope) { + this.editorCommands.addQueryValueHandler(name, callback, scope); + }; + Editor.prototype.addShortcut = function (pattern, desc, cmdFunc, scope) { + this.shortcuts.add(pattern, desc, cmdFunc, scope); + }; + Editor.prototype.execCommand = function (cmd, ui, value, args) { + return this.editorCommands.execCommand(cmd, ui, value, args); + }; + Editor.prototype.queryCommandState = function (cmd) { + return this.editorCommands.queryCommandState(cmd); + }; + Editor.prototype.queryCommandValue = function (cmd) { + return this.editorCommands.queryCommandValue(cmd); + }; + Editor.prototype.queryCommandSupported = function (cmd) { + return this.editorCommands.queryCommandSupported(cmd); + }; + Editor.prototype.show = function () { + var self = this; + if (self.hidden) { + self.hidden = false; + if (self.inline) { + self.getBody().contentEditable = 'true'; + } else { + DOM$9.show(self.getContainer()); + DOM$9.hide(self.id); + } + self.load(); + self.fire('show'); + } + }; + Editor.prototype.hide = function () { + var self = this, doc = self.getDoc(); + if (!self.hidden) { + if (ie$1 && doc && !self.inline) { + doc.execCommand('SelectAll'); + } + self.save(); + if (self.inline) { + self.getBody().contentEditable = 'false'; + if (self === self.editorManager.focusedEditor) { + self.editorManager.focusedEditor = null; + } + } else { + DOM$9.hide(self.getContainer()); + DOM$9.setStyle(self.id, 'display', self.orgDisplay); + } + self.hidden = true; + self.fire('hide'); + } + }; + Editor.prototype.isHidden = function () { + return !!this.hidden; + }; + Editor.prototype.setProgressState = function (state, time) { + this.fire('ProgressState', { + state: state, + time: time + }); + }; + Editor.prototype.load = function (args) { + var self = this; + var elm = self.getElement(), html; + if (self.removed) { + return ''; + } + if (elm) { + args = args || {}; + args.load = true; + var value = isTextareaOrInput(elm) ? elm.value : elm.innerHTML; + html = self.setContent(value, args); + args.element = elm; + if (!args.no_events) { + self.fire('LoadContent', args); + } + args.element = elm = null; + return html; + } + }; + Editor.prototype.save = function (args) { + var self = this; + var elm = self.getElement(), html, form; + if (!elm || !self.initialized || self.removed) { + return; + } + args = args || {}; + args.save = true; + args.element = elm; + html = args.content = self.getContent(args); + if (!args.no_events) { + self.fire('SaveContent', args); + } + if (args.format === 'raw') { + self.fire('RawSaveContent', args); + } + html = args.content; + if (!isTextareaOrInput(elm)) { + if (args.is_removing || !self.inline) { + elm.innerHTML = html; + } + if (form = DOM$9.getParent(self.id, 'form')) { + each$i(form.elements, function (elm) { + if (elm.name === self.id) { + elm.value = html; + return false; + } + }); + } + } else { + elm.value = html; + } + args.element = elm = null; + if (args.set_dirty !== false) { + self.setDirty(false); + } + return html; + }; + Editor.prototype.setContent = function (content, args) { + return setContent$2(this, content, args); + }; + Editor.prototype.getContent = function (args) { + return getContent$2(this, args); + }; + Editor.prototype.insertContent = function (content, args) { + if (args) { + content = extend$3({ content: content }, args); + } + this.execCommand('mceInsertContent', false, content); + }; + Editor.prototype.resetContent = function (initialContent) { + if (initialContent === undefined) { + setContent$2(this, this.startContent, { format: 'raw' }); + } else { + setContent$2(this, initialContent); + } + this.undoManager.reset(); + this.setDirty(false); + this.nodeChanged(); + }; + Editor.prototype.isDirty = function () { + return !this.isNotDirty; + }; + Editor.prototype.setDirty = function (state) { + var oldState = !this.isNotDirty; + this.isNotDirty = !state; + if (state && state !== oldState) { + this.fire('dirty'); + } + }; + Editor.prototype.getContainer = function () { + var self = this; + if (!self.container) { + self.container = DOM$9.get(self.editorContainer || self.id + '_parent'); + } + return self.container; + }; + Editor.prototype.getContentAreaContainer = function () { + return this.contentAreaContainer; + }; + Editor.prototype.getElement = function () { + if (!this.targetElm) { + this.targetElm = DOM$9.get(this.id); + } + return this.targetElm; + }; + Editor.prototype.getWin = function () { + var self = this; + var elm; + if (!self.contentWindow) { + elm = self.iframeElement; + if (elm) { + self.contentWindow = elm.contentWindow; + } + } + return self.contentWindow; + }; + Editor.prototype.getDoc = function () { + var self = this; + var win; + if (!self.contentDocument) { + win = self.getWin(); + if (win) { + self.contentDocument = win.document; + } + } + return self.contentDocument; + }; + Editor.prototype.getBody = function () { + var doc = this.getDoc(); + return this.bodyElement || (doc ? doc.body : null); + }; + Editor.prototype.convertURL = function (url, name, elm) { + var self = this, settings = self.settings; + if (settings.urlconverter_callback) { + return self.execCallback('urlconverter_callback', url, elm, true, name); + } + if (!settings.convert_urls || elm && elm.nodeName === 'LINK' || url.indexOf('file:') === 0 || url.length === 0) { + return url; + } + if (settings.relative_urls) { + return self.documentBaseURI.toRelative(url); + } + url = self.documentBaseURI.toAbsolute(url, settings.remove_script_host); + return url; + }; + Editor.prototype.addVisual = function (elm) { + addVisual$1(this, elm); + }; + Editor.prototype.remove = function () { + remove$7(this); + }; + Editor.prototype.destroy = function (automatic) { + destroy(this, automatic); + }; + Editor.prototype.uploadImages = function (callback) { + return this.editorUpload.uploadImages(callback); + }; + Editor.prototype._scanForImages = function () { + return this.editorUpload.scanForImages(); + }; + Editor.prototype.addButton = function () { + throw new Error('editor.addButton has been removed in tinymce 5x, use editor.ui.registry.addButton or editor.ui.registry.addToggleButton or editor.ui.registry.addSplitButton instead'); + }; + Editor.prototype.addSidebar = function () { + throw new Error('editor.addSidebar has been removed in tinymce 5x, use editor.ui.registry.addSidebar instead'); + }; + Editor.prototype.addMenuItem = function () { + throw new Error('editor.addMenuItem has been removed in tinymce 5x, use editor.ui.registry.addMenuItem instead'); + }; + Editor.prototype.addContextToolbar = function () { + throw new Error('editor.addContextToolbar has been removed in tinymce 5x, use editor.ui.registry.addContextToolbar instead'); + }; + return Editor; + }(); + + var DOM$a = DOMUtils.DOM; + var explode$4 = Tools.explode, each$j = Tools.each, extend$4 = Tools.extend; + var instanceCounter = 0, boundGlobalEvents = false; + var beforeUnloadDelegate; + var legacyEditors = []; + var editors = []; + var isValidLegacyKey = function (id) { + return id !== 'length'; + }; + var globalEventDelegate = function (e) { + var type = e.type; + each$j(EditorManager.get(), function (editor) { + switch (type) { + case 'scroll': + editor.fire('ScrollWindow', e); + break; + case 'resize': + editor.fire('ResizeWindow', e); + break; + } + }); + }; + var toggleGlobalEvents = function (state) { + if (state !== boundGlobalEvents) { + if (state) { + DomQuery(window).on('resize scroll', globalEventDelegate); + } else { + DomQuery(window).off('resize scroll', globalEventDelegate); + } + boundGlobalEvents = state; + } + }; + var removeEditorFromList = function (targetEditor) { + var oldEditors = editors; + delete legacyEditors[targetEditor.id]; + for (var i = 0; i < legacyEditors.length; i++) { + if (legacyEditors[i] === targetEditor) { + legacyEditors.splice(i, 1); + break; + } + } + editors = filter(editors, function (editor) { + return targetEditor !== editor; + }); + if (EditorManager.activeEditor === targetEditor) { + EditorManager.activeEditor = editors.length > 0 ? editors[0] : null; + } + if (EditorManager.focusedEditor === targetEditor) { + EditorManager.focusedEditor = null; + } + return oldEditors.length !== editors.length; + }; + var purgeDestroyedEditor = function (editor) { + if (editor && editor.initialized && !(editor.getContainer() || editor.getBody()).parentNode) { + removeEditorFromList(editor); + editor.unbindAllNativeEvents(); + editor.destroy(true); + editor.removed = true; + editor = null; + } + return editor; + }; + var isQuirksMode = document.compatMode !== 'CSS1Compat'; + var EditorManager = __assign(__assign({}, Observable), { + baseURI: null, + baseURL: null, + defaultSettings: {}, + documentBaseURL: null, + suffix: null, + $: DomQuery, + majorVersion: '5', + minorVersion: '8.2', + releaseDate: '2021-06-23', + editors: legacyEditors, + i18n: I18n, + activeEditor: null, + focusedEditor: null, + settings: {}, + setup: function () { + var self = this; + var baseURL, documentBaseURL, suffix = ''; + documentBaseURL = URI.getDocumentBaseUrl(document.location); + if (/^[^:]+:\/\/\/?[^\/]+\//.test(documentBaseURL)) { + documentBaseURL = documentBaseURL.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, ''); + if (!/[\/\\]$/.test(documentBaseURL)) { + documentBaseURL += '/'; + } + } + var preInit = window.tinymce || window.tinyMCEPreInit; + if (preInit) { + baseURL = preInit.base || preInit.baseURL; + suffix = preInit.suffix; + } else { + var scripts = document.getElementsByTagName('script'); + for (var i = 0; i < scripts.length; i++) { + var src = scripts[i].src || ''; + if (src === '') { + continue; + } + var srcScript = src.substring(src.lastIndexOf('/')); + if (/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(src)) { + if (srcScript.indexOf('.min') !== -1) { + suffix = '.min'; + } + baseURL = src.substring(0, src.lastIndexOf('/')); + break; + } + } + if (!baseURL && document.currentScript) { + var src = document.currentScript.src; + if (src.indexOf('.min') !== -1) { + suffix = '.min'; + } + baseURL = src.substring(0, src.lastIndexOf('/')); + } + } + self.baseURL = new URI(documentBaseURL).toAbsolute(baseURL); + self.documentBaseURL = documentBaseURL; + self.baseURI = new URI(self.baseURL); + self.suffix = suffix; + setup$2(self); + }, + overrideDefaults: function (defaultSettings) { + var baseUrl = defaultSettings.base_url; + if (baseUrl) { + this._setBaseUrl(baseUrl); + } + var suffix = defaultSettings.suffix; + if (defaultSettings.suffix) { + this.suffix = suffix; + } + this.defaultSettings = defaultSettings; + var pluginBaseUrls = defaultSettings.plugin_base_urls; + if (pluginBaseUrls !== undefined) { + each$1(pluginBaseUrls, function (pluginBaseUrl, pluginName) { + AddOnManager.PluginManager.urls[pluginName] = pluginBaseUrl; + }); + } + }, + init: function (settings) { + var self = this; + var result; + var invalidInlineTargets = Tools.makeMap('area base basefont br col frame hr img input isindex link meta param embed source wbr track ' + 'colgroup option table tbody tfoot thead tr th td script noscript style textarea video audio iframe object menu', ' '); + var isInvalidInlineTarget = function (settings, elm) { + return settings.inline && elm.tagName.toLowerCase() in invalidInlineTargets; + }; + var createId = function (elm) { + var id = elm.id; + if (!id) { + id = get$1(elm, 'name').filter(function (name) { + return !DOM$a.get(name); + }).getOrThunk(DOM$a.uniqueId); + elm.setAttribute('id', id); + } + return id; + }; + var execCallback = function (name) { + var callback = settings[name]; + if (!callback) { + return; + } + return callback.apply(self, []); + }; + var hasClass = function (elm, className) { + return className.constructor === RegExp ? className.test(elm.className) : DOM$a.hasClass(elm, className); + }; + var findTargets = function (settings) { + var targets = []; + if (Env.browser.isIE() && Env.browser.version.major < 11) { + initError('TinyMCE does not support the browser you are using. For a list of supported' + ' browsers please see: https://www.tinymce.com/docs/get-started/system-requirements/'); + return []; + } else if (isQuirksMode) { + initError('Failed to initialize the editor as the document is not in standards mode. ' + 'TinyMCE requires standards mode.'); + return []; + } + if (settings.types) { + each$j(settings.types, function (type) { + targets = targets.concat(DOM$a.select(type.selector)); + }); + return targets; + } else if (settings.selector) { + return DOM$a.select(settings.selector); + } else if (settings.target) { + return [settings.target]; + } + switch (settings.mode) { + case 'exact': + var l = settings.elements || ''; + if (l.length > 0) { + each$j(explode$4(l), function (id) { + var elm = DOM$a.get(id); + if (elm) { + targets.push(elm); + } else { + each$j(document.forms, function (f) { + each$j(f.elements, function (e) { + if (e.name === id) { + id = 'mce_editor_' + instanceCounter++; + DOM$a.setAttrib(e, 'id', id); + targets.push(e); + } + }); + }); + } + }); + } + break; + case 'textareas': + case 'specific_textareas': + each$j(DOM$a.select('textarea'), function (elm) { + if (settings.editor_deselector && hasClass(elm, settings.editor_deselector)) { + return; + } + if (!settings.editor_selector || hasClass(elm, settings.editor_selector)) { + targets.push(elm); + } + }); + break; + } + return targets; + }; + var provideResults = function (editors) { + result = editors; + }; + var initEditors = function () { + var initCount = 0; + var editors = []; + var targets; + var createEditor = function (id, settings, targetElm) { + var editor = new Editor(id, settings, self); + editors.push(editor); + editor.on('init', function () { + if (++initCount === targets.length) { + provideResults(editors); + } + }); + editor.targetElm = editor.targetElm || targetElm; + editor.render(); + }; + DOM$a.unbind(window, 'ready', initEditors); + execCallback('onpageload'); + targets = DomQuery.unique(findTargets(settings)); + if (settings.types) { + each$j(settings.types, function (type) { + Tools.each(targets, function (elm) { + if (DOM$a.is(elm, type.selector)) { + createEditor(createId(elm), extend$4({}, settings, type), elm); + return false; + } + return true; + }); + }); + return; + } + Tools.each(targets, function (elm) { + purgeDestroyedEditor(self.get(elm.id)); + }); + targets = Tools.grep(targets, function (elm) { + return !self.get(elm.id); + }); + if (targets.length === 0) { + provideResults([]); + } else { + each$j(targets, function (elm) { + if (isInvalidInlineTarget(settings, elm)) { + initError('Could not initialize inline editor on invalid inline target element', elm); + } else { + createEditor(createId(elm), settings, elm); + } + }); + } + }; + self.settings = settings; + DOM$a.bind(window, 'ready', initEditors); + return new promiseObj(function (resolve) { + if (result) { + resolve(result); + } else { + provideResults = function (editors) { + resolve(editors); + }; + } + }); + }, + get: function (id) { + if (arguments.length === 0) { + return editors.slice(0); + } else if (isString(id)) { + return find(editors, function (editor) { + return editor.id === id; + }).getOr(null); + } else if (isNumber(id)) { + return editors[id] ? editors[id] : null; + } else { + return null; + } + }, + add: function (editor) { + var self = this; + var existingEditor = legacyEditors[editor.id]; + if (existingEditor === editor) { + return editor; + } + if (self.get(editor.id) === null) { + if (isValidLegacyKey(editor.id)) { + legacyEditors[editor.id] = editor; + } + legacyEditors.push(editor); + editors.push(editor); + } + toggleGlobalEvents(true); + self.activeEditor = editor; + self.fire('AddEditor', { editor: editor }); + if (!beforeUnloadDelegate) { + beforeUnloadDelegate = function (e) { + var event = self.fire('BeforeUnload'); + if (event.returnValue) { + e.preventDefault(); + e.returnValue = event.returnValue; + return event.returnValue; + } + }; + window.addEventListener('beforeunload', beforeUnloadDelegate); + } + return editor; + }, + createEditor: function (id, settings) { + return this.add(new Editor(id, settings, this)); + }, + remove: function (selector) { + var self = this; + var i, editor; + if (!selector) { + for (i = editors.length - 1; i >= 0; i--) { + self.remove(editors[i]); + } + return; + } + if (isString(selector)) { + each$j(DOM$a.select(selector), function (elm) { + editor = self.get(elm.id); + if (editor) { + self.remove(editor); + } + }); + return; + } + editor = selector; + if (isNull(self.get(editor.id))) { + return null; + } + if (removeEditorFromList(editor)) { + self.fire('RemoveEditor', { editor: editor }); + } + if (editors.length === 0) { + window.removeEventListener('beforeunload', beforeUnloadDelegate); + } + editor.remove(); + toggleGlobalEvents(editors.length > 0); + return editor; + }, + execCommand: function (cmd, ui, value) { + var self = this, editor = self.get(value); + switch (cmd) { + case 'mceAddEditor': + if (!self.get(value)) { + new Editor(value, self.settings, self).render(); + } + return true; + case 'mceRemoveEditor': + if (editor) { + editor.remove(); + } + return true; + case 'mceToggleEditor': + if (!editor) { + self.execCommand('mceAddEditor', false, value); + return true; + } + if (editor.isHidden()) { + editor.show(); + } else { + editor.hide(); + } + return true; + } + if (self.activeEditor) { + return self.activeEditor.execCommand(cmd, ui, value); + } + return false; + }, + triggerSave: function () { + each$j(editors, function (editor) { + editor.save(); + }); + }, + addI18n: function (code, items) { + I18n.add(code, items); + }, + translate: function (text) { + return I18n.translate(text); + }, + setActive: function (editor) { + var activeEditor = this.activeEditor; + if (this.activeEditor !== editor) { + if (activeEditor) { + activeEditor.fire('deactivate', { relatedTarget: editor }); + } + editor.fire('activate', { relatedTarget: activeEditor }); + } + this.activeEditor = editor; + }, + _setBaseUrl: function (baseUrl) { + this.baseURL = new URI(this.documentBaseURL).toAbsolute(baseUrl.replace(/\/+$/, '')); + this.baseURI = new URI(this.baseURL); + } + }); + EditorManager.setup(); + + var min = Math.min, max = Math.max, round$1 = Math.round; + var relativePosition = function (rect, targetRect, rel) { + var x = targetRect.x; + var y = targetRect.y; + var w = rect.w; + var h = rect.h; + var targetW = targetRect.w; + var targetH = targetRect.h; + var relChars = (rel || '').split(''); + if (relChars[0] === 'b') { + y += targetH; + } + if (relChars[1] === 'r') { + x += targetW; + } + if (relChars[0] === 'c') { + y += round$1(targetH / 2); + } + if (relChars[1] === 'c') { + x += round$1(targetW / 2); + } + if (relChars[3] === 'b') { + y -= h; + } + if (relChars[4] === 'r') { + x -= w; + } + if (relChars[3] === 'c') { + y -= round$1(h / 2); + } + if (relChars[4] === 'c') { + x -= round$1(w / 2); + } + return create$7(x, y, w, h); + }; + var findBestRelativePosition = function (rect, targetRect, constrainRect, rels) { + var pos, i; + for (i = 0; i < rels.length; i++) { + pos = relativePosition(rect, targetRect, rels[i]); + if (pos.x >= constrainRect.x && pos.x + pos.w <= constrainRect.w + constrainRect.x && pos.y >= constrainRect.y && pos.y + pos.h <= constrainRect.h + constrainRect.y) { + return rels[i]; + } + } + return null; + }; + var inflate = function (rect, w, h) { + return create$7(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2); + }; + var intersect = function (rect, cropRect) { + var x1 = max(rect.x, cropRect.x); + var y1 = max(rect.y, cropRect.y); + var x2 = min(rect.x + rect.w, cropRect.x + cropRect.w); + var y2 = min(rect.y + rect.h, cropRect.y + cropRect.h); + if (x2 - x1 < 0 || y2 - y1 < 0) { + return null; + } + return create$7(x1, y1, x2 - x1, y2 - y1); + }; + var clamp$1 = function (rect, clampRect, fixedSize) { + var x1 = rect.x; + var y1 = rect.y; + var x2 = rect.x + rect.w; + var y2 = rect.y + rect.h; + var cx2 = clampRect.x + clampRect.w; + var cy2 = clampRect.y + clampRect.h; + var underflowX1 = max(0, clampRect.x - x1); + var underflowY1 = max(0, clampRect.y - y1); + var overflowX2 = max(0, x2 - cx2); + var overflowY2 = max(0, y2 - cy2); + x1 += underflowX1; + y1 += underflowY1; + if (fixedSize) { + x2 += underflowX1; + y2 += underflowY1; + x1 -= overflowX2; + y1 -= overflowY2; + } + x2 -= overflowX2; + y2 -= overflowY2; + return create$7(x1, y1, x2 - x1, y2 - y1); + }; + var create$7 = function (x, y, w, h) { + return { + x: x, + y: y, + w: w, + h: h + }; + }; + var fromClientRect = function (clientRect) { + return create$7(clientRect.left, clientRect.top, clientRect.width, clientRect.height); + }; + var Rect = { + inflate: inflate, + relativePosition: relativePosition, + findBestRelativePosition: findBestRelativePosition, + intersect: intersect, + clamp: clamp$1, + create: create$7, + fromClientRect: fromClientRect + }; + + var awaiter = function (resolveCb, rejectCb, timeout) { + if (timeout === void 0) { + timeout = 1000; + } + var done = false; + var timer = null; + var complete = function (completer) { + return function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (!done) { + done = true; + if (timer !== null) { + clearTimeout(timer); + timer = null; + } + completer.apply(null, args); + } + }; + }; + var resolve = complete(resolveCb); + var reject = complete(rejectCb); + var start = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (!done && timer === null) { + timer = setTimeout(function () { + return reject.apply(null, args); + }, timeout); + } + }; + return { + start: start, + resolve: resolve, + reject: reject + }; + }; + var create$8 = function () { + var tasks = {}; + var resultFns = {}; + var load = function (id, url) { + var loadErrMsg = 'Script at URL "' + url + '" failed to load'; + var runErrMsg = 'Script at URL "' + url + '" did not call `tinymce.Resource.add(\'' + id + '\', data)` within 1 second'; + if (tasks[id] !== undefined) { + return tasks[id]; + } else { + var task = new promiseObj(function (resolve, reject) { + var waiter = awaiter(resolve, reject); + resultFns[id] = waiter.resolve; + ScriptLoader.ScriptLoader.loadScript(url, function () { + return waiter.start(runErrMsg); + }, function () { + return waiter.reject(loadErrMsg); + }); + }); + tasks[id] = task; + return task; + } + }; + var add = function (id, data) { + if (resultFns[id] !== undefined) { + resultFns[id](data); + delete resultFns[id]; + } + tasks[id] = promiseObj.resolve(data); + }; + return { + load: load, + add: add + }; + }; + var Resource = create$8(); + + var each$k = Tools.each, extend$5 = Tools.extend; + var extendClass, initializing; + var Class = function () { + }; + Class.extend = extendClass = function (props) { + var self = this; + var _super = self.prototype; + var Class = function () { + var i, mixins, mixin; + var self = this; + if (!initializing) { + if (self.init) { + self.init.apply(self, arguments); + } + mixins = self.Mixins; + if (mixins) { + i = mixins.length; + while (i--) { + mixin = mixins[i]; + if (mixin.init) { + mixin.init.apply(self, arguments); + } + } + } + } + }; + var dummy = function () { + return this; + }; + var createMethod = function (name, fn) { + return function () { + var self = this; + var tmp = self._super; + self._super = _super[name]; + var ret = fn.apply(self, arguments); + self._super = tmp; + return ret; + }; + }; + initializing = true; + var prototype = new self(); + initializing = false; + if (props.Mixins) { + each$k(props.Mixins, function (mixin) { + for (var name_1 in mixin) { + if (name_1 !== 'init') { + props[name_1] = mixin[name_1]; + } + } + }); + if (_super.Mixins) { + props.Mixins = _super.Mixins.concat(props.Mixins); + } + } + if (props.Methods) { + each$k(props.Methods.split(','), function (name) { + props[name] = dummy; + }); + } + if (props.Properties) { + each$k(props.Properties.split(','), function (name) { + var fieldName = '_' + name; + props[name] = function (value) { + var self = this; + if (value !== undefined) { + self[fieldName] = value; + return self; + } + return self[fieldName]; + }; + }); + } + if (props.Statics) { + each$k(props.Statics, function (func, name) { + Class[name] = func; + }); + } + if (props.Defaults && _super.Defaults) { + props.Defaults = extend$5({}, _super.Defaults, props.Defaults); + } + each$1(props, function (member, name) { + if (typeof member === 'function' && _super[name]) { + prototype[name] = createMethod(name, member); + } else { + prototype[name] = member; + } + }); + Class.prototype = prototype; + Class.constructor = Class; + Class.extend = extendClass; + return Class; + }; + + var min$1 = Math.min, max$1 = Math.max, round$2 = Math.round; + var Color = function (value) { + var self = {}; + var r = 0, g = 0, b = 0; + var rgb2hsv = function (r, g, b) { + var h, s, v; + h = 0; + s = 0; + v = 0; + r = r / 255; + g = g / 255; + b = b / 255; + var minRGB = min$1(r, min$1(g, b)); + var maxRGB = max$1(r, max$1(g, b)); + if (minRGB === maxRGB) { + v = minRGB; + return { + h: 0, + s: 0, + v: v * 100 + }; + } + var d = r === minRGB ? g - b : b === minRGB ? r - g : b - r; + h = r === minRGB ? 3 : b === minRGB ? 1 : 5; + h = 60 * (h - d / (maxRGB - minRGB)); + s = (maxRGB - minRGB) / maxRGB; + v = maxRGB; + return { + h: round$2(h), + s: round$2(s * 100), + v: round$2(v * 100) + }; + }; + var hsvToRgb = function (hue, saturation, brightness) { + hue = (parseInt(hue, 10) || 0) % 360; + saturation = parseInt(saturation, 10) / 100; + brightness = parseInt(brightness, 10) / 100; + saturation = max$1(0, min$1(saturation, 1)); + brightness = max$1(0, min$1(brightness, 1)); + if (saturation === 0) { + r = g = b = round$2(255 * brightness); + return; + } + var side = hue / 60; + var chroma = brightness * saturation; + var x = chroma * (1 - Math.abs(side % 2 - 1)); + var match = brightness - chroma; + switch (Math.floor(side)) { + case 0: + r = chroma; + g = x; + b = 0; + break; + case 1: + r = x; + g = chroma; + b = 0; + break; + case 2: + r = 0; + g = chroma; + b = x; + break; + case 3: + r = 0; + g = x; + b = chroma; + break; + case 4: + r = x; + g = 0; + b = chroma; + break; + case 5: + r = chroma; + g = 0; + b = x; + break; + default: + r = g = b = 0; + } + r = round$2(255 * (r + match)); + g = round$2(255 * (g + match)); + b = round$2(255 * (b + match)); + }; + var toHex = function () { + var hex = function (val) { + val = parseInt(val, 10).toString(16); + return val.length > 1 ? val : '0' + val; + }; + return '#' + hex(r) + hex(g) + hex(b); + }; + var toRgb = function () { + return { + r: r, + g: g, + b: b + }; + }; + var toHsv = function () { + return rgb2hsv(r, g, b); + }; + var parse = function (value) { + var matches; + if (typeof value === 'object') { + if ('r' in value) { + r = value.r; + g = value.g; + b = value.b; + } else if ('v' in value) { + hsvToRgb(value.h, value.s, value.v); + } + } else { + if (matches = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)[^\)]*\)/gi.exec(value)) { + r = parseInt(matches[1], 10); + g = parseInt(matches[2], 10); + b = parseInt(matches[3], 10); + } else if (matches = /#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(value)) { + r = parseInt(matches[1], 16); + g = parseInt(matches[2], 16); + b = parseInt(matches[3], 16); + } else if (matches = /#([0-F])([0-F])([0-F])/gi.exec(value)) { + r = parseInt(matches[1] + matches[1], 16); + g = parseInt(matches[2] + matches[2], 16); + b = parseInt(matches[3] + matches[3], 16); + } + } + r = r < 0 ? 0 : r > 255 ? 255 : r; + g = g < 0 ? 0 : g > 255 ? 255 : g; + b = b < 0 ? 0 : b > 255 ? 255 : b; + return self; + }; + if (value) { + parse(value); + } + self.toRgb = toRgb; + self.toHsv = toHsv; + self.toHex = toHex; + self.parse = parse; + return self; + }; + + var serialize = function (obj) { + var data = JSON.stringify(obj); + if (!isString(data)) { + return data; + } + return data.replace(/[\u0080-\uFFFF]/g, function (match) { + var hexCode = match.charCodeAt(0).toString(16); + return '\\u' + '0000'.substring(hexCode.length) + hexCode; + }); + }; + var JSONUtils = { + serialize: serialize, + parse: function (text) { + try { + return JSON.parse(text); + } catch (ex) { + } + } + }; + + var JSONP = { + callbacks: {}, + count: 0, + send: function (settings) { + var self = this, dom = DOMUtils.DOM, count = settings.count !== undefined ? settings.count : self.count; + var id = 'tinymce_jsonp_' + count; + self.callbacks[count] = function (json) { + dom.remove(id); + delete self.callbacks[count]; + settings.callback(json); + }; + dom.add(dom.doc.body, 'script', { + id: id, + src: settings.url, + type: 'text/javascript' + }); + self.count++; + } + }; + + var XHR = __assign(__assign({}, Observable), { + send: function (settings) { + var xhr, count = 0; + var ready = function () { + if (!settings.async || xhr.readyState === 4 || count++ > 10000) { + if (settings.success && count < 10000 && xhr.status === 200) { + settings.success.call(settings.success_scope, '' + xhr.responseText, xhr, settings); + } else if (settings.error) { + settings.error.call(settings.error_scope, count > 10000 ? 'TIMED_OUT' : 'GENERAL', xhr, settings); + } + xhr = null; + } else { + Delay.setTimeout(ready, 10); + } + }; + settings.scope = settings.scope || this; + settings.success_scope = settings.success_scope || settings.scope; + settings.error_scope = settings.error_scope || settings.scope; + settings.async = settings.async !== false; + settings.data = settings.data || ''; + XHR.fire('beforeInitialize', { settings: settings }); + xhr = new XMLHttpRequest(); + if (xhr.overrideMimeType) { + xhr.overrideMimeType(settings.content_type); + } + xhr.open(settings.type || (settings.data ? 'POST' : 'GET'), settings.url, settings.async); + if (settings.crossDomain) { + xhr.withCredentials = true; + } + if (settings.content_type) { + xhr.setRequestHeader('Content-Type', settings.content_type); + } + if (settings.requestheaders) { + Tools.each(settings.requestheaders, function (header) { + xhr.setRequestHeader(header.key, header.value); + }); + } + xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + xhr = XHR.fire('beforeSend', { + xhr: xhr, + settings: settings + }).xhr; + xhr.send(settings.data); + if (!settings.async) { + return ready(); + } + Delay.setTimeout(ready, 10); + } + }); + + var extend$6 = Tools.extend; + var JSONRequest = function () { + function JSONRequest(settings) { + this.settings = extend$6({}, settings); + this.count = 0; + } + JSONRequest.sendRPC = function (o) { + return new JSONRequest().send(o); + }; + JSONRequest.prototype.send = function (args) { + var ecb = args.error, scb = args.success; + var xhrArgs = extend$6(this.settings, args); + xhrArgs.success = function (c, x) { + c = JSONUtils.parse(c); + if (typeof c === 'undefined') { + c = { error: 'JSON Parse error.' }; + } + if (c.error) { + ecb.call(xhrArgs.error_scope || xhrArgs.scope, c.error, x); + } else { + scb.call(xhrArgs.success_scope || xhrArgs.scope, c.result); + } + }; + xhrArgs.error = function (ty, x) { + if (ecb) { + ecb.call(xhrArgs.error_scope || xhrArgs.scope, ty, x); + } + }; + xhrArgs.data = JSONUtils.serialize({ + id: args.id || 'c' + this.count++, + method: args.method, + params: args.params + }); + xhrArgs.content_type = 'application/json'; + XHR.send(xhrArgs); + }; + return JSONRequest; + }(); + + var create$9 = function () { + return function () { + var data = {}; + var keys = []; + var storage = { + getItem: function (key) { + var item = data[key]; + return item ? item : null; + }, + setItem: function (key, value) { + keys.push(key); + data[key] = String(value); + }, + key: function (index) { + return keys[index]; + }, + removeItem: function (key) { + keys = keys.filter(function (k) { + return k === key; + }); + delete data[key]; + }, + clear: function () { + keys = []; + data = {}; + }, + length: 0 + }; + Object.defineProperty(storage, 'length', { + get: function () { + return keys.length; + }, + configurable: false, + enumerable: false + }); + return storage; + }(); + }; + + var localStorage; + try { + var test = '__storage_test__'; + localStorage = window.localStorage; + localStorage.setItem(test, test); + localStorage.removeItem(test); + } catch (e) { + localStorage = create$9(); + } + var LocalStorage = localStorage; + + var publicApi = { + geom: { Rect: Rect }, + util: { + Promise: promiseObj, + Delay: Delay, + Tools: Tools, + VK: VK, + URI: URI, + Class: Class, + EventDispatcher: EventDispatcher, + Observable: Observable, + I18n: I18n, + XHR: XHR, + JSON: JSONUtils, + JSONRequest: JSONRequest, + JSONP: JSONP, + LocalStorage: LocalStorage, + Color: Color, + ImageUploader: ImageUploader + }, + dom: { + EventUtils: EventUtils, + Sizzle: Sizzle, + DomQuery: DomQuery, + TreeWalker: DomTreeWalker, + TextSeeker: TextSeeker, + DOMUtils: DOMUtils, + ScriptLoader: ScriptLoader, + RangeUtils: RangeUtils, + Serializer: DomSerializer, + StyleSheetLoader: StyleSheetLoader, + ControlSelection: ControlSelection, + BookmarkManager: BookmarkManager, + Selection: EditorSelection, + Event: EventUtils.Event + }, + html: { + Styles: Styles, + Entities: Entities, + Node: AstNode, + Schema: Schema, + SaxParser: SaxParser, + DomParser: DomParser, + Writer: Writer, + Serializer: HtmlSerializer + }, + Env: Env, + AddOnManager: AddOnManager, + Annotator: Annotator, + Formatter: Formatter, + UndoManager: UndoManager, + EditorCommands: EditorCommands, + WindowManager: WindowManager, + NotificationManager: NotificationManager, + EditorObservable: EditorObservable, + Shortcuts: Shortcuts, + Editor: Editor, + FocusManager: FocusManager, + EditorManager: EditorManager, + DOM: DOMUtils.DOM, + ScriptLoader: ScriptLoader.ScriptLoader, + PluginManager: PluginManager, + ThemeManager: ThemeManager, + IconManager: IconManager, + Resource: Resource, + trim: Tools.trim, + isArray: Tools.isArray, + is: Tools.is, + toArray: Tools.toArray, + makeMap: Tools.makeMap, + each: Tools.each, + map: Tools.map, + grep: Tools.grep, + inArray: Tools.inArray, + extend: Tools.extend, + create: Tools.create, + walk: Tools.walk, + createNS: Tools.createNS, + resolve: Tools.resolve, + explode: Tools.explode, + _addCacheSuffix: Tools._addCacheSuffix, + isOpera: Env.opera, + isWebKit: Env.webkit, + isIE: Env.ie, + isGecko: Env.gecko, + isMac: Env.mac + }; + var tinymce = Tools.extend(EditorManager, publicApi); + + var exportToModuleLoaders = function (tinymce) { + if (typeof module === 'object') { + try { + module.exports = tinymce; + } catch (_) { + } + } + }; + var exportToWindowGlobal = function (tinymce) { + window.tinymce = tinymce; + window.tinyMCE = tinymce; + }; + exportToWindowGlobal(tinymce); + exportToModuleLoaders(tinymce); + +}()); + + + diff --git a/public/assets/tinymce-213f84c2ea0b76dbe066217672caec97a8f3e296895064f010ae89541df69849.js.gz b/public/assets/tinymce-213f84c2ea0b76dbe066217672caec97a8f3e296895064f010ae89541df69849.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..ec6707c6f84a2675c6ce9d1bdad4aa0e8eb37427 GIT binary patch literal 213272 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

    PO`=g~+}{MlZnGf+iB#|q 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

    %mXs<3V7zRHcBTps;sl{+}9A*LZ< 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',"action-next":'',"action-prev":'',"align-center":'',"align-justify":'',"align-left":'',"align-none":'',"align-right":'',"arrow-left":'',"arrow-right":'',bold:'',bookmark:'',"border-width":'',brightness:'',browse:'',cancel:'',"change-case":'',"character-count":'',"checklist-rtl":'',checklist:'',checkmark:'',"chevron-down":'',"chevron-left":'',"chevron-right":'',"chevron-up":'',close:'',"code-sample":'',"color-levels":'',"color-picker":'',"color-swatch-remove-color":'',"color-swatch":'',"comment-add":'',comment:'',contrast:'',copy:'',crop:'',"cut-column":'',"cut-row":'',cut:'',"document-properties":'',drag:'',"duplicate-column":'',"duplicate-row":'',duplicate:'',"edit-block":'',"edit-image":'',"embed-page":'',embed:'',emoji:'',"export":'',fill:'',"flip-horizontally":'',"flip-vertically":'',"format-painter":'',format:'',fullscreen:'',gallery:'',gamma:'',help:'',"highlight-bg-color":'',home:'',"horizontal-rule":'',"image-options":'',image:'',indent:'',info:'',"insert-character":'',"insert-time":'',invert:'',italic:'',"line-height":'',line:'',link:'',"list-bull-circle":'',"list-bull-default":'',"list-bull-square":'',"list-num-default-rtl":'',"list-num-default":'',"list-num-lower-alpha-rtl":'',"list-num-lower-alpha":'',"list-num-lower-greek-rtl":'',"list-num-lower-greek":'',"list-num-lower-roman-rtl":'',"list-num-lower-roman":'',"list-num-upper-alpha-rtl":'',"list-num-upper-alpha":'',"list-num-upper-roman-rtl":'',"list-num-upper-roman":'',lock:'',ltr:'',"more-drawer":'',"new-document":'',"new-tab":'',"non-breaking":'',notice:'',"ordered-list-rtl":'',"ordered-list":'',orientation:'',outdent:'',"page-break":'',paragraph:'',"paste-column-after":'',"paste-column-before":'',"paste-row-after":'',"paste-row-before":'',"paste-text":'',paste:'',"permanent-pen":'',plus:'',preferences:'',preview:'',print:'',quote:'',redo:'',reload:'',"remove-formatting":'',remove:'',"resize-handle":'',resize:'',"restore-draft":'',"rotate-left":'',"rotate-right":'',rtl:'',save:'',search:'',"select-all":'',selected:'',settings:'',sharpen:'',sourcecode:'',"spell-check":'',"strike-through":'',subscript:'',superscript:'',"table-cell-properties":'',"table-cell-select-all":'',"table-cell-select-inner":'',"table-delete-column":'',"table-delete-row":'',"table-delete-table":'',"table-insert-column-after":'',"table-insert-column-before":'',"table-insert-row-above":'',"table-insert-row-after":'',"table-left-header":'',"table-merge-cells":'',"table-row-properties":'',"table-split-cells":'',"table-top-header":'',table:'',template:'',"temporary-placeholder":'',"text-color":'',toc:'',translate:'',underline:'',undo:'',unlink:'',unlock:'',"unordered-list":'',unselected:'',upload:'',user:'',visualblocks:'',visualchars:'',warning:'',"zoom-in":'',"zoom-out":''}}); diff --git a/public/assets/tinymce/icons/default/icons-a0721895c1cc12748bd1564f906fa27587b5c76ba1598ef53ffc24ecb6b134ab.js.gz b/public/assets/tinymce/icons/default/icons-a0721895c1cc12748bd1564f906fa27587b5c76ba1598ef53ffc24ecb6b134ab.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..b0aaeed311b8933b3b85c0e9b19968677f4f288c GIT binary patch literal 14922 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])*>/g,""):n.getContent({save:!0}):a.apply(d(t),r)}),i}}), +// Makes it possible to use $('#id').append("content"); to append contents to the TinyMCE editor iframe +d.each(["append","prepend"],function(e,t){var n=s[t]=d.fn[t],r="prepend"===t;d.fn[t]=function(i){var e=this;return u(e)?i!==f?("string"==typeof i&&e.filter(":tinymce").each(function(e,t){var n=l(t);n&&n.setContent(r?i+n.getContent():n.getContent()+i)}),n.apply(e.not(":tinymce"),arguments),e):void 0:n.apply(e,arguments)}}), +// Makes sure that the editor instance gets properly destroyed when the parent element is removed +d.each(["remove","replaceWith","replaceAll","empty"],function(e,t){var n=s[t]=d.fn[t];d.fn[t]=function(){return r.call(this,t),n.apply(this,arguments)}}),s.attr=d.fn.attr, +// Makes sure that $('#tinymce_id').attr('value') gets the editors current HTML contents +d.fn.attr=function(e,t){var n=this,i=arguments;if(!e||"value"!==e||!u(n))return s.attr.apply(n,i);if(t!==f)return o.call(n.filter(":tinymce"),t),s.attr.apply(n.not(":tinymce"),i),n;// return original set for chaining +var r=n[0],a=l(r);return a?a.getContent({save:!0}):s.attr.apply(d(r),i)}}}(); diff --git a/public/assets/tinymce/jquery.tinymce-3816ed398fa3cae7cfa3778396c3080cc77f7a98cf6f76c09d5fd87ac5717060.js.gz b/public/assets/tinymce/jquery.tinymce-3816ed398fa3cae7cfa3778396c3080cc77f7a98cf6f76c09d5fd87ac5717060.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..8caa1c4c9c82ce22fbee105015c44819b0b33aac GIT binary patch literal 2919 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 e)8by590d~WI)0Xa54^-zc&A4gdgvA1em{ literal 0 HcmV?d00001 diff --git a/public/assets/tinymce/plugins/advlist/plugin.js b/public/assets/tinymce/plugins/advlist/plugin.js new file mode 120000 index 00000000..e62be063 --- /dev/null +++ b/public/assets/tinymce/plugins/advlist/plugin.js @@ -0,0 +1 @@ +plugin-4fa030df2a1a571b367acd30f0e2feca230c0cd2b8baec69654a05afc55307ce.js \ No newline at end of file diff --git a/public/assets/tinymce/plugins/advlist/plugin.js.gz b/public/assets/tinymce/plugins/advlist/plugin.js.gz new file mode 120000 index 00000000..471ed299 --- /dev/null +++ b/public/assets/tinymce/plugins/advlist/plugin.js.gz @@ -0,0 +1 @@ +plugin-4fa030df2a1a571b367acd30f0e2feca230c0cd2b8baec69654a05afc55307ce.js.gz \ No newline at end of file diff --git a/public/assets/tinymce/plugins/anchor/plugin-5a93606694b7a0bd66e2f699801ccba90e0dc57a86514785aa6a2973c3c6a4ef.js b/public/assets/tinymce/plugins/anchor/plugin-5a93606694b7a0bd66e2f699801ccba90e0dc57a86514785aa6a2973c3c6a4ef.js new file mode 100644 index 00000000..ec00d64f --- /dev/null +++ b/public/assets/tinymce/plugins/anchor/plugin-5a93606694b7a0bd66e2f699801ccba90e0dc57a86514785aa6a2973c3c6a4ef.js @@ -0,0 +1,9 @@ +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.8.2 (2021-06-23) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),o=tinymce.util.Tools.resolve("tinymce.util.Tools"),a="a:not([href])",n=function(e){return e.getAttribute("id")||e.getAttribute("name")||""},r=function(e){return(t=e)&&"a"===t.nodeName.toLowerCase()&&!e.getAttribute("href")&&""!==n(e);var t},c=function(e){var n=e.dom;t(n).walk(e.selection.getRng(),function(e){o.each(e,function(e){var t;r(t=e)&&!t.firstChild&&n.remove(e,!1)})})},u=function(e){return e.dom.getParent(e.selection.getStart(),a)},i=function(e,t){var n,o,a,r,i,l=u(e);l?(a=e,r=t,(i=l).removeAttribute("name"),i.id=r,a.addVisual(),a.undoManager.add()):(o=t,(n=e).undoManager.transact(function(){n.getParam("allow_html_in_named_anchor",!1,"boolean")||n.selection.collapse(!0),n.selection.isCollapsed()?n.insertContent(n.dom.createHTML("a",{id:o})):(c(n),n.formatter.remove("namedAnchor",null,null,!0),n.formatter.apply("namedAnchor",{value:o}),n.addVisual())})),e.focus()},l=function(o){var e,t=(e=u(o))?n(e):"";o.windowManager.open({title:"Anchor",size:"normal",body:{type:"panel",items:[{name:"id",type:"input",label:"ID",placeholder:"example"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{id:t},onSubmit:function(e){var t,n;t=o,n=e.getData().id,(/^[A-Za-z][A-Za-z0-9\-:._]*$/.test(n)?(i(t,n),1):(t.windowManager.alert("Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores."),0))&&e.close()}})},d=function(r){return function(e){for(var t,n,o=0;o3LeMh}CuA2?TV8D{dd%x$Nn;srMi4LQMtv61sN{r$>i7u4cL>G{k z#%jA#;CXavauJ! zbT8NGyrj!c$ODW91m0n!OlP2W_HW2Ba@JyWL&AeH-P2bkQCaiJ(3d`ZXSYPGeL9`4 z*K2{4l*qMhiYciD&G+CuSxKYs#gF1RijQZ<&yHq4936j`(Dn4mTdH8m{r&!_krjk< z##-(kF%x43$-x1WEXy(!#uo6JR0P^Hy9T$A9%8zm?Ar~Yv7pE%Sr+VdrNx%#pE(JK zChO`l$JiudE%k>Oga-|sP%!((tm1_4s#yUtFJs{Qws7u-h$kp+l=HYKl`akr3>CGq zR8!!SXGt4=ym`EAp-1HPTskngAIn>m4k;Q*`f5j?flDu;MoCX;U-R!G`7JQl`Z+~7M(O+<{0mQ+YFh= zDrQn^yS^^5($~sd2d~AoGD+29YijdkmhjyR)73F|AQ67Mcy&hp8Q-cRwQWctr)HD2e&CU!AKKGZqc|DDGL6>#U+?@u zT-LST>`7AtbOXTwiSAU9nw@YU<-GAR^-VwY&GucR_GK|p!)!vCP}@?*=2ol~m3KYX z*VbU-Eh^NIveBnkAL+}4xHRKSTWr!TZfZKKr2#rp2$fGSw;|Fr3?c8Ym8lzKT+1cs zl%2j{yw);@(rO~wl);^>Y7MNtYB|9KtqDeY)ttH(O!p?oFN8Zx*`ohy`5^0?Wu8$eY_f;v!kE>JW9p&)!{c&f#AcSKaW*RCKCRPz<_&|mYRSRv(qB-rEN4l z!qi1;g(a;W4FLh1R!0Cd?IvsVCR%QW3tDNWsg~VKA$=KkTw#&^3CUE(u)Df#=5tF# zD`@m)2@wW_6%yF24ct&XV8ngmhTR$v6yu=|MB=l#{TYM?v%+$2pFZttM1y~6ujVGZ zwW^3_d_qHund}CPVC+VkyuY7}2Z5!DyvEOwo_ERY{$38Zc|U7VD3nVA3wIQJJBN-a z*f`sdbdKA3N0Wk1*|~#L6EL#F8z^e&d`~&AiSu77O{MK-m@MB&?I|o;dPE0~5JN-o zxM-N&Fny*b zX<)ApgyatdZ{jgj^}~!>bJCelcl-<;rA2ZF`6DqU9rQ`4P9Iqkc83Q0H|rK<*z3jb z1k!hAse-w^H62z7hEQ%h<_+jV--UD-yGY(i~oiJ_>7%H zc;NOKR~fAg5eqeYtV2rcujBGGY#chTHPOdp#tVQtJmt9hd`B|u+m5zbC^&h`%XD|E b5=D%8IBG!K_PaYy=1=|sj0n&*;R*l%%toHj literal 0 HcmV?d00001 diff --git a/public/assets/tinymce/plugins/anchor/plugin.js b/public/assets/tinymce/plugins/anchor/plugin.js new file mode 120000 index 00000000..44557efb --- /dev/null +++ b/public/assets/tinymce/plugins/anchor/plugin.js @@ -0,0 +1 @@ +plugin-5a93606694b7a0bd66e2f699801ccba90e0dc57a86514785aa6a2973c3c6a4ef.js \ No newline at end of file diff --git a/public/assets/tinymce/plugins/anchor/plugin.js.gz b/public/assets/tinymce/plugins/anchor/plugin.js.gz new file mode 120000 index 00000000..7712cfac --- /dev/null +++ b/public/assets/tinymce/plugins/anchor/plugin.js.gz @@ -0,0 +1 @@ +plugin-5a93606694b7a0bd66e2f699801ccba90e0dc57a86514785aa6a2973c3c6a4ef.js.gz \ No newline at end of file diff --git a/public/assets/tinymce/plugins/autolink/plugin-a3a7a374935cef0e281d7fe0d90cb2d1e72484032e13534567908d5ea4a5f0cd.js b/public/assets/tinymce/plugins/autolink/plugin-a3a7a374935cef0e281d7fe0d90cb2d1e72484032e13534567908d5ea4a5f0cd.js new file mode 100644 index 00000000..7512fcfa --- /dev/null +++ b/public/assets/tinymce/plugins/autolink/plugin-a3a7a374935cef0e281d7fe0d90cb2d1e72484032e13534567908d5ea4a5f0cd.js @@ -0,0 +1,9 @@ +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.8.2 (2021-06-23) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=tinymce.util.Tools.resolve("tinymce.Env"),i=function(e,t){var n;return t<0&&(t=0),3!==e.nodeType||(n=e.data.length)xwq(!_FAUgd%seN)J~>BrBi7GSj*tmA8%d-#s(rtOj$~s zC{YAOXV?1tj>^`^Nx28$@C^c`TY!xg<- zk^#N-QT5zPs4TYVd^{Wyh{u$j4dPgGZBlu$-N?Eo8n>wc!3(K#SkrT8O*LiEux$^O zX?in07z7}q^Rz><6WscB=En^2 zEa}BgWhSZuKDY6)MW_kcU_$3ABjGY^56sCzwgq`V-wQ%Hi2SuEWmjB&-{`H*(FR9Y z%eO-3=-}~k?))MAm1Wqo^C$EcWdq{koJ*aqj0T~!w0vXbwKA1^r@mlTIqmH38D+{k zXb-2Zf2`wLeuF(uH;?lN@xE`~V9+#nyUAo*lKZox>}tPgQ4Y22z)gH4#(Uu!Svctn z@Uu_Uz1Z|HZo{EEN`&6xoRYcsQ9m%5Qx*62XK~+{_>>hJcPT5@>E4T?lKbmM8xv2^ z?I`EPbau3hCJ{6~6@SVVTgPVJp-#_ZvoO(gc7UIBl8Ki@kzrxrhlgYc4(1)wksk>< z9EM(;4TqDbW53|ZTG$mPwgfUp^%!BI>2R2#QqSp}RDA%pgn6v6U=+(gzJ`b%llp&zomD^ z_aIr5g0fZb9=7*ye;M&b0h5>_WTB@4{J0h-r1KIFHuR5#&#e3~`MB^u@#-|(Js$Xd z_ISiWIv`$!xeZ32cJ$Dfx8FG2>B7@ijQn-)GCw!wsucE$PRDP4m3STyX z+!!WS3Xr}a&m_#FBJ>oY2cBY+;SfpRlpbISSl1WwU5a7ho{o}!;L=>n3v-wg?z8$!FUdKdkg)>ERpB`w#9D}u#&bngE4KAb|5f^rfG0O z4@n{oI@izg=gIf8ByE}p&uY_mJDWaq8+WzQW-hr%)4NBg?+Wy(e)&&(r=g+u),(l=e.getParam("max_height",0,"number"))&&lkl9Tw?_?Xb+E(g0Xx5I0_`_}&=hVyuc$OQ6w{?M5}F)PD*sO0W^*i=T?R&`b2SKjqunK7bNy z3|Xf;%D^@jd}B3%xCDPAtf**IN&T>Z(87qf-!BwYpgm==DGCSvkJiW|-Bk0yc+15A zlY6eY0biT-?H}+muU>c9sLA~a|nQ=XtoQgr*)Qm=kBC5oH^)qC)31!u3OY3)& zuPK}9(TM8U`L%-BEWsAatiGoHG>WFtLgqQ>i2Lu~gHL9SQun4#6Nb>sSEM_5lh(pI z_=JkvJa++_b`Ja~VY9ww(p`&dYS?KqHCsM^i)hfpEq7e-k~duOj90us`njoi-pTl2 zGE|YH3W~y5T({%k;-XOs83Uj|{l?c=y35^zveO##?k8+YWtt;?)`Xt*t>Y#gc33pn z5^(Zgc$gdSP4!R-i|`RYNq)2yhii=^!d<$g1uBU;r-?Up6f$AgpBp-?&PK~rJ{y;@ z8;h}F?-LYSVgqdCOa!iII|%B&yoEWh$65}%W;Fr)ib%3c-#&2 zKpzIE_x2Qn6z_}2rtN=@Q2TzG`hYTV`pvggrL8as~aM=YTa&eSqo zq(WL;$=kN<-BN^IkLT8`@JwPi??fT24EYvuB{ED~bu#{v*k86AUs}aAo{GOew-w;s z>udK4i59|LV*6b{0?e2_U>0Pwg84V;N24tCs@qZg+0Gyq zc|IJThz~DG82EmL!^qD9zQ+qxy1?l3O5a#hgY|0~_2CS+a^Tf{O+)n|mRey=(ZQuj zxN_+RIZg-1qhCU|Sbn;_cugEWlm zt{>m@*{-1QQ{esUwhaazZuz92$!W3;5_Kyrbo+cEbP42cw_@ZQtecwrxGHyE_}(oi zUEO-u7v&45vBiG7GWww_e?i(t.getParam("autosave_retention"),"20m"))||(c(t,!1),!1)},c=function(t,e){var r=u(t);n.removeItem(r+"draft"),n.removeItem(r+"time"),!1!==e&&t.fire("RemoveDraft")},m=function(t){var e=u(t);!s(t)&&t.isDirty()&&(n.setItem(e+"draft",t.getContent({format:"raw",no_events:!0})),n.setItem(e+"time",(new Date).getTime().toString()),t.fire("StoreDraft"))},l=function(t){var e=u(t);f(t)&&(t.setContent(n.getItem(e+"draft"),{format:"raw"}),t.fire("RestoreDraft"))},v=function(t){var e=i(t.getParam("autosave_interval"),"30s");r.setEditorInterval(t,function(){m(t)},e)},d=function(t){t.undoManager.transact(function(){l(t),c(t)}),t.focus()},g=tinymce.util.Tools.resolve("tinymce.EditorManager"),y=function(r){return function(t){t.setDisabled(!f(r));var e=function(){return t.setDisabled(!f(r))};return r.on("StoreDraft RestoreDraft RemoveDraft",e),function(){return r.off("StoreDraft RestoreDraft RemoveDraft",e)}}};t.add("autosave",function(t){var e,r;return t.editorManager.on("BeforeUnload",function(t){var e;o.each(g.get(),function(t){t.plugins.autosave&&t.plugins.autosave.storeDraft(),!e&&t.isDirty()&&t.getParam("autosave_ask_before_unload",!0)&&(e=t.translate("You have unsaved changes are you sure you want to navigate away?"))}),e&&(t.preventDefault(),t.returnValue=e)}),v(e=t),e.ui.registry.addButton("restoredraft",{tooltip:"Restore last draft",icon:"restore-draft",onAction:function(){d(e)},onSetup:y(e)}),e.ui.registry.addMenuItem("restoredraft",{text:"Restore last draft",icon:"restore-draft",onAction:function(){d(e)},onSetup:y(e)}),t.on("init",function(){t.getParam("autosave_restore_when_empty",!1)&&t.dom.isEmpty(t.getBody())&&l(t)}),r=t,{hasDraft:function(){return f(r)},storeDraft:function(){return m(r)},restoreDraft:function(){return l(r)},removeDraft:function(t){return c(r,t)},isEmpty:function(t){return s(r,t)}}})}(); diff --git a/public/assets/tinymce/plugins/autosave/plugin-3fd90e874fb12511855540e04d399e02b4c916696d58ba1fddf137c8e956aea5.js.gz b/public/assets/tinymce/plugins/autosave/plugin-3fd90e874fb12511855540e04d399e02b4c916696d58ba1fddf137c8e956aea5.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..d28a6ab5a3d73c937ca3ed651586eb70db3576d7 GIT binary patch literal 1274 zcmV>+{7yYKGfcXuQQ$H%Y8F?pxwDX&@%}(CYLJZWIyJRhZg3 zBU2Ym7QzsSUE)KQDe%h4g5PRgSdO~rVgWST*lvnyCe^i2Vg@E+u}CN+UZ<&4kj2{+ zj;#&2$|wR!lDL}1=0)*??E(t1!rv;*-+`c_C8292sl~k;#sH3~cRHLCy~k zfIJ3&(Lb{jM!%Hy>lyoDz~LTJ8bv3DO`3gD_2u;I+1idr@H#HXZ{WxJi(mRW9FMWq$9UmTsZOk5Rs0fELqWdlSP}YZEBt2L?L}8^d9|np}hh@Yt7)?>A z-iZ0XI!+I^qo*)YD0!(D5J;JmC^KT}{J1<>Z<+Q+y(EF7Bgd!GVE2CvP8SWRj>`j^ z4{3T9|9hCU7t)|q_yg6jts1aN9EUBw)5`COuAAd*92v2UVx{k3fy;K>8`jKI?7#!R z_>gkk>9&N3+3@z$y`hb~i|2Sx18o%E?pW=L2s^zVQLT50K7xImYH=XdGnJK?&n!gY z3;TL#eb;#&?=y)ZFIyv4v~w1h7_`O`*KzhJkK=f*>h`F`VGzoS)X@$S1F<;u@IW39 z5KA%4>_vxPLuq%CuXf4J_V9kp2RCvdt@u_zMtf6qYi1Ra4yWyq?K{_-2{asCJM|=8 z#Ywk6QI>c=IO3<%7YC^8dg8dqvR#>?c(0(b*_{v2l_qdK2kaI2T@_kn2f!1}L8LjI z`Iew8ek|KO+?kedviq5Oy2f|>5#NI+b9b=Ug#G94TOf8?S)#Smr+?;StS7cdo7 z;i)>_$o5$j6(rz27oGqDcqP#|llab9dHv5T=e(GvDOP)WtR42Jlk@Rr?noi5Bdt}Y z_@db$`t71tZ-cz!PHSY;Pmorhkj;F&qJhaCg=?V`Hu5vK zLdbEq%t76Oznvm~7x?NwcUK-A70vkLOC|Ob0J kJ7MDkPrejyUVo;wj1Rfk#-*-VP1)qtzc{NF`?w1L01z&C00000 literal 0 HcmV?d00001 diff --git a/public/assets/tinymce/plugins/autosave/plugin.js b/public/assets/tinymce/plugins/autosave/plugin.js new file mode 120000 index 00000000..34ccc1fa --- /dev/null +++ b/public/assets/tinymce/plugins/autosave/plugin.js @@ -0,0 +1 @@ +plugin-3fd90e874fb12511855540e04d399e02b4c916696d58ba1fddf137c8e956aea5.js \ No newline at end of file diff --git a/public/assets/tinymce/plugins/autosave/plugin.js.gz b/public/assets/tinymce/plugins/autosave/plugin.js.gz new file mode 120000 index 00000000..e8d349f9 --- /dev/null +++ b/public/assets/tinymce/plugins/autosave/plugin.js.gz @@ -0,0 +1 @@ +plugin-3fd90e874fb12511855540e04d399e02b4c916696d58ba1fddf137c8e956aea5.js.gz \ No newline at end of file diff --git a/public/assets/tinymce/plugins/bbcode/plugin-218d7766e7fcc1fb224d31eef2f9d3b6cd91b7fefe81c8a8cc09e9e3a63bf603.js b/public/assets/tinymce/plugins/bbcode/plugin-218d7766e7fcc1fb224d31eef2f9d3b6cd91b7fefe81c8a8cc09e9e3a63bf603.js new file mode 100644 index 00000000..11aa73c4 --- /dev/null +++ b/public/assets/tinymce/plugins/bbcode/plugin-218d7766e7fcc1fb224d31eef2f9d3b6cd91b7fefe81c8a8cc09e9e3a63bf603.js @@ -0,0 +1,9 @@ +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.8.2 (2021-06-23) + */ +!function(){"use strict";var o=tinymce.util.Tools.resolve("tinymce.PluginManager"),e=tinymce.util.Tools.resolve("tinymce.util.Tools"),t=function(t){t=e.trim(t);var o=function(o,e){t=t.replace(o,e)};return o(/\n/gi,"
    "),o(/\[b\]/gi,""),o(/\[\/b\]/gi,""),o(/\[i\]/gi,""),o(/\[\/i\]/gi,""),o(/\[u\]/gi,""),o(/\[\/u\]/gi,""),o(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'
    $2'),o(/\[url\](.*?)\[\/url\]/gi,'$1'),o(/\[img\](.*?)\[\/img\]/gi,''),o(/\[color=(.*?)\](.*?)\[\/color\]/gi,'$2'),o(/\[code\](.*?)\[\/code\]/gi,'$1 '),o(/\[quote.*?\](.*?)\[\/quote\]/gi,'$1 '),t};o.add("bbcode",function(o){o.on("BeforeSetContent",function(o){o.content=t(o.content)}),o.on("PostProcess",function(o){o.set&&(o.content=t(o.content)),o.get&&(o.content=function(t){t=e.trim(t);var o=function(o,e){t=t.replace(o,e)};return o(/(.*?)<\/a>/gi,"[url=$1]$2[/url]"),o(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),o(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),o(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),o(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),o(/(.*?)<\/span>/gi,"[color=$1]$2[/color]"),o(/(.*?)<\/font>/gi,"[color=$1]$2[/color]"),o(/(.*?)<\/span>/gi,"[size=$1]$2[/size]"),o(/(.*?)<\/font>/gi,"$1"),o(//gi,"[img]$1[/img]"),o(/(.*?)<\/span>/gi,"[code]$1[/code]"),o(/(.*?)<\/span>/gi,"[quote]$1[/quote]"),o(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"),o(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"),o(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"),o(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"),o(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"),o(/(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"),o(/<\/(strong|b)>/gi,"[/b]"),o(/<(strong|b)>/gi,"[b]"),o(/<\/(em|i)>/gi,"[/i]"),o(/<(em|i)>/gi,"[i]"),o(/<\/u>/gi,"[/u]"),o(/(.*?)<\/span>/gi,"[u]$1[/u]"),o(//gi,"[u]"),o(/]*>/gi,"[quote]"),o(/<\/blockquote>/gi,"[/quote]"),o(/
    /gi,"\n"),o(//gi,"\n"),o(/
    /gi,"\n"),o(/

    /gi,""),o(/<\/p>/gi,"\n"),o(/ |\u00a0/gi," "),o(/"/gi,'"'),o(/</gi,"<"),o(/>/gi,">"),o(/&/gi,"&"),t}(o.content))})})}(); diff --git a/public/assets/tinymce/plugins/bbcode/plugin-218d7766e7fcc1fb224d31eef2f9d3b6cd91b7fefe81c8a8cc09e9e3a63bf603.js.gz b/public/assets/tinymce/plugins/bbcode/plugin-218d7766e7fcc1fb224d31eef2f9d3b6cd91b7fefe81c8a8cc09e9e3a63bf603.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..2dbe6c302bbc67ce312e74e832d8886203a741c2 GIT binary patch literal 997 zcmV`p6E?oMd~6+|)z&gg&Et zobD;hSw^s!qCaTrqhIqJ=_r9X7MMTcov+ZhB*j$V9V+P#b0qf|-Tr=eix@{SN?B20 zo{~66xrx)5PvF!+0^^#%mtQ3!R1+LH`x~bcamFNifZz%YepnT;B#bshZ*vIEyO;7H zZi3+H>B*N+l%M9T+ywwr$iFZbz;c6r@_+Fc$X(19^Xu8q*NgWaxPz-79!i?3Jg)cR zl#p6TPEzSCA7hT#S`ij0_De}}|DLg2_|O%WKVsLZeRp}85&CCL;|z1ho8pU5tq&k_ z-N=yMi(EsOI4R({lF@kC6f3_3zC#|TSR0N@j%CRyVr~%9AR|*}m2ebnfLWQgNf;R` z6vt@R*u$Xl1U(n29k{T<8*5;h%i364k&Q8EttHRb?)FO?T?JIel9KIhnIR<6yMCgQNHiT*8_#6V+_Y10s!cATV> z$0hUQ-OhEAMCEm+?KF8W%!mKZZy3%S{*2{EC3PwAiYNip-qqO@=_T z%{Jb&J8XBa%c=*#5UYr&8mKCPUPN0x5*KG`clKl|9daU<@%54o7V%cXcPMMPh|5x4 zT$VlvLb228*9YqRpEy#cP=A0%KP;;qgThTyr zc=Z@Ryve|+-etDjFsNw39gXH&_3rD48<>INPQjikyuG;{0()zR7|c#7ite82Z_Rlb z=5u7vU80GS-mvw!h85Xl)nv779cj2YD+@k*wj^TO+mmE*49aOpDk&{XM@o5CN!bxn zYKpQaq&%;q?8<04Ix@n*HT`={yb1tqtDJ9Ki3P*OD`_C4f!Jo!hSzF9!O%gH_^Z6$ z;goTGErdg^FQPf2_{5>A>#3X3m@7k)v-BTb>h{Yfnsl1csA_|1d7S{bX4R)Hq>XLB z)H58+x=C~B`pw7tH7sYdc&0t5a;WS}eFbpLRbiZ)wX>=svT9vjyT);GFovbA`AckqVx1| literal 0 HcmV?d00001 diff --git a/public/assets/tinymce/plugins/bbcode/plugin.js b/public/assets/tinymce/plugins/bbcode/plugin.js new file mode 120000 index 00000000..ad22d4a3 --- /dev/null +++ b/public/assets/tinymce/plugins/bbcode/plugin.js @@ -0,0 +1 @@ +plugin-218d7766e7fcc1fb224d31eef2f9d3b6cd91b7fefe81c8a8cc09e9e3a63bf603.js \ No newline at end of file diff --git a/public/assets/tinymce/plugins/bbcode/plugin.js.gz b/public/assets/tinymce/plugins/bbcode/plugin.js.gz new file mode 120000 index 00000000..be93ec0b --- /dev/null +++ b/public/assets/tinymce/plugins/bbcode/plugin.js.gz @@ -0,0 +1 @@ +plugin-218d7766e7fcc1fb224d31eef2f9d3b6cd91b7fefe81c8a8cc09e9e3a63bf603.js.gz \ No newline at end of file diff --git a/public/assets/tinymce/plugins/charmap/plugin-0b32f067c1ea7b80c584da52fd75124a7bc8371551475c6f679389428ee80583.js b/public/assets/tinymce/plugins/charmap/plugin-0b32f067c1ea7b80c584da52fd75124a7bc8371551475c6f679389428ee80583.js new file mode 100644 index 00000000..df710b53 --- /dev/null +++ b/public/assets/tinymce/plugins/charmap/plugin-0b32f067c1ea7b80c584da52fd75124a7bc8371551475c6f679389428ee80583.js @@ -0,0 +1,9 @@ +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.8.2 (2021-06-23) + */ +!function(){"use strict";var t,e,n,r,a=tinymce.util.Tools.resolve("tinymce.PluginManager"),s=function(e,n){var r,t=(r=n,e.fire("insertCustomChar",{chr:r}).chr);e.execCommand("mceInsertContent",!1,t)},i=function(e){return r=typeof(n=e),(null===n?"null":"object"==r&&(Array.prototype.isPrototypeOf(n)||n.constructor&&"Array"===n.constructor.name)?"array":"object"==r&&(String.prototype.isPrototypeOf(n)||n.constructor&&"String"===n.constructor.name)?"string":r)===t;var n,r},o=function(e){return function(){return e}},c=o(!(t="array")),u=o(!0),l=function(){return g},g=(e=function(e){return e.isNone()},{fold:function(e,n){return e()},is:c,isSome:c,isNone:u,getOr:r=function(e){return e},getOrThunk:n=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:o(null),getOrUndefined:o(undefined),or:r,orThunk:n,map:l,each:function(){},bind:l,exists:c,forall:u,filter:l,equals:e,equals_:e,toArray:function(){return[]},toString:o("none()")}),m=function(r){var e=o(r),n=function(){return a},t=function(e){return e(r)},a={fold:function(e,n){return n(r)},is:function(e){return r===e},isSome:u,isNone:c,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:n,orThunk:n,map:function(e){return m(e(r))},each:function(e){e(r)},bind:t,exists:t,forall:t,filter:function(e){return e(r)?a:g},toArray:function(){return[r]},toString:function(){return"some("+r+")"},equals:function(e){return e.is(r)},equals_:function(e,n){return e.fold(c,function(e){return n(r,e)})}};return a},f={some:m,none:l,from:function(e){return null===e||e===undefined?g:m(e)}},h=Array.prototype.push,p=function(e,n){for(var r=e.length,t=new Array(r),a=0;a>>0===o))throw RangeError("Invalid code point: "+o);16383<=(o<=65535?r.push(o):(o-=65536,r.push(55296+(o>>10),o%1024+56320)))&&(t+=String.fromCharCode.apply(null,r),r.length=0)}return t+String.fromCharCode.apply(null,r)},S=function(e,n){var a=[],i=n.toLowerCase();return function(e,n){for(var r=0,t=e.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[-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},Prism.languages.c.string],comment:Prism.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:Prism.languages.c}}},constant:/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/}),delete Prism.languages.c["boolean"]},{}],2:[function(e,n,t){Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,"boolean":/\b(?:true|false)\b/,"function":/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}},{}],3:[function(e,t,n){(function(n){(function(){var e=function(u){var c=/\blang(?:uage)?-([\w-]+)\b/i,n=0,C={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function r(e){return e instanceof O?new O(e.type,r(e.content),e.alias):Array.isArray(e)?e.map(r):e.replace(/&/g,"&").replace(/=s.reach);h+=b.value.length,b=b.next){var y=b.value;if(n.length>e.length)return;if(!(y instanceof O)){var w,v=1;if(g){if(!(w=N(f,h,e,p)))break;var k=w.index,_=w.index+w[0].length,x=h;for(x+=b.value.length;x<=k;)b=b.next,x+=b.value.length;if(x-=b.value.length,h=x,b.value instanceof O)continue;for(var P=b;P!==n.tail&&(x<_||"string"==typeof P.value);P=P.next)v++,x+=P.value.length;v--,y=e.slice(h,x),w.index-=h}else if(!(w=N(f,0,y,p)))continue;var k=w.index,F=w[0],A=y.slice(0,k),S=y.slice(k+F.length),$=h+y.length;s&&$>s.reach&&(s.reach=$);var j=b.prev;A&&(j=T(n,j,A),h+=A.length),B(n,j,v);var z=new O(i,d?C.tokenize(F,d):F,m,F);b=T(n,j,z),S&&T(n,b,S),1"+a.content+""},!u.document)return u.addEventListener&&(C.disableWorkerMessageHandler||u.addEventListener("message",function(e){var n=JSON.parse(e.data),t=n.language,a=n.code,r=n.immediateClose;u.postMessage(C.highlight(a,C.languages[t],t)),r&&u.close()},!1)),C;var e,t=C.util.currentScript();function a(){C.manual||C.highlightAll()}return t&&(C.filename=t.src,t.hasAttribute("data-manual")&&(C.manual=!0)),C.manual||("loading"===(e=document.readyState)||"interactive"===e&&t&&t.defer?document.addEventListener("DOMContentLoaded",a):window.requestAnimationFrame?window.requestAnimationFrame(a):window.setTimeout(a,16)),C}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{});void 0!==t&&t.exports&&(t.exports=e),void 0!==n&&(n.Prism=e)}).call(this)}).call(this,void 0!==y?y:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],4:[function(e,n,t){var a,r;a=Prism,r=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char8_t|char16_t|char32_t|class|compl|concept|const|consteval|constexpr|constinit|const_cast|continue|co_await|co_return|co_yield|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,a.languages.cpp=a.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,function(){return r.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:r,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,"boolean":/\b(?:true|false)\b/}),a.languages.insertBefore("cpp","string",{"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),a.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:a.languages.extend("cpp",{})}}),a.languages.insertBefore("inside","operator",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},a.languages.cpp["base-clause"])},{}],5:[function(e,n,t){!function(t){function a(e,t){return e.replace(/<<(\d+)>>/g,function(e,n){return"(?:"+t[+n]+")"})}function r(e,n,t){return RegExp(a(e,n),t||"")}function e(e,n){for(var t=0;t>/g,function(){return"(?:"+e+")"});return e.replace(/<>/g,"[^\\s\\S]")}var n="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",s="class enum interface struct",i="add alias and ascending async await by descending from get global group into join let nameof not notnull on or orderby partial remove select set unmanaged value when where",o="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var u=l(s),c=RegExp(l(n+" "+s+" "+i+" "+o)),d=l(s+" "+i+" "+o),p=l(n+" "+s+" "+o),g=e(/<(?:[^<>;=+\-*/%&|^]|<>)*>/.source,2),m=e(/\((?:[^()]|<>)*\)/.source,2),f=/@?\b[A-Za-z_]\w*\b/.source,b=a(/<<0>>(?:\s*<<1>>)?/.source,[f,g]),h=a(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source,[d,b]),y=/\[\s*(?:,\s*)*\]/.source,w=a(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source,[h,y]),v=a(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source,[g,m,y]),k=a(/\(<<0>>+(?:,<<0>>+)+\)/.source,[v]),_=a(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source,[k,h,y]),x={keyword:c,punctuation:/[<>()?,.:[\]]/},P=/'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source,F=/"(?:\\.|[^\\"\r\n])*"/.source,A=/@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;t.languages.csharp=t.languages.extend("clike",{string:[{pattern:r(/(^|[^$\\])<<0>>/.source,[A]),lookbehind:!0,greedy:!0},{pattern:r(/(^|[^@$\\])<<0>>/.source,[F]),lookbehind:!0,greedy:!0},{pattern:RegExp(P),greedy:!0,alias:"character"}],"class-name":[{pattern:r(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source,[h]),lookbehind:!0,inside:x},{pattern:r(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source,[f,_]),lookbehind:!0,inside:x},{pattern:r(/(\busing\s+)<<0>>(?=\s*=)/.source,[f]),lookbehind:!0},{pattern:r(/(\b<<0>>\s+)<<1>>/.source,[u,b]),lookbehind:!0,inside:x},{pattern:r(/(\bcatch\s*\(\s*)<<0>>/.source,[h]),lookbehind:!0,inside:x},{pattern:r(/(\bwhere\s+)<<0>>/.source,[f]),lookbehind:!0},{pattern:r(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source,[w]),lookbehind:!0,inside:x},{pattern:r(/\b<<0>>(?=\s+(?!<<1>>)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source,[_,p,f]),inside:x}],keyword:c,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:ul|lu|[dflmu])?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),t.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),t.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:r(/([(,]\s*)<<0>>(?=\s*:)/.source,[f]),lookbehind:!0,alias:"punctuation"}}),t.languages.insertBefore("csharp","class-name",{namespace:{pattern:r(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source,[f]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:r(/(\b(?:default|typeof|sizeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source,[m]),lookbehind:!0,alias:"class-name",inside:x},"return-type":{pattern:r(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source,[_,h]),inside:x,alias:"class-name"},"constructor-invocation":{pattern:r(/(\bnew\s+)<<0>>(?=\s*[[({])/.source,[_]),lookbehind:!0,inside:x,alias:"class-name"},"generic-method":{pattern:r(/<<0>>\s*<<1>>(?=\s*\()/.source,[f,g]),inside:{"function":r(/^<<0>>/.source,[f]),generic:{pattern:RegExp(g),alias:"class-name",inside:x}}},"type-list":{pattern:r(/\b((?:<<0>>\s+<<1>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>)(?:\s*,\s*(?:<<3>>|<<4>>))*(?=\s*(?:where|[{;]|=>|$))/.source,[u,b,f,_,c.source]),lookbehind:!0,inside:{keyword:c,"class-name":{pattern:RegExp(_),greedy:!0,inside:x},punctuation:/,/}},preprocessor:{pattern:/(^\s*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(\s*#)\b(?:define|elif|else|endif|endregion|error|if|line|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var S=F+"|"+P,$=a(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source,[S]),j=e(a(/[^"'/()]|<<0>>|\(<>*\)/.source,[$]),2),z=/\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source,E=a(/<<0>>(?:\s*\(<<1>>*\))?/.source,[h,j]);t.languages.insertBefore("csharp","class-name",{attribute:{pattern:r(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source,[z,E]),lookbehind:!0,greedy:!0,inside:{target:{pattern:r(/^<<0>>(?=\s*:)/.source,[z]),alias:"keyword"},"attribute-arguments":{pattern:r(/\(<<0>>*\)/.source,[j]),inside:t.languages.csharp},"class-name":{pattern:RegExp(h),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var C=/:[^}\r\n]+/.source,O=e(a(/[^"'/()]|<<0>>|\(<>*\)/.source,[$]),2),N=a(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[O,C]),T=e(a(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<>*\)/.source,[S]),2),B=a(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[T,C]);function q(e,n){return{interpolation:{pattern:r(/((?:^|[^{])(?:\{\{)*)<<0>>/.source,[e]),lookbehind:!0,inside:{"format-string":{pattern:r(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source,[n,C]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:t.languages.csharp}}},string:/[\s\S]+/}}t.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:r(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source,[N]),lookbehind:!0,greedy:!0,inside:q(N,O)},{pattern:r(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source,[B]),lookbehind:!0,greedy:!0,inside:q(B,T)}]})}(Prism),Prism.languages.dotnet=Prism.languages.cs=Prism.languages.csharp},{}],6:[function(e,n,t){!function(e){var n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+n.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{"function":/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+n.source+"$"),alias:"url"}}},selector:RegExp("[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+n.source+")*(?=\\s*\\{)"),string:{pattern:n,greedy:!0},property:/(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,important:/!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var t=e.languages.markup;t&&(t.tag.addInlined("style","css"),e.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/(^|["'\s])style\s*=\s*(?:"[^"]*"|'[^']*')/i,lookbehind:!0,inside:{"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{style:{pattern:/(["'])[\s\S]+(?=["']$)/,lookbehind:!0,alias:"language-css",inside:e.languages.css},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},"attr-name":/^style/i}}},t.tag))}(Prism)},{}],7:[function(e,n,t){var a,r,s,i;a=Prism,r=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,s=/(^|[^\w.])(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,i={pattern:RegExp(s+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}},a.languages.java=a.languages.extend("clike",{"class-name":[i,{pattern:RegExp(s+/[A-Z]\w*(?=\s+\w+\s*[;,=())])/.source),lookbehind:!0,inside:i.inside}],keyword:r,"function":[a.languages.clike["function"],{pattern:/(\:\:\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),a.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"}}),a.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/,inside:{"class-name":i,keyword:r,punctuation:/[<>(),.:]/,operator:/[?&|]/}},namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(//g,function(){return r.source})),lookbehind:!0,inside:{punctuation:/\./}}})},{}],8:[function(e,n,t){Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|(?:get|set)(?=\s*[\[$\w\xA0-\uFFFF])|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],"function":/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-flags":/[a-z]+$/,"regex-delimiter":/^\/|\/$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.js=Prism.languages.javascript},{}],9:[function(e,n,t){function h(e,n){return"___"+e.toUpperCase()+n+"___"}var y;y=Prism,Object.defineProperties(y.languages["markup-templating"]={},{buildPlaceholders:{value:function(a,r,e,s){var i;a.language===r&&(i=a.tokenStack=[],a.code=a.code.replace(e,function(e){if("function"==typeof s&&!s(e))return e;for(var n,t=i.length;-1!==a.code.indexOf(n=h(r,t));)++t;return i[t]=e,n}),a.grammar=y.languages.markup)}},tokenizePlaceholders:{value:function(p,g){var m,f;p.language===g&&p.tokenStack&&(p.grammar=y.languages[g],m=0,f=Object.keys(p.tokenStack),function b(e){for(var n=0;n=f.length);n++){var t,a,r,s,i,o,l,u,c,d=e[n];"string"==typeof d||d.content&&"string"==typeof d.content?(t=f[m],a=p.tokenStack[t],r="string"==typeof d?d:d.content,s=h(g,t),-1<(i=r.indexOf(s))&&(++m,o=r.substring(0,i),l=new y.Token(g,y.tokenize(a,p.grammar),"language-"+g,a),u=r.substring(i+s.length),c=[],o&&c.push.apply(c,b([o])),c.push(l),u&&c.push.apply(c,b([u])),"string"==typeof d?e.splice.apply(e,[n,1].concat(c)):d.content=c)):d.content&&b(d.content)}return e}(p.tokens))}}})},{}],10:[function(e,n,t){Prism.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/,name:/[^\s<>'"]+/}},cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(e,n){var t={};t["language-"+n]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[n]},t.cdata=/^$/i;var a={"included-cdata":{pattern://i,inside:t}};a["language-"+n]={pattern:/[\s\S]+/,inside:Prism.languages[n]};var r={};r[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,function(){return e}),"i"),lookbehind:!0,greedy:!0,inside:a},Prism.languages.insertBefore("markup","cdata",r)}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml},{}],11:[function(e,n,t){!function(n){var e=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,t=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/,/\b(?:null)\b/i],a=/\b0b[01]+\b|\b0x[\da-f]+\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+)(?:e[+-]?\d+)?/i,r=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,s=/[{}\[\](),:;]/;n.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:e,variable:/\$+(?:\w+\b|(?={))/i,"package":{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},keyword:[{pattern:/(\(\s*)\b(?:bool|boolean|int|integer|float|string|object|array)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:bool|int|float|string|object|array(?!\s*\()|mixed|self|static|callable|iterable|(?:null|false)(?=\s*\|))\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*[a-z0-9_|]\|\s*)(?:null|false)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:bool|int|float|string|object|void|array(?!\s*\()|mixed|self|static|callable|iterable|(?:null|false)(?=\s*\|))\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?[a-z0-9_|]\|\s*)(?:null|false)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:bool|int|float|string|object|void|array(?!\s*\()|mixed|iterable|(?:null|false)(?=\s*\|))\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:null|false)\b/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},/\b(?:__halt_compiler|abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|eval|exit|extends|final|finally|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|namespace|match|new|or|parent|print|private|protected|public|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield)\b/i],"argument-name":/\b[a-z_]\w*(?=\s*:(?!:))/i,"class-name":[{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,"function":/\w+\s*(?=\()/,property:{pattern:/(->)[\w]+/,lookbehind:!0},number:a,operator:r,punctuation:s};var i={pattern:/{\$(?:{(?:{[^{}]+}|[^{}]+)}|[^{}])+}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)*)/,lookbehind:!0,inside:n.languages.php},o=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:i}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:i}}];n.languages.insertBefore("php","variable",{string:o}),n.languages.insertBefore("php","variable",{attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=]$)/,lookbehind:!0,inside:{comment:e,string:o,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,number:a,operator:r,punctuation:s}},delimiter:{pattern:/^#\[|]$/,alias:"punctuation"}}}}),n.hooks.add("before-tokenize",function(e){/<\?/.test(e.code)&&n.languages["markup-templating"].buildPlaceholders(e,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/gi)}),n.hooks.add("after-tokenize",function(e){n.languages["markup-templating"].tokenizePlaceholders(e,"php")})}(Prism)},{}],12:[function(e,n,t){Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|rb|br)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},"function":{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^\s*)@\w+(?:\.\w+)*/im,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,"boolean":/\b(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python},{}],13:[function(e,n,t){!function(e){e.languages.ruby=e.languages.extend("clike",{comment:[/#.*/,{pattern:/^=begin\s[\s\S]*?^=end/m,greedy:!0}],"class-name":{pattern:/(\b(?:class)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|protected|private|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/});var n={pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"tag"},rest:e.languages.ruby}};delete e.languages.ruby["function"],e.languages.insertBefore("ruby","keyword",{regex:[{pattern:RegExp(/%r/.source+"(?:"+[/([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1[gim]{0,3}/.source,/\((?:[^()\\]|\\[\s\S])*\)[gim]{0,3}/.source,/\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}[gim]{0,3}/.source,/\[(?:[^\[\]\\]|\\[\s\S])*\][gim]{0,3}/.source,/<(?:[^<>\\]|\\[\s\S])*>[gim]{0,3}/.source].join("|")+")"),greedy:!0,inside:{interpolation:n}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[gim]{0,3}(?=\s*(?:$|[\r\n,.;})]))/,lookbehind:!0,greedy:!0}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:{pattern:/(^|[^:]):[a-zA-Z_]\w*(?:[?!]|\b)/,lookbehind:!0},"method-definition":{pattern:/(\bdef\s+)[\w.]+/,lookbehind:!0,inside:{"function":/\w+$/,rest:e.languages.ruby}}}),e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|Fixnum|Float|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/,constant:/\b[A-Z]\w*(?:[?!]|\b)/}),e.languages.ruby.string=[{pattern:RegExp(/%[qQiIwWxs]?/.source+"(?:"+[/([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/\((?:[^()\\]|\\[\s\S])*\)/.source,/\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/.source,/\[(?:[^\[\]\\]|\\[\s\S])*\]/.source,/<(?:[^<>\\]|\\[\s\S])*>/.source].join("|")+")"),greedy:!0,inside:{interpolation:n}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:n}}],e.languages.rb=e.languages.ruby}(Prism)},{}],14:[function(e,n,t){var a=e("prismjs/components/prism-core");e("prismjs/components/prism-clike"),e("prismjs/components/prism-markup-templating"),e("prismjs/components/prism-c"),e("prismjs/components/prism-cpp"),e("prismjs/components/prism-csharp"),e("prismjs/components/prism-css"),e("prismjs/components/prism-java"),e("prismjs/components/prism-javascript"),e("prismjs/components/prism-markup"),e("prismjs/components/prism-php"),e("prismjs/components/prism-python"),e("prismjs/components/prism-ruby"),n.exports={boltExport:a}},{"prismjs/components/prism-c":1,"prismjs/components/prism-clike":2,"prismjs/components/prism-core":3,"prismjs/components/prism-cpp":4,"prismjs/components/prism-csharp":5,"prismjs/components/prism-css":6,"prismjs/components/prism-java":7,"prismjs/components/prism-javascript":8,"prismjs/components/prism-markup":10,"prismjs/components/prism-markup-templating":9,"prismjs/components/prism-php":11,"prismjs/components/prism-python":12,"prismjs/components/prism-ruby":13}]},{},[14])(14)});var r=window.Prism;window.Prism=e}(undefined,b,h,undefined);var w=h.exports.boltExport,v=function(e){return f.Prism&&e.getParam("codesample_global_prismjs",!1,"boolean")?f.Prism:w},k=function(e){var n=e.selection?e.selection.getNode():null;return g(n)?c.some(n):c.none()},_=function(s){var t,e=s.getParam("codesample_languages")||[{text:"HTML/XML",value:"markup"},{text:"JavaScript",value:"javascript"},{text:"CSS",value:"css"},{text:"PHP",value:"php"},{text:"Ruby",value:"ruby"},{text:"Python",value:"python"},{text:"Java",value:"java"},{text:"C",value:"c"},{text:"C#",value:"csharp"},{text:"C++",value:"cpp"}],n=d(e).fold(function(){return""},function(e){return e.value}),a=(t=n,k(s).fold(function(){return t},function(e){var n=e.className.match(/language-(\w+)/);return n?n[1]:t})),r=k(s).fold(function(){return""},function(e){return e.textContent});s.windowManager.open({title:"Insert/Edit Code Sample",size:"large",body:{type:"panel",items:[{type:"selectbox",name:"language",label:"Language",items:e},{type:"textarea",name:"code",label:"Code view"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{language:a,code:r},onSubmit:function(e){var n,t,a,r=e.getData();n=s,t=r.language,a=r.code,n.undoManager.transact(function(){var e=k(n);return a=p.DOM.encode(a),e.fold(function(){n.insertContent('

    '+a+"
    "),n.selection.select(n.$("#__new").removeAttr("id")[0])},function(e){n.dom.setAttrib(e,"class","language-"+t),e.innerHTML=a,v(n).highlightElement(e),n.selection.select(e)})}),e.close()}})},x=function(a){a.ui.registry.addToggleButton("codesample",{icon:"code-sample",tooltip:"Insert/edit code sample",onAction:function(){return _(a)},onSetup:function(t){var e=function(){var e,n;t.setActive((n=(e=a).selection.getStart(),e.dom.is(n,'pre[class*="language-"]')))};return a.on("NodeChange",e),function(){return a.off("NodeChange",e)}}}),a.ui.registry.addMenuItem("codesample",{text:"Code sample...",icon:"code-sample",onAction:function(){return _(a)}})};a.add("codesample",function(n){var t,r,a;r=(t=n).$,t.on("PreProcess",function(e){r("pre[contenteditable=false]",e.node).filter(m(g)).each(function(e,n){var t=r(n),a=n.textContent;t.attr("class",r.trim(t.attr("class"))),t.removeAttr("contentEditable"),t.empty().append(r("").each(function(){this.textContent=a}))})}),t.on("SetContent",function(){var e=r("pre").filter(m(g)).filter(function(e,n){return"false"!==n.contentEditable});e.length&&t.undoManager.transact(function(){e.each(function(e,n){r(n).find("br").each(function(e,n){n.parentNode.replaceChild(t.getDoc().createTextNode("\n"),n)}),n.contentEditable="false",n.innerHTML=t.dom.encode(n.textContent),v(t).highlightElement(n),n.className=r.trim(n.className)})})}),x(n),(a=n).addCommand("codesample",function(){var e=a.selection.getNode();a.selection.isCollapsed()||g(e)?_(a):a.formatter.toggle("code")}),n.on("dblclick",function(e){g(e.target)&&_(n)})})}(); diff --git a/public/assets/tinymce/plugins/codesample/plugin-58dce15e40cdb579a3a21b9ce74d0725bc50071adb6769547003a39ef6e1a3e3.js.gz b/public/assets/tinymce/plugins/codesample/plugin-58dce15e40cdb579a3a21b9ce74d0725bc50071adb6769547003a39ef6e1a3e3.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..c05be8d35ad391879099c40cc8099a826c9c89a6 GIT binary patch literal 14867 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 F005p=!&(3U literal 0 HcmV?d00001 diff --git a/public/assets/tinymce/plugins/codesample/plugin.js b/public/assets/tinymce/plugins/codesample/plugin.js new file mode 120000 index 00000000..0e8f16ea --- /dev/null +++ b/public/assets/tinymce/plugins/codesample/plugin.js @@ -0,0 +1 @@ +plugin-58dce15e40cdb579a3a21b9ce74d0725bc50071adb6769547003a39ef6e1a3e3.js \ No newline at end of file diff --git a/public/assets/tinymce/plugins/codesample/plugin.js.gz b/public/assets/tinymce/plugins/codesample/plugin.js.gz new file mode 120000 index 00000000..f25b0e46 --- /dev/null +++ b/public/assets/tinymce/plugins/codesample/plugin.js.gz @@ -0,0 +1 @@ +plugin-58dce15e40cdb579a3a21b9ce74d0725bc50071adb6769547003a39ef6e1a3e3.js.gz \ No newline at end of file diff --git a/public/assets/tinymce/plugins/colorpicker/plugin-fd701e4b52db508ae6794a0811e2df5be1e69f6108c6897dc564067666beb3a0.js b/public/assets/tinymce/plugins/colorpicker/plugin-fd701e4b52db508ae6794a0811e2df5be1e69f6108c6897dc564067666beb3a0.js new file mode 100644 index 00000000..62729100 --- /dev/null +++ b/public/assets/tinymce/plugins/colorpicker/plugin-fd701e4b52db508ae6794a0811e2df5be1e69f6108c6897dc564067666beb3a0.js @@ -0,0 +1,9 @@ +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.8.2 (2021-06-23) + */ +!function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("colorpicker",function(){console.warn("Color picker plugin is now built in to the core editor, please remove it from your editor configuration")})}(); diff --git a/public/assets/tinymce/plugins/colorpicker/plugin-fd701e4b52db508ae6794a0811e2df5be1e69f6108c6897dc564067666beb3a0.js.gz b/public/assets/tinymce/plugins/colorpicker/plugin-fd701e4b52db508ae6794a0811e2df5be1e69f6108c6897dc564067666beb3a0.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..c207fbacb15f0f5612af4bb561a79a75d474bb0c GIT binary patch literal 349 zcmV-j0iymNiwFQbm91g|17(oGPQx$^hVOd{(^ETb=_mrB?Sv+QkcPCw#J!|m8%X2I zNmeGbcgO7pLgJYC`#&dtKAlcr3Tx_)Z0aUJsx#ObcZ414#*wAkpr66B(+VD}g^}{W z=#dXtsUf{F8lA@qqN|W0Gzgog?FNXU1Wj#=tW9abp1CpeD8mu*h(7`qJ_8sx3Oc5D z)B%_%z+T`>SmttS%V5a;ivI8Lqqhm6^UFN%`(6e4l+u=Bl}l_$z9M_EEa6t&s{+zu zQC!a#ck|*VlW{(|+DE5{J!$rpL|N?v8y%9>plUU$7>rdrBI}j(LH2-Y@-y4oSR40J zy0S)2GF4VpnrP{hJEK43YWByj$w?elU$RS+^+3THgKqSI@!+V3w`lCSA{txL#0XfK vKs*x^OL-+@O9$ymYGZ2QNRcmy;BIf~$YXm+cFIm^wwinc4bv**1Ofm6{>7~wd^(-L6xP(8*wjscRA;a=?gTs3jU!97K|h06rxiR|3nS%$ z(IX$QQbT%UG&+wJL{}k0Xb?6p+YJyy37Xm#S)0;=y>MgZS%xFz5q|_K90M3P3Oc4w z)B%_%z+T{MSmttS%V5a;ivI8Lqqhm6^UFN%`(6e4l+u=Bl}l_$z9W0FEa6@~sshqt zQQXcK5A)(KlW{(|*+-{`J!$rpL|N?v8y%9>plUU$7>rdrBI}j(LH2-Y@-y4oSR40N zy0S)2GF4VpnrLzXkD)~uli44;+)Er)U$RS+^@V}~gKqSI@!+V3k7(?rA{txL#0XfK vKs*x^OL-+@O9$ymYGZ2QM3JwE;BIf~$YXm+cFxXewwincIRRy>1Ofm6!=|J7 literal 0 HcmV?d00001 diff --git a/public/assets/tinymce/plugins/contextmenu/plugin.js b/public/assets/tinymce/plugins/contextmenu/plugin.js new file mode 120000 index 00000000..f07cbec9 --- /dev/null +++ b/public/assets/tinymce/plugins/contextmenu/plugin.js @@ -0,0 +1 @@ +plugin-466629e42bf8c9385163805640d88f42476f32ee3c2180ca89137bf07e3a251f.js \ No newline at end of file diff --git a/public/assets/tinymce/plugins/contextmenu/plugin.js.gz b/public/assets/tinymce/plugins/contextmenu/plugin.js.gz new file mode 120000 index 00000000..3a199386 --- /dev/null +++ b/public/assets/tinymce/plugins/contextmenu/plugin.js.gz @@ -0,0 +1 @@ +plugin-466629e42bf8c9385163805640d88f42476f32ee3c2180ca89137bf07e3a251f.js.gz \ No newline at end of file diff --git a/public/assets/tinymce/plugins/directionality/plugin-bf67abe0d37244a65c89fca222678446401d1df666a3eb80aad22eb969f2ede1.js b/public/assets/tinymce/plugins/directionality/plugin-bf67abe0d37244a65c89fca222678446401d1df666a3eb80aad22eb969f2ede1.js new file mode 100644 index 00000000..8b40e06b --- /dev/null +++ b/public/assets/tinymce/plugins/directionality/plugin-bf67abe0d37244a65c89fca222678446401d1df666a3eb80aad22eb969f2ede1.js @@ -0,0 +1,9 @@ +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.8.2 (2021-06-23) + */ +!function(){"use strict";var t,n,e,o,r=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=tinymce.util.Tools.resolve("tinymce.util.Tools"),i=function(n,t){var e,o=n.dom,r=n.selection.getSelectedBlocks();r.length&&(e=o.getAttrib(r[0],"dir"),u.each(r,function(n){o.getParent(n.parentNode,'*[dir="'+t+'"]',o.getRoot())||o.setAttrib(n,"dir",e!==t?t:null)}),n.nodeChanged())},c=function(n){return!(null===(t=n)||t===undefined);var t},f=function(n){return typeof n===t},d=function(n){return function(){return n}},l=d(!(t="function")),m=d(!0),a=function(){return s},s=(n=function(n){return n.isNone()},{fold:function(n,t){return n()},is:l,isSome:l,isNone:m,getOr:o=function(n){return n},getOrThunk:e=function(n){return n()},getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:d(null),getOrUndefined:d(undefined),or:o,orThunk:e,map:a,each:function(){},bind:a,exists:l,forall:m,filter:a,equals:n,equals_:n,toArray:function(){return[]},toString:d("none()")}),g=function(e){var n=d(e),t=function(){return r},o=function(n){return n(e)},r={fold:function(n,t){return t(e)},is:function(n){return e===n},isSome:m,isNone:l,getOr:n,getOrThunk:n,getOrDie:n,getOrNull:n,getOrUndefined:n,or:t,orThunk:t,map:function(n){return g(n(e))},each:function(n){n(e)},bind:o,exists:o,forall:o,filter:function(n){return n(e)?r:s},toArray:function(){return[e]},toString:function(){return"some("+e+")"},equals:function(n){return n.is(e)},equals_:function(n,t){return n.fold(l,function(n){return t(e,n)})}};return r},h={some:g,none:a,from:function(n){return null===n||n===undefined?s:g(n)}},v=function(n){if(null===n||n===undefined)throw new Error("Node cannot be null or undefined");return{dom:n}},y={fromHtml:function(n,t){var e=(t||document).createElement("div");if(e.innerHTML=n,!e.hasChildNodes()||1288(^iwFQbm91g|1D#h}Z`(E$e($eP_|TFq%QPJ}Y|4ZnOV(|GmlmDbanlO9FcHDdkuokK~s5-UYF1aK(v+`n_v>GS7LqUX_-U2R>tD15{-5zR`ojb@M) z#%jALp_0*WCR5R+)={9UA_osPPOUcUP7Pf>lB@oMuN1`B_w#6fvSC})y!I5DU6QQYv8QEd#CF~X?{;lx&X(7tiOuu zaEB~qvNy*_FYd?)G$1i5w@Wm`s0uU$0<{1?4G)n2q;2+h#l^W(8qC5MPoHu~ERkG# z^yd?IA6|WwEH8sy3ev3LP9AiLyFmOdbznRx}{+bCPm-OJAoS*8&<#b}?<4I)q(^iwI2n(o-Nyh4TBiaK zwg3np08L;XlK1vC337%wJ8xNt4UngR!D zFcF&O`~Y&1+>r(GLQpD^eR}N>qS|eGr`575d87z8&(%tK@p#!^(ID~k>6}x12KU{LKySsxhy`2K#jcCUfSxvlv68&O z^M#3NJ&*@>AK2{%GyA%SZNDwNy;r2|N(aeifa5ia19Twk1QoXO;-XNYPl1RFWxAPu zm3)O8fxVH_W4*~Nm>;MP>s1_HP<7s0cd&=F-NYYG4}9#FrnB>IN2De7K1uK5TRw;u zW?5*NBO_3KvN>+g*7&qE6(>J%i=5(Myc+ATz%4#ugGIVYGS;4v+Xz+pt)`7|?;K?d zw6DX`>Ff%e-@Z?E4HTjA8?+~8?OG0vyd439Ij!* z782>WvddMCEA*6JmSh7Pz9g zEs2@g1rCg#YVXN&(jf0Vemwbd6|)J7 z+nOnouHs8vDE3almn|bF2A181&u%nLqlvv`f#&~NMuB^1Sr<3_!w',fitzpatrick_scale:!1,category:"symbols"},1234:{keywords:["numbers","blue-square"],"char":'\ud83d\udd22',fitzpatrick_scale:!1,category:"symbols"},grinning:{keywords:["face","smile","happy","joy",":D","grin"],"char":'\ud83d\ude00',fitzpatrick_scale:!1,category:"people"},grimacing:{keywords:["face","grimace","teeth"],"char":'\ud83d\ude2c',fitzpatrick_scale:!1,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],"char":'\ud83d\ude01',fitzpatrick_scale:!1,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],"char":'\ud83d\ude02',fitzpatrick_scale:!1,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],"char":'\ud83e\udd23',fitzpatrick_scale:!1,category:"people"},partying:{keywords:["face","celebration","woohoo"],"char":'\ud83e\udd73',fitzpatrick_scale:!1,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],"char":'\ud83d\ude03',fitzpatrick_scale:!1,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],"char":'\ud83d\ude04',fitzpatrick_scale:!1,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],"char":'\ud83d\ude05',fitzpatrick_scale:!1,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],"char":'\ud83d\ude06',fitzpatrick_scale:!1,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],"char":'\ud83d\ude07',fitzpatrick_scale:!1,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],"char":'\ud83d\ude09',fitzpatrick_scale:!1,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],"char":'\ud83d\ude0a',fitzpatrick_scale:!1,category:"people"},slightly_smiling_face:{keywords:["face","smile"],"char":'\ud83d\ude42',fitzpatrick_scale:!1,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],"char":'\ud83d\ude43',fitzpatrick_scale:!1,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],"char":'\u263a\ufe0f',fitzpatrick_scale:!1,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],"char":'\ud83d\ude0b',fitzpatrick_scale:!1,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],"char":'\ud83d\ude0c',fitzpatrick_scale:!1,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],"char":'\ud83d\ude0d',fitzpatrick_scale:!1,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],"char":'\ud83e\udd70',fitzpatrick_scale:!1,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],"char":'\ud83d\ude18',fitzpatrick_scale:!1,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],"char":'\ud83d\ude17',fitzpatrick_scale:!1,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],"char":'\ud83d\ude19',fitzpatrick_scale:!1,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],"char":'\ud83d\ude1a',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],"char":'\ud83d\ude1c',fitzpatrick_scale:!1,category:"people"},zany:{keywords:["face","goofy","crazy"],"char":'\ud83e\udd2a',fitzpatrick_scale:!1,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],"char":'\ud83e\udd28',fitzpatrick_scale:!1,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],"char":'\ud83e\uddd0',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],"char":'\ud83d\ude1d',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],"char":'\ud83d\ude1b',fitzpatrick_scale:!1,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],"char":'\ud83e\udd11',fitzpatrick_scale:!1,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],"char":'\ud83e\udd13',fitzpatrick_scale:!1,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],"char":'\ud83d\ude0e',fitzpatrick_scale:!1,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],"char":'\ud83e\udd29',fitzpatrick_scale:!1,category:"people"},clown_face:{keywords:["face"],"char":'\ud83e\udd21',fitzpatrick_scale:!1,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],"char":'\ud83e\udd20',fitzpatrick_scale:!1,category:"people"},hugs:{keywords:["face","smile","hug"],"char":'\ud83e\udd17',fitzpatrick_scale:!1,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],"char":'\ud83d\ude0f',fitzpatrick_scale:!1,category:"people"},no_mouth:{keywords:["face","hellokitty"],"char":'\ud83d\ude36',fitzpatrick_scale:!1,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],"char":'\ud83d\ude10',fitzpatrick_scale:!1,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],"char":'\ud83d\ude11',fitzpatrick_scale:!1,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],"char":'\ud83d\ude12',fitzpatrick_scale:!1,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],"char":'\ud83d\ude44',fitzpatrick_scale:!1,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],"char":'\ud83e\udd14',fitzpatrick_scale:!1,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],"char":'\ud83e\udd25',fitzpatrick_scale:!1,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],"char":'\ud83e\udd2d',fitzpatrick_scale:!1,category:"people"},shushing:{keywords:["face","quiet","shhh"],"char":'\ud83e\udd2b',fitzpatrick_scale:!1,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],"char":'\ud83e\udd2c',fitzpatrick_scale:!1,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],"char":'\ud83e\udd2f',fitzpatrick_scale:!1,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],"char":'\ud83d\ude33',fitzpatrick_scale:!1,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],"char":'\ud83d\ude1e',fitzpatrick_scale:!1,category:"people"},worried:{keywords:["face","concern","nervous",":("],"char":'\ud83d\ude1f',fitzpatrick_scale:!1,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],"char":'\ud83d\ude20',fitzpatrick_scale:!1,category:"people"},rage:{keywords:["angry","mad","hate","despise"],"char":'\ud83d\ude21',fitzpatrick_scale:!1,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],"char":'\ud83d\ude14',fitzpatrick_scale:!1,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],"char":'\ud83d\ude15',fitzpatrick_scale:!1,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],"char":'\ud83d\ude41',fitzpatrick_scale:!1,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],"char":'\u2639',fitzpatrick_scale:!1,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],"char":'\ud83d\ude23',fitzpatrick_scale:!1,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],"char":'\ud83d\ude16',fitzpatrick_scale:!1,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],"char":'\ud83d\ude2b',fitzpatrick_scale:!1,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],"char":'\ud83d\ude29',fitzpatrick_scale:!1,category:"people"},pleading:{keywords:["face","begging","mercy"],"char":'\ud83e\udd7a',fitzpatrick_scale:!1,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],"char":'\ud83d\ude24',fitzpatrick_scale:!1,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],"char":'\ud83d\ude2e',fitzpatrick_scale:!1,category:"people"},scream:{keywords:["face","munch","scared","omg"],"char":'\ud83d\ude31',fitzpatrick_scale:!1,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],"char":'\ud83d\ude28',fitzpatrick_scale:!1,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],"char":'\ud83d\ude30',fitzpatrick_scale:!1,category:"people"},hushed:{keywords:["face","woo","shh"],"char":'\ud83d\ude2f',fitzpatrick_scale:!1,category:"people"},frowning:{keywords:["face","aw","what"],"char":'\ud83d\ude26',fitzpatrick_scale:!1,category:"people"},anguished:{keywords:["face","stunned","nervous"],"char":'\ud83d\ude27',fitzpatrick_scale:!1,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],"char":'\ud83d\ude22',fitzpatrick_scale:!1,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],"char":'\ud83d\ude25',fitzpatrick_scale:!1,category:"people"},drooling_face:{keywords:["face"],"char":'\ud83e\udd24',fitzpatrick_scale:!1,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],"char":'\ud83d\ude2a',fitzpatrick_scale:!1,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],"char":'\ud83d\ude13',fitzpatrick_scale:!1,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],"char":'\ud83e\udd75',fitzpatrick_scale:!1,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],"char":'\ud83e\udd76',fitzpatrick_scale:!1,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],"char":'\ud83d\ude2d',fitzpatrick_scale:!1,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],"char":'\ud83d\ude35',fitzpatrick_scale:!1,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],"char":'\ud83d\ude32',fitzpatrick_scale:!1,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],"char":'\ud83e\udd10',fitzpatrick_scale:!1,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],"char":'\ud83e\udd22',fitzpatrick_scale:!1,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],"char":'\ud83e\udd27',fitzpatrick_scale:!1,category:"people"},vomiting:{keywords:["face","sick"],"char":'\ud83e\udd2e',fitzpatrick_scale:!1,category:"people"},mask:{keywords:["face","sick","ill","disease"],"char":'\ud83d\ude37',fitzpatrick_scale:!1,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],"char":'\ud83e\udd12',fitzpatrick_scale:!1,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],"char":'\ud83e\udd15',fitzpatrick_scale:!1,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],"char":'\ud83e\udd74',fitzpatrick_scale:!1,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],"char":'\ud83d\ude34',fitzpatrick_scale:!1,category:"people"},zzz:{keywords:["sleepy","tired","dream"],"char":'\ud83d\udca4',fitzpatrick_scale:!1,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],"char":'\ud83d\udca9',fitzpatrick_scale:!1,category:"people"},smiling_imp:{keywords:["devil","horns"],"char":'\ud83d\ude08',fitzpatrick_scale:!1,category:"people"},imp:{keywords:["devil","angry","horns"],"char":'\ud83d\udc7f',fitzpatrick_scale:!1,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],"char":'\ud83d\udc79',fitzpatrick_scale:!1,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],"char":'\ud83d\udc7a',fitzpatrick_scale:!1,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],"char":'\ud83d\udc80',fitzpatrick_scale:!1,category:"people"},ghost:{keywords:["halloween","spooky","scary"],"char":'\ud83d\udc7b',fitzpatrick_scale:!1,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],"char":'\ud83d\udc7d',fitzpatrick_scale:!1,category:"people"},robot:{keywords:["computer","machine","bot"],"char":'\ud83e\udd16',fitzpatrick_scale:!1,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],"char":'\ud83d\ude3a',fitzpatrick_scale:!1,category:"people"},smile_cat:{keywords:["animal","cats","smile"],"char":'\ud83d\ude38',fitzpatrick_scale:!1,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],"char":'\ud83d\ude39',fitzpatrick_scale:!1,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],"char":'\ud83d\ude3b',fitzpatrick_scale:!1,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],"char":'\ud83d\ude3c',fitzpatrick_scale:!1,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],"char":'\ud83d\ude3d',fitzpatrick_scale:!1,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],"char":'\ud83d\ude40',fitzpatrick_scale:!1,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],"char":'\ud83d\ude3f',fitzpatrick_scale:!1,category:"people"},pouting_cat:{keywords:["animal","cats"],"char":'\ud83d\ude3e',fitzpatrick_scale:!1,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],"char":'\ud83e\udd32',fitzpatrick_scale:!0,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],"char":'\ud83d\ude4c',fitzpatrick_scale:!0,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],"char":'\ud83d\udc4f',fitzpatrick_scale:!0,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],"char":'\ud83d\udc4b',fitzpatrick_scale:!0,category:"people"},call_me_hand:{keywords:["hands","gesture"],"char":'\ud83e\udd19',fitzpatrick_scale:!0,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],"char":'\ud83d\udc4d',fitzpatrick_scale:!0,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],"char":'\ud83d\udc4e',fitzpatrick_scale:!0,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],"char":'\ud83d\udc4a',fitzpatrick_scale:!0,category:"people"},fist:{keywords:["fingers","hand","grasp"],"char":'\u270a',fitzpatrick_scale:!0,category:"people"},fist_left:{keywords:["hand","fistbump"],"char":'\ud83e\udd1b',fitzpatrick_scale:!0,category:"people"},fist_right:{keywords:["hand","fistbump"],"char":'\ud83e\udd1c',fitzpatrick_scale:!0,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],"char":'\u270c',fitzpatrick_scale:!0,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],"char":'\ud83d\udc4c',fitzpatrick_scale:!0,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],"char":'\u270b',fitzpatrick_scale:!0,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],"char":'\ud83e\udd1a',fitzpatrick_scale:!0,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],"char":'\ud83d\udc50',fitzpatrick_scale:!0,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],"char":'\ud83d\udcaa',fitzpatrick_scale:!0,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],"char":'\ud83d\ude4f',fitzpatrick_scale:!0,category:"people"},foot:{keywords:["kick","stomp"],"char":'\ud83e\uddb6',fitzpatrick_scale:!0,category:"people"},leg:{keywords:["kick","limb"],"char":'\ud83e\uddb5',fitzpatrick_scale:!0,category:"people"},handshake:{keywords:["agreement","shake"],"char":'\ud83e\udd1d',fitzpatrick_scale:!1,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],"char":'\u261d',fitzpatrick_scale:!0,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],"char":'\ud83d\udc46',fitzpatrick_scale:!0,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],"char":'\ud83d\udc47',fitzpatrick_scale:!0,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],"char":'\ud83d\udc48',fitzpatrick_scale:!0,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],"char":'\ud83d\udc49',fitzpatrick_scale:!0,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],"char":'\ud83d\udd95',fitzpatrick_scale:!0,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],"char":'\ud83d\udd90',fitzpatrick_scale:!0,category:"people"},love_you:{keywords:["hand","fingers","gesture"],"char":'\ud83e\udd1f',fitzpatrick_scale:!0,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],"char":'\ud83e\udd18',fitzpatrick_scale:!0,category:"people"},crossed_fingers:{keywords:["good","lucky"],"char":'\ud83e\udd1e',fitzpatrick_scale:!0,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],"char":'\ud83d\udd96',fitzpatrick_scale:!0,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],"char":'\u270d',fitzpatrick_scale:!0,category:"people"},selfie:{keywords:["camera","phone"],"char":'\ud83e\udd33',fitzpatrick_scale:!0,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],"char":'\ud83d\udc85',fitzpatrick_scale:!0,category:"people"},lips:{keywords:["mouth","kiss"],"char":'\ud83d\udc44',fitzpatrick_scale:!1,category:"people"},tooth:{keywords:["teeth","dentist"],"char":'\ud83e\uddb7',fitzpatrick_scale:!1,category:"people"},tongue:{keywords:["mouth","playful"],"char":'\ud83d\udc45',fitzpatrick_scale:!1,category:"people"},ear:{keywords:["face","hear","sound","listen"],"char":'\ud83d\udc42',fitzpatrick_scale:!0,category:"people"},nose:{keywords:["smell","sniff"],"char":'\ud83d\udc43',fitzpatrick_scale:!0,category:"people"},eye:{keywords:["face","look","see","watch","stare"],"char":'\ud83d\udc41',fitzpatrick_scale:!1,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],"char":'\ud83d\udc40',fitzpatrick_scale:!1,category:"people"},brain:{keywords:["smart","intelligent"],"char":'\ud83e\udde0',fitzpatrick_scale:!1,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],"char":'\ud83d\udc64',fitzpatrick_scale:!1,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],"char":'\ud83d\udc65',fitzpatrick_scale:!1,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],"char":'\ud83d\udde3',fitzpatrick_scale:!1,category:"people"},baby:{keywords:["child","boy","girl","toddler"],"char":'\ud83d\udc76',fitzpatrick_scale:!0,category:"people"},child:{keywords:["gender-neutral","young"],"char":'\ud83e\uddd2',fitzpatrick_scale:!0,category:"people"},boy:{keywords:["man","male","guy","teenager"],"char":'\ud83d\udc66',fitzpatrick_scale:!0,category:"people"},girl:{keywords:["female","woman","teenager"],"char":'\ud83d\udc67',fitzpatrick_scale:!0,category:"people"},adult:{keywords:["gender-neutral","person"],"char":'\ud83e\uddd1',fitzpatrick_scale:!0,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],"char":'\ud83d\udc68',fitzpatrick_scale:!0,category:"people"},woman:{keywords:["female","girls","lady"],"char":'\ud83d\udc69',fitzpatrick_scale:!0,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],"char":'\ud83d\udc71\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],"char":'\ud83d\udc71',fitzpatrick_scale:!0,category:"people"},bearded_person:{keywords:["person","bewhiskered"],"char":'\ud83e\uddd4',fitzpatrick_scale:!0,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],"char":'\ud83e\uddd3',fitzpatrick_scale:!0,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],"char":'\ud83d\udc74',fitzpatrick_scale:!0,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],"char":'\ud83d\udc75',fitzpatrick_scale:!0,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],"char":'\ud83d\udc72',fitzpatrick_scale:!0,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],"char":'\ud83e\uddd5',fitzpatrick_scale:!0,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],"char":'\ud83d\udc73\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],"char":'\ud83d\udc73',fitzpatrick_scale:!0,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],"char":'\ud83d\udc6e\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],"char":'\ud83d\udc6e',fitzpatrick_scale:!0,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],"char":'\ud83d\udc77\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],"char":'\ud83d\udc77',fitzpatrick_scale:!0,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],"char":'\ud83d\udc82\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],"char":'\ud83d\udc82',fitzpatrick_scale:!0,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],"char":'\ud83d\udd75\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},male_detective:{keywords:["human","spy","detective"],"char":'\ud83d\udd75',fitzpatrick_scale:!0,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],"char":'\ud83d\udc69\u200d\u2695\ufe0f',fitzpatrick_scale:!0,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],"char":'\ud83d\udc68\u200d\u2695\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],"char":'\ud83d\udc69\u200d\ud83c\udf3e',fitzpatrick_scale:!0,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],"char":'\ud83d\udc68\u200d\ud83c\udf3e',fitzpatrick_scale:!0,category:"people"},woman_cook:{keywords:["chef","woman","human"],"char":'\ud83d\udc69\u200d\ud83c\udf73',fitzpatrick_scale:!0,category:"people"},man_cook:{keywords:["chef","man","human"],"char":'\ud83d\udc68\u200d\ud83c\udf73',fitzpatrick_scale:!0,category:"people"},woman_student:{keywords:["graduate","woman","human"],"char":'\ud83d\udc69\u200d\ud83c\udf93',fitzpatrick_scale:!0,category:"people"},man_student:{keywords:["graduate","man","human"],"char":'\ud83d\udc68\u200d\ud83c\udf93',fitzpatrick_scale:!0,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],"char":'\ud83d\udc69\u200d\ud83c\udfa4',fitzpatrick_scale:!0,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],"char":'\ud83d\udc68\u200d\ud83c\udfa4',fitzpatrick_scale:!0,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],"char":'\ud83d\udc69\u200d\ud83c\udfeb',fitzpatrick_scale:!0,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],"char":'\ud83d\udc68\u200d\ud83c\udfeb',fitzpatrick_scale:!0,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],"char":'\ud83d\udc69\u200d\ud83c\udfed',fitzpatrick_scale:!0,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],"char":'\ud83d\udc68\u200d\ud83c\udfed',fitzpatrick_scale:!0,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],"char":'\ud83d\udc69\u200d\ud83d\udcbb',fitzpatrick_scale:!0,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],"char":'\ud83d\udc68\u200d\ud83d\udcbb',fitzpatrick_scale:!0,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],"char":'\ud83d\udc69\u200d\ud83d\udcbc',fitzpatrick_scale:!0,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],"char":'\ud83d\udc68\u200d\ud83d\udcbc',fitzpatrick_scale:!0,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],"char":'\ud83d\udc69\u200d\ud83d\udd27',fitzpatrick_scale:!0,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],"char":'\ud83d\udc68\u200d\ud83d\udd27',fitzpatrick_scale:!0,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],"char":'\ud83d\udc69\u200d\ud83d\udd2c',fitzpatrick_scale:!0,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],"char":'\ud83d\udc68\u200d\ud83d\udd2c',fitzpatrick_scale:!0,category:"people"},woman_artist:{keywords:["painter","woman","human"],"char":'\ud83d\udc69\u200d\ud83c\udfa8',fitzpatrick_scale:!0,category:"people"},man_artist:{keywords:["painter","man","human"],"char":'\ud83d\udc68\u200d\ud83c\udfa8',fitzpatrick_scale:!0,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],"char":'\ud83d\udc69\u200d\ud83d\ude92',fitzpatrick_scale:!0,category:"people"},man_firefighter:{keywords:["fireman","man","human"],"char":'\ud83d\udc68\u200d\ud83d\ude92',fitzpatrick_scale:!0,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],"char":'\ud83d\udc69\u200d\u2708\ufe0f',fitzpatrick_scale:!0,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],"char":'\ud83d\udc68\u200d\u2708\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],"char":'\ud83d\udc69\u200d\ud83d\ude80',fitzpatrick_scale:!0,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],"char":'\ud83d\udc68\u200d\ud83d\ude80',fitzpatrick_scale:!0,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],"char":'\ud83d\udc69\u200d\u2696\ufe0f',fitzpatrick_scale:!0,category:"people"},man_judge:{keywords:["justice","court","man","human"],"char":'\ud83d\udc68\u200d\u2696\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],"char":'\ud83e\uddb8\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],"char":'\ud83e\uddb8\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],"char":'\ud83e\uddb9\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],"char":'\ud83e\uddb9\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],"char":'\ud83e\udd36',fitzpatrick_scale:!0,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],"char":'\ud83c\udf85',fitzpatrick_scale:!0,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],"char":'\ud83e\uddd9\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],"char":'\ud83e\uddd9\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_elf:{keywords:["woman","female"],"char":'\ud83e\udddd\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_elf:{keywords:["man","male"],"char":'\ud83e\udddd\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_vampire:{keywords:["woman","female"],"char":'\ud83e\udddb\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_vampire:{keywords:["man","male","dracula"],"char":'\ud83e\udddb\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],"char":'\ud83e\udddf\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],"char":'\ud83e\udddf\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"people"},woman_genie:{keywords:["woman","female"],"char":'\ud83e\uddde\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"people"},man_genie:{keywords:["man","male"],"char":'\ud83e\uddde\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],"char":'\ud83e\udddc\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},merman:{keywords:["man","male","triton"],"char":'\ud83e\udddc\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_fairy:{keywords:["woman","female"],"char":'\ud83e\uddda\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_fairy:{keywords:["man","male"],"char":'\ud83e\uddda\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},angel:{keywords:["heaven","wings","halo"],"char":'\ud83d\udc7c',fitzpatrick_scale:!0,category:"people"},pregnant_woman:{keywords:["baby"],"char":'\ud83e\udd30',fitzpatrick_scale:!0,category:"people"},breastfeeding:{keywords:["nursing","baby"],"char":'\ud83e\udd31',fitzpatrick_scale:!0,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],"char":'\ud83d\udc78',fitzpatrick_scale:!0,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],"char":'\ud83e\udd34',fitzpatrick_scale:!0,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],"char":'\ud83d\udc70',fitzpatrick_scale:!0,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],"char":'\ud83e\udd35',fitzpatrick_scale:!0,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],"char":'\ud83c\udfc3\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],"char":'\ud83c\udfc3',fitzpatrick_scale:!0,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],"char":'\ud83d\udeb6\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},walking_man:{keywords:["human","feet","steps"],"char":'\ud83d\udeb6',fitzpatrick_scale:!0,category:"people"},dancer:{keywords:["female","girl","woman","fun"],"char":'\ud83d\udc83',fitzpatrick_scale:!0,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],"char":'\ud83d\udd7a',fitzpatrick_scale:!0,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],"char":'\ud83d\udc6f',fitzpatrick_scale:!1,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],"char":'\ud83d\udc6f\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],"char":'\ud83d\udc6b',fitzpatrick_scale:!1,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],"char":'\ud83d\udc6c',fitzpatrick_scale:!1,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],"char":'\ud83d\udc6d',fitzpatrick_scale:!1,category:"people"},bowing_woman:{keywords:["woman","female","girl"],"char":'\ud83d\ude47\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},bowing_man:{keywords:["man","male","boy"],"char":'\ud83d\ude47',fitzpatrick_scale:!0,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],"char":'\ud83e\udd26\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],"char":'\ud83e\udd26\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],"char":'\ud83e\udd37',fitzpatrick_scale:!0,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],"char":'\ud83e\udd37\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],"char":'\ud83d\udc81',fitzpatrick_scale:!0,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],"char":'\ud83d\udc81\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],"char":'\ud83d\ude45',fitzpatrick_scale:!0,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],"char":'\ud83d\ude45\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],"char":'\ud83d\ude46',fitzpatrick_scale:!0,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],"char":'\ud83d\ude46\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],"char":'\ud83d\ude4b',fitzpatrick_scale:!0,category:"people"},raising_hand_man:{keywords:["male","boy","man"],"char":'\ud83d\ude4b\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},pouting_woman:{keywords:["female","girl","woman"],"char":'\ud83d\ude4e',fitzpatrick_scale:!0,category:"people"},pouting_man:{keywords:["male","boy","man"],"char":'\ud83d\ude4e\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],"char":'\ud83d\ude4d',fitzpatrick_scale:!0,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],"char":'\ud83d\ude4d\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},haircut_woman:{keywords:["female","girl","woman"],"char":'\ud83d\udc87',fitzpatrick_scale:!0,category:"people"},haircut_man:{keywords:["male","boy","man"],"char":'\ud83d\udc87\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],"char":'\ud83d\udc86',fitzpatrick_scale:!0,category:"people"},massage_man:{keywords:["male","boy","man","head"],"char":'\ud83d\udc86\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],"char":'\ud83e\uddd6\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],"char":'\ud83e\uddd6\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],"char":'\ud83d\udc91',fitzpatrick_scale:!1,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],"char":'\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc69',fitzpatrick_scale:!1,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],"char":'\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68',fitzpatrick_scale:!1,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],"char":'\ud83d\udc8f',fitzpatrick_scale:!1,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],"char":'\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69',fitzpatrick_scale:!1,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],"char":'\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68',fitzpatrick_scale:!1,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],"char":'\ud83d\udc6a',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],"char":'\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67',fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67',fitzpatrick_scale:!1,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67',fitzpatrick_scale:!1,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67',fitzpatrick_scale:!1,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],"char":'\ud83d\udc69\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],"char":'\ud83d\udc69\u200d\ud83d\udc67',fitzpatrick_scale:!1,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],"char":'\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],"char":'\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],"char":'\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67',fitzpatrick_scale:!1,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],"char":'\ud83d\udc68\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],"char":'\ud83d\udc68\u200d\ud83d\udc67',fitzpatrick_scale:!1,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67',fitzpatrick_scale:!1,category:"people"},yarn:{keywords:["ball","crochet","knit"],"char":'\ud83e\uddf6',fitzpatrick_scale:!1,category:"people"},thread:{keywords:["needle","sewing","spool","string"],"char":'\ud83e\uddf5',fitzpatrick_scale:!1,category:"people"},coat:{keywords:["jacket"],"char":'\ud83e\udde5',fitzpatrick_scale:!1,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],"char":'\ud83e\udd7c',fitzpatrick_scale:!1,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],"char":'\ud83d\udc5a',fitzpatrick_scale:!1,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],"char":'\ud83d\udc55',fitzpatrick_scale:!1,category:"people"},jeans:{keywords:["fashion","shopping"],"char":'\ud83d\udc56',fitzpatrick_scale:!1,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],"char":'\ud83d\udc54',fitzpatrick_scale:!1,category:"people"},dress:{keywords:["clothes","fashion","shopping"],"char":'\ud83d\udc57',fitzpatrick_scale:!1,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],"char":'\ud83d\udc59',fitzpatrick_scale:!1,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],"char":'\ud83d\udc58',fitzpatrick_scale:!1,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],"char":'\ud83d\udc84',fitzpatrick_scale:!1,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],"char":'\ud83d\udc8b',fitzpatrick_scale:!1,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],"char":'\ud83d\udc63',fitzpatrick_scale:!1,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],"char":'\ud83e\udd7f',fitzpatrick_scale:!1,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],"char":'\ud83d\udc60',fitzpatrick_scale:!1,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],"char":'\ud83d\udc61',fitzpatrick_scale:!1,category:"people"},boot:{keywords:["shoes","fashion"],"char":'\ud83d\udc62',fitzpatrick_scale:!1,category:"people"},mans_shoe:{keywords:["fashion","male"],"char":'\ud83d\udc5e',fitzpatrick_scale:!1,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],"char":'\ud83d\udc5f',fitzpatrick_scale:!1,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],"char":'\ud83e\udd7e',fitzpatrick_scale:!1,category:"people"},socks:{keywords:["stockings","clothes"],"char":'\ud83e\udde6',fitzpatrick_scale:!1,category:"people"},gloves:{keywords:["hands","winter","clothes"],"char":'\ud83e\udde4',fitzpatrick_scale:!1,category:"people"},scarf:{keywords:["neck","winter","clothes"],"char":'\ud83e\udde3',fitzpatrick_scale:!1,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],"char":'\ud83d\udc52',fitzpatrick_scale:!1,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],"char":'\ud83c\udfa9',fitzpatrick_scale:!1,category:"people"},billed_hat:{keywords:["cap","baseball"],"char":'\ud83e\udde2',fitzpatrick_scale:!1,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],"char":'\u26d1',fitzpatrick_scale:!1,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],"char":'\ud83c\udf93',fitzpatrick_scale:!1,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],"char":'\ud83d\udc51',fitzpatrick_scale:!1,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],"char":'\ud83c\udf92',fitzpatrick_scale:!1,category:"people"},luggage:{keywords:["packing","travel"],"char":'\ud83e\uddf3',fitzpatrick_scale:!1,category:"people"},pouch:{keywords:["bag","accessories","shopping"],"char":'\ud83d\udc5d',fitzpatrick_scale:!1,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],"char":'\ud83d\udc5b',fitzpatrick_scale:!1,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],"char":'\ud83d\udc5c',fitzpatrick_scale:!1,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],"char":'\ud83d\udcbc',fitzpatrick_scale:!1,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],"char":'\ud83d\udc53',fitzpatrick_scale:!1,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],"char":'\ud83d\udd76',fitzpatrick_scale:!1,category:"people"},goggles:{keywords:["eyes","protection","safety"],"char":'\ud83e\udd7d',fitzpatrick_scale:!1,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],"char":'\ud83d\udc8d',fitzpatrick_scale:!1,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],"char":'\ud83c\udf02',fitzpatrick_scale:!1,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],"char":'\ud83d\udc36',fitzpatrick_scale:!1,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],"char":'\ud83d\udc31',fitzpatrick_scale:!1,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],"char":'\ud83d\udc2d',fitzpatrick_scale:!1,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],"char":'\ud83d\udc39',fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],"char":'\ud83d\udc30',fitzpatrick_scale:!1,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],"char":'\ud83e\udd8a',fitzpatrick_scale:!1,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],"char":'\ud83d\udc3b',fitzpatrick_scale:!1,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],"char":'\ud83d\udc3c',fitzpatrick_scale:!1,category:"animals_and_nature"},koala:{keywords:["animal","nature"],"char":'\ud83d\udc28',fitzpatrick_scale:!1,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],"char":'\ud83d\udc2f',fitzpatrick_scale:!1,category:"animals_and_nature"},lion:{keywords:["animal","nature"],"char":'\ud83e\udd81',fitzpatrick_scale:!1,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],"char":'\ud83d\udc2e',fitzpatrick_scale:!1,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],"char":'\ud83d\udc37',fitzpatrick_scale:!1,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],"char":'\ud83d\udc3d',fitzpatrick_scale:!1,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],"char":'\ud83d\udc38',fitzpatrick_scale:!1,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],"char":'\ud83e\udd91',fitzpatrick_scale:!1,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],"char":'\ud83d\udc19',fitzpatrick_scale:!1,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],"char":'\ud83e\udd90',fitzpatrick_scale:!1,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],"char":'\ud83d\udc35',fitzpatrick_scale:!1,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],"char":'\ud83e\udd8d',fitzpatrick_scale:!1,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],"char":'\ud83d\ude48',fitzpatrick_scale:!1,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],"char":'\ud83d\ude49',fitzpatrick_scale:!1,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],"char":'\ud83d\ude4a',fitzpatrick_scale:!1,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],"char":'\ud83d\udc12',fitzpatrick_scale:!1,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],"char":'\ud83d\udc14',fitzpatrick_scale:!1,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],"char":'\ud83d\udc27',fitzpatrick_scale:!1,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],"char":'\ud83d\udc26',fitzpatrick_scale:!1,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],"char":'\ud83d\udc24',fitzpatrick_scale:!1,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],"char":'\ud83d\udc23',fitzpatrick_scale:!1,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],"char":'\ud83d\udc25',fitzpatrick_scale:!1,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],"char":'\ud83e\udd86',fitzpatrick_scale:!1,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],"char":'\ud83e\udd85',fitzpatrick_scale:!1,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],"char":'\ud83e\udd89',fitzpatrick_scale:!1,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],"char":'\ud83e\udd87',fitzpatrick_scale:!1,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],"char":'\ud83d\udc3a',fitzpatrick_scale:!1,category:"animals_and_nature"},boar:{keywords:["animal","nature"],"char":'\ud83d\udc17',fitzpatrick_scale:!1,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],"char":'\ud83d\udc34',fitzpatrick_scale:!1,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],"char":'\ud83e\udd84',fitzpatrick_scale:!1,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],"char":'\ud83d\udc1d',fitzpatrick_scale:!1,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],"char":'\ud83d\udc1b',fitzpatrick_scale:!1,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],"char":'\ud83e\udd8b',fitzpatrick_scale:!1,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],"char":'\ud83d\udc0c',fitzpatrick_scale:!1,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],"char":'\ud83d\udc1e',fitzpatrick_scale:!1,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],"char":'\ud83d\udc1c',fitzpatrick_scale:!1,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],"char":'\ud83e\udd97',fitzpatrick_scale:!1,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],"char":'\ud83d\udd77',fitzpatrick_scale:!1,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],"char":'\ud83e\udd82',fitzpatrick_scale:!1,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],"char":'\ud83e\udd80',fitzpatrick_scale:!1,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],"char":'\ud83d\udc0d',fitzpatrick_scale:!1,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],"char":'\ud83e\udd8e',fitzpatrick_scale:!1,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],"char":'\ud83e\udd96',fitzpatrick_scale:!1,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],"char":'\ud83e\udd95',fitzpatrick_scale:!1,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],"char":'\ud83d\udc22',fitzpatrick_scale:!1,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],"char":'\ud83d\udc20',fitzpatrick_scale:!1,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],"char":'\ud83d\udc1f',fitzpatrick_scale:!1,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],"char":'\ud83d\udc21',fitzpatrick_scale:!1,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],"char":'\ud83d\udc2c',fitzpatrick_scale:!1,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],"char":'\ud83e\udd88',fitzpatrick_scale:!1,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],"char":'\ud83d\udc33',fitzpatrick_scale:!1,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],"char":'\ud83d\udc0b',fitzpatrick_scale:!1,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],"char":'\ud83d\udc0a',fitzpatrick_scale:!1,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],"char":'\ud83d\udc06',fitzpatrick_scale:!1,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],"char":'\ud83e\udd93',fitzpatrick_scale:!1,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],"char":'\ud83d\udc05',fitzpatrick_scale:!1,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],"char":'\ud83d\udc03',fitzpatrick_scale:!1,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],"char":'\ud83d\udc02',fitzpatrick_scale:!1,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],"char":'\ud83d\udc04',fitzpatrick_scale:!1,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],"char":'\ud83e\udd8c',fitzpatrick_scale:!1,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],"char":'\ud83d\udc2a',fitzpatrick_scale:!1,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],"char":'\ud83d\udc2b',fitzpatrick_scale:!1,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],"char":'\ud83e\udd92',fitzpatrick_scale:!1,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],"char":'\ud83d\udc18',fitzpatrick_scale:!1,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],"char":'\ud83e\udd8f',fitzpatrick_scale:!1,category:"animals_and_nature"},goat:{keywords:["animal","nature"],"char":'\ud83d\udc10',fitzpatrick_scale:!1,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],"char":'\ud83d\udc0f',fitzpatrick_scale:!1,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],"char":'\ud83d\udc11',fitzpatrick_scale:!1,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],"char":'\ud83d\udc0e',fitzpatrick_scale:!1,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],"char":'\ud83d\udc16',fitzpatrick_scale:!1,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],"char":'\ud83d\udc00',fitzpatrick_scale:!1,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],"char":'\ud83d\udc01',fitzpatrick_scale:!1,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],"char":'\ud83d\udc13',fitzpatrick_scale:!1,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],"char":'\ud83e\udd83',fitzpatrick_scale:!1,category:"animals_and_nature"},dove:{keywords:["animal","bird"],"char":'\ud83d\udd4a',fitzpatrick_scale:!1,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],"char":'\ud83d\udc15',fitzpatrick_scale:!1,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],"char":'\ud83d\udc29',fitzpatrick_scale:!1,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],"char":'\ud83d\udc08',fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],"char":'\ud83d\udc07',fitzpatrick_scale:!1,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],"char":'\ud83d\udc3f',fitzpatrick_scale:!1,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],"char":'\ud83e\udd94',fitzpatrick_scale:!1,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],"char":'\ud83e\udd9d',fitzpatrick_scale:!1,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],"char":'\ud83e\udd99',fitzpatrick_scale:!1,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],"char":'\ud83e\udd9b',fitzpatrick_scale:!1,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],"char":'\ud83e\udd98',fitzpatrick_scale:!1,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],"char":'\ud83e\udda1',fitzpatrick_scale:!1,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],"char":'\ud83e\udda2',fitzpatrick_scale:!1,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],"char":'\ud83e\udd9a',fitzpatrick_scale:!1,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],"char":'\ud83e\udd9c',fitzpatrick_scale:!1,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],"char":'\ud83e\udd9e',fitzpatrick_scale:!1,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],"char":'\ud83e\udd9f',fitzpatrick_scale:!1,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],"char":'\ud83d\udc3e',fitzpatrick_scale:!1,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],"char":'\ud83d\udc09',fitzpatrick_scale:!1,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],"char":'\ud83d\udc32',fitzpatrick_scale:!1,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],"char":'\ud83c\udf35',fitzpatrick_scale:!1,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],"char":'\ud83c\udf84',fitzpatrick_scale:!1,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],"char":'\ud83c\udf32',fitzpatrick_scale:!1,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],"char":'\ud83c\udf33',fitzpatrick_scale:!1,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],"char":'\ud83c\udf34',fitzpatrick_scale:!1,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],"char":'\ud83c\udf31',fitzpatrick_scale:!1,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],"char":'\ud83c\udf3f',fitzpatrick_scale:!1,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],"char":'\u2618',fitzpatrick_scale:!1,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],"char":'\ud83c\udf40',fitzpatrick_scale:!1,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],"char":'\ud83c\udf8d',fitzpatrick_scale:!1,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],"char":'\ud83c\udf8b',fitzpatrick_scale:!1,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],"char":'\ud83c\udf43',fitzpatrick_scale:!1,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],"char":'\ud83c\udf42',fitzpatrick_scale:!1,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],"char":'\ud83c\udf41',fitzpatrick_scale:!1,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],"char":'\ud83c\udf3e',fitzpatrick_scale:!1,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],"char":'\ud83c\udf3a',fitzpatrick_scale:!1,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],"char":'\ud83c\udf3b',fitzpatrick_scale:!1,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],"char":'\ud83c\udf39',fitzpatrick_scale:!1,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],"char":'\ud83e\udd40',fitzpatrick_scale:!1,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],"char":'\ud83c\udf37',fitzpatrick_scale:!1,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],"char":'\ud83c\udf3c',fitzpatrick_scale:!1,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],"char":'\ud83c\udf38',fitzpatrick_scale:!1,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],"char":'\ud83d\udc90',fitzpatrick_scale:!1,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],"char":'\ud83c\udf44',fitzpatrick_scale:!1,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],"char":'\ud83c\udf30',fitzpatrick_scale:!1,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],"char":'\ud83c\udf83',fitzpatrick_scale:!1,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],"char":'\ud83d\udc1a',fitzpatrick_scale:!1,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],"char":'\ud83d\udd78',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],"char":'\ud83c\udf0e',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],"char":'\ud83c\udf0d',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],"char":'\ud83c\udf0f',fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],"char":'\ud83c\udf15',fitzpatrick_scale:!1,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],"char":'\ud83c\udf16',fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":'\ud83c\udf17',fitzpatrick_scale:!1,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":'\ud83c\udf18',fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":'\ud83c\udf11',fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":'\ud83c\udf12',fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":'\ud83c\udf13',fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],"char":'\ud83c\udf14',fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":'\ud83c\udf1a',fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":'\ud83c\udf1d',fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":'\ud83c\udf1b',fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":'\ud83c\udf1c',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],"char":'\ud83c\udf1e',fitzpatrick_scale:!1,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],"char":'\ud83c\udf19',fitzpatrick_scale:!1,category:"animals_and_nature"},star:{keywords:["night","yellow"],"char":'\u2b50',fitzpatrick_scale:!1,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],"char":'\ud83c\udf1f',fitzpatrick_scale:!1,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],"char":'\ud83d\udcab',fitzpatrick_scale:!1,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],"char":'\u2728',fitzpatrick_scale:!1,category:"animals_and_nature"},comet:{keywords:["space"],"char":'\u2604',fitzpatrick_scale:!1,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],"char":'\u2600\ufe0f',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],"char":'\ud83c\udf24',fitzpatrick_scale:!1,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],"char":'\u26c5',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],"char":'\ud83c\udf25',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],"char":'\ud83c\udf26',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],"char":'\u2601\ufe0f',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],"char":'\ud83c\udf27',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],"char":'\u26c8',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],"char":'\ud83c\udf29',fitzpatrick_scale:!1,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],"char":'\u26a1',fitzpatrick_scale:!1,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],"char":'\ud83d\udd25',fitzpatrick_scale:!1,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],"char":'\ud83d\udca5',fitzpatrick_scale:!1,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],"char":'\u2744\ufe0f',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],"char":'\ud83c\udf28',fitzpatrick_scale:!1,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],"char":'\u26c4',fitzpatrick_scale:!1,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],"char":'\u2603',fitzpatrick_scale:!1,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],"char":'\ud83c\udf2c',fitzpatrick_scale:!1,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],"char":'\ud83d\udca8',fitzpatrick_scale:!1,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],"char":'\ud83c\udf2a',fitzpatrick_scale:!1,category:"animals_and_nature"},fog:{keywords:["weather"],"char":'\ud83c\udf2b',fitzpatrick_scale:!1,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],"char":'\u2602',fitzpatrick_scale:!1,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],"char":'\u2614',fitzpatrick_scale:!1,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],"char":'\ud83d\udca7',fitzpatrick_scale:!1,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],"char":'\ud83d\udca6',fitzpatrick_scale:!1,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],"char":'\ud83c\udf0a',fitzpatrick_scale:!1,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],"char":'\ud83c\udf4f',fitzpatrick_scale:!1,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],"char":'\ud83c\udf4e',fitzpatrick_scale:!1,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],"char":'\ud83c\udf50',fitzpatrick_scale:!1,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],"char":'\ud83c\udf4a',fitzpatrick_scale:!1,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],"char":'\ud83c\udf4b',fitzpatrick_scale:!1,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],"char":'\ud83c\udf4c',fitzpatrick_scale:!1,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],"char":'\ud83c\udf49',fitzpatrick_scale:!1,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],"char":'\ud83c\udf47',fitzpatrick_scale:!1,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],"char":'\ud83c\udf53',fitzpatrick_scale:!1,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],"char":'\ud83c\udf48',fitzpatrick_scale:!1,category:"food_and_drink"},cherries:{keywords:["food","fruit"],"char":'\ud83c\udf52',fitzpatrick_scale:!1,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],"char":'\ud83c\udf51',fitzpatrick_scale:!1,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],"char":'\ud83c\udf4d',fitzpatrick_scale:!1,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],"char":'\ud83e\udd65',fitzpatrick_scale:!1,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],"char":'\ud83e\udd5d',fitzpatrick_scale:!1,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],"char":'\ud83e\udd6d',fitzpatrick_scale:!1,category:"food_and_drink"},avocado:{keywords:["fruit","food"],"char":'\ud83e\udd51',fitzpatrick_scale:!1,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],"char":'\ud83e\udd66',fitzpatrick_scale:!1,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],"char":'\ud83c\udf45',fitzpatrick_scale:!1,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],"char":'\ud83c\udf46',fitzpatrick_scale:!1,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],"char":'\ud83e\udd52',fitzpatrick_scale:!1,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],"char":'\ud83e\udd55',fitzpatrick_scale:!1,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],"char":'\ud83c\udf36',fitzpatrick_scale:!1,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],"char":'\ud83e\udd54',fitzpatrick_scale:!1,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],"char":'\ud83c\udf3d',fitzpatrick_scale:!1,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],"char":'\ud83e\udd6c',fitzpatrick_scale:!1,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],"char":'\ud83c\udf60',fitzpatrick_scale:!1,category:"food_and_drink"},peanuts:{keywords:["food","nut"],"char":'\ud83e\udd5c',fitzpatrick_scale:!1,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],"char":'\ud83c\udf6f',fitzpatrick_scale:!1,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],"char":'\ud83e\udd50',fitzpatrick_scale:!1,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],"char":'\ud83c\udf5e',fitzpatrick_scale:!1,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],"char":'\ud83e\udd56',fitzpatrick_scale:!1,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],"char":'\ud83e\udd6f',fitzpatrick_scale:!1,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],"char":'\ud83e\udd68',fitzpatrick_scale:!1,category:"food_and_drink"},cheese:{keywords:["food","chadder"],"char":'\ud83e\uddc0',fitzpatrick_scale:!1,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],"char":'\ud83e\udd5a',fitzpatrick_scale:!1,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],"char":'\ud83e\udd53',fitzpatrick_scale:!1,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],"char":'\ud83e\udd69',fitzpatrick_scale:!1,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],"char":'\ud83e\udd5e',fitzpatrick_scale:!1,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],"char":'\ud83c\udf57',fitzpatrick_scale:!1,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],"char":'\ud83c\udf56',fitzpatrick_scale:!1,category:"food_and_drink"},bone:{keywords:["skeleton"],"char":'\ud83e\uddb4',fitzpatrick_scale:!1,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],"char":'\ud83c\udf64',fitzpatrick_scale:!1,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],"char":'\ud83c\udf73',fitzpatrick_scale:!1,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],"char":'\ud83c\udf54',fitzpatrick_scale:!1,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],"char":'\ud83c\udf5f',fitzpatrick_scale:!1,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],"char":'\ud83e\udd59',fitzpatrick_scale:!1,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],"char":'\ud83c\udf2d',fitzpatrick_scale:!1,category:"food_and_drink"},pizza:{keywords:["food","party"],"char":'\ud83c\udf55',fitzpatrick_scale:!1,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],"char":'\ud83e\udd6a',fitzpatrick_scale:!1,category:"food_and_drink"},canned_food:{keywords:["food","soup"],"char":'\ud83e\udd6b',fitzpatrick_scale:!1,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],"char":'\ud83c\udf5d',fitzpatrick_scale:!1,category:"food_and_drink"},taco:{keywords:["food","mexican"],"char":'\ud83c\udf2e',fitzpatrick_scale:!1,category:"food_and_drink"},burrito:{keywords:["food","mexican"],"char":'\ud83c\udf2f',fitzpatrick_scale:!1,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],"char":'\ud83e\udd57',fitzpatrick_scale:!1,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],"char":'\ud83e\udd58',fitzpatrick_scale:!1,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],"char":'\ud83c\udf5c',fitzpatrick_scale:!1,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],"char":'\ud83c\udf72',fitzpatrick_scale:!1,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],"char":'\ud83c\udf65',fitzpatrick_scale:!1,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],"char":'\ud83e\udd60',fitzpatrick_scale:!1,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],"char":'\ud83c\udf63',fitzpatrick_scale:!1,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],"char":'\ud83c\udf71',fitzpatrick_scale:!1,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],"char":'\ud83c\udf5b',fitzpatrick_scale:!1,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],"char":'\ud83c\udf59',fitzpatrick_scale:!1,category:"food_and_drink"},rice:{keywords:["food","china","asian"],"char":'\ud83c\udf5a',fitzpatrick_scale:!1,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],"char":'\ud83c\udf58',fitzpatrick_scale:!1,category:"food_and_drink"},oden:{keywords:["food","japanese"],"char":'\ud83c\udf62',fitzpatrick_scale:!1,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],"char":'\ud83c\udf61',fitzpatrick_scale:!1,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],"char":'\ud83c\udf67',fitzpatrick_scale:!1,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],"char":'\ud83c\udf68',fitzpatrick_scale:!1,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],"char":'\ud83c\udf66',fitzpatrick_scale:!1,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],"char":'\ud83e\udd67',fitzpatrick_scale:!1,category:"food_and_drink"},cake:{keywords:["food","dessert"],"char":'\ud83c\udf70',fitzpatrick_scale:!1,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],"char":'\ud83e\uddc1',fitzpatrick_scale:!1,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],"char":'\ud83e\udd6e',fitzpatrick_scale:!1,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],"char":'\ud83c\udf82',fitzpatrick_scale:!1,category:"food_and_drink"},custard:{keywords:["dessert","food"],"char":'\ud83c\udf6e',fitzpatrick_scale:!1,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],"char":'\ud83c\udf6c',fitzpatrick_scale:!1,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],"char":'\ud83c\udf6d',fitzpatrick_scale:!1,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],"char":'\ud83c\udf6b',fitzpatrick_scale:!1,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],"char":'\ud83c\udf7f',fitzpatrick_scale:!1,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],"char":'\ud83e\udd5f',fitzpatrick_scale:!1,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],"char":'\ud83c\udf69',fitzpatrick_scale:!1,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],"char":'\ud83c\udf6a',fitzpatrick_scale:!1,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],"char":'\ud83e\udd5b',fitzpatrick_scale:!1,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],"char":'\ud83c\udf7a',fitzpatrick_scale:!1,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],"char":'\ud83c\udf7b',fitzpatrick_scale:!1,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],"char":'\ud83e\udd42',fitzpatrick_scale:!1,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],"char":'\ud83c\udf77',fitzpatrick_scale:!1,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],"char":'\ud83e\udd43',fitzpatrick_scale:!1,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],"char":'\ud83c\udf78',fitzpatrick_scale:!1,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],"char":'\ud83c\udf79',fitzpatrick_scale:!1,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],"char":'\ud83c\udf7e',fitzpatrick_scale:!1,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],"char":'\ud83c\udf76',fitzpatrick_scale:!1,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],"char":'\ud83c\udf75',fitzpatrick_scale:!1,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],"char":'\ud83e\udd64',fitzpatrick_scale:!1,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],"char":'\u2615',fitzpatrick_scale:!1,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],"char":'\ud83c\udf7c',fitzpatrick_scale:!1,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],"char":'\ud83e\uddc2',fitzpatrick_scale:!1,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],"char":'\ud83e\udd44',fitzpatrick_scale:!1,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],"char":'\ud83c\udf74',fitzpatrick_scale:!1,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],"char":'\ud83c\udf7d',fitzpatrick_scale:!1,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],"char":'\ud83e\udd63',fitzpatrick_scale:!1,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],"char":'\ud83e\udd61',fitzpatrick_scale:!1,category:"food_and_drink"},chopsticks:{keywords:["food"],"char":'\ud83e\udd62',fitzpatrick_scale:!1,category:"food_and_drink"},soccer:{keywords:["sports","football"],"char":'\u26bd',fitzpatrick_scale:!1,category:"activity"},basketball:{keywords:["sports","balls","NBA"],"char":'\ud83c\udfc0',fitzpatrick_scale:!1,category:"activity"},football:{keywords:["sports","balls","NFL"],"char":'\ud83c\udfc8',fitzpatrick_scale:!1,category:"activity"},baseball:{keywords:["sports","balls"],"char":'\u26be',fitzpatrick_scale:!1,category:"activity"},softball:{keywords:["sports","balls"],"char":'\ud83e\udd4e',fitzpatrick_scale:!1,category:"activity"},tennis:{keywords:["sports","balls","green"],"char":'\ud83c\udfbe',fitzpatrick_scale:!1,category:"activity"},volleyball:{keywords:["sports","balls"],"char":'\ud83c\udfd0',fitzpatrick_scale:!1,category:"activity"},rugby_football:{keywords:["sports","team"],"char":'\ud83c\udfc9',fitzpatrick_scale:!1,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],"char":'\ud83e\udd4f',fitzpatrick_scale:!1,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],"char":'\ud83c\udfb1',fitzpatrick_scale:!1,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],"char":'\u26f3',fitzpatrick_scale:!1,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],"char":'\ud83c\udfcc\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"activity"},golfing_man:{keywords:["sports","business"],"char":'\ud83c\udfcc',fitzpatrick_scale:!0,category:"activity"},ping_pong:{keywords:["sports","pingpong"],"char":'\ud83c\udfd3',fitzpatrick_scale:!1,category:"activity"},badminton:{keywords:["sports"],"char":'\ud83c\udff8',fitzpatrick_scale:!1,category:"activity"},goal_net:{keywords:["sports"],"char":'\ud83e\udd45',fitzpatrick_scale:!1,category:"activity"},ice_hockey:{keywords:["sports"],"char":'\ud83c\udfd2',fitzpatrick_scale:!1,category:"activity"},field_hockey:{keywords:["sports"],"char":'\ud83c\udfd1',fitzpatrick_scale:!1,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],"char":'\ud83e\udd4d',fitzpatrick_scale:!1,category:"activity"},cricket:{keywords:["sports"],"char":'\ud83c\udfcf',fitzpatrick_scale:!1,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],"char":'\ud83c\udfbf',fitzpatrick_scale:!1,category:"activity"},skier:{keywords:["sports","winter","snow"],"char":'\u26f7',fitzpatrick_scale:!1,category:"activity"},snowboarder:{keywords:["sports","winter"],"char":'\ud83c\udfc2',fitzpatrick_scale:!0,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],"char":'\ud83e\udd3a',fitzpatrick_scale:!1,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],"char":'\ud83e\udd3c\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],"char":'\ud83e\udd3c\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],"char":'\ud83e\udd38\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],"char":'\ud83e\udd38\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},woman_playing_handball:{keywords:["sports"],"char":'\ud83e\udd3e\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_playing_handball:{keywords:["sports"],"char":'\ud83e\udd3e\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},ice_skate:{keywords:["sports"],"char":'\u26f8',fitzpatrick_scale:!1,category:"activity"},curling_stone:{keywords:["sports"],"char":'\ud83e\udd4c',fitzpatrick_scale:!1,category:"activity"},skateboard:{keywords:["board"],"char":'\ud83d\udef9',fitzpatrick_scale:!1,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],"char":'\ud83d\udef7',fitzpatrick_scale:!1,category:"activity"},bow_and_arrow:{keywords:["sports"],"char":'\ud83c\udff9',fitzpatrick_scale:!1,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],"char":'\ud83c\udfa3',fitzpatrick_scale:!1,category:"activity"},boxing_glove:{keywords:["sports","fighting"],"char":'\ud83e\udd4a',fitzpatrick_scale:!1,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],"char":'\ud83e\udd4b',fitzpatrick_scale:!1,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],"char":'\ud83d\udea3\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],"char":'\ud83d\udea3',fitzpatrick_scale:!0,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],"char":'\ud83e\uddd7\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],"char":'\ud83e\uddd7\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],"char":'\ud83c\udfca\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],"char":'\ud83c\udfca',fitzpatrick_scale:!0,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],"char":'\ud83e\udd3d\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],"char":'\ud83e\udd3d\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],"char":'\ud83e\uddd8\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],"char":'\ud83e\uddd8\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],"char":'\ud83c\udfc4\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],"char":'\ud83c\udfc4',fitzpatrick_scale:!0,category:"activity"},bath:{keywords:["clean","shower","bathroom"],"char":'\ud83d\udec0',fitzpatrick_scale:!0,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],"char":'\u26f9\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},basketball_man:{keywords:["sports","human"],"char":'\u26f9',fitzpatrick_scale:!0,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],"char":'\ud83c\udfcb\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],"char":'\ud83c\udfcb',fitzpatrick_scale:!0,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],"char":'\ud83d\udeb4\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],"char":'\ud83d\udeb4',fitzpatrick_scale:!0,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],"char":'\ud83d\udeb5\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],"char":'\ud83d\udeb5',fitzpatrick_scale:!0,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],"char":'\ud83c\udfc7',fitzpatrick_scale:!0,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],"char":'\ud83d\udd74',fitzpatrick_scale:!0,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],"char":'\ud83c\udfc6',fitzpatrick_scale:!1,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],"char":'\ud83c\udfbd',fitzpatrick_scale:!1,category:"activity"},medal_sports:{keywords:["award","winning"],"char":'\ud83c\udfc5',fitzpatrick_scale:!1,category:"activity"},medal_military:{keywords:["award","winning","army"],"char":'\ud83c\udf96',fitzpatrick_scale:!1,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],"char":'\ud83e\udd47',fitzpatrick_scale:!1,category:"activity"},"2nd_place_medal":{keywords:["award","second"],"char":'\ud83e\udd48',fitzpatrick_scale:!1,category:"activity"},"3rd_place_medal":{keywords:["award","third"],"char":'\ud83e\udd49',fitzpatrick_scale:!1,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],"char":'\ud83c\udf97',fitzpatrick_scale:!1,category:"activity"},rosette:{keywords:["flower","decoration","military"],"char":'\ud83c\udff5',fitzpatrick_scale:!1,category:"activity"},ticket:{keywords:["event","concert","pass"],"char":'\ud83c\udfab',fitzpatrick_scale:!1,category:"activity"},tickets:{keywords:["sports","concert","entrance"],"char":'\ud83c\udf9f',fitzpatrick_scale:!1,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],"char":'\ud83c\udfad',fitzpatrick_scale:!1,category:"activity"},art:{keywords:["design","paint","draw","colors"],"char":'\ud83c\udfa8',fitzpatrick_scale:!1,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],"char":'\ud83c\udfaa',fitzpatrick_scale:!1,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],"char":'\ud83e\udd39\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],"char":'\ud83e\udd39\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],"char":'\ud83c\udfa4',fitzpatrick_scale:!1,category:"activity"},headphones:{keywords:["music","score","gadgets"],"char":'\ud83c\udfa7',fitzpatrick_scale:!1,category:"activity"},musical_score:{keywords:["treble","clef","compose"],"char":'\ud83c\udfbc',fitzpatrick_scale:!1,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],"char":'\ud83c\udfb9',fitzpatrick_scale:!1,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],"char":'\ud83e\udd41',fitzpatrick_scale:!1,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],"char":'\ud83c\udfb7',fitzpatrick_scale:!1,category:"activity"},trumpet:{keywords:["music","brass"],"char":'\ud83c\udfba',fitzpatrick_scale:!1,category:"activity"},guitar:{keywords:["music","instrument"],"char":'\ud83c\udfb8',fitzpatrick_scale:!1,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],"char":'\ud83c\udfbb',fitzpatrick_scale:!1,category:"activity"},clapper:{keywords:["movie","film","record"],"char":'\ud83c\udfac',fitzpatrick_scale:!1,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],"char":'\ud83c\udfae',fitzpatrick_scale:!1,category:"activity"},space_invader:{keywords:["game","arcade","play"],"char":'\ud83d\udc7e',fitzpatrick_scale:!1,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],"char":'\ud83c\udfaf',fitzpatrick_scale:!1,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],"char":'\ud83c\udfb2',fitzpatrick_scale:!1,category:"activity"},chess_pawn:{keywords:["expendable"],"char":"\u265f",fitzpatrick_scale:!1,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],"char":'\ud83c\udfb0',fitzpatrick_scale:!1,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],"char":'\ud83e\udde9',fitzpatrick_scale:!1,category:"activity"},bowling:{keywords:["sports","fun","play"],"char":'\ud83c\udfb3',fitzpatrick_scale:!1,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],"char":'\ud83d\ude97',fitzpatrick_scale:!1,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],"char":'\ud83d\ude95',fitzpatrick_scale:!1,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],"char":'\ud83d\ude99',fitzpatrick_scale:!1,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],"char":'\ud83d\ude8c',fitzpatrick_scale:!1,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],"char":'\ud83d\ude8e',fitzpatrick_scale:!1,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],"char":'\ud83c\udfce',fitzpatrick_scale:!1,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],"char":'\ud83d\ude93',fitzpatrick_scale:!1,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],"char":'\ud83d\ude91',fitzpatrick_scale:!1,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],"char":'\ud83d\ude92',fitzpatrick_scale:!1,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],"char":'\ud83d\ude90',fitzpatrick_scale:!1,category:"travel_and_places"},truck:{keywords:["cars","transportation"],"char":'\ud83d\ude9a',fitzpatrick_scale:!1,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],"char":'\ud83d\ude9b',fitzpatrick_scale:!1,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],"char":'\ud83d\ude9c',fitzpatrick_scale:!1,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],"char":'\ud83d\udef4',fitzpatrick_scale:!1,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],"char":'\ud83c\udfcd',fitzpatrick_scale:!1,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],"char":'\ud83d\udeb2',fitzpatrick_scale:!1,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],"char":'\ud83d\udef5',fitzpatrick_scale:!1,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],"char":'\ud83d\udea8',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],"char":'\ud83d\ude94',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],"char":'\ud83d\ude8d',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],"char":'\ud83d\ude98',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],"char":'\ud83d\ude96',fitzpatrick_scale:!1,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],"char":'\ud83d\udea1',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],"char":'\ud83d\udea0',fitzpatrick_scale:!1,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],"char":'\ud83d\ude9f',fitzpatrick_scale:!1,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],"char":'\ud83d\ude83',fitzpatrick_scale:!1,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],"char":'\ud83d\ude8b',fitzpatrick_scale:!1,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],"char":'\ud83d\ude9d',fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],"char":'\ud83d\ude84',fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],"char":'\ud83d\ude85',fitzpatrick_scale:!1,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],"char":'\ud83d\ude88',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],"char":'\ud83d\ude9e',fitzpatrick_scale:!1,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],"char":'\ud83d\ude82',fitzpatrick_scale:!1,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],"char":'\ud83d\ude86',fitzpatrick_scale:!1,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],"char":'\ud83d\ude87',fitzpatrick_scale:!1,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],"char":'\ud83d\ude8a',fitzpatrick_scale:!1,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],"char":'\ud83d\ude89',fitzpatrick_scale:!1,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],"char":'\ud83d\udef8',fitzpatrick_scale:!1,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],"char":'\ud83d\ude81',fitzpatrick_scale:!1,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],"char":'\ud83d\udee9',fitzpatrick_scale:!1,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],"char":'\u2708\ufe0f',fitzpatrick_scale:!1,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],"char":'\ud83d\udeeb',fitzpatrick_scale:!1,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],"char":'\ud83d\udeec',fitzpatrick_scale:!1,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],"char":'\u26f5',fitzpatrick_scale:!1,category:"travel_and_places"},motor_boat:{keywords:["ship"],"char":'\ud83d\udee5',fitzpatrick_scale:!1,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],"char":'\ud83d\udea4',fitzpatrick_scale:!1,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],"char":'\u26f4',fitzpatrick_scale:!1,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],"char":'\ud83d\udef3',fitzpatrick_scale:!1,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],"char":'\ud83d\ude80',fitzpatrick_scale:!1,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],"char":'\ud83d\udef0',fitzpatrick_scale:!1,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],"char":'\ud83d\udcba',fitzpatrick_scale:!1,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],"char":'\ud83d\udef6',fitzpatrick_scale:!1,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],"char":'\u2693',fitzpatrick_scale:!1,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],"char":'\ud83d\udea7',fitzpatrick_scale:!1,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],"char":'\u26fd',fitzpatrick_scale:!1,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],"char":'\ud83d\ude8f',fitzpatrick_scale:!1,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],"char":'\ud83d\udea6',fitzpatrick_scale:!1,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],"char":'\ud83d\udea5',fitzpatrick_scale:!1,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],"char":'\ud83c\udfc1',fitzpatrick_scale:!1,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],"char":'\ud83d\udea2',fitzpatrick_scale:!1,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],"char":'\ud83c\udfa1',fitzpatrick_scale:!1,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],"char":'\ud83c\udfa2',fitzpatrick_scale:!1,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],"char":'\ud83c\udfa0',fitzpatrick_scale:!1,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],"char":'\ud83c\udfd7',fitzpatrick_scale:!1,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],"char":'\ud83c\udf01',fitzpatrick_scale:!1,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],"char":'\ud83d\uddfc',fitzpatrick_scale:!1,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],"char":'\ud83c\udfed',fitzpatrick_scale:!1,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],"char":'\u26f2',fitzpatrick_scale:!1,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],"char":'\ud83c\udf91',fitzpatrick_scale:!1,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],"char":'\u26f0',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],"char":'\ud83c\udfd4',fitzpatrick_scale:!1,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],"char":'\ud83d\uddfb',fitzpatrick_scale:!1,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],"char":'\ud83c\udf0b',fitzpatrick_scale:!1,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],"char":'\ud83d\uddfe',fitzpatrick_scale:!1,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],"char":'\ud83c\udfd5',fitzpatrick_scale:!1,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],"char":'\u26fa',fitzpatrick_scale:!1,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],"char":'\ud83c\udfde',fitzpatrick_scale:!1,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],"char":'\ud83d\udee3',fitzpatrick_scale:!1,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],"char":'\ud83d\udee4',fitzpatrick_scale:!1,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],"char":'\ud83c\udf05',fitzpatrick_scale:!1,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],"char":'\ud83c\udf04',fitzpatrick_scale:!1,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],"char":'\ud83c\udfdc',fitzpatrick_scale:!1,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],"char":'\ud83c\udfd6',fitzpatrick_scale:!1,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],"char":'\ud83c\udfdd',fitzpatrick_scale:!1,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],"char":'\ud83c\udf07',fitzpatrick_scale:!1,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],"char":'\ud83c\udf06',fitzpatrick_scale:!1,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],"char":'\ud83c\udfd9',fitzpatrick_scale:!1,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],"char":'\ud83c\udf03',fitzpatrick_scale:!1,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],"char":'\ud83c\udf09',fitzpatrick_scale:!1,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],"char":'\ud83c\udf0c',fitzpatrick_scale:!1,category:"travel_and_places"},stars:{keywords:["night","photo"],"char":'\ud83c\udf20',fitzpatrick_scale:!1,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],"char":'\ud83c\udf87',fitzpatrick_scale:!1,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],"char":'\ud83c\udf86',fitzpatrick_scale:!1,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],"char":'\ud83c\udf08',fitzpatrick_scale:!1,category:"travel_and_places"},houses:{keywords:["buildings","photo"],"char":'\ud83c\udfd8',fitzpatrick_scale:!1,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],"char":'\ud83c\udff0',fitzpatrick_scale:!1,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],"char":'\ud83c\udfef',fitzpatrick_scale:!1,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],"char":'\ud83c\udfdf',fitzpatrick_scale:!1,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],"char":'\ud83d\uddfd',fitzpatrick_scale:!1,category:"travel_and_places"},house:{keywords:["building","home"],"char":'\ud83c\udfe0',fitzpatrick_scale:!1,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],"char":'\ud83c\udfe1',fitzpatrick_scale:!1,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],"char":'\ud83c\udfda',fitzpatrick_scale:!1,category:"travel_and_places"},office:{keywords:["building","bureau","work"],"char":'\ud83c\udfe2',fitzpatrick_scale:!1,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],"char":'\ud83c\udfec',fitzpatrick_scale:!1,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],"char":'\ud83c\udfe3',fitzpatrick_scale:!1,category:"travel_and_places"},european_post_office:{keywords:["building","email"],"char":'\ud83c\udfe4',fitzpatrick_scale:!1,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],"char":'\ud83c\udfe5',fitzpatrick_scale:!1,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],"char":'\ud83c\udfe6',fitzpatrick_scale:!1,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],"char":'\ud83c\udfe8',fitzpatrick_scale:!1,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],"char":'\ud83c\udfea',fitzpatrick_scale:!1,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],"char":'\ud83c\udfeb',fitzpatrick_scale:!1,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],"char":'\ud83c\udfe9',fitzpatrick_scale:!1,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],"char":'\ud83d\udc92',fitzpatrick_scale:!1,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],"char":'\ud83c\udfdb',fitzpatrick_scale:!1,category:"travel_and_places"},church:{keywords:["building","religion","christ"],"char":'\u26ea',fitzpatrick_scale:!1,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],"char":'\ud83d\udd4c',fitzpatrick_scale:!1,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],"char":'\ud83d\udd4d',fitzpatrick_scale:!1,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],"char":'\ud83d\udd4b',fitzpatrick_scale:!1,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],"char":'\u26e9',fitzpatrick_scale:!1,category:"travel_and_places"},watch:{keywords:["time","accessories"],"char":'\u231a',fitzpatrick_scale:!1,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],"char":'\ud83d\udcf1',fitzpatrick_scale:!1,category:"objects"},calling:{keywords:["iphone","incoming"],"char":'\ud83d\udcf2',fitzpatrick_scale:!1,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],"char":'\ud83d\udcbb',fitzpatrick_scale:!1,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],"char":'\u2328',fitzpatrick_scale:!1,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],"char":'\ud83d\udda5',fitzpatrick_scale:!1,category:"objects"},printer:{keywords:["paper","ink"],"char":'\ud83d\udda8',fitzpatrick_scale:!1,category:"objects"},computer_mouse:{keywords:["click"],"char":'\ud83d\uddb1',fitzpatrick_scale:!1,category:"objects"},trackball:{keywords:["technology","trackpad"],"char":'\ud83d\uddb2',fitzpatrick_scale:!1,category:"objects"},joystick:{keywords:["game","play"],"char":'\ud83d\udd79',fitzpatrick_scale:!1,category:"objects"},clamp:{keywords:["tool"],"char":'\ud83d\udddc',fitzpatrick_scale:!1,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],"char":'\ud83d\udcbd',fitzpatrick_scale:!1,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],"char":'\ud83d\udcbe',fitzpatrick_scale:!1,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],"char":'\ud83d\udcbf',fitzpatrick_scale:!1,category:"objects"},dvd:{keywords:["cd","disk","disc"],"char":'\ud83d\udcc0',fitzpatrick_scale:!1,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],"char":'\ud83d\udcfc',fitzpatrick_scale:!1,category:"objects"},camera:{keywords:["gadgets","photography"],"char":'\ud83d\udcf7',fitzpatrick_scale:!1,category:"objects"},camera_flash:{keywords:["photography","gadgets"],"char":'\ud83d\udcf8',fitzpatrick_scale:!1,category:"objects"},video_camera:{keywords:["film","record"],"char":'\ud83d\udcf9',fitzpatrick_scale:!1,category:"objects"},movie_camera:{keywords:["film","record"],"char":'\ud83c\udfa5',fitzpatrick_scale:!1,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],"char":'\ud83d\udcfd',fitzpatrick_scale:!1,category:"objects"},film_strip:{keywords:["movie"],"char":'\ud83c\udf9e',fitzpatrick_scale:!1,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],"char":'\ud83d\udcde',fitzpatrick_scale:!1,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],"char":'\u260e\ufe0f',fitzpatrick_scale:!1,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],"char":'\ud83d\udcdf',fitzpatrick_scale:!1,category:"objects"},fax:{keywords:["communication","technology"],"char":'\ud83d\udce0',fitzpatrick_scale:!1,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],"char":'\ud83d\udcfa',fitzpatrick_scale:!1,category:"objects"},radio:{keywords:["communication","music","podcast","program"],"char":'\ud83d\udcfb',fitzpatrick_scale:!1,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],"char":'\ud83c\udf99',fitzpatrick_scale:!1,category:"objects"},level_slider:{keywords:["scale"],"char":'\ud83c\udf9a',fitzpatrick_scale:!1,category:"objects"},control_knobs:{keywords:["dial"],"char":'\ud83c\udf9b',fitzpatrick_scale:!1,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],"char":'\ud83e\udded',fitzpatrick_scale:!1,category:"objects"},stopwatch:{keywords:["time","deadline"],"char":'\u23f1',fitzpatrick_scale:!1,category:"objects"},timer_clock:{keywords:["alarm"],"char":'\u23f2',fitzpatrick_scale:!1,category:"objects"},alarm_clock:{keywords:["time","wake"],"char":'\u23f0',fitzpatrick_scale:!1,category:"objects"},mantelpiece_clock:{keywords:["time"],"char":'\ud83d\udd70',fitzpatrick_scale:!1,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],"char":'\u23f3',fitzpatrick_scale:!1,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],"char":'\u231b',fitzpatrick_scale:!1,category:"objects"},satellite:{keywords:["communication","future","radio","space"],"char":'\ud83d\udce1',fitzpatrick_scale:!1,category:"objects"},battery:{keywords:["power","energy","sustain"],"char":'\ud83d\udd0b',fitzpatrick_scale:!1,category:"objects"},electric_plug:{keywords:["charger","power"],"char":'\ud83d\udd0c',fitzpatrick_scale:!1,category:"objects"},bulb:{keywords:["light","electricity","idea"],"char":'\ud83d\udca1',fitzpatrick_scale:!1,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],"char":'\ud83d\udd26',fitzpatrick_scale:!1,category:"objects"},candle:{keywords:["fire","wax"],"char":'\ud83d\udd6f',fitzpatrick_scale:!1,category:"objects"},fire_extinguisher:{keywords:["quench"],"char":'\ud83e\uddef',fitzpatrick_scale:!1,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],"char":'\ud83d\uddd1',fitzpatrick_scale:!1,category:"objects"},oil_drum:{keywords:["barrell"],"char":'\ud83d\udee2',fitzpatrick_scale:!1,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],"char":'\ud83d\udcb8',fitzpatrick_scale:!1,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],"char":'\ud83d\udcb5',fitzpatrick_scale:!1,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],"char":'\ud83d\udcb4',fitzpatrick_scale:!1,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],"char":'\ud83d\udcb6',fitzpatrick_scale:!1,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],"char":'\ud83d\udcb7',fitzpatrick_scale:!1,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],"char":'\ud83d\udcb0',fitzpatrick_scale:!1,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],"char":'\ud83d\udcb3',fitzpatrick_scale:!1,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],"char":'\ud83d\udc8e',fitzpatrick_scale:!1,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],"char":'\u2696',fitzpatrick_scale:!1,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],"char":'\ud83e\uddf0',fitzpatrick_scale:!1,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],"char":'\ud83d\udd27',fitzpatrick_scale:!1,category:"objects"},hammer:{keywords:["tools","build","create"],"char":'\ud83d\udd28',fitzpatrick_scale:!1,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],"char":'\u2692',fitzpatrick_scale:!1,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],"char":'\ud83d\udee0',fitzpatrick_scale:!1,category:"objects"},pick:{keywords:["tools","dig"],"char":'\u26cf',fitzpatrick_scale:!1,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],"char":'\ud83d\udd29',fitzpatrick_scale:!1,category:"objects"},gear:{keywords:["cog"],"char":'\u2699',fitzpatrick_scale:!1,category:"objects"},brick:{keywords:["bricks"],"char":'\ud83e\uddf1',fitzpatrick_scale:!1,category:"objects"},chains:{keywords:["lock","arrest"],"char":'\u26d3',fitzpatrick_scale:!1,category:"objects"},magnet:{keywords:["attraction","magnetic"],"char":'\ud83e\uddf2',fitzpatrick_scale:!1,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],"char":'\ud83d\udd2b',fitzpatrick_scale:!1,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],"char":'\ud83d\udca3',fitzpatrick_scale:!1,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],"char":'\ud83e\udde8',fitzpatrick_scale:!1,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],"char":'\ud83d\udd2a',fitzpatrick_scale:!1,category:"objects"},dagger:{keywords:["weapon"],"char":'\ud83d\udde1',fitzpatrick_scale:!1,category:"objects"},crossed_swords:{keywords:["weapon"],"char":'\u2694',fitzpatrick_scale:!1,category:"objects"},shield:{keywords:["protection","security"],"char":'\ud83d\udee1',fitzpatrick_scale:!1,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],"char":'\ud83d\udeac',fitzpatrick_scale:!1,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],"char":'\u2620',fitzpatrick_scale:!1,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],"char":'\u26b0',fitzpatrick_scale:!1,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],"char":'\u26b1',fitzpatrick_scale:!1,category:"objects"},amphora:{keywords:["vase","jar"],"char":'\ud83c\udffa',fitzpatrick_scale:!1,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],"char":'\ud83d\udd2e',fitzpatrick_scale:!1,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],"char":'\ud83d\udcff',fitzpatrick_scale:!1,category:"objects"},nazar_amulet:{keywords:["bead","charm"],"char":'\ud83e\uddff',fitzpatrick_scale:!1,category:"objects"},barber:{keywords:["hair","salon","style"],"char":'\ud83d\udc88',fitzpatrick_scale:!1,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],"char":'\u2697',fitzpatrick_scale:!1,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],"char":'\ud83d\udd2d',fitzpatrick_scale:!1,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],"char":'\ud83d\udd2c',fitzpatrick_scale:!1,category:"objects"},hole:{keywords:["embarrassing"],"char":'\ud83d\udd73',fitzpatrick_scale:!1,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],"char":'\ud83d\udc8a',fitzpatrick_scale:!1,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],"char":'\ud83d\udc89',fitzpatrick_scale:!1,category:"objects"},dna:{keywords:["biologist","genetics","life"],"char":'\ud83e\uddec',fitzpatrick_scale:!1,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],"char":'\ud83e\udda0',fitzpatrick_scale:!1,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],"char":'\ud83e\uddeb',fitzpatrick_scale:!1,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],"char":'\ud83e\uddea',fitzpatrick_scale:!1,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],"char":'\ud83c\udf21',fitzpatrick_scale:!1,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],"char":'\ud83e\uddf9',fitzpatrick_scale:!1,category:"objects"},basket:{keywords:["laundry"],"char":'\ud83e\uddfa',fitzpatrick_scale:!1,category:"objects"},toilet_paper:{keywords:["roll"],"char":'\ud83e\uddfb',fitzpatrick_scale:!1,category:"objects"},label:{keywords:["sale","tag"],"char":'\ud83c\udff7',fitzpatrick_scale:!1,category:"objects"},bookmark:{keywords:["favorite","label","save"],"char":'\ud83d\udd16',fitzpatrick_scale:!1,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],"char":'\ud83d\udebd',fitzpatrick_scale:!1,category:"objects"},shower:{keywords:["clean","water","bathroom"],"char":'\ud83d\udebf',fitzpatrick_scale:!1,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],"char":'\ud83d\udec1',fitzpatrick_scale:!1,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],"char":'\ud83e\uddfc',fitzpatrick_scale:!1,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],"char":'\ud83e\uddfd',fitzpatrick_scale:!1,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],"char":'\ud83e\uddf4',fitzpatrick_scale:!1,category:"objects"},key:{keywords:["lock","door","password"],"char":'\ud83d\udd11',fitzpatrick_scale:!1,category:"objects"},old_key:{keywords:["lock","door","password"],"char":'\ud83d\udddd',fitzpatrick_scale:!1,category:"objects"},couch_and_lamp:{keywords:["read","chill"],"char":'\ud83d\udecb',fitzpatrick_scale:!1,category:"objects"},sleeping_bed:{keywords:["bed","rest"],"char":'\ud83d\udecc',fitzpatrick_scale:!0,category:"objects"},bed:{keywords:["sleep","rest"],"char":'\ud83d\udecf',fitzpatrick_scale:!1,category:"objects"},door:{keywords:["house","entry","exit"],"char":'\ud83d\udeaa',fitzpatrick_scale:!1,category:"objects"},bellhop_bell:{keywords:["service"],"char":'\ud83d\udece',fitzpatrick_scale:!1,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],"char":'\ud83e\uddf8',fitzpatrick_scale:!1,category:"objects"},framed_picture:{keywords:["photography"],"char":'\ud83d\uddbc',fitzpatrick_scale:!1,category:"objects"},world_map:{keywords:["location","direction"],"char":'\ud83d\uddfa',fitzpatrick_scale:!1,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],"char":'\u26f1',fitzpatrick_scale:!1,category:"objects"},moyai:{keywords:["rock","easter island","moai"],"char":'\ud83d\uddff',fitzpatrick_scale:!1,category:"objects"},shopping:{keywords:["mall","buy","purchase"],"char":'\ud83d\udecd',fitzpatrick_scale:!1,category:"objects"},shopping_cart:{keywords:["trolley"],"char":'\ud83d\uded2',fitzpatrick_scale:!1,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],"char":'\ud83c\udf88',fitzpatrick_scale:!1,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],"char":'\ud83c\udf8f',fitzpatrick_scale:!1,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],"char":'\ud83c\udf80',fitzpatrick_scale:!1,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],"char":'\ud83c\udf81',fitzpatrick_scale:!1,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],"char":'\ud83c\udf8a',fitzpatrick_scale:!1,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],"char":'\ud83c\udf89',fitzpatrick_scale:!1,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],"char":'\ud83c\udf8e',fitzpatrick_scale:!1,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],"char":'\ud83c\udf90',fitzpatrick_scale:!1,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],"char":'\ud83c\udf8c',fitzpatrick_scale:!1,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],"char":'\ud83c\udfee',fitzpatrick_scale:!1,category:"objects"},red_envelope:{keywords:["gift"],"char":'\ud83e\udde7',fitzpatrick_scale:!1,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],"char":'\u2709\ufe0f',fitzpatrick_scale:!1,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],"char":'\ud83d\udce9',fitzpatrick_scale:!1,category:"objects"},incoming_envelope:{keywords:["email","inbox"],"char":'\ud83d\udce8',fitzpatrick_scale:!1,category:"objects"},"e-mail":{keywords:["communication","inbox"],"char":'\ud83d\udce7',fitzpatrick_scale:!1,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],"char":'\ud83d\udc8c',fitzpatrick_scale:!1,category:"objects"},postbox:{keywords:["email","letter","envelope"],"char":'\ud83d\udcee',fitzpatrick_scale:!1,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],"char":'\ud83d\udcea',fitzpatrick_scale:!1,category:"objects"},mailbox:{keywords:["email","inbox","communication"],"char":'\ud83d\udceb',fitzpatrick_scale:!1,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],"char":'\ud83d\udcec',fitzpatrick_scale:!1,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],"char":'\ud83d\udced',fitzpatrick_scale:!1,category:"objects"},"package":{keywords:["mail","gift","cardboard","box","moving"],"char":'\ud83d\udce6',fitzpatrick_scale:!1,category:"objects"},postal_horn:{keywords:["instrument","music"],"char":'\ud83d\udcef',fitzpatrick_scale:!1,category:"objects"},inbox_tray:{keywords:["email","documents"],"char":'\ud83d\udce5',fitzpatrick_scale:!1,category:"objects"},outbox_tray:{keywords:["inbox","email"],"char":'\ud83d\udce4',fitzpatrick_scale:!1,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],"char":'\ud83d\udcdc',fitzpatrick_scale:!1,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],"char":'\ud83d\udcc3',fitzpatrick_scale:!1,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],"char":'\ud83d\udcd1',fitzpatrick_scale:!1,category:"objects"},receipt:{keywords:["accounting","expenses"],"char":'\ud83e\uddfe',fitzpatrick_scale:!1,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],"char":'\ud83d\udcca',fitzpatrick_scale:!1,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],"char":'\ud83d\udcc8',fitzpatrick_scale:!1,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],"char":'\ud83d\udcc9',fitzpatrick_scale:!1,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],"char":'\ud83d\udcc4',fitzpatrick_scale:!1,category:"objects"},date:{keywords:["calendar","schedule"],"char":'\ud83d\udcc5',fitzpatrick_scale:!1,category:"objects"},calendar:{keywords:["schedule","date","planning"],"char":'\ud83d\udcc6',fitzpatrick_scale:!1,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],"char":'\ud83d\uddd3',fitzpatrick_scale:!1,category:"objects"},card_index:{keywords:["business","stationery"],"char":'\ud83d\udcc7',fitzpatrick_scale:!1,category:"objects"},card_file_box:{keywords:["business","stationery"],"char":'\ud83d\uddc3',fitzpatrick_scale:!1,category:"objects"},ballot_box:{keywords:["election","vote"],"char":'\ud83d\uddf3',fitzpatrick_scale:!1,category:"objects"},file_cabinet:{keywords:["filing","organizing"],"char":'\ud83d\uddc4',fitzpatrick_scale:!1,category:"objects"},clipboard:{keywords:["stationery","documents"],"char":'\ud83d\udccb',fitzpatrick_scale:!1,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],"char":'\ud83d\uddd2',fitzpatrick_scale:!1,category:"objects"},file_folder:{keywords:["documents","business","office"],"char":'\ud83d\udcc1',fitzpatrick_scale:!1,category:"objects"},open_file_folder:{keywords:["documents","load"],"char":'\ud83d\udcc2',fitzpatrick_scale:!1,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],"char":'\ud83d\uddc2',fitzpatrick_scale:!1,category:"objects"},newspaper_roll:{keywords:["press","headline"],"char":'\ud83d\uddde',fitzpatrick_scale:!1,category:"objects"},newspaper:{keywords:["press","headline"],"char":'\ud83d\udcf0',fitzpatrick_scale:!1,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],"char":'\ud83d\udcd3',fitzpatrick_scale:!1,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],"char":'\ud83d\udcd5',fitzpatrick_scale:!1,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],"char":'\ud83d\udcd7',fitzpatrick_scale:!1,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],"char":'\ud83d\udcd8',fitzpatrick_scale:!1,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],"char":'\ud83d\udcd9',fitzpatrick_scale:!1,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],"char":'\ud83d\udcd4',fitzpatrick_scale:!1,category:"objects"},ledger:{keywords:["notes","paper"],"char":'\ud83d\udcd2',fitzpatrick_scale:!1,category:"objects"},books:{keywords:["literature","library","study"],"char":'\ud83d\udcda',fitzpatrick_scale:!1,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],"char":'\ud83d\udcd6',fitzpatrick_scale:!1,category:"objects"},safety_pin:{keywords:["diaper"],"char":'\ud83e\uddf7',fitzpatrick_scale:!1,category:"objects"},link:{keywords:["rings","url"],"char":'\ud83d\udd17',fitzpatrick_scale:!1,category:"objects"},paperclip:{keywords:["documents","stationery"],"char":'\ud83d\udcce',fitzpatrick_scale:!1,category:"objects"},paperclips:{keywords:["documents","stationery"],"char":'\ud83d\udd87',fitzpatrick_scale:!1,category:"objects"},scissors:{keywords:["stationery","cut"],"char":'\u2702\ufe0f',fitzpatrick_scale:!1,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],"char":'\ud83d\udcd0',fitzpatrick_scale:!1,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],"char":'\ud83d\udccf',fitzpatrick_scale:!1,category:"objects"},abacus:{keywords:["calculation"],"char":'\ud83e\uddee',fitzpatrick_scale:!1,category:"objects"},pushpin:{keywords:["stationery","mark","here"],"char":'\ud83d\udccc',fitzpatrick_scale:!1,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],"char":'\ud83d\udccd',fitzpatrick_scale:!1,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],"char":'\ud83d\udea9',fitzpatrick_scale:!1,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],"char":'\ud83c\udff3',fitzpatrick_scale:!1,category:"objects"},black_flag:{keywords:["pirate"],"char":'\ud83c\udff4',fitzpatrick_scale:!1,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],"char":'\ud83c\udff3\ufe0f\u200d\ud83c\udf08',fitzpatrick_scale:!1,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],"char":'\ud83d\udd10',fitzpatrick_scale:!1,category:"objects"},lock:{keywords:["security","password","padlock"],"char":'\ud83d\udd12',fitzpatrick_scale:!1,category:"objects"},unlock:{keywords:["privacy","security"],"char":'\ud83d\udd13',fitzpatrick_scale:!1,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],"char":'\ud83d\udd0f',fitzpatrick_scale:!1,category:"objects"},pen:{keywords:["stationery","writing","write"],"char":'\ud83d\udd8a',fitzpatrick_scale:!1,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],"char":'\ud83d\udd8b',fitzpatrick_scale:!1,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],"char":'\u2712\ufe0f',fitzpatrick_scale:!1,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],"char":'\ud83d\udcdd',fitzpatrick_scale:!1,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],"char":'\u270f\ufe0f',fitzpatrick_scale:!1,category:"objects"},crayon:{keywords:["drawing","creativity"],"char":'\ud83d\udd8d',fitzpatrick_scale:!1,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],"char":'\ud83d\udd8c',fitzpatrick_scale:!1,category:"objects"},mag:{keywords:["search","zoom","find","detective"],"char":'\ud83d\udd0d',fitzpatrick_scale:!1,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],"char":'\ud83d\udd0e',fitzpatrick_scale:!1,category:"objects"},heart:{keywords:["love","like","valentines"],"char":'\u2764\ufe0f',fitzpatrick_scale:!1,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],"char":'\ud83e\udde1',fitzpatrick_scale:!1,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],"char":'\ud83d\udc9b',fitzpatrick_scale:!1,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],"char":'\ud83d\udc9a',fitzpatrick_scale:!1,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],"char":'\ud83d\udc99',fitzpatrick_scale:!1,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],"char":'\ud83d\udc9c',fitzpatrick_scale:!1,category:"symbols"},black_heart:{keywords:["evil"],"char":'\ud83d\udda4',fitzpatrick_scale:!1,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],"char":'\ud83d\udc94',fitzpatrick_scale:!1,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],"char":'\u2763',fitzpatrick_scale:!1,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],"char":'\ud83d\udc95',fitzpatrick_scale:!1,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],"char":'\ud83d\udc9e',fitzpatrick_scale:!1,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],"char":'\ud83d\udc93',fitzpatrick_scale:!1,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],"char":'\ud83d\udc97',fitzpatrick_scale:!1,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],"char":'\ud83d\udc96',fitzpatrick_scale:!1,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],"char":'\ud83d\udc98',fitzpatrick_scale:!1,category:"symbols"},gift_heart:{keywords:["love","valentines"],"char":'\ud83d\udc9d',fitzpatrick_scale:!1,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],"char":'\ud83d\udc9f',fitzpatrick_scale:!1,category:"symbols"},peace_symbol:{keywords:["hippie"],"char":'\u262e',fitzpatrick_scale:!1,category:"symbols"},latin_cross:{keywords:["christianity"],"char":'\u271d',fitzpatrick_scale:!1,category:"symbols"},star_and_crescent:{keywords:["islam"],"char":'\u262a',fitzpatrick_scale:!1,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],"char":'\ud83d\udd49',fitzpatrick_scale:!1,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],"char":'\u2638',fitzpatrick_scale:!1,category:"symbols"},star_of_david:{keywords:["judaism"],"char":'\u2721',fitzpatrick_scale:!1,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],"char":'\ud83d\udd2f',fitzpatrick_scale:!1,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],"char":'\ud83d\udd4e',fitzpatrick_scale:!1,category:"symbols"},yin_yang:{keywords:["balance"],"char":'\u262f',fitzpatrick_scale:!1,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],"char":'\u2626',fitzpatrick_scale:!1,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],"char":'\ud83d\uded0',fitzpatrick_scale:!1,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],"char":'\u26ce',fitzpatrick_scale:!1,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],"char":'\u2648',fitzpatrick_scale:!1,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],"char":'\u2649',fitzpatrick_scale:!1,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],"char":'\u264a',fitzpatrick_scale:!1,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],"char":'\u264b',fitzpatrick_scale:!1,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],"char":'\u264c',fitzpatrick_scale:!1,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],"char":'\u264d',fitzpatrick_scale:!1,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],"char":'\u264e',fitzpatrick_scale:!1,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],"char":'\u264f',fitzpatrick_scale:!1,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],"char":'\u2650',fitzpatrick_scale:!1,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],"char":'\u2651',fitzpatrick_scale:!1,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],"char":'\u2652',fitzpatrick_scale:!1,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],"char":'\u2653',fitzpatrick_scale:!1,category:"symbols"},id:{keywords:["purple-square","words"],"char":'\ud83c\udd94',fitzpatrick_scale:!1,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],"char":'\u269b',fitzpatrick_scale:!1,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],"char":'\ud83c\ude33',fitzpatrick_scale:!1,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],"char":'\ud83c\ude39',fitzpatrick_scale:!1,category:"symbols"},radioactive:{keywords:["nuclear","danger"],"char":'\u2622',fitzpatrick_scale:!1,category:"symbols"},biohazard:{keywords:["danger"],"char":'\u2623',fitzpatrick_scale:!1,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],"char":'\ud83d\udcf4',fitzpatrick_scale:!1,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],"char":'\ud83d\udcf3',fitzpatrick_scale:!1,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],"char":'\ud83c\ude36',fitzpatrick_scale:!1,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],"char":'\ud83c\ude1a',fitzpatrick_scale:!1,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],"char":'\ud83c\ude38',fitzpatrick_scale:!1,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],"char":'\ud83c\ude3a',fitzpatrick_scale:!1,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],"char":'\ud83c\ude37\ufe0f',fitzpatrick_scale:!1,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],"char":'\u2734\ufe0f',fitzpatrick_scale:!1,category:"symbols"},vs:{keywords:["words","orange-square"],"char":'\ud83c\udd9a',fitzpatrick_scale:!1,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],"char":'\ud83c\ude51',fitzpatrick_scale:!1,category:"symbols"},white_flower:{keywords:["japanese","spring"],"char":'\ud83d\udcae',fitzpatrick_scale:!1,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],"char":'\ud83c\ude50',fitzpatrick_scale:!1,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],"char":'\u3299\ufe0f',fitzpatrick_scale:!1,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],"char":'\u3297\ufe0f',fitzpatrick_scale:!1,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],"char":'\ud83c\ude34',fitzpatrick_scale:!1,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],"char":'\ud83c\ude35',fitzpatrick_scale:!1,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],"char":'\ud83c\ude32',fitzpatrick_scale:!1,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],"char":'\ud83c\udd70\ufe0f',fitzpatrick_scale:!1,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],"char":'\ud83c\udd71\ufe0f',fitzpatrick_scale:!1,category:"symbols"},ab:{keywords:["red-square","alphabet"],"char":'\ud83c\udd8e',fitzpatrick_scale:!1,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],"char":'\ud83c\udd91',fitzpatrick_scale:!1,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],"char":'\ud83c\udd7e\ufe0f',fitzpatrick_scale:!1,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],"char":'\ud83c\udd98',fitzpatrick_scale:!1,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],"char":'\u26d4',fitzpatrick_scale:!1,category:"symbols"},name_badge:{keywords:["fire","forbid"],"char":'\ud83d\udcdb',fitzpatrick_scale:!1,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],"char":'\ud83d\udeab',fitzpatrick_scale:!1,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],"char":'\u274c',fitzpatrick_scale:!1,category:"symbols"},o:{keywords:["circle","round"],"char":'\u2b55',fitzpatrick_scale:!1,category:"symbols"},stop_sign:{keywords:["stop"],"char":'\ud83d\uded1',fitzpatrick_scale:!1,category:"symbols"},anger:{keywords:["angry","mad"],"char":'\ud83d\udca2',fitzpatrick_scale:!1,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],"char":'\u2668\ufe0f',fitzpatrick_scale:!1,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],"char":'\ud83d\udeb7',fitzpatrick_scale:!1,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],"char":'\ud83d\udeaf',fitzpatrick_scale:!1,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],"char":'\ud83d\udeb3',fitzpatrick_scale:!1,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],"char":'\ud83d\udeb1',fitzpatrick_scale:!1,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],"char":'\ud83d\udd1e',fitzpatrick_scale:!1,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],"char":'\ud83d\udcf5',fitzpatrick_scale:!1,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],"char":'\u2757',fitzpatrick_scale:!1,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],"char":'\u2755',fitzpatrick_scale:!1,category:"symbols"},question:{keywords:["doubt","confused"],"char":'\u2753',fitzpatrick_scale:!1,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],"char":'\u2754',fitzpatrick_scale:!1,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],"char":'\u203c\ufe0f',fitzpatrick_scale:!1,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],"char":'\u2049\ufe0f',fitzpatrick_scale:!1,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],"char":'\ud83d\udd05',fitzpatrick_scale:!1,category:"symbols"},high_brightness:{keywords:["sun","light"],"char":'\ud83d\udd06',fitzpatrick_scale:!1,category:"symbols"},trident:{keywords:["weapon","spear"],"char":'\ud83d\udd31',fitzpatrick_scale:!1,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],"char":'\u269c',fitzpatrick_scale:!1,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],"char":'\u303d\ufe0f',fitzpatrick_scale:!1,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],"char":'\u26a0\ufe0f',fitzpatrick_scale:!1,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],"char":'\ud83d\udeb8',fitzpatrick_scale:!1,category:"symbols"},beginner:{keywords:["badge","shield"],"char":'\ud83d\udd30',fitzpatrick_scale:!1,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],"char":'\u267b\ufe0f',fitzpatrick_scale:!1,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],"char":'\ud83c\ude2f',fitzpatrick_scale:!1,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],"char":'\ud83d\udcb9',fitzpatrick_scale:!1,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],"char":'\u2747\ufe0f',fitzpatrick_scale:!1,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],"char":'\u2733\ufe0f',fitzpatrick_scale:!1,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],"char":'\u274e',fitzpatrick_scale:!1,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],"char":'\u2705',fitzpatrick_scale:!1,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],"char":'\ud83d\udca0',fitzpatrick_scale:!1,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],"char":'\ud83c\udf00',fitzpatrick_scale:!1,category:"symbols"},loop:{keywords:["tape","cassette"],"char":'\u27bf',fitzpatrick_scale:!1,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],"char":'\ud83c\udf10',fitzpatrick_scale:!1,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],"char":'\u24c2\ufe0f',fitzpatrick_scale:!1,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],"char":'\ud83c\udfe7',fitzpatrick_scale:!1,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],"char":'\ud83c\ude02\ufe0f',fitzpatrick_scale:!1,category:"symbols"},passport_control:{keywords:["custom","blue-square"],"char":'\ud83d\udec2',fitzpatrick_scale:!1,category:"symbols"},customs:{keywords:["passport","border","blue-square"],"char":'\ud83d\udec3',fitzpatrick_scale:!1,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],"char":'\ud83d\udec4',fitzpatrick_scale:!1,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],"char":'\ud83d\udec5',fitzpatrick_scale:!1,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],"char":'\u267f',fitzpatrick_scale:!1,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],"char":'\ud83d\udead',fitzpatrick_scale:!1,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],"char":'\ud83d\udebe',fitzpatrick_scale:!1,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],"char":'\ud83c\udd7f\ufe0f',fitzpatrick_scale:!1,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],"char":'\ud83d\udeb0',fitzpatrick_scale:!1,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],"char":'\ud83d\udeb9',fitzpatrick_scale:!1,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],"char":'\ud83d\udeba',fitzpatrick_scale:!1,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],"char":'\ud83d\udebc',fitzpatrick_scale:!1,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],"char":'\ud83d\udebb',fitzpatrick_scale:!1,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],"char":'\ud83d\udeae',fitzpatrick_scale:!1,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],"char":'\ud83c\udfa6',fitzpatrick_scale:!1,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],"char":'\ud83d\udcf6',fitzpatrick_scale:!1,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],"char":'\ud83c\ude01',fitzpatrick_scale:!1,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],"char":'\ud83c\udd96',fitzpatrick_scale:!1,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],"char":'\ud83c\udd97',fitzpatrick_scale:!1,category:"symbols"},up:{keywords:["blue-square","above","high"],"char":'\ud83c\udd99',fitzpatrick_scale:!1,category:"symbols"},cool:{keywords:["words","blue-square"],"char":'\ud83c\udd92',fitzpatrick_scale:!1,category:"symbols"},"new":{keywords:["blue-square","words","start"],"char":'\ud83c\udd95',fitzpatrick_scale:!1,category:"symbols"},free:{keywords:["blue-square","words"],"char":'\ud83c\udd93',fitzpatrick_scale:!1,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],"char":'0\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},one:{keywords:["blue-square","numbers","1"],"char":'1\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],"char":'2\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],"char":'3\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},four:{keywords:["4","numbers","blue-square"],"char":'4\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],"char":'5\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},six:{keywords:["6","numbers","blue-square"],"char":'6\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],"char":'7\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],"char":'8\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],"char":'9\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],"char":'\ud83d\udd1f',fitzpatrick_scale:!1,category:"symbols"},asterisk:{keywords:["star","keycap"],"char":'*\u20e3',fitzpatrick_scale:!1,category:"symbols"},eject_button:{keywords:["blue-square"],"char":'\u23cf\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],"char":'\u25b6\ufe0f',fitzpatrick_scale:!1,category:"symbols"},pause_button:{keywords:["pause","blue-square"],"char":'\u23f8',fitzpatrick_scale:!1,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],"char":'\u23ed',fitzpatrick_scale:!1,category:"symbols"},stop_button:{keywords:["blue-square"],"char":'\u23f9',fitzpatrick_scale:!1,category:"symbols"},record_button:{keywords:["blue-square"],"char":'\u23fa',fitzpatrick_scale:!1,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],"char":'\u23ef',fitzpatrick_scale:!1,category:"symbols"},previous_track_button:{keywords:["backward"],"char":'\u23ee',fitzpatrick_scale:!1,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],"char":'\u23e9',fitzpatrick_scale:!1,category:"symbols"},rewind:{keywords:["play","blue-square"],"char":'\u23ea',fitzpatrick_scale:!1,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],"char":'\ud83d\udd00',fitzpatrick_scale:!1,category:"symbols"},repeat:{keywords:["loop","record"],"char":'\ud83d\udd01',fitzpatrick_scale:!1,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],"char":'\ud83d\udd02',fitzpatrick_scale:!1,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],"char":'\u25c0\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],"char":'\ud83d\udd3c',fitzpatrick_scale:!1,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],"char":'\ud83d\udd3d',fitzpatrick_scale:!1,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],"char":'\u23eb',fitzpatrick_scale:!1,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],"char":'\u23ec',fitzpatrick_scale:!1,category:"symbols"},arrow_right:{keywords:["blue-square","next"],"char":'\u27a1\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],"char":'\u2b05\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],"char":'\u2b06\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],"char":'\u2b07\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],"char":'\u2197\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],"char":'\u2198\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],"char":'\u2199\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],"char":'\u2196\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],"char":'\u2195\ufe0f',fitzpatrick_scale:!1,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],"char":'\u2194\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],"char":'\ud83d\udd04',fitzpatrick_scale:!1,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],"char":'\u21aa\ufe0f',fitzpatrick_scale:!1,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],"char":'\u21a9\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],"char":'\u2934\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],"char":'\u2935\ufe0f',fitzpatrick_scale:!1,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],"char":'#\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],"char":'\u2139\ufe0f',fitzpatrick_scale:!1,category:"symbols"},abc:{keywords:["blue-square","alphabet"],"char":'\ud83d\udd24',fitzpatrick_scale:!1,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],"char":'\ud83d\udd21',fitzpatrick_scale:!1,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],"char":'\ud83d\udd20',fitzpatrick_scale:!1,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],"char":'\ud83d\udd23',fitzpatrick_scale:!1,category:"symbols"},musical_note:{keywords:["score","tone","sound"],"char":'\ud83c\udfb5',fitzpatrick_scale:!1,category:"symbols"},notes:{keywords:["music","score"],"char":'\ud83c\udfb6',fitzpatrick_scale:!1,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],"char":'\u3030\ufe0f',fitzpatrick_scale:!1,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],"char":'\u27b0',fitzpatrick_scale:!1,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],"char":'\u2714\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],"char":'\ud83d\udd03',fitzpatrick_scale:!1,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],"char":'\u2795',fitzpatrick_scale:!1,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],"char":'\u2796',fitzpatrick_scale:!1,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],"char":'\u2797',fitzpatrick_scale:!1,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],"char":'\u2716\ufe0f',fitzpatrick_scale:!1,category:"symbols"},infinity:{keywords:["forever"],"char":'\u267e',fitzpatrick_scale:!1,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],"char":'\ud83d\udcb2',fitzpatrick_scale:!1,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],"char":'\ud83d\udcb1',fitzpatrick_scale:!1,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],"char":'\xa9\ufe0f',fitzpatrick_scale:!1,category:"symbols"},registered:{keywords:["alphabet","circle"],"char":'\xae\ufe0f',fitzpatrick_scale:!1,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],"char":'\u2122\ufe0f',fitzpatrick_scale:!1,category:"symbols"},end:{keywords:["words","arrow"],"char":'\ud83d\udd1a',fitzpatrick_scale:!1,category:"symbols"},back:{keywords:["arrow","words","return"],"char":'\ud83d\udd19',fitzpatrick_scale:!1,category:"symbols"},on:{keywords:["arrow","words"],"char":'\ud83d\udd1b',fitzpatrick_scale:!1,category:"symbols"},top:{keywords:["words","blue-square"],"char":'\ud83d\udd1d',fitzpatrick_scale:!1,category:"symbols"},soon:{keywords:["arrow","words"],"char":'\ud83d\udd1c',fitzpatrick_scale:!1,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],"char":'\u2611\ufe0f',fitzpatrick_scale:!1,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],"char":'\ud83d\udd18',fitzpatrick_scale:!1,category:"symbols"},white_circle:{keywords:["shape","round"],"char":'\u26aa',fitzpatrick_scale:!1,category:"symbols"},black_circle:{keywords:["shape","button","round"],"char":'\u26ab',fitzpatrick_scale:!1,category:"symbols"},red_circle:{keywords:["shape","error","danger"],"char":'\ud83d\udd34',fitzpatrick_scale:!1,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],"char":'\ud83d\udd35',fitzpatrick_scale:!1,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],"char":'\ud83d\udd38',fitzpatrick_scale:!1,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],"char":'\ud83d\udd39',fitzpatrick_scale:!1,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],"char":'\ud83d\udd36',fitzpatrick_scale:!1,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],"char":'\ud83d\udd37',fitzpatrick_scale:!1,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],"char":'\ud83d\udd3a',fitzpatrick_scale:!1,category:"symbols"},black_small_square:{keywords:["shape","icon"],"char":'\u25aa\ufe0f',fitzpatrick_scale:!1,category:"symbols"},white_small_square:{keywords:["shape","icon"],"char":'\u25ab\ufe0f',fitzpatrick_scale:!1,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],"char":'\u2b1b',fitzpatrick_scale:!1,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],"char":'\u2b1c',fitzpatrick_scale:!1,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],"char":'\ud83d\udd3b',fitzpatrick_scale:!1,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],"char":'\u25fc\ufe0f',fitzpatrick_scale:!1,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],"char":'\u25fb\ufe0f',fitzpatrick_scale:!1,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],"char":'\u25fe',fitzpatrick_scale:!1,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],"char":'\u25fd',fitzpatrick_scale:!1,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],"char":'\ud83d\udd32',fitzpatrick_scale:!1,category:"symbols"},white_square_button:{keywords:["shape","input"],"char":'\ud83d\udd33',fitzpatrick_scale:!1,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],"char":'\ud83d\udd08',fitzpatrick_scale:!1,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],"char":'\ud83d\udd09',fitzpatrick_scale:!1,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],"char":'\ud83d\udd0a',fitzpatrick_scale:!1,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],"char":'\ud83d\udd07',fitzpatrick_scale:!1,category:"symbols"},mega:{keywords:["sound","speaker","volume"],"char":'\ud83d\udce3',fitzpatrick_scale:!1,category:"symbols"},loudspeaker:{keywords:["volume","sound"],"char":'\ud83d\udce2',fitzpatrick_scale:!1,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],"char":'\ud83d\udd14',fitzpatrick_scale:!1,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],"char":'\ud83d\udd15',fitzpatrick_scale:!1,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],"char":'\ud83c\udccf',fitzpatrick_scale:!1,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],"char":'\ud83c\udc04',fitzpatrick_scale:!1,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],"char":'\u2660\ufe0f',fitzpatrick_scale:!1,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],"char":'\u2663\ufe0f',fitzpatrick_scale:!1,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],"char":'\u2665\ufe0f',fitzpatrick_scale:!1,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],"char":'\u2666\ufe0f',fitzpatrick_scale:!1,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],"char":'\ud83c\udfb4',fitzpatrick_scale:!1,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],"char":'\ud83d\udcad',fitzpatrick_scale:!1,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],"char":'\ud83d\uddef',fitzpatrick_scale:!1,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],"char":'\ud83d\udcac',fitzpatrick_scale:!1,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],"char":'\ud83d\udde8',fitzpatrick_scale:!1,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd50',fitzpatrick_scale:!1,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd51',fitzpatrick_scale:!1,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd52',fitzpatrick_scale:!1,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd53',fitzpatrick_scale:!1,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd54',fitzpatrick_scale:!1,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],"char":'\ud83d\udd55',fitzpatrick_scale:!1,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd56',fitzpatrick_scale:!1,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd57',fitzpatrick_scale:!1,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd58',fitzpatrick_scale:!1,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd59',fitzpatrick_scale:!1,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd5a',fitzpatrick_scale:!1,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],"char":'\ud83d\udd5b',fitzpatrick_scale:!1,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd5c',fitzpatrick_scale:!1,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd5d',fitzpatrick_scale:!1,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd5e',fitzpatrick_scale:!1,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd5f',fitzpatrick_scale:!1,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd60',fitzpatrick_scale:!1,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd61',fitzpatrick_scale:!1,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd62',fitzpatrick_scale:!1,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd63',fitzpatrick_scale:!1,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd64',fitzpatrick_scale:!1,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd65',fitzpatrick_scale:!1,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd66',fitzpatrick_scale:!1,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd67',fitzpatrick_scale:!1,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddeb',fitzpatrick_scale:!1,category:"flags"},aland_islands:{keywords:["\xc5land","islands","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddfd',fitzpatrick_scale:!1,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddf1',fitzpatrick_scale:!1,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],"char":'\ud83c\udde9\ud83c\uddff',fitzpatrick_scale:!1,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\udde9',fitzpatrick_scale:!1,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddee',fitzpatrick_scale:!1,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddf6',fitzpatrick_scale:!1,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddfc',fitzpatrick_scale:!1,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddfa',fitzpatrick_scale:!1,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddff',fitzpatrick_scale:!1,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\udded',fitzpatrick_scale:!1,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\udde9',fitzpatrick_scale:!1,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\udde7',fitzpatrick_scale:!1,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddfe',fitzpatrick_scale:!1,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddff',fitzpatrick_scale:!1,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddef',fitzpatrick_scale:!1,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddf6',fitzpatrick_scale:!1,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddfc',fitzpatrick_scale:!1,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],"char":'\ud83c\uddfb\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddeb',fitzpatrick_scale:!1,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddee',fitzpatrick_scale:!1,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddfb',fitzpatrick_scale:!1,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],"char":'\ud83c\uddf0\ud83c\udded',fitzpatrick_scale:!1,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\udde8',fitzpatrick_scale:!1,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],"char":'\ud83c\uddf0\ud83c\uddfe',fitzpatrick_scale:!1,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddeb',fitzpatrick_scale:!1,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\udde9',fitzpatrick_scale:!1,category:"flags"},chile:{keywords:["flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddf1',fitzpatrick_scale:!1,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],"char":'\ud83c\udde8\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddfd',fitzpatrick_scale:!1,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\udde8',fitzpatrick_scale:!1,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],"char":'\ud83c\uddf0\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\udde9',fitzpatrick_scale:!1,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddf0',fitzpatrick_scale:!1,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],"char":'\ud83c\udded\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddfa',fitzpatrick_scale:!1,category:"flags"},curacao:{keywords:["cura\xe7ao","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddfc',fitzpatrick_scale:!1,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddfe',fitzpatrick_scale:!1,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddff',fitzpatrick_scale:!1,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],"char":'\ud83c\udde9\ud83c\uddf0',fitzpatrick_scale:!1,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],"char":'\ud83c\udde9\ud83c\uddef',fitzpatrick_scale:!1,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],"char":'\ud83c\udde9\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],"char":'\ud83c\udde9\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],"char":'\ud83c\uddea\ud83c\udde8',fitzpatrick_scale:!1,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],"char":'\ud83c\uddea\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddfb',fitzpatrick_scale:!1,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddf6',fitzpatrick_scale:!1,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],"char":'\ud83c\uddea\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],"char":'\ud83c\uddea\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],"char":'\ud83c\uddea\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},eu:{keywords:["european","union","flag","banner"],"char":'\ud83c\uddea\ud83c\uddfa',fitzpatrick_scale:!1,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],"char":'\ud83c\uddeb\ud83c\uddf0',fitzpatrick_scale:!1,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],"char":'\ud83c\uddeb\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],"char":'\ud83c\uddeb\ud83c\uddef',fitzpatrick_scale:!1,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],"char":'\ud83c\uddeb\ud83c\uddee',fitzpatrick_scale:!1,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],"char":'\ud83c\uddeb\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddeb',fitzpatrick_scale:!1,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddeb',fitzpatrick_scale:!1,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddeb',fitzpatrick_scale:!1,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],"char":'\ud83c\udde9\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\udded',fitzpatrick_scale:!1,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddee',fitzpatrick_scale:!1,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddf1',fitzpatrick_scale:!1,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\udde9',fitzpatrick_scale:!1,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddf5',fitzpatrick_scale:!1,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddfa',fitzpatrick_scale:!1,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddfc',fitzpatrick_scale:!1,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddfe',fitzpatrick_scale:!1,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],"char":'\ud83c\udded\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],"char":'\ud83c\udded\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],"char":'\ud83c\udded\ud83c\uddf0',fitzpatrick_scale:!1,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],"char":'\ud83c\udded\ud83c\uddfa',fitzpatrick_scale:!1,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\udde9',fitzpatrick_scale:!1,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\uddf6',fitzpatrick_scale:!1,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\uddf1',fitzpatrick_scale:!1,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddee',fitzpatrick_scale:!1,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],"char":'\ud83c\uddef\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],"char":'\ud83c\uddef\ud83c\uddf5',fitzpatrick_scale:!1,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],"char":'\ud83c\uddef\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],"char":'\ud83c\uddef\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],"char":'\ud83c\uddf0\ud83c\uddff',fitzpatrick_scale:!1,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],"char":'\ud83c\uddf0\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],"char":'\ud83c\uddf0\ud83c\uddee',fitzpatrick_scale:!1,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],"char":'\ud83c\uddfd\ud83c\uddf0',fitzpatrick_scale:!1,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],"char":'\ud83c\uddf0\ud83c\uddfc',fitzpatrick_scale:!1,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],"char":'\ud83c\uddf0\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\uddfb',fitzpatrick_scale:!1,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\udde7',fitzpatrick_scale:!1,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\uddfe',fitzpatrick_scale:!1,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\uddee',fitzpatrick_scale:!1,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\uddfa',fitzpatrick_scale:!1,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddf0',fitzpatrick_scale:!1,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddfc',fitzpatrick_scale:!1,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddfe',fitzpatrick_scale:!1,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddfb',fitzpatrick_scale:!1,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddf1',fitzpatrick_scale:!1,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\udded',fitzpatrick_scale:!1,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddf6',fitzpatrick_scale:!1,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddfa',fitzpatrick_scale:!1,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],"char":'\ud83c\uddfe\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddfd',fitzpatrick_scale:!1,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],"char":'\ud83c\uddeb\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\udde9',fitzpatrick_scale:!1,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\udde8',fitzpatrick_scale:!1,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddff',fitzpatrick_scale:!1,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\uddf5',fitzpatrick_scale:!1,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\uddf1',fitzpatrick_scale:!1,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\udde8',fitzpatrick_scale:!1,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\uddff',fitzpatrick_scale:!1,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\uddee',fitzpatrick_scale:!1,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\uddfa',fitzpatrick_scale:!1,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\uddeb',fitzpatrick_scale:!1,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddf5',fitzpatrick_scale:!1,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],"char":'\ud83c\uddf0\ud83c\uddf5',fitzpatrick_scale:!1,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],"char":'\ud83c\uddf4\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddf0',fitzpatrick_scale:!1,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddfc',fitzpatrick_scale:!1,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddfe',fitzpatrick_scale:!1,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\udded',fitzpatrick_scale:!1,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddf1',fitzpatrick_scale:!1,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],"char":'\ud83c\uddf6\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},reunion:{keywords:["r\xe9union","flag","nation","country","banner"],"char":'\ud83c\uddf7\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],"char":'\ud83c\uddf7\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],"char":'\ud83c\uddf7\ud83c\uddfa',fitzpatrick_scale:!1,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],"char":'\ud83c\uddf7\ud83c\uddfc',fitzpatrick_scale:!1,category:"flags"},st_barthelemy:{keywords:["saint","barth\xe9lemy","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddf1',fitzpatrick_scale:!1,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\udded',fitzpatrick_scale:!1,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],"char":'\ud83c\uddf0\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\udde8',fitzpatrick_scale:!1,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],"char":'\ud83c\uddfb\ud83c\udde8',fitzpatrick_scale:!1,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],"char":'\ud83c\uddfc\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],"char":'\ud83c\uddf7\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\udde8',fitzpatrick_scale:!1,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddf1',fitzpatrick_scale:!1,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddfd',fitzpatrick_scale:!1,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddf0',fitzpatrick_scale:!1,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddee',fitzpatrick_scale:!1,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\udde7',fitzpatrick_scale:!1,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],"char":'\ud83c\uddff\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],"char":'\ud83c\uddf0\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],"char":'\ud83c\uddea\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\uddf0',fitzpatrick_scale:!1,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\udde9',fitzpatrick_scale:!1,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddff',fitzpatrick_scale:!1,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\udded',fitzpatrick_scale:!1,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddfe',fitzpatrick_scale:!1,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddfc',fitzpatrick_scale:!1,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddef',fitzpatrick_scale:!1,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddff',fitzpatrick_scale:!1,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\udded',fitzpatrick_scale:!1,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddf1',fitzpatrick_scale:!1,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddf0',fitzpatrick_scale:!1,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\udde8',fitzpatrick_scale:!1,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddfb',fitzpatrick_scale:!1,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],"char":'\ud83c\uddfa\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],"char":'\ud83c\uddfa\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],"char":'\ud83c\uddec\ud83c\udde7',fitzpatrick_scale:!1,category:"flags"},england:{keywords:["flag","english"],"char":'\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f',fitzpatrick_scale:!1,category:"flags"},scotland:{keywords:["flag","scottish"],"char":'\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f',fitzpatrick_scale:!1,category:"flags"},wales:{keywords:["flag","welsh"],"char":'\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f',fitzpatrick_scale:!1,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],"char":'\ud83c\uddfa\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],"char":'\ud83c\uddfb\ud83c\uddee',fitzpatrick_scale:!1,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],"char":'\ud83c\uddfa\ud83c\uddfe',fitzpatrick_scale:!1,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],"char":'\ud83c\uddfa\ud83c\uddff',fitzpatrick_scale:!1,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],"char":'\ud83c\uddfb\ud83c\uddfa',fitzpatrick_scale:!1,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],"char":'\ud83c\uddfb\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],"char":'\ud83c\uddfb\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],"char":'\ud83c\uddfb\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],"char":'\ud83c\uddfc\ud83c\uddeb',fitzpatrick_scale:!1,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],"char":'\ud83c\uddea\ud83c\udded',fitzpatrick_scale:!1,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],"char":'\ud83c\uddfe\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],"char":'\ud83c\uddff\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],"char":'\ud83c\uddff\ud83c\uddfc',fitzpatrick_scale:!1,category:"flags"},united_nations:{keywords:["un","flag","banner"],"char":'\ud83c\uddfa\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],"char":'\ud83c\udff4\u200d\u2620\ufe0f',fitzpatrick_scale:!1,category:"flags"}}); diff --git a/public/assets/tinymce/plugins/emoticons/js/emojiimages-8d59e6cafd8ee4961cd4f31515f08ad07db747166ce3af67fa8108289e88564d.js.gz b/public/assets/tinymce/plugins/emoticons/js/emojiimages-8d59e6cafd8ee4961cd4f31515f08ad07db747166ce3af67fa8108289e88564d.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..5bec37396e7ee963e67ab317319e98006ea96d0f GIT binary patch literal 36788 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 literal 0 HcmV?d00001 diff --git a/public/assets/tinymce/plugins/emoticons/js/emojiimages.js b/public/assets/tinymce/plugins/emoticons/js/emojiimages.js new file mode 120000 index 00000000..4bb05275 --- /dev/null +++ b/public/assets/tinymce/plugins/emoticons/js/emojiimages.js @@ -0,0 +1 @@ +emojiimages-8d59e6cafd8ee4961cd4f31515f08ad07db747166ce3af67fa8108289e88564d.js \ No newline at end of file diff --git a/public/assets/tinymce/plugins/emoticons/js/emojiimages.js.gz b/public/assets/tinymce/plugins/emoticons/js/emojiimages.js.gz new file mode 120000 index 00000000..ad62fc23 --- /dev/null +++ b/public/assets/tinymce/plugins/emoticons/js/emojiimages.js.gz @@ -0,0 +1 @@ +emojiimages-8d59e6cafd8ee4961cd4f31515f08ad07db747166ce3af67fa8108289e88564d.js.gz \ No newline at end of file diff --git a/public/assets/tinymce/plugins/emoticons/js/emojis-3006b2aae9b4d0b2df2068968cc5523af58362fbd5759350b5f217f3f20c7236.js b/public/assets/tinymce/plugins/emoticons/js/emojis-3006b2aae9b4d0b2df2068968cc5523af58362fbd5759350b5f217f3f20c7236.js new file mode 100644 index 00000000..dd17c4fa --- /dev/null +++ b/public/assets/tinymce/plugins/emoticons/js/emojis-3006b2aae9b4d0b2df2068968cc5523af58362fbd5759350b5f217f3f20c7236.js @@ -0,0 +1,2 @@ +// Source: npm package: emojilib, file:emojis.json +window.tinymce.Resource.add("tinymce.plugins.emoticons",{grinning:{keywords:["face","smile","happy","joy",":D","grin"],"char":"\ud83d\ude00",fitzpatrick_scale:!1,category:"people"},grimacing:{keywords:["face","grimace","teeth"],"char":"\ud83d\ude2c",fitzpatrick_scale:!1,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],"char":"\ud83d\ude01",fitzpatrick_scale:!1,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],"char":"\ud83d\ude02",fitzpatrick_scale:!1,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],"char":"\ud83e\udd23",fitzpatrick_scale:!1,category:"people"},partying:{keywords:["face","celebration","woohoo"],"char":"\ud83e\udd73",fitzpatrick_scale:!1,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],"char":"\ud83d\ude03",fitzpatrick_scale:!1,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],"char":"\ud83d\ude04",fitzpatrick_scale:!1,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],"char":"\ud83d\ude05",fitzpatrick_scale:!1,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],"char":"\ud83d\ude06",fitzpatrick_scale:!1,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],"char":"\ud83d\ude07",fitzpatrick_scale:!1,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],"char":"\ud83d\ude09",fitzpatrick_scale:!1,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],"char":"\ud83d\ude0a",fitzpatrick_scale:!1,category:"people"},slightly_smiling_face:{keywords:["face","smile"],"char":"\ud83d\ude42",fitzpatrick_scale:!1,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],"char":"\ud83d\ude43",fitzpatrick_scale:!1,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],"char":"\u263a\ufe0f",fitzpatrick_scale:!1,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],"char":"\ud83d\ude0b",fitzpatrick_scale:!1,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],"char":"\ud83d\ude0c",fitzpatrick_scale:!1,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],"char":"\ud83d\ude0d",fitzpatrick_scale:!1,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],"char":"\ud83e\udd70",fitzpatrick_scale:!1,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],"char":"\ud83d\ude18",fitzpatrick_scale:!1,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],"char":"\ud83d\ude17",fitzpatrick_scale:!1,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],"char":"\ud83d\ude19",fitzpatrick_scale:!1,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],"char":"\ud83d\ude1a",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],"char":"\ud83d\ude1c",fitzpatrick_scale:!1,category:"people"},zany:{keywords:["face","goofy","crazy"],"char":"\ud83e\udd2a",fitzpatrick_scale:!1,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],"char":"\ud83e\udd28",fitzpatrick_scale:!1,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],"char":"\ud83e\uddd0",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],"char":"\ud83d\ude1d",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],"char":"\ud83d\ude1b",fitzpatrick_scale:!1,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],"char":"\ud83e\udd11",fitzpatrick_scale:!1,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],"char":"\ud83e\udd13",fitzpatrick_scale:!1,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],"char":"\ud83d\ude0e",fitzpatrick_scale:!1,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],"char":"\ud83e\udd29",fitzpatrick_scale:!1,category:"people"},clown_face:{keywords:["face"],"char":"\ud83e\udd21",fitzpatrick_scale:!1,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],"char":"\ud83e\udd20",fitzpatrick_scale:!1,category:"people"},hugs:{keywords:["face","smile","hug"],"char":"\ud83e\udd17",fitzpatrick_scale:!1,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],"char":"\ud83d\ude0f",fitzpatrick_scale:!1,category:"people"},no_mouth:{keywords:["face","hellokitty"],"char":"\ud83d\ude36",fitzpatrick_scale:!1,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],"char":"\ud83d\ude10",fitzpatrick_scale:!1,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],"char":"\ud83d\ude11",fitzpatrick_scale:!1,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],"char":"\ud83d\ude12",fitzpatrick_scale:!1,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],"char":"\ud83d\ude44",fitzpatrick_scale:!1,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],"char":"\ud83e\udd14",fitzpatrick_scale:!1,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],"char":"\ud83e\udd25",fitzpatrick_scale:!1,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],"char":"\ud83e\udd2d",fitzpatrick_scale:!1,category:"people"},shushing:{keywords:["face","quiet","shhh"],"char":"\ud83e\udd2b",fitzpatrick_scale:!1,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],"char":"\ud83e\udd2c",fitzpatrick_scale:!1,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],"char":"\ud83e\udd2f",fitzpatrick_scale:!1,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],"char":"\ud83d\ude33",fitzpatrick_scale:!1,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],"char":"\ud83d\ude1e",fitzpatrick_scale:!1,category:"people"},worried:{keywords:["face","concern","nervous",":("],"char":"\ud83d\ude1f",fitzpatrick_scale:!1,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],"char":"\ud83d\ude20",fitzpatrick_scale:!1,category:"people"},rage:{keywords:["angry","mad","hate","despise"],"char":"\ud83d\ude21",fitzpatrick_scale:!1,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],"char":"\ud83d\ude14",fitzpatrick_scale:!1,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],"char":"\ud83d\ude15",fitzpatrick_scale:!1,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],"char":"\ud83d\ude41",fitzpatrick_scale:!1,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],"char":"\u2639",fitzpatrick_scale:!1,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],"char":"\ud83d\ude23",fitzpatrick_scale:!1,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],"char":"\ud83d\ude16",fitzpatrick_scale:!1,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],"char":"\ud83d\ude2b",fitzpatrick_scale:!1,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],"char":"\ud83d\ude29",fitzpatrick_scale:!1,category:"people"},pleading:{keywords:["face","begging","mercy"],"char":"\ud83e\udd7a",fitzpatrick_scale:!1,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],"char":"\ud83d\ude24",fitzpatrick_scale:!1,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],"char":"\ud83d\ude2e",fitzpatrick_scale:!1,category:"people"},scream:{keywords:["face","munch","scared","omg"],"char":"\ud83d\ude31",fitzpatrick_scale:!1,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],"char":"\ud83d\ude28",fitzpatrick_scale:!1,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],"char":"\ud83d\ude30",fitzpatrick_scale:!1,category:"people"},hushed:{keywords:["face","woo","shh"],"char":"\ud83d\ude2f",fitzpatrick_scale:!1,category:"people"},frowning:{keywords:["face","aw","what"],"char":"\ud83d\ude26",fitzpatrick_scale:!1,category:"people"},anguished:{keywords:["face","stunned","nervous"],"char":"\ud83d\ude27",fitzpatrick_scale:!1,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],"char":"\ud83d\ude22",fitzpatrick_scale:!1,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],"char":"\ud83d\ude25",fitzpatrick_scale:!1,category:"people"},drooling_face:{keywords:["face"],"char":"\ud83e\udd24",fitzpatrick_scale:!1,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],"char":"\ud83d\ude2a",fitzpatrick_scale:!1,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],"char":"\ud83d\ude13",fitzpatrick_scale:!1,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],"char":"\ud83e\udd75",fitzpatrick_scale:!1,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],"char":"\ud83e\udd76",fitzpatrick_scale:!1,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],"char":"\ud83d\ude2d",fitzpatrick_scale:!1,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],"char":"\ud83d\ude35",fitzpatrick_scale:!1,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],"char":"\ud83d\ude32",fitzpatrick_scale:!1,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],"char":"\ud83e\udd10",fitzpatrick_scale:!1,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],"char":"\ud83e\udd22",fitzpatrick_scale:!1,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],"char":"\ud83e\udd27",fitzpatrick_scale:!1,category:"people"},vomiting:{keywords:["face","sick"],"char":"\ud83e\udd2e",fitzpatrick_scale:!1,category:"people"},mask:{keywords:["face","sick","ill","disease"],"char":"\ud83d\ude37",fitzpatrick_scale:!1,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],"char":"\ud83e\udd12",fitzpatrick_scale:!1,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],"char":"\ud83e\udd15",fitzpatrick_scale:!1,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],"char":"\ud83e\udd74",fitzpatrick_scale:!1,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],"char":"\ud83d\ude34",fitzpatrick_scale:!1,category:"people"},zzz:{keywords:["sleepy","tired","dream"],"char":"\ud83d\udca4",fitzpatrick_scale:!1,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],"char":"\ud83d\udca9",fitzpatrick_scale:!1,category:"people"},smiling_imp:{keywords:["devil","horns"],"char":"\ud83d\ude08",fitzpatrick_scale:!1,category:"people"},imp:{keywords:["devil","angry","horns"],"char":"\ud83d\udc7f",fitzpatrick_scale:!1,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],"char":"\ud83d\udc79",fitzpatrick_scale:!1,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],"char":"\ud83d\udc7a",fitzpatrick_scale:!1,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],"char":"\ud83d\udc80",fitzpatrick_scale:!1,category:"people"},ghost:{keywords:["halloween","spooky","scary"],"char":"\ud83d\udc7b",fitzpatrick_scale:!1,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],"char":"\ud83d\udc7d",fitzpatrick_scale:!1,category:"people"},robot:{keywords:["computer","machine","bot"],"char":"\ud83e\udd16",fitzpatrick_scale:!1,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],"char":"\ud83d\ude3a",fitzpatrick_scale:!1,category:"people"},smile_cat:{keywords:["animal","cats","smile"],"char":"\ud83d\ude38",fitzpatrick_scale:!1,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],"char":"\ud83d\ude39",fitzpatrick_scale:!1,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],"char":"\ud83d\ude3b",fitzpatrick_scale:!1,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],"char":"\ud83d\ude3c",fitzpatrick_scale:!1,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],"char":"\ud83d\ude3d",fitzpatrick_scale:!1,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],"char":"\ud83d\ude40",fitzpatrick_scale:!1,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],"char":"\ud83d\ude3f",fitzpatrick_scale:!1,category:"people"},pouting_cat:{keywords:["animal","cats"],"char":"\ud83d\ude3e",fitzpatrick_scale:!1,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],"char":"\ud83e\udd32",fitzpatrick_scale:!0,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],"char":"\ud83d\ude4c",fitzpatrick_scale:!0,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],"char":"\ud83d\udc4f",fitzpatrick_scale:!0,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],"char":"\ud83d\udc4b",fitzpatrick_scale:!0,category:"people"},call_me_hand:{keywords:["hands","gesture"],"char":"\ud83e\udd19",fitzpatrick_scale:!0,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],"char":"\ud83d\udc4d",fitzpatrick_scale:!0,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],"char":"\ud83d\udc4e",fitzpatrick_scale:!0,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],"char":"\ud83d\udc4a",fitzpatrick_scale:!0,category:"people"},fist:{keywords:["fingers","hand","grasp"],"char":"\u270a",fitzpatrick_scale:!0,category:"people"},fist_left:{keywords:["hand","fistbump"],"char":"\ud83e\udd1b",fitzpatrick_scale:!0,category:"people"},fist_right:{keywords:["hand","fistbump"],"char":"\ud83e\udd1c",fitzpatrick_scale:!0,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],"char":"\u270c",fitzpatrick_scale:!0,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],"char":"\ud83d\udc4c",fitzpatrick_scale:!0,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],"char":"\u270b",fitzpatrick_scale:!0,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],"char":"\ud83e\udd1a",fitzpatrick_scale:!0,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],"char":"\ud83d\udc50",fitzpatrick_scale:!0,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],"char":"\ud83d\udcaa",fitzpatrick_scale:!0,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],"char":"\ud83d\ude4f",fitzpatrick_scale:!0,category:"people"},foot:{keywords:["kick","stomp"],"char":"\ud83e\uddb6",fitzpatrick_scale:!0,category:"people"},leg:{keywords:["kick","limb"],"char":"\ud83e\uddb5",fitzpatrick_scale:!0,category:"people"},handshake:{keywords:["agreement","shake"],"char":"\ud83e\udd1d",fitzpatrick_scale:!1,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],"char":"\u261d",fitzpatrick_scale:!0,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],"char":"\ud83d\udc46",fitzpatrick_scale:!0,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],"char":"\ud83d\udc47",fitzpatrick_scale:!0,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],"char":"\ud83d\udc48",fitzpatrick_scale:!0,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],"char":"\ud83d\udc49",fitzpatrick_scale:!0,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],"char":"\ud83d\udd95",fitzpatrick_scale:!0,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],"char":"\ud83d\udd90",fitzpatrick_scale:!0,category:"people"},love_you:{keywords:["hand","fingers","gesture"],"char":"\ud83e\udd1f",fitzpatrick_scale:!0,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],"char":"\ud83e\udd18",fitzpatrick_scale:!0,category:"people"},crossed_fingers:{keywords:["good","lucky"],"char":"\ud83e\udd1e",fitzpatrick_scale:!0,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],"char":"\ud83d\udd96",fitzpatrick_scale:!0,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],"char":"\u270d",fitzpatrick_scale:!0,category:"people"},selfie:{keywords:["camera","phone"],"char":"\ud83e\udd33",fitzpatrick_scale:!0,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],"char":"\ud83d\udc85",fitzpatrick_scale:!0,category:"people"},lips:{keywords:["mouth","kiss"],"char":"\ud83d\udc44",fitzpatrick_scale:!1,category:"people"},tooth:{keywords:["teeth","dentist"],"char":"\ud83e\uddb7",fitzpatrick_scale:!1,category:"people"},tongue:{keywords:["mouth","playful"],"char":"\ud83d\udc45",fitzpatrick_scale:!1,category:"people"},ear:{keywords:["face","hear","sound","listen"],"char":"\ud83d\udc42",fitzpatrick_scale:!0,category:"people"},nose:{keywords:["smell","sniff"],"char":"\ud83d\udc43",fitzpatrick_scale:!0,category:"people"},eye:{keywords:["face","look","see","watch","stare"],"char":"\ud83d\udc41",fitzpatrick_scale:!1,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],"char":"\ud83d\udc40",fitzpatrick_scale:!1,category:"people"},brain:{keywords:["smart","intelligent"],"char":"\ud83e\udde0",fitzpatrick_scale:!1,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],"char":"\ud83d\udc64",fitzpatrick_scale:!1,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],"char":"\ud83d\udc65",fitzpatrick_scale:!1,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],"char":"\ud83d\udde3",fitzpatrick_scale:!1,category:"people"},baby:{keywords:["child","boy","girl","toddler"],"char":"\ud83d\udc76",fitzpatrick_scale:!0,category:"people"},child:{keywords:["gender-neutral","young"],"char":"\ud83e\uddd2",fitzpatrick_scale:!0,category:"people"},boy:{keywords:["man","male","guy","teenager"],"char":"\ud83d\udc66",fitzpatrick_scale:!0,category:"people"},girl:{keywords:["female","woman","teenager"],"char":"\ud83d\udc67",fitzpatrick_scale:!0,category:"people"},adult:{keywords:["gender-neutral","person"],"char":"\ud83e\uddd1",fitzpatrick_scale:!0,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],"char":"\ud83d\udc68",fitzpatrick_scale:!0,category:"people"},woman:{keywords:["female","girls","lady"],"char":"\ud83d\udc69",fitzpatrick_scale:!0,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],"char":"\ud83d\udc71\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],"char":"\ud83d\udc71",fitzpatrick_scale:!0,category:"people"},bearded_person:{keywords:["person","bewhiskered"],"char":"\ud83e\uddd4",fitzpatrick_scale:!0,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],"char":"\ud83e\uddd3",fitzpatrick_scale:!0,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],"char":"\ud83d\udc74",fitzpatrick_scale:!0,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],"char":"\ud83d\udc75",fitzpatrick_scale:!0,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],"char":"\ud83d\udc72",fitzpatrick_scale:!0,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],"char":"\ud83e\uddd5",fitzpatrick_scale:!0,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],"char":"\ud83d\udc73\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],"char":"\ud83d\udc73",fitzpatrick_scale:!0,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],"char":"\ud83d\udc6e\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],"char":"\ud83d\udc6e",fitzpatrick_scale:!0,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],"char":"\ud83d\udc77\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],"char":"\ud83d\udc77",fitzpatrick_scale:!0,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],"char":"\ud83d\udc82\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],"char":"\ud83d\udc82",fitzpatrick_scale:!0,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],"char":"\ud83d\udd75\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},male_detective:{keywords:["human","spy","detective"],"char":"\ud83d\udd75",fitzpatrick_scale:!0,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],"char":"\ud83d\udc69\u200d\u2695\ufe0f",fitzpatrick_scale:!0,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],"char":"\ud83d\udc68\u200d\u2695\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udf3e",fitzpatrick_scale:!0,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udf3e",fitzpatrick_scale:!0,category:"people"},woman_cook:{keywords:["chef","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udf73",fitzpatrick_scale:!0,category:"people"},man_cook:{keywords:["chef","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udf73",fitzpatrick_scale:!0,category:"people"},woman_student:{keywords:["graduate","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udf93",fitzpatrick_scale:!0,category:"people"},man_student:{keywords:["graduate","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udf93",fitzpatrick_scale:!0,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udfa4",fitzpatrick_scale:!0,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udfa4",fitzpatrick_scale:!0,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udfeb",fitzpatrick_scale:!0,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udfeb",fitzpatrick_scale:!0,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udfed",fitzpatrick_scale:!0,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udfed",fitzpatrick_scale:!0,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],"char":"\ud83d\udc69\u200d\ud83d\udcbb",fitzpatrick_scale:!0,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],"char":"\ud83d\udc68\u200d\ud83d\udcbb",fitzpatrick_scale:!0,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],"char":"\ud83d\udc69\u200d\ud83d\udcbc",fitzpatrick_scale:!0,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],"char":"\ud83d\udc68\u200d\ud83d\udcbc",fitzpatrick_scale:!0,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],"char":"\ud83d\udc69\u200d\ud83d\udd27",fitzpatrick_scale:!0,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],"char":"\ud83d\udc68\u200d\ud83d\udd27",fitzpatrick_scale:!0,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],"char":"\ud83d\udc69\u200d\ud83d\udd2c",fitzpatrick_scale:!0,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],"char":"\ud83d\udc68\u200d\ud83d\udd2c",fitzpatrick_scale:!0,category:"people"},woman_artist:{keywords:["painter","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udfa8",fitzpatrick_scale:!0,category:"people"},man_artist:{keywords:["painter","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udfa8",fitzpatrick_scale:!0,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],"char":"\ud83d\udc69\u200d\ud83d\ude92",fitzpatrick_scale:!0,category:"people"},man_firefighter:{keywords:["fireman","man","human"],"char":"\ud83d\udc68\u200d\ud83d\ude92",fitzpatrick_scale:!0,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],"char":"\ud83d\udc69\u200d\u2708\ufe0f",fitzpatrick_scale:!0,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],"char":"\ud83d\udc68\u200d\u2708\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],"char":"\ud83d\udc69\u200d\ud83d\ude80",fitzpatrick_scale:!0,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],"char":"\ud83d\udc68\u200d\ud83d\ude80",fitzpatrick_scale:!0,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],"char":"\ud83d\udc69\u200d\u2696\ufe0f",fitzpatrick_scale:!0,category:"people"},man_judge:{keywords:["justice","court","man","human"],"char":"\ud83d\udc68\u200d\u2696\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],"char":"\ud83e\uddb8\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],"char":"\ud83e\uddb8\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],"char":"\ud83e\uddb9\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],"char":"\ud83e\uddb9\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],"char":"\ud83e\udd36",fitzpatrick_scale:!0,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],"char":"\ud83c\udf85",fitzpatrick_scale:!0,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],"char":"\ud83e\uddd9\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],"char":"\ud83e\uddd9\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_elf:{keywords:["woman","female"],"char":"\ud83e\udddd\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_elf:{keywords:["man","male"],"char":"\ud83e\udddd\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_vampire:{keywords:["woman","female"],"char":"\ud83e\udddb\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_vampire:{keywords:["man","male","dracula"],"char":"\ud83e\udddb\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],"char":"\ud83e\udddf\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],"char":"\ud83e\udddf\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},woman_genie:{keywords:["woman","female"],"char":"\ud83e\uddde\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"people"},man_genie:{keywords:["man","male"],"char":"\ud83e\uddde\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],"char":"\ud83e\udddc\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},merman:{keywords:["man","male","triton"],"char":"\ud83e\udddc\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_fairy:{keywords:["woman","female"],"char":"\ud83e\uddda\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_fairy:{keywords:["man","male"],"char":"\ud83e\uddda\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},angel:{keywords:["heaven","wings","halo"],"char":"\ud83d\udc7c",fitzpatrick_scale:!0,category:"people"},pregnant_woman:{keywords:["baby"],"char":"\ud83e\udd30",fitzpatrick_scale:!0,category:"people"},breastfeeding:{keywords:["nursing","baby"],"char":"\ud83e\udd31",fitzpatrick_scale:!0,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],"char":"\ud83d\udc78",fitzpatrick_scale:!0,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],"char":"\ud83e\udd34",fitzpatrick_scale:!0,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],"char":"\ud83d\udc70",fitzpatrick_scale:!0,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],"char":"\ud83e\udd35",fitzpatrick_scale:!0,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],"char":"\ud83c\udfc3\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],"char":"\ud83c\udfc3",fitzpatrick_scale:!0,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],"char":"\ud83d\udeb6\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},walking_man:{keywords:["human","feet","steps"],"char":"\ud83d\udeb6",fitzpatrick_scale:!0,category:"people"},dancer:{keywords:["female","girl","woman","fun"],"char":"\ud83d\udc83",fitzpatrick_scale:!0,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],"char":"\ud83d\udd7a",fitzpatrick_scale:!0,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],"char":"\ud83d\udc6f",fitzpatrick_scale:!1,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],"char":"\ud83d\udc6f\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],"char":"\ud83d\udc6b",fitzpatrick_scale:!1,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],"char":"\ud83d\udc6c",fitzpatrick_scale:!1,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],"char":"\ud83d\udc6d",fitzpatrick_scale:!1,category:"people"},bowing_woman:{keywords:["woman","female","girl"],"char":"\ud83d\ude47\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},bowing_man:{keywords:["man","male","boy"],"char":"\ud83d\ude47",fitzpatrick_scale:!0,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],"char":"\ud83e\udd26\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],"char":"\ud83e\udd26\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],"char":"\ud83e\udd37",fitzpatrick_scale:!0,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],"char":"\ud83e\udd37\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],"char":"\ud83d\udc81",fitzpatrick_scale:!0,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],"char":"\ud83d\udc81\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],"char":"\ud83d\ude45",fitzpatrick_scale:!0,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],"char":"\ud83d\ude45\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],"char":"\ud83d\ude46",fitzpatrick_scale:!0,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],"char":"\ud83d\ude46\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],"char":"\ud83d\ude4b",fitzpatrick_scale:!0,category:"people"},raising_hand_man:{keywords:["male","boy","man"],"char":"\ud83d\ude4b\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},pouting_woman:{keywords:["female","girl","woman"],"char":"\ud83d\ude4e",fitzpatrick_scale:!0,category:"people"},pouting_man:{keywords:["male","boy","man"],"char":"\ud83d\ude4e\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],"char":"\ud83d\ude4d",fitzpatrick_scale:!0,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],"char":"\ud83d\ude4d\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},haircut_woman:{keywords:["female","girl","woman"],"char":"\ud83d\udc87",fitzpatrick_scale:!0,category:"people"},haircut_man:{keywords:["male","boy","man"],"char":"\ud83d\udc87\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],"char":"\ud83d\udc86",fitzpatrick_scale:!0,category:"people"},massage_man:{keywords:["male","boy","man","head"],"char":"\ud83d\udc86\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],"char":"\ud83e\uddd6\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],"char":"\ud83e\uddd6\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],"char":"\ud83d\udc91",fitzpatrick_scale:!1,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],"char":"\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc69",fitzpatrick_scale:!1,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],"char":"\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68",fitzpatrick_scale:!1,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],"char":"\ud83d\udc8f",fitzpatrick_scale:!1,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],"char":"\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69",fitzpatrick_scale:!1,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],"char":"\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68",fitzpatrick_scale:!1,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],"char":"\ud83d\udc6a",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],"char":"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],"char":"\ud83d\udc69\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],"char":"\ud83d\udc69\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],"char":"\ud83d\udc68\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],"char":"\ud83d\udc68\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},yarn:{keywords:["ball","crochet","knit"],"char":"\ud83e\uddf6",fitzpatrick_scale:!1,category:"people"},thread:{keywords:["needle","sewing","spool","string"],"char":"\ud83e\uddf5",fitzpatrick_scale:!1,category:"people"},coat:{keywords:["jacket"],"char":"\ud83e\udde5",fitzpatrick_scale:!1,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],"char":"\ud83e\udd7c",fitzpatrick_scale:!1,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],"char":"\ud83d\udc5a",fitzpatrick_scale:!1,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],"char":"\ud83d\udc55",fitzpatrick_scale:!1,category:"people"},jeans:{keywords:["fashion","shopping"],"char":"\ud83d\udc56",fitzpatrick_scale:!1,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],"char":"\ud83d\udc54",fitzpatrick_scale:!1,category:"people"},dress:{keywords:["clothes","fashion","shopping"],"char":"\ud83d\udc57",fitzpatrick_scale:!1,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],"char":"\ud83d\udc59",fitzpatrick_scale:!1,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],"char":"\ud83d\udc58",fitzpatrick_scale:!1,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],"char":"\ud83d\udc84",fitzpatrick_scale:!1,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],"char":"\ud83d\udc8b",fitzpatrick_scale:!1,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],"char":"\ud83d\udc63",fitzpatrick_scale:!1,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],"char":"\ud83e\udd7f",fitzpatrick_scale:!1,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],"char":"\ud83d\udc60",fitzpatrick_scale:!1,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],"char":"\ud83d\udc61",fitzpatrick_scale:!1,category:"people"},boot:{keywords:["shoes","fashion"],"char":"\ud83d\udc62",fitzpatrick_scale:!1,category:"people"},mans_shoe:{keywords:["fashion","male"],"char":"\ud83d\udc5e",fitzpatrick_scale:!1,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],"char":"\ud83d\udc5f",fitzpatrick_scale:!1,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],"char":"\ud83e\udd7e",fitzpatrick_scale:!1,category:"people"},socks:{keywords:["stockings","clothes"],"char":"\ud83e\udde6",fitzpatrick_scale:!1,category:"people"},gloves:{keywords:["hands","winter","clothes"],"char":"\ud83e\udde4",fitzpatrick_scale:!1,category:"people"},scarf:{keywords:["neck","winter","clothes"],"char":"\ud83e\udde3",fitzpatrick_scale:!1,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],"char":"\ud83d\udc52",fitzpatrick_scale:!1,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],"char":"\ud83c\udfa9",fitzpatrick_scale:!1,category:"people"},billed_hat:{keywords:["cap","baseball"],"char":"\ud83e\udde2",fitzpatrick_scale:!1,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],"char":"\u26d1",fitzpatrick_scale:!1,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],"char":"\ud83c\udf93",fitzpatrick_scale:!1,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],"char":"\ud83d\udc51",fitzpatrick_scale:!1,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],"char":"\ud83c\udf92",fitzpatrick_scale:!1,category:"people"},luggage:{keywords:["packing","travel"],"char":"\ud83e\uddf3",fitzpatrick_scale:!1,category:"people"},pouch:{keywords:["bag","accessories","shopping"],"char":"\ud83d\udc5d",fitzpatrick_scale:!1,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],"char":"\ud83d\udc5b",fitzpatrick_scale:!1,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],"char":"\ud83d\udc5c",fitzpatrick_scale:!1,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],"char":"\ud83d\udcbc",fitzpatrick_scale:!1,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],"char":"\ud83d\udc53",fitzpatrick_scale:!1,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],"char":"\ud83d\udd76",fitzpatrick_scale:!1,category:"people"},goggles:{keywords:["eyes","protection","safety"],"char":"\ud83e\udd7d",fitzpatrick_scale:!1,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],"char":"\ud83d\udc8d",fitzpatrick_scale:!1,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],"char":"\ud83c\udf02",fitzpatrick_scale:!1,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],"char":"\ud83d\udc36",fitzpatrick_scale:!1,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],"char":"\ud83d\udc31",fitzpatrick_scale:!1,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],"char":"\ud83d\udc2d",fitzpatrick_scale:!1,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],"char":"\ud83d\udc39",fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],"char":"\ud83d\udc30",fitzpatrick_scale:!1,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],"char":"\ud83e\udd8a",fitzpatrick_scale:!1,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],"char":"\ud83d\udc3b",fitzpatrick_scale:!1,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],"char":"\ud83d\udc3c",fitzpatrick_scale:!1,category:"animals_and_nature"},koala:{keywords:["animal","nature"],"char":"\ud83d\udc28",fitzpatrick_scale:!1,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],"char":"\ud83d\udc2f",fitzpatrick_scale:!1,category:"animals_and_nature"},lion:{keywords:["animal","nature"],"char":"\ud83e\udd81",fitzpatrick_scale:!1,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],"char":"\ud83d\udc2e",fitzpatrick_scale:!1,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],"char":"\ud83d\udc37",fitzpatrick_scale:!1,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],"char":"\ud83d\udc3d",fitzpatrick_scale:!1,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],"char":"\ud83d\udc38",fitzpatrick_scale:!1,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],"char":"\ud83e\udd91",fitzpatrick_scale:!1,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],"char":"\ud83d\udc19",fitzpatrick_scale:!1,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],"char":"\ud83e\udd90",fitzpatrick_scale:!1,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],"char":"\ud83d\udc35",fitzpatrick_scale:!1,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],"char":"\ud83e\udd8d",fitzpatrick_scale:!1,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],"char":"\ud83d\ude48",fitzpatrick_scale:!1,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],"char":"\ud83d\ude49",fitzpatrick_scale:!1,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],"char":"\ud83d\ude4a",fitzpatrick_scale:!1,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],"char":"\ud83d\udc12",fitzpatrick_scale:!1,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],"char":"\ud83d\udc14",fitzpatrick_scale:!1,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],"char":"\ud83d\udc27",fitzpatrick_scale:!1,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],"char":"\ud83d\udc26",fitzpatrick_scale:!1,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],"char":"\ud83d\udc24",fitzpatrick_scale:!1,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],"char":"\ud83d\udc23",fitzpatrick_scale:!1,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],"char":"\ud83d\udc25",fitzpatrick_scale:!1,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],"char":"\ud83e\udd86",fitzpatrick_scale:!1,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],"char":"\ud83e\udd85",fitzpatrick_scale:!1,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],"char":"\ud83e\udd89",fitzpatrick_scale:!1,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],"char":"\ud83e\udd87",fitzpatrick_scale:!1,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],"char":"\ud83d\udc3a",fitzpatrick_scale:!1,category:"animals_and_nature"},boar:{keywords:["animal","nature"],"char":"\ud83d\udc17",fitzpatrick_scale:!1,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],"char":"\ud83d\udc34",fitzpatrick_scale:!1,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],"char":"\ud83e\udd84",fitzpatrick_scale:!1,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],"char":"\ud83d\udc1d",fitzpatrick_scale:!1,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],"char":"\ud83d\udc1b",fitzpatrick_scale:!1,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],"char":"\ud83e\udd8b",fitzpatrick_scale:!1,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],"char":"\ud83d\udc0c",fitzpatrick_scale:!1,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],"char":"\ud83d\udc1e",fitzpatrick_scale:!1,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],"char":"\ud83d\udc1c",fitzpatrick_scale:!1,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],"char":"\ud83e\udd97",fitzpatrick_scale:!1,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],"char":"\ud83d\udd77",fitzpatrick_scale:!1,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],"char":"\ud83e\udd82",fitzpatrick_scale:!1,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],"char":"\ud83e\udd80",fitzpatrick_scale:!1,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],"char":"\ud83d\udc0d",fitzpatrick_scale:!1,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],"char":"\ud83e\udd8e",fitzpatrick_scale:!1,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],"char":"\ud83e\udd96",fitzpatrick_scale:!1,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],"char":"\ud83e\udd95",fitzpatrick_scale:!1,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],"char":"\ud83d\udc22",fitzpatrick_scale:!1,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],"char":"\ud83d\udc20",fitzpatrick_scale:!1,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],"char":"\ud83d\udc1f",fitzpatrick_scale:!1,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],"char":"\ud83d\udc21",fitzpatrick_scale:!1,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],"char":"\ud83d\udc2c",fitzpatrick_scale:!1,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],"char":"\ud83e\udd88",fitzpatrick_scale:!1,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],"char":"\ud83d\udc33",fitzpatrick_scale:!1,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],"char":"\ud83d\udc0b",fitzpatrick_scale:!1,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],"char":"\ud83d\udc0a",fitzpatrick_scale:!1,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],"char":"\ud83d\udc06",fitzpatrick_scale:!1,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],"char":"\ud83e\udd93",fitzpatrick_scale:!1,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],"char":"\ud83d\udc05",fitzpatrick_scale:!1,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],"char":"\ud83d\udc03",fitzpatrick_scale:!1,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],"char":"\ud83d\udc02",fitzpatrick_scale:!1,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],"char":"\ud83d\udc04",fitzpatrick_scale:!1,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],"char":"\ud83e\udd8c",fitzpatrick_scale:!1,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],"char":"\ud83d\udc2a",fitzpatrick_scale:!1,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],"char":"\ud83d\udc2b",fitzpatrick_scale:!1,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],"char":"\ud83e\udd92",fitzpatrick_scale:!1,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],"char":"\ud83d\udc18",fitzpatrick_scale:!1,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],"char":"\ud83e\udd8f",fitzpatrick_scale:!1,category:"animals_and_nature"},goat:{keywords:["animal","nature"],"char":"\ud83d\udc10",fitzpatrick_scale:!1,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],"char":"\ud83d\udc0f",fitzpatrick_scale:!1,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],"char":"\ud83d\udc11",fitzpatrick_scale:!1,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],"char":"\ud83d\udc0e",fitzpatrick_scale:!1,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],"char":"\ud83d\udc16",fitzpatrick_scale:!1,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],"char":"\ud83d\udc00",fitzpatrick_scale:!1,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],"char":"\ud83d\udc01",fitzpatrick_scale:!1,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],"char":"\ud83d\udc13",fitzpatrick_scale:!1,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],"char":"\ud83e\udd83",fitzpatrick_scale:!1,category:"animals_and_nature"},dove:{keywords:["animal","bird"],"char":"\ud83d\udd4a",fitzpatrick_scale:!1,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],"char":"\ud83d\udc15",fitzpatrick_scale:!1,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],"char":"\ud83d\udc29",fitzpatrick_scale:!1,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],"char":"\ud83d\udc08",fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],"char":"\ud83d\udc07",fitzpatrick_scale:!1,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],"char":"\ud83d\udc3f",fitzpatrick_scale:!1,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],"char":"\ud83e\udd94",fitzpatrick_scale:!1,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],"char":"\ud83e\udd9d",fitzpatrick_scale:!1,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],"char":"\ud83e\udd99",fitzpatrick_scale:!1,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],"char":"\ud83e\udd9b",fitzpatrick_scale:!1,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],"char":"\ud83e\udd98",fitzpatrick_scale:!1,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],"char":"\ud83e\udda1",fitzpatrick_scale:!1,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],"char":"\ud83e\udda2",fitzpatrick_scale:!1,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],"char":"\ud83e\udd9a",fitzpatrick_scale:!1,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],"char":"\ud83e\udd9c",fitzpatrick_scale:!1,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],"char":"\ud83e\udd9e",fitzpatrick_scale:!1,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],"char":"\ud83e\udd9f",fitzpatrick_scale:!1,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],"char":"\ud83d\udc3e",fitzpatrick_scale:!1,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],"char":"\ud83d\udc09",fitzpatrick_scale:!1,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],"char":"\ud83d\udc32",fitzpatrick_scale:!1,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],"char":"\ud83c\udf35",fitzpatrick_scale:!1,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],"char":"\ud83c\udf84",fitzpatrick_scale:!1,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],"char":"\ud83c\udf32",fitzpatrick_scale:!1,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],"char":"\ud83c\udf33",fitzpatrick_scale:!1,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],"char":"\ud83c\udf34",fitzpatrick_scale:!1,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],"char":"\ud83c\udf31",fitzpatrick_scale:!1,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],"char":"\ud83c\udf3f",fitzpatrick_scale:!1,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],"char":"\u2618",fitzpatrick_scale:!1,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],"char":"\ud83c\udf40",fitzpatrick_scale:!1,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],"char":"\ud83c\udf8d",fitzpatrick_scale:!1,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],"char":"\ud83c\udf8b",fitzpatrick_scale:!1,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],"char":"\ud83c\udf43",fitzpatrick_scale:!1,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],"char":"\ud83c\udf42",fitzpatrick_scale:!1,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],"char":"\ud83c\udf41",fitzpatrick_scale:!1,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],"char":"\ud83c\udf3e",fitzpatrick_scale:!1,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],"char":"\ud83c\udf3a",fitzpatrick_scale:!1,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],"char":"\ud83c\udf3b",fitzpatrick_scale:!1,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],"char":"\ud83c\udf39",fitzpatrick_scale:!1,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],"char":"\ud83e\udd40",fitzpatrick_scale:!1,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],"char":"\ud83c\udf37",fitzpatrick_scale:!1,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],"char":"\ud83c\udf3c",fitzpatrick_scale:!1,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],"char":"\ud83c\udf38",fitzpatrick_scale:!1,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],"char":"\ud83d\udc90",fitzpatrick_scale:!1,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],"char":"\ud83c\udf44",fitzpatrick_scale:!1,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],"char":"\ud83c\udf30",fitzpatrick_scale:!1,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],"char":"\ud83c\udf83",fitzpatrick_scale:!1,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],"char":"\ud83d\udc1a",fitzpatrick_scale:!1,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],"char":"\ud83d\udd78",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],"char":"\ud83c\udf0e",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],"char":"\ud83c\udf0d",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],"char":"\ud83c\udf0f",fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf15",fitzpatrick_scale:!1,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],"char":"\ud83c\udf16",fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf17",fitzpatrick_scale:!1,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf18",fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf11",fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf12",fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf13",fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],"char":"\ud83c\udf14",fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf1a",fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf1d",fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf1b",fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf1c",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],"char":"\ud83c\udf1e",fitzpatrick_scale:!1,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],"char":"\ud83c\udf19",fitzpatrick_scale:!1,category:"animals_and_nature"},star:{keywords:["night","yellow"],"char":"\u2b50",fitzpatrick_scale:!1,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],"char":"\ud83c\udf1f",fitzpatrick_scale:!1,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],"char":"\ud83d\udcab",fitzpatrick_scale:!1,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],"char":"\u2728",fitzpatrick_scale:!1,category:"animals_and_nature"},comet:{keywords:["space"],"char":"\u2604",fitzpatrick_scale:!1,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],"char":"\u2600\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],"char":"\ud83c\udf24",fitzpatrick_scale:!1,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],"char":"\u26c5",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],"char":"\ud83c\udf25",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],"char":"\ud83c\udf26",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],"char":"\u2601\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],"char":"\ud83c\udf27",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],"char":"\u26c8",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],"char":"\ud83c\udf29",fitzpatrick_scale:!1,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],"char":"\u26a1",fitzpatrick_scale:!1,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],"char":"\ud83d\udd25",fitzpatrick_scale:!1,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],"char":"\ud83d\udca5",fitzpatrick_scale:!1,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],"char":"\u2744\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],"char":"\ud83c\udf28",fitzpatrick_scale:!1,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],"char":"\u26c4",fitzpatrick_scale:!1,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],"char":"\u2603",fitzpatrick_scale:!1,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],"char":"\ud83c\udf2c",fitzpatrick_scale:!1,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],"char":"\ud83d\udca8",fitzpatrick_scale:!1,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],"char":"\ud83c\udf2a",fitzpatrick_scale:!1,category:"animals_and_nature"},fog:{keywords:["weather"],"char":"\ud83c\udf2b",fitzpatrick_scale:!1,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],"char":"\u2602",fitzpatrick_scale:!1,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],"char":"\u2614",fitzpatrick_scale:!1,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],"char":"\ud83d\udca7",fitzpatrick_scale:!1,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],"char":"\ud83d\udca6",fitzpatrick_scale:!1,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],"char":"\ud83c\udf0a",fitzpatrick_scale:!1,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],"char":"\ud83c\udf4f",fitzpatrick_scale:!1,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],"char":"\ud83c\udf4e",fitzpatrick_scale:!1,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],"char":"\ud83c\udf50",fitzpatrick_scale:!1,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],"char":"\ud83c\udf4a",fitzpatrick_scale:!1,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],"char":"\ud83c\udf4b",fitzpatrick_scale:!1,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],"char":"\ud83c\udf4c",fitzpatrick_scale:!1,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],"char":"\ud83c\udf49",fitzpatrick_scale:!1,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],"char":"\ud83c\udf47",fitzpatrick_scale:!1,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],"char":"\ud83c\udf53",fitzpatrick_scale:!1,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],"char":"\ud83c\udf48",fitzpatrick_scale:!1,category:"food_and_drink"},cherries:{keywords:["food","fruit"],"char":"\ud83c\udf52",fitzpatrick_scale:!1,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],"char":"\ud83c\udf51",fitzpatrick_scale:!1,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],"char":"\ud83c\udf4d",fitzpatrick_scale:!1,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],"char":"\ud83e\udd65",fitzpatrick_scale:!1,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],"char":"\ud83e\udd5d",fitzpatrick_scale:!1,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],"char":"\ud83e\udd6d",fitzpatrick_scale:!1,category:"food_and_drink"},avocado:{keywords:["fruit","food"],"char":"\ud83e\udd51",fitzpatrick_scale:!1,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],"char":"\ud83e\udd66",fitzpatrick_scale:!1,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],"char":"\ud83c\udf45",fitzpatrick_scale:!1,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],"char":"\ud83c\udf46",fitzpatrick_scale:!1,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],"char":"\ud83e\udd52",fitzpatrick_scale:!1,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],"char":"\ud83e\udd55",fitzpatrick_scale:!1,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],"char":"\ud83c\udf36",fitzpatrick_scale:!1,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],"char":"\ud83e\udd54",fitzpatrick_scale:!1,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],"char":"\ud83c\udf3d",fitzpatrick_scale:!1,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],"char":"\ud83e\udd6c",fitzpatrick_scale:!1,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],"char":"\ud83c\udf60",fitzpatrick_scale:!1,category:"food_and_drink"},peanuts:{keywords:["food","nut"],"char":"\ud83e\udd5c",fitzpatrick_scale:!1,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],"char":"\ud83c\udf6f",fitzpatrick_scale:!1,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],"char":"\ud83e\udd50",fitzpatrick_scale:!1,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],"char":"\ud83c\udf5e",fitzpatrick_scale:!1,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],"char":"\ud83e\udd56",fitzpatrick_scale:!1,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],"char":"\ud83e\udd6f",fitzpatrick_scale:!1,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],"char":"\ud83e\udd68",fitzpatrick_scale:!1,category:"food_and_drink"},cheese:{keywords:["food","chadder"],"char":"\ud83e\uddc0",fitzpatrick_scale:!1,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],"char":"\ud83e\udd5a",fitzpatrick_scale:!1,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],"char":"\ud83e\udd53",fitzpatrick_scale:!1,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],"char":"\ud83e\udd69",fitzpatrick_scale:!1,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],"char":"\ud83e\udd5e",fitzpatrick_scale:!1,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],"char":"\ud83c\udf57",fitzpatrick_scale:!1,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],"char":"\ud83c\udf56",fitzpatrick_scale:!1,category:"food_and_drink"},bone:{keywords:["skeleton"],"char":"\ud83e\uddb4",fitzpatrick_scale:!1,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],"char":"\ud83c\udf64",fitzpatrick_scale:!1,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],"char":"\ud83c\udf73",fitzpatrick_scale:!1,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],"char":"\ud83c\udf54",fitzpatrick_scale:!1,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],"char":"\ud83c\udf5f",fitzpatrick_scale:!1,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],"char":"\ud83e\udd59",fitzpatrick_scale:!1,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],"char":"\ud83c\udf2d",fitzpatrick_scale:!1,category:"food_and_drink"},pizza:{keywords:["food","party"],"char":"\ud83c\udf55",fitzpatrick_scale:!1,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],"char":"\ud83e\udd6a",fitzpatrick_scale:!1,category:"food_and_drink"},canned_food:{keywords:["food","soup"],"char":"\ud83e\udd6b",fitzpatrick_scale:!1,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],"char":"\ud83c\udf5d",fitzpatrick_scale:!1,category:"food_and_drink"},taco:{keywords:["food","mexican"],"char":"\ud83c\udf2e",fitzpatrick_scale:!1,category:"food_and_drink"},burrito:{keywords:["food","mexican"],"char":"\ud83c\udf2f",fitzpatrick_scale:!1,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],"char":"\ud83e\udd57",fitzpatrick_scale:!1,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],"char":"\ud83e\udd58",fitzpatrick_scale:!1,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],"char":"\ud83c\udf5c",fitzpatrick_scale:!1,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],"char":"\ud83c\udf72",fitzpatrick_scale:!1,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],"char":"\ud83c\udf65",fitzpatrick_scale:!1,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],"char":"\ud83e\udd60",fitzpatrick_scale:!1,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],"char":"\ud83c\udf63",fitzpatrick_scale:!1,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],"char":"\ud83c\udf71",fitzpatrick_scale:!1,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],"char":"\ud83c\udf5b",fitzpatrick_scale:!1,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],"char":"\ud83c\udf59",fitzpatrick_scale:!1,category:"food_and_drink"},rice:{keywords:["food","china","asian"],"char":"\ud83c\udf5a",fitzpatrick_scale:!1,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],"char":"\ud83c\udf58",fitzpatrick_scale:!1,category:"food_and_drink"},oden:{keywords:["food","japanese"],"char":"\ud83c\udf62",fitzpatrick_scale:!1,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],"char":"\ud83c\udf61",fitzpatrick_scale:!1,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],"char":"\ud83c\udf67",fitzpatrick_scale:!1,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],"char":"\ud83c\udf68",fitzpatrick_scale:!1,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],"char":"\ud83c\udf66",fitzpatrick_scale:!1,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],"char":"\ud83e\udd67",fitzpatrick_scale:!1,category:"food_and_drink"},cake:{keywords:["food","dessert"],"char":"\ud83c\udf70",fitzpatrick_scale:!1,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],"char":"\ud83e\uddc1",fitzpatrick_scale:!1,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],"char":"\ud83e\udd6e",fitzpatrick_scale:!1,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],"char":"\ud83c\udf82",fitzpatrick_scale:!1,category:"food_and_drink"},custard:{keywords:["dessert","food"],"char":"\ud83c\udf6e",fitzpatrick_scale:!1,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],"char":"\ud83c\udf6c",fitzpatrick_scale:!1,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],"char":"\ud83c\udf6d",fitzpatrick_scale:!1,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],"char":"\ud83c\udf6b",fitzpatrick_scale:!1,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],"char":"\ud83c\udf7f",fitzpatrick_scale:!1,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],"char":"\ud83e\udd5f",fitzpatrick_scale:!1,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],"char":"\ud83c\udf69",fitzpatrick_scale:!1,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],"char":"\ud83c\udf6a",fitzpatrick_scale:!1,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],"char":"\ud83e\udd5b",fitzpatrick_scale:!1,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],"char":"\ud83c\udf7a",fitzpatrick_scale:!1,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],"char":"\ud83c\udf7b",fitzpatrick_scale:!1,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],"char":"\ud83e\udd42",fitzpatrick_scale:!1,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],"char":"\ud83c\udf77",fitzpatrick_scale:!1,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],"char":"\ud83e\udd43",fitzpatrick_scale:!1,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],"char":"\ud83c\udf78",fitzpatrick_scale:!1,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],"char":"\ud83c\udf79",fitzpatrick_scale:!1,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],"char":"\ud83c\udf7e",fitzpatrick_scale:!1,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],"char":"\ud83c\udf76",fitzpatrick_scale:!1,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],"char":"\ud83c\udf75",fitzpatrick_scale:!1,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],"char":"\ud83e\udd64",fitzpatrick_scale:!1,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],"char":"\u2615",fitzpatrick_scale:!1,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],"char":"\ud83c\udf7c",fitzpatrick_scale:!1,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],"char":"\ud83e\uddc2",fitzpatrick_scale:!1,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],"char":"\ud83e\udd44",fitzpatrick_scale:!1,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],"char":"\ud83c\udf74",fitzpatrick_scale:!1,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],"char":"\ud83c\udf7d",fitzpatrick_scale:!1,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],"char":"\ud83e\udd63",fitzpatrick_scale:!1,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],"char":"\ud83e\udd61",fitzpatrick_scale:!1,category:"food_and_drink"},chopsticks:{keywords:["food"],"char":"\ud83e\udd62",fitzpatrick_scale:!1,category:"food_and_drink"},soccer:{keywords:["sports","football"],"char":"\u26bd",fitzpatrick_scale:!1,category:"activity"},basketball:{keywords:["sports","balls","NBA"],"char":"\ud83c\udfc0",fitzpatrick_scale:!1,category:"activity"},football:{keywords:["sports","balls","NFL"],"char":"\ud83c\udfc8",fitzpatrick_scale:!1,category:"activity"},baseball:{keywords:["sports","balls"],"char":"\u26be",fitzpatrick_scale:!1,category:"activity"},softball:{keywords:["sports","balls"],"char":"\ud83e\udd4e",fitzpatrick_scale:!1,category:"activity"},tennis:{keywords:["sports","balls","green"],"char":"\ud83c\udfbe",fitzpatrick_scale:!1,category:"activity"},volleyball:{keywords:["sports","balls"],"char":"\ud83c\udfd0",fitzpatrick_scale:!1,category:"activity"},rugby_football:{keywords:["sports","team"],"char":"\ud83c\udfc9",fitzpatrick_scale:!1,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],"char":"\ud83e\udd4f",fitzpatrick_scale:!1,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],"char":"\ud83c\udfb1",fitzpatrick_scale:!1,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],"char":"\u26f3",fitzpatrick_scale:!1,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],"char":"\ud83c\udfcc\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"activity"},golfing_man:{keywords:["sports","business"],"char":"\ud83c\udfcc",fitzpatrick_scale:!0,category:"activity"},ping_pong:{keywords:["sports","pingpong"],"char":"\ud83c\udfd3",fitzpatrick_scale:!1,category:"activity"},badminton:{keywords:["sports"],"char":"\ud83c\udff8",fitzpatrick_scale:!1,category:"activity"},goal_net:{keywords:["sports"],"char":"\ud83e\udd45",fitzpatrick_scale:!1,category:"activity"},ice_hockey:{keywords:["sports"],"char":"\ud83c\udfd2",fitzpatrick_scale:!1,category:"activity"},field_hockey:{keywords:["sports"],"char":"\ud83c\udfd1",fitzpatrick_scale:!1,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],"char":"\ud83e\udd4d",fitzpatrick_scale:!1,category:"activity"},cricket:{keywords:["sports"],"char":"\ud83c\udfcf",fitzpatrick_scale:!1,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],"char":"\ud83c\udfbf",fitzpatrick_scale:!1,category:"activity"},skier:{keywords:["sports","winter","snow"],"char":"\u26f7",fitzpatrick_scale:!1,category:"activity"},snowboarder:{keywords:["sports","winter"],"char":"\ud83c\udfc2",fitzpatrick_scale:!0,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],"char":"\ud83e\udd3a",fitzpatrick_scale:!1,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],"char":"\ud83e\udd3c\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],"char":"\ud83e\udd3c\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],"char":"\ud83e\udd38\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],"char":"\ud83e\udd38\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},woman_playing_handball:{keywords:["sports"],"char":"\ud83e\udd3e\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_playing_handball:{keywords:["sports"],"char":"\ud83e\udd3e\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},ice_skate:{keywords:["sports"],"char":"\u26f8",fitzpatrick_scale:!1,category:"activity"},curling_stone:{keywords:["sports"],"char":"\ud83e\udd4c",fitzpatrick_scale:!1,category:"activity"},skateboard:{keywords:["board"],"char":"\ud83d\udef9",fitzpatrick_scale:!1,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],"char":"\ud83d\udef7",fitzpatrick_scale:!1,category:"activity"},bow_and_arrow:{keywords:["sports"],"char":"\ud83c\udff9",fitzpatrick_scale:!1,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],"char":"\ud83c\udfa3",fitzpatrick_scale:!1,category:"activity"},boxing_glove:{keywords:["sports","fighting"],"char":"\ud83e\udd4a",fitzpatrick_scale:!1,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],"char":"\ud83e\udd4b",fitzpatrick_scale:!1,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],"char":"\ud83d\udea3\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],"char":"\ud83d\udea3",fitzpatrick_scale:!0,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],"char":"\ud83e\uddd7\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],"char":"\ud83e\uddd7\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],"char":"\ud83c\udfca\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],"char":"\ud83c\udfca",fitzpatrick_scale:!0,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],"char":"\ud83e\udd3d\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],"char":"\ud83e\udd3d\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],"char":"\ud83e\uddd8\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],"char":"\ud83e\uddd8\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],"char":"\ud83c\udfc4\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],"char":"\ud83c\udfc4",fitzpatrick_scale:!0,category:"activity"},bath:{keywords:["clean","shower","bathroom"],"char":"\ud83d\udec0",fitzpatrick_scale:!0,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],"char":"\u26f9\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},basketball_man:{keywords:["sports","human"],"char":"\u26f9",fitzpatrick_scale:!0,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],"char":"\ud83c\udfcb\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],"char":"\ud83c\udfcb",fitzpatrick_scale:!0,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],"char":"\ud83d\udeb4\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],"char":"\ud83d\udeb4",fitzpatrick_scale:!0,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],"char":"\ud83d\udeb5\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],"char":"\ud83d\udeb5",fitzpatrick_scale:!0,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],"char":"\ud83c\udfc7",fitzpatrick_scale:!0,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],"char":"\ud83d\udd74",fitzpatrick_scale:!0,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],"char":"\ud83c\udfc6",fitzpatrick_scale:!1,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],"char":"\ud83c\udfbd",fitzpatrick_scale:!1,category:"activity"},medal_sports:{keywords:["award","winning"],"char":"\ud83c\udfc5",fitzpatrick_scale:!1,category:"activity"},medal_military:{keywords:["award","winning","army"],"char":"\ud83c\udf96",fitzpatrick_scale:!1,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],"char":"\ud83e\udd47",fitzpatrick_scale:!1,category:"activity"},"2nd_place_medal":{keywords:["award","second"],"char":"\ud83e\udd48",fitzpatrick_scale:!1,category:"activity"},"3rd_place_medal":{keywords:["award","third"],"char":"\ud83e\udd49",fitzpatrick_scale:!1,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],"char":"\ud83c\udf97",fitzpatrick_scale:!1,category:"activity"},rosette:{keywords:["flower","decoration","military"],"char":"\ud83c\udff5",fitzpatrick_scale:!1,category:"activity"},ticket:{keywords:["event","concert","pass"],"char":"\ud83c\udfab",fitzpatrick_scale:!1,category:"activity"},tickets:{keywords:["sports","concert","entrance"],"char":"\ud83c\udf9f",fitzpatrick_scale:!1,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],"char":"\ud83c\udfad",fitzpatrick_scale:!1,category:"activity"},art:{keywords:["design","paint","draw","colors"],"char":"\ud83c\udfa8",fitzpatrick_scale:!1,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],"char":"\ud83c\udfaa",fitzpatrick_scale:!1,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],"char":"\ud83e\udd39\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],"char":"\ud83e\udd39\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],"char":"\ud83c\udfa4",fitzpatrick_scale:!1,category:"activity"},headphones:{keywords:["music","score","gadgets"],"char":"\ud83c\udfa7",fitzpatrick_scale:!1,category:"activity"},musical_score:{keywords:["treble","clef","compose"],"char":"\ud83c\udfbc",fitzpatrick_scale:!1,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],"char":"\ud83c\udfb9",fitzpatrick_scale:!1,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],"char":"\ud83e\udd41",fitzpatrick_scale:!1,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],"char":"\ud83c\udfb7",fitzpatrick_scale:!1,category:"activity"},trumpet:{keywords:["music","brass"],"char":"\ud83c\udfba",fitzpatrick_scale:!1,category:"activity"},guitar:{keywords:["music","instrument"],"char":"\ud83c\udfb8",fitzpatrick_scale:!1,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],"char":"\ud83c\udfbb",fitzpatrick_scale:!1,category:"activity"},clapper:{keywords:["movie","film","record"],"char":"\ud83c\udfac",fitzpatrick_scale:!1,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],"char":"\ud83c\udfae",fitzpatrick_scale:!1,category:"activity"},space_invader:{keywords:["game","arcade","play"],"char":"\ud83d\udc7e",fitzpatrick_scale:!1,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],"char":"\ud83c\udfaf",fitzpatrick_scale:!1,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],"char":"\ud83c\udfb2",fitzpatrick_scale:!1,category:"activity"},chess_pawn:{keywords:["expendable"],"char":"\u265f",fitzpatrick_scale:!1,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],"char":"\ud83c\udfb0",fitzpatrick_scale:!1,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],"char":"\ud83e\udde9",fitzpatrick_scale:!1,category:"activity"},bowling:{keywords:["sports","fun","play"],"char":"\ud83c\udfb3",fitzpatrick_scale:!1,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],"char":"\ud83d\ude97",fitzpatrick_scale:!1,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],"char":"\ud83d\ude95",fitzpatrick_scale:!1,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],"char":"\ud83d\ude99",fitzpatrick_scale:!1,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],"char":"\ud83d\ude8c",fitzpatrick_scale:!1,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],"char":"\ud83d\ude8e",fitzpatrick_scale:!1,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],"char":"\ud83c\udfce",fitzpatrick_scale:!1,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],"char":"\ud83d\ude93",fitzpatrick_scale:!1,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],"char":"\ud83d\ude91",fitzpatrick_scale:!1,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],"char":"\ud83d\ude92",fitzpatrick_scale:!1,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],"char":"\ud83d\ude90",fitzpatrick_scale:!1,category:"travel_and_places"},truck:{keywords:["cars","transportation"],"char":"\ud83d\ude9a",fitzpatrick_scale:!1,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],"char":"\ud83d\ude9b",fitzpatrick_scale:!1,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],"char":"\ud83d\ude9c",fitzpatrick_scale:!1,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],"char":"\ud83d\udef4",fitzpatrick_scale:!1,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],"char":"\ud83c\udfcd",fitzpatrick_scale:!1,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],"char":"\ud83d\udeb2",fitzpatrick_scale:!1,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],"char":"\ud83d\udef5",fitzpatrick_scale:!1,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],"char":"\ud83d\udea8",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],"char":"\ud83d\ude94",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],"char":"\ud83d\ude8d",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],"char":"\ud83d\ude98",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],"char":"\ud83d\ude96",fitzpatrick_scale:!1,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],"char":"\ud83d\udea1",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],"char":"\ud83d\udea0",fitzpatrick_scale:!1,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],"char":"\ud83d\ude9f",fitzpatrick_scale:!1,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],"char":"\ud83d\ude83",fitzpatrick_scale:!1,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],"char":"\ud83d\ude8b",fitzpatrick_scale:!1,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],"char":"\ud83d\ude9d",fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],"char":"\ud83d\ude84",fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],"char":"\ud83d\ude85",fitzpatrick_scale:!1,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],"char":"\ud83d\ude88",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],"char":"\ud83d\ude9e",fitzpatrick_scale:!1,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],"char":"\ud83d\ude82",fitzpatrick_scale:!1,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],"char":"\ud83d\ude86",fitzpatrick_scale:!1,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],"char":"\ud83d\ude87",fitzpatrick_scale:!1,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],"char":"\ud83d\ude8a",fitzpatrick_scale:!1,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],"char":"\ud83d\ude89",fitzpatrick_scale:!1,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],"char":"\ud83d\udef8",fitzpatrick_scale:!1,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],"char":"\ud83d\ude81",fitzpatrick_scale:!1,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],"char":"\ud83d\udee9",fitzpatrick_scale:!1,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],"char":"\u2708\ufe0f",fitzpatrick_scale:!1,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],"char":"\ud83d\udeeb",fitzpatrick_scale:!1,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],"char":"\ud83d\udeec",fitzpatrick_scale:!1,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],"char":"\u26f5",fitzpatrick_scale:!1,category:"travel_and_places"},motor_boat:{keywords:["ship"],"char":"\ud83d\udee5",fitzpatrick_scale:!1,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],"char":"\ud83d\udea4",fitzpatrick_scale:!1,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],"char":"\u26f4",fitzpatrick_scale:!1,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],"char":"\ud83d\udef3",fitzpatrick_scale:!1,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],"char":"\ud83d\ude80",fitzpatrick_scale:!1,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],"char":"\ud83d\udef0",fitzpatrick_scale:!1,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],"char":"\ud83d\udcba",fitzpatrick_scale:!1,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],"char":"\ud83d\udef6",fitzpatrick_scale:!1,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],"char":"\u2693",fitzpatrick_scale:!1,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],"char":"\ud83d\udea7",fitzpatrick_scale:!1,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],"char":"\u26fd",fitzpatrick_scale:!1,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],"char":"\ud83d\ude8f",fitzpatrick_scale:!1,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],"char":"\ud83d\udea6",fitzpatrick_scale:!1,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],"char":"\ud83d\udea5",fitzpatrick_scale:!1,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],"char":"\ud83c\udfc1",fitzpatrick_scale:!1,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],"char":"\ud83d\udea2",fitzpatrick_scale:!1,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],"char":"\ud83c\udfa1",fitzpatrick_scale:!1,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],"char":"\ud83c\udfa2",fitzpatrick_scale:!1,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],"char":"\ud83c\udfa0",fitzpatrick_scale:!1,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],"char":"\ud83c\udfd7",fitzpatrick_scale:!1,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],"char":"\ud83c\udf01",fitzpatrick_scale:!1,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],"char":"\ud83d\uddfc",fitzpatrick_scale:!1,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],"char":"\ud83c\udfed",fitzpatrick_scale:!1,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],"char":"\u26f2",fitzpatrick_scale:!1,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],"char":"\ud83c\udf91",fitzpatrick_scale:!1,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],"char":"\u26f0",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],"char":"\ud83c\udfd4",fitzpatrick_scale:!1,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],"char":"\ud83d\uddfb",fitzpatrick_scale:!1,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],"char":"\ud83c\udf0b",fitzpatrick_scale:!1,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],"char":"\ud83d\uddfe",fitzpatrick_scale:!1,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],"char":"\ud83c\udfd5",fitzpatrick_scale:!1,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],"char":"\u26fa",fitzpatrick_scale:!1,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],"char":"\ud83c\udfde",fitzpatrick_scale:!1,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],"char":"\ud83d\udee3",fitzpatrick_scale:!1,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],"char":"\ud83d\udee4",fitzpatrick_scale:!1,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],"char":"\ud83c\udf05",fitzpatrick_scale:!1,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],"char":"\ud83c\udf04",fitzpatrick_scale:!1,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],"char":"\ud83c\udfdc",fitzpatrick_scale:!1,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],"char":"\ud83c\udfd6",fitzpatrick_scale:!1,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],"char":"\ud83c\udfdd",fitzpatrick_scale:!1,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],"char":"\ud83c\udf07",fitzpatrick_scale:!1,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],"char":"\ud83c\udf06",fitzpatrick_scale:!1,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],"char":"\ud83c\udfd9",fitzpatrick_scale:!1,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],"char":"\ud83c\udf03",fitzpatrick_scale:!1,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],"char":"\ud83c\udf09",fitzpatrick_scale:!1,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],"char":"\ud83c\udf0c",fitzpatrick_scale:!1,category:"travel_and_places"},stars:{keywords:["night","photo"],"char":"\ud83c\udf20",fitzpatrick_scale:!1,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],"char":"\ud83c\udf87",fitzpatrick_scale:!1,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],"char":"\ud83c\udf86",fitzpatrick_scale:!1,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],"char":"\ud83c\udf08",fitzpatrick_scale:!1,category:"travel_and_places"},houses:{keywords:["buildings","photo"],"char":"\ud83c\udfd8",fitzpatrick_scale:!1,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],"char":"\ud83c\udff0",fitzpatrick_scale:!1,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],"char":"\ud83c\udfef",fitzpatrick_scale:!1,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],"char":"\ud83c\udfdf",fitzpatrick_scale:!1,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],"char":"\ud83d\uddfd",fitzpatrick_scale:!1,category:"travel_and_places"},house:{keywords:["building","home"],"char":"\ud83c\udfe0",fitzpatrick_scale:!1,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],"char":"\ud83c\udfe1",fitzpatrick_scale:!1,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],"char":"\ud83c\udfda",fitzpatrick_scale:!1,category:"travel_and_places"},office:{keywords:["building","bureau","work"],"char":"\ud83c\udfe2",fitzpatrick_scale:!1,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],"char":"\ud83c\udfec",fitzpatrick_scale:!1,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],"char":"\ud83c\udfe3",fitzpatrick_scale:!1,category:"travel_and_places"},european_post_office:{keywords:["building","email"],"char":"\ud83c\udfe4",fitzpatrick_scale:!1,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],"char":"\ud83c\udfe5",fitzpatrick_scale:!1,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],"char":"\ud83c\udfe6",fitzpatrick_scale:!1,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],"char":"\ud83c\udfe8",fitzpatrick_scale:!1,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],"char":"\ud83c\udfea",fitzpatrick_scale:!1,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],"char":"\ud83c\udfeb",fitzpatrick_scale:!1,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],"char":"\ud83c\udfe9",fitzpatrick_scale:!1,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],"char":"\ud83d\udc92",fitzpatrick_scale:!1,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],"char":"\ud83c\udfdb",fitzpatrick_scale:!1,category:"travel_and_places"},church:{keywords:["building","religion","christ"],"char":"\u26ea",fitzpatrick_scale:!1,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],"char":"\ud83d\udd4c",fitzpatrick_scale:!1,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],"char":"\ud83d\udd4d",fitzpatrick_scale:!1,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],"char":"\ud83d\udd4b",fitzpatrick_scale:!1,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],"char":"\u26e9",fitzpatrick_scale:!1,category:"travel_and_places"},watch:{keywords:["time","accessories"],"char":"\u231a",fitzpatrick_scale:!1,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],"char":"\ud83d\udcf1",fitzpatrick_scale:!1,category:"objects"},calling:{keywords:["iphone","incoming"],"char":"\ud83d\udcf2",fitzpatrick_scale:!1,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],"char":"\ud83d\udcbb",fitzpatrick_scale:!1,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],"char":"\u2328",fitzpatrick_scale:!1,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],"char":"\ud83d\udda5",fitzpatrick_scale:!1,category:"objects"},printer:{keywords:["paper","ink"],"char":"\ud83d\udda8",fitzpatrick_scale:!1,category:"objects"},computer_mouse:{keywords:["click"],"char":"\ud83d\uddb1",fitzpatrick_scale:!1,category:"objects"},trackball:{keywords:["technology","trackpad"],"char":"\ud83d\uddb2",fitzpatrick_scale:!1,category:"objects"},joystick:{keywords:["game","play"],"char":"\ud83d\udd79",fitzpatrick_scale:!1,category:"objects"},clamp:{keywords:["tool"],"char":"\ud83d\udddc",fitzpatrick_scale:!1,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],"char":"\ud83d\udcbd",fitzpatrick_scale:!1,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],"char":"\ud83d\udcbe",fitzpatrick_scale:!1,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],"char":"\ud83d\udcbf",fitzpatrick_scale:!1,category:"objects"},dvd:{keywords:["cd","disk","disc"],"char":"\ud83d\udcc0",fitzpatrick_scale:!1,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],"char":"\ud83d\udcfc",fitzpatrick_scale:!1,category:"objects"},camera:{keywords:["gadgets","photography"],"char":"\ud83d\udcf7",fitzpatrick_scale:!1,category:"objects"},camera_flash:{keywords:["photography","gadgets"],"char":"\ud83d\udcf8",fitzpatrick_scale:!1,category:"objects"},video_camera:{keywords:["film","record"],"char":"\ud83d\udcf9",fitzpatrick_scale:!1,category:"objects"},movie_camera:{keywords:["film","record"],"char":"\ud83c\udfa5",fitzpatrick_scale:!1,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],"char":"\ud83d\udcfd",fitzpatrick_scale:!1,category:"objects"},film_strip:{keywords:["movie"],"char":"\ud83c\udf9e",fitzpatrick_scale:!1,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],"char":"\ud83d\udcde",fitzpatrick_scale:!1,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],"char":"\u260e\ufe0f",fitzpatrick_scale:!1,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],"char":"\ud83d\udcdf",fitzpatrick_scale:!1,category:"objects"},fax:{keywords:["communication","technology"],"char":"\ud83d\udce0",fitzpatrick_scale:!1,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],"char":"\ud83d\udcfa",fitzpatrick_scale:!1,category:"objects"},radio:{keywords:["communication","music","podcast","program"],"char":"\ud83d\udcfb",fitzpatrick_scale:!1,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],"char":"\ud83c\udf99",fitzpatrick_scale:!1,category:"objects"},level_slider:{keywords:["scale"],"char":"\ud83c\udf9a",fitzpatrick_scale:!1,category:"objects"},control_knobs:{keywords:["dial"],"char":"\ud83c\udf9b",fitzpatrick_scale:!1,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],"char":"\ud83e\udded",fitzpatrick_scale:!1,category:"objects"},stopwatch:{keywords:["time","deadline"],"char":"\u23f1",fitzpatrick_scale:!1,category:"objects"},timer_clock:{keywords:["alarm"],"char":"\u23f2",fitzpatrick_scale:!1,category:"objects"},alarm_clock:{keywords:["time","wake"],"char":"\u23f0",fitzpatrick_scale:!1,category:"objects"},mantelpiece_clock:{keywords:["time"],"char":"\ud83d\udd70",fitzpatrick_scale:!1,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],"char":"\u23f3",fitzpatrick_scale:!1,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],"char":"\u231b",fitzpatrick_scale:!1,category:"objects"},satellite:{keywords:["communication","future","radio","space"],"char":"\ud83d\udce1",fitzpatrick_scale:!1,category:"objects"},battery:{keywords:["power","energy","sustain"],"char":"\ud83d\udd0b",fitzpatrick_scale:!1,category:"objects"},electric_plug:{keywords:["charger","power"],"char":"\ud83d\udd0c",fitzpatrick_scale:!1,category:"objects"},bulb:{keywords:["light","electricity","idea"],"char":"\ud83d\udca1",fitzpatrick_scale:!1,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],"char":"\ud83d\udd26",fitzpatrick_scale:!1,category:"objects"},candle:{keywords:["fire","wax"],"char":"\ud83d\udd6f",fitzpatrick_scale:!1,category:"objects"},fire_extinguisher:{keywords:["quench"],"char":"\ud83e\uddef",fitzpatrick_scale:!1,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],"char":"\ud83d\uddd1",fitzpatrick_scale:!1,category:"objects"},oil_drum:{keywords:["barrell"],"char":"\ud83d\udee2",fitzpatrick_scale:!1,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],"char":"\ud83d\udcb8",fitzpatrick_scale:!1,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],"char":"\ud83d\udcb5",fitzpatrick_scale:!1,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],"char":"\ud83d\udcb4",fitzpatrick_scale:!1,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],"char":"\ud83d\udcb6",fitzpatrick_scale:!1,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],"char":"\ud83d\udcb7",fitzpatrick_scale:!1,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],"char":"\ud83d\udcb0",fitzpatrick_scale:!1,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],"char":"\ud83d\udcb3",fitzpatrick_scale:!1,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],"char":"\ud83d\udc8e",fitzpatrick_scale:!1,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],"char":"\u2696",fitzpatrick_scale:!1,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],"char":"\ud83e\uddf0",fitzpatrick_scale:!1,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],"char":"\ud83d\udd27",fitzpatrick_scale:!1,category:"objects"},hammer:{keywords:["tools","build","create"],"char":"\ud83d\udd28",fitzpatrick_scale:!1,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],"char":"\u2692",fitzpatrick_scale:!1,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],"char":"\ud83d\udee0",fitzpatrick_scale:!1,category:"objects"},pick:{keywords:["tools","dig"],"char":"\u26cf",fitzpatrick_scale:!1,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],"char":"\ud83d\udd29",fitzpatrick_scale:!1,category:"objects"},gear:{keywords:["cog"],"char":"\u2699",fitzpatrick_scale:!1,category:"objects"},brick:{keywords:["bricks"],"char":"\ud83e\uddf1",fitzpatrick_scale:!1,category:"objects"},chains:{keywords:["lock","arrest"],"char":"\u26d3",fitzpatrick_scale:!1,category:"objects"},magnet:{keywords:["attraction","magnetic"],"char":"\ud83e\uddf2",fitzpatrick_scale:!1,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],"char":"\ud83d\udd2b",fitzpatrick_scale:!1,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],"char":"\ud83d\udca3",fitzpatrick_scale:!1,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],"char":"\ud83e\udde8",fitzpatrick_scale:!1,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],"char":"\ud83d\udd2a",fitzpatrick_scale:!1,category:"objects"},dagger:{keywords:["weapon"],"char":"\ud83d\udde1",fitzpatrick_scale:!1,category:"objects"},crossed_swords:{keywords:["weapon"],"char":"\u2694",fitzpatrick_scale:!1,category:"objects"},shield:{keywords:["protection","security"],"char":"\ud83d\udee1",fitzpatrick_scale:!1,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],"char":"\ud83d\udeac",fitzpatrick_scale:!1,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],"char":"\u2620",fitzpatrick_scale:!1,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],"char":"\u26b0",fitzpatrick_scale:!1,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],"char":"\u26b1",fitzpatrick_scale:!1,category:"objects"},amphora:{keywords:["vase","jar"],"char":"\ud83c\udffa",fitzpatrick_scale:!1,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],"char":"\ud83d\udd2e",fitzpatrick_scale:!1,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],"char":"\ud83d\udcff",fitzpatrick_scale:!1,category:"objects"},nazar_amulet:{keywords:["bead","charm"],"char":"\ud83e\uddff",fitzpatrick_scale:!1,category:"objects"},barber:{keywords:["hair","salon","style"],"char":"\ud83d\udc88",fitzpatrick_scale:!1,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],"char":"\u2697",fitzpatrick_scale:!1,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],"char":"\ud83d\udd2d",fitzpatrick_scale:!1,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],"char":"\ud83d\udd2c",fitzpatrick_scale:!1,category:"objects"},hole:{keywords:["embarrassing"],"char":"\ud83d\udd73",fitzpatrick_scale:!1,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],"char":"\ud83d\udc8a",fitzpatrick_scale:!1,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],"char":"\ud83d\udc89",fitzpatrick_scale:!1,category:"objects"},dna:{keywords:["biologist","genetics","life"],"char":"\ud83e\uddec",fitzpatrick_scale:!1,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],"char":"\ud83e\udda0",fitzpatrick_scale:!1,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],"char":"\ud83e\uddeb",fitzpatrick_scale:!1,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],"char":"\ud83e\uddea",fitzpatrick_scale:!1,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],"char":"\ud83c\udf21",fitzpatrick_scale:!1,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],"char":"\ud83e\uddf9",fitzpatrick_scale:!1,category:"objects"},basket:{keywords:["laundry"],"char":"\ud83e\uddfa",fitzpatrick_scale:!1,category:"objects"},toilet_paper:{keywords:["roll"],"char":"\ud83e\uddfb",fitzpatrick_scale:!1,category:"objects"},label:{keywords:["sale","tag"],"char":"\ud83c\udff7",fitzpatrick_scale:!1,category:"objects"},bookmark:{keywords:["favorite","label","save"],"char":"\ud83d\udd16",fitzpatrick_scale:!1,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],"char":"\ud83d\udebd",fitzpatrick_scale:!1,category:"objects"},shower:{keywords:["clean","water","bathroom"],"char":"\ud83d\udebf",fitzpatrick_scale:!1,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],"char":"\ud83d\udec1",fitzpatrick_scale:!1,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],"char":"\ud83e\uddfc",fitzpatrick_scale:!1,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],"char":"\ud83e\uddfd",fitzpatrick_scale:!1,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],"char":"\ud83e\uddf4",fitzpatrick_scale:!1,category:"objects"},key:{keywords:["lock","door","password"],"char":"\ud83d\udd11",fitzpatrick_scale:!1,category:"objects"},old_key:{keywords:["lock","door","password"],"char":"\ud83d\udddd",fitzpatrick_scale:!1,category:"objects"},couch_and_lamp:{keywords:["read","chill"],"char":"\ud83d\udecb",fitzpatrick_scale:!1,category:"objects"},sleeping_bed:{keywords:["bed","rest"],"char":"\ud83d\udecc",fitzpatrick_scale:!0,category:"objects"},bed:{keywords:["sleep","rest"],"char":"\ud83d\udecf",fitzpatrick_scale:!1,category:"objects"},door:{keywords:["house","entry","exit"],"char":"\ud83d\udeaa",fitzpatrick_scale:!1,category:"objects"},bellhop_bell:{keywords:["service"],"char":"\ud83d\udece",fitzpatrick_scale:!1,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],"char":"\ud83e\uddf8",fitzpatrick_scale:!1,category:"objects"},framed_picture:{keywords:["photography"],"char":"\ud83d\uddbc",fitzpatrick_scale:!1,category:"objects"},world_map:{keywords:["location","direction"],"char":"\ud83d\uddfa",fitzpatrick_scale:!1,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],"char":"\u26f1",fitzpatrick_scale:!1,category:"objects"},moyai:{keywords:["rock","easter island","moai"],"char":"\ud83d\uddff",fitzpatrick_scale:!1,category:"objects"},shopping:{keywords:["mall","buy","purchase"],"char":"\ud83d\udecd",fitzpatrick_scale:!1,category:"objects"},shopping_cart:{keywords:["trolley"],"char":"\ud83d\uded2",fitzpatrick_scale:!1,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],"char":"\ud83c\udf88",fitzpatrick_scale:!1,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],"char":"\ud83c\udf8f",fitzpatrick_scale:!1,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],"char":"\ud83c\udf80",fitzpatrick_scale:!1,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],"char":"\ud83c\udf81",fitzpatrick_scale:!1,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],"char":"\ud83c\udf8a",fitzpatrick_scale:!1,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],"char":"\ud83c\udf89",fitzpatrick_scale:!1,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],"char":"\ud83c\udf8e",fitzpatrick_scale:!1,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],"char":"\ud83c\udf90",fitzpatrick_scale:!1,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],"char":"\ud83c\udf8c",fitzpatrick_scale:!1,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],"char":"\ud83c\udfee",fitzpatrick_scale:!1,category:"objects"},red_envelope:{keywords:["gift"],"char":"\ud83e\udde7",fitzpatrick_scale:!1,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],"char":"\u2709\ufe0f",fitzpatrick_scale:!1,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],"char":"\ud83d\udce9",fitzpatrick_scale:!1,category:"objects"},incoming_envelope:{keywords:["email","inbox"],"char":"\ud83d\udce8",fitzpatrick_scale:!1,category:"objects"},"e-mail":{keywords:["communication","inbox"],"char":"\ud83d\udce7",fitzpatrick_scale:!1,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],"char":"\ud83d\udc8c",fitzpatrick_scale:!1,category:"objects"},postbox:{keywords:["email","letter","envelope"],"char":"\ud83d\udcee",fitzpatrick_scale:!1,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],"char":"\ud83d\udcea",fitzpatrick_scale:!1,category:"objects"},mailbox:{keywords:["email","inbox","communication"],"char":"\ud83d\udceb",fitzpatrick_scale:!1,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],"char":"\ud83d\udcec",fitzpatrick_scale:!1,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],"char":"\ud83d\udced",fitzpatrick_scale:!1,category:"objects"},"package":{keywords:["mail","gift","cardboard","box","moving"],"char":"\ud83d\udce6",fitzpatrick_scale:!1,category:"objects"},postal_horn:{keywords:["instrument","music"],"char":"\ud83d\udcef",fitzpatrick_scale:!1,category:"objects"},inbox_tray:{keywords:["email","documents"],"char":"\ud83d\udce5",fitzpatrick_scale:!1,category:"objects"},outbox_tray:{keywords:["inbox","email"],"char":"\ud83d\udce4",fitzpatrick_scale:!1,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],"char":"\ud83d\udcdc",fitzpatrick_scale:!1,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],"char":"\ud83d\udcc3",fitzpatrick_scale:!1,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],"char":"\ud83d\udcd1",fitzpatrick_scale:!1,category:"objects"},receipt:{keywords:["accounting","expenses"],"char":"\ud83e\uddfe",fitzpatrick_scale:!1,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],"char":"\ud83d\udcca",fitzpatrick_scale:!1,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],"char":"\ud83d\udcc8",fitzpatrick_scale:!1,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],"char":"\ud83d\udcc9",fitzpatrick_scale:!1,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],"char":"\ud83d\udcc4",fitzpatrick_scale:!1,category:"objects"},date:{keywords:["calendar","schedule"],"char":"\ud83d\udcc5",fitzpatrick_scale:!1,category:"objects"},calendar:{keywords:["schedule","date","planning"],"char":"\ud83d\udcc6",fitzpatrick_scale:!1,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],"char":"\ud83d\uddd3",fitzpatrick_scale:!1,category:"objects"},card_index:{keywords:["business","stationery"],"char":"\ud83d\udcc7",fitzpatrick_scale:!1,category:"objects"},card_file_box:{keywords:["business","stationery"],"char":"\ud83d\uddc3",fitzpatrick_scale:!1,category:"objects"},ballot_box:{keywords:["election","vote"],"char":"\ud83d\uddf3",fitzpatrick_scale:!1,category:"objects"},file_cabinet:{keywords:["filing","organizing"],"char":"\ud83d\uddc4",fitzpatrick_scale:!1,category:"objects"},clipboard:{keywords:["stationery","documents"],"char":"\ud83d\udccb",fitzpatrick_scale:!1,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],"char":"\ud83d\uddd2",fitzpatrick_scale:!1,category:"objects"},file_folder:{keywords:["documents","business","office"],"char":"\ud83d\udcc1",fitzpatrick_scale:!1,category:"objects"},open_file_folder:{keywords:["documents","load"],"char":"\ud83d\udcc2",fitzpatrick_scale:!1,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],"char":"\ud83d\uddc2",fitzpatrick_scale:!1,category:"objects"},newspaper_roll:{keywords:["press","headline"],"char":"\ud83d\uddde",fitzpatrick_scale:!1,category:"objects"},newspaper:{keywords:["press","headline"],"char":"\ud83d\udcf0",fitzpatrick_scale:!1,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],"char":"\ud83d\udcd3",fitzpatrick_scale:!1,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],"char":"\ud83d\udcd5",fitzpatrick_scale:!1,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],"char":"\ud83d\udcd7",fitzpatrick_scale:!1,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],"char":"\ud83d\udcd8",fitzpatrick_scale:!1,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],"char":"\ud83d\udcd9",fitzpatrick_scale:!1,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],"char":"\ud83d\udcd4",fitzpatrick_scale:!1,category:"objects"},ledger:{keywords:["notes","paper"],"char":"\ud83d\udcd2",fitzpatrick_scale:!1,category:"objects"},books:{keywords:["literature","library","study"],"char":"\ud83d\udcda",fitzpatrick_scale:!1,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],"char":"\ud83d\udcd6",fitzpatrick_scale:!1,category:"objects"},safety_pin:{keywords:["diaper"],"char":"\ud83e\uddf7",fitzpatrick_scale:!1,category:"objects"},link:{keywords:["rings","url"],"char":"\ud83d\udd17",fitzpatrick_scale:!1,category:"objects"},paperclip:{keywords:["documents","stationery"],"char":"\ud83d\udcce",fitzpatrick_scale:!1,category:"objects"},paperclips:{keywords:["documents","stationery"],"char":"\ud83d\udd87",fitzpatrick_scale:!1,category:"objects"},scissors:{keywords:["stationery","cut"],"char":"\u2702\ufe0f",fitzpatrick_scale:!1,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],"char":"\ud83d\udcd0",fitzpatrick_scale:!1,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],"char":"\ud83d\udccf",fitzpatrick_scale:!1,category:"objects"},abacus:{keywords:["calculation"],"char":"\ud83e\uddee",fitzpatrick_scale:!1,category:"objects"},pushpin:{keywords:["stationery","mark","here"],"char":"\ud83d\udccc",fitzpatrick_scale:!1,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],"char":"\ud83d\udccd",fitzpatrick_scale:!1,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],"char":"\ud83d\udea9",fitzpatrick_scale:!1,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],"char":"\ud83c\udff3",fitzpatrick_scale:!1,category:"objects"},black_flag:{keywords:["pirate"],"char":"\ud83c\udff4",fitzpatrick_scale:!1,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],"char":"\ud83c\udff3\ufe0f\u200d\ud83c\udf08",fitzpatrick_scale:!1,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],"char":"\ud83d\udd10",fitzpatrick_scale:!1,category:"objects"},lock:{keywords:["security","password","padlock"],"char":"\ud83d\udd12",fitzpatrick_scale:!1,category:"objects"},unlock:{keywords:["privacy","security"],"char":"\ud83d\udd13",fitzpatrick_scale:!1,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],"char":"\ud83d\udd0f",fitzpatrick_scale:!1,category:"objects"},pen:{keywords:["stationery","writing","write"],"char":"\ud83d\udd8a",fitzpatrick_scale:!1,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],"char":"\ud83d\udd8b",fitzpatrick_scale:!1,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],"char":"\u2712\ufe0f",fitzpatrick_scale:!1,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],"char":"\ud83d\udcdd",fitzpatrick_scale:!1,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],"char":"\u270f\ufe0f",fitzpatrick_scale:!1,category:"objects"},crayon:{keywords:["drawing","creativity"],"char":"\ud83d\udd8d",fitzpatrick_scale:!1,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],"char":"\ud83d\udd8c",fitzpatrick_scale:!1,category:"objects"},mag:{keywords:["search","zoom","find","detective"],"char":"\ud83d\udd0d",fitzpatrick_scale:!1,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],"char":"\ud83d\udd0e",fitzpatrick_scale:!1,category:"objects"},heart:{keywords:["love","like","valentines"],"char":"\u2764\ufe0f",fitzpatrick_scale:!1,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83e\udde1",fitzpatrick_scale:!1,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc9b",fitzpatrick_scale:!1,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc9a",fitzpatrick_scale:!1,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc99",fitzpatrick_scale:!1,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc9c",fitzpatrick_scale:!1,category:"symbols"},black_heart:{keywords:["evil"],"char":"\ud83d\udda4",fitzpatrick_scale:!1,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],"char":"\ud83d\udc94",fitzpatrick_scale:!1,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],"char":"\u2763",fitzpatrick_scale:!1,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],"char":"\ud83d\udc95",fitzpatrick_scale:!1,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc9e",fitzpatrick_scale:!1,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],"char":"\ud83d\udc93",fitzpatrick_scale:!1,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],"char":"\ud83d\udc97",fitzpatrick_scale:!1,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc96",fitzpatrick_scale:!1,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],"char":"\ud83d\udc98",fitzpatrick_scale:!1,category:"symbols"},gift_heart:{keywords:["love","valentines"],"char":"\ud83d\udc9d",fitzpatrick_scale:!1,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],"char":"\ud83d\udc9f",fitzpatrick_scale:!1,category:"symbols"},peace_symbol:{keywords:["hippie"],"char":"\u262e",fitzpatrick_scale:!1,category:"symbols"},latin_cross:{keywords:["christianity"],"char":"\u271d",fitzpatrick_scale:!1,category:"symbols"},star_and_crescent:{keywords:["islam"],"char":"\u262a",fitzpatrick_scale:!1,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],"char":"\ud83d\udd49",fitzpatrick_scale:!1,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],"char":"\u2638",fitzpatrick_scale:!1,category:"symbols"},star_of_david:{keywords:["judaism"],"char":"\u2721",fitzpatrick_scale:!1,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],"char":"\ud83d\udd2f",fitzpatrick_scale:!1,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],"char":"\ud83d\udd4e",fitzpatrick_scale:!1,category:"symbols"},yin_yang:{keywords:["balance"],"char":"\u262f",fitzpatrick_scale:!1,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],"char":"\u2626",fitzpatrick_scale:!1,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],"char":"\ud83d\uded0",fitzpatrick_scale:!1,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],"char":"\u26ce",fitzpatrick_scale:!1,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],"char":"\u2648",fitzpatrick_scale:!1,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],"char":"\u2649",fitzpatrick_scale:!1,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],"char":"\u264a",fitzpatrick_scale:!1,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],"char":"\u264b",fitzpatrick_scale:!1,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],"char":"\u264c",fitzpatrick_scale:!1,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],"char":"\u264d",fitzpatrick_scale:!1,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],"char":"\u264e",fitzpatrick_scale:!1,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],"char":"\u264f",fitzpatrick_scale:!1,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],"char":"\u2650",fitzpatrick_scale:!1,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],"char":"\u2651",fitzpatrick_scale:!1,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],"char":"\u2652",fitzpatrick_scale:!1,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],"char":"\u2653",fitzpatrick_scale:!1,category:"symbols"},id:{keywords:["purple-square","words"],"char":"\ud83c\udd94",fitzpatrick_scale:!1,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],"char":"\u269b",fitzpatrick_scale:!1,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],"char":"\ud83c\ude33",fitzpatrick_scale:!1,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],"char":"\ud83c\ude39",fitzpatrick_scale:!1,category:"symbols"},radioactive:{keywords:["nuclear","danger"],"char":"\u2622",fitzpatrick_scale:!1,category:"symbols"},biohazard:{keywords:["danger"],"char":"\u2623",fitzpatrick_scale:!1,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],"char":"\ud83d\udcf4",fitzpatrick_scale:!1,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],"char":"\ud83d\udcf3",fitzpatrick_scale:!1,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],"char":"\ud83c\ude36",fitzpatrick_scale:!1,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],"char":"\ud83c\ude1a",fitzpatrick_scale:!1,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],"char":"\ud83c\ude38",fitzpatrick_scale:!1,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],"char":"\ud83c\ude3a",fitzpatrick_scale:!1,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],"char":"\ud83c\ude37\ufe0f",fitzpatrick_scale:!1,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],"char":"\u2734\ufe0f",fitzpatrick_scale:!1,category:"symbols"},vs:{keywords:["words","orange-square"],"char":"\ud83c\udd9a",fitzpatrick_scale:!1,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],"char":"\ud83c\ude51",fitzpatrick_scale:!1,category:"symbols"},white_flower:{keywords:["japanese","spring"],"char":"\ud83d\udcae",fitzpatrick_scale:!1,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],"char":"\ud83c\ude50",fitzpatrick_scale:!1,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],"char":"\u3299\ufe0f",fitzpatrick_scale:!1,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],"char":"\u3297\ufe0f",fitzpatrick_scale:!1,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],"char":"\ud83c\ude34",fitzpatrick_scale:!1,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],"char":"\ud83c\ude35",fitzpatrick_scale:!1,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],"char":"\ud83c\ude32",fitzpatrick_scale:!1,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],"char":"\ud83c\udd70\ufe0f",fitzpatrick_scale:!1,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],"char":"\ud83c\udd71\ufe0f",fitzpatrick_scale:!1,category:"symbols"},ab:{keywords:["red-square","alphabet"],"char":"\ud83c\udd8e",fitzpatrick_scale:!1,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],"char":"\ud83c\udd91",fitzpatrick_scale:!1,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],"char":"\ud83c\udd7e\ufe0f",fitzpatrick_scale:!1,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],"char":"\ud83c\udd98",fitzpatrick_scale:!1,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],"char":"\u26d4",fitzpatrick_scale:!1,category:"symbols"},name_badge:{keywords:["fire","forbid"],"char":"\ud83d\udcdb",fitzpatrick_scale:!1,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],"char":"\ud83d\udeab",fitzpatrick_scale:!1,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],"char":"\u274c",fitzpatrick_scale:!1,category:"symbols"},o:{keywords:["circle","round"],"char":"\u2b55",fitzpatrick_scale:!1,category:"symbols"},stop_sign:{keywords:["stop"],"char":"\ud83d\uded1",fitzpatrick_scale:!1,category:"symbols"},anger:{keywords:["angry","mad"],"char":"\ud83d\udca2",fitzpatrick_scale:!1,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],"char":"\u2668\ufe0f",fitzpatrick_scale:!1,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],"char":"\ud83d\udeb7",fitzpatrick_scale:!1,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],"char":"\ud83d\udeaf",fitzpatrick_scale:!1,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],"char":"\ud83d\udeb3",fitzpatrick_scale:!1,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],"char":"\ud83d\udeb1",fitzpatrick_scale:!1,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],"char":"\ud83d\udd1e",fitzpatrick_scale:!1,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],"char":"\ud83d\udcf5",fitzpatrick_scale:!1,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],"char":"\u2757",fitzpatrick_scale:!1,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],"char":"\u2755",fitzpatrick_scale:!1,category:"symbols"},question:{keywords:["doubt","confused"],"char":"\u2753",fitzpatrick_scale:!1,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],"char":"\u2754",fitzpatrick_scale:!1,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],"char":"\u203c\ufe0f",fitzpatrick_scale:!1,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],"char":"\u2049\ufe0f",fitzpatrick_scale:!1,category:"symbols"},100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],"char":"\ud83d\udcaf",fitzpatrick_scale:!1,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],"char":"\ud83d\udd05",fitzpatrick_scale:!1,category:"symbols"},high_brightness:{keywords:["sun","light"],"char":"\ud83d\udd06",fitzpatrick_scale:!1,category:"symbols"},trident:{keywords:["weapon","spear"],"char":"\ud83d\udd31",fitzpatrick_scale:!1,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],"char":"\u269c",fitzpatrick_scale:!1,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],"char":"\u303d\ufe0f",fitzpatrick_scale:!1,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],"char":"\u26a0\ufe0f",fitzpatrick_scale:!1,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],"char":"\ud83d\udeb8",fitzpatrick_scale:!1,category:"symbols"},beginner:{keywords:["badge","shield"],"char":"\ud83d\udd30",fitzpatrick_scale:!1,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],"char":"\u267b\ufe0f",fitzpatrick_scale:!1,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],"char":"\ud83c\ude2f",fitzpatrick_scale:!1,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],"char":"\ud83d\udcb9",fitzpatrick_scale:!1,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],"char":"\u2747\ufe0f",fitzpatrick_scale:!1,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],"char":"\u2733\ufe0f",fitzpatrick_scale:!1,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],"char":"\u274e",fitzpatrick_scale:!1,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],"char":"\u2705",fitzpatrick_scale:!1,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],"char":"\ud83d\udca0",fitzpatrick_scale:!1,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],"char":"\ud83c\udf00",fitzpatrick_scale:!1,category:"symbols"},loop:{keywords:["tape","cassette"],"char":"\u27bf",fitzpatrick_scale:!1,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],"char":"\ud83c\udf10",fitzpatrick_scale:!1,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],"char":"\u24c2\ufe0f",fitzpatrick_scale:!1,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],"char":"\ud83c\udfe7",fitzpatrick_scale:!1,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],"char":"\ud83c\ude02\ufe0f",fitzpatrick_scale:!1,category:"symbols"},passport_control:{keywords:["custom","blue-square"],"char":"\ud83d\udec2",fitzpatrick_scale:!1,category:"symbols"},customs:{keywords:["passport","border","blue-square"],"char":"\ud83d\udec3",fitzpatrick_scale:!1,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],"char":"\ud83d\udec4",fitzpatrick_scale:!1,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],"char":"\ud83d\udec5",fitzpatrick_scale:!1,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],"char":"\u267f",fitzpatrick_scale:!1,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],"char":"\ud83d\udead",fitzpatrick_scale:!1,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],"char":"\ud83d\udebe",fitzpatrick_scale:!1,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],"char":"\ud83c\udd7f\ufe0f",fitzpatrick_scale:!1,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],"char":"\ud83d\udeb0",fitzpatrick_scale:!1,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],"char":"\ud83d\udeb9",fitzpatrick_scale:!1,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],"char":"\ud83d\udeba",fitzpatrick_scale:!1,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],"char":"\ud83d\udebc",fitzpatrick_scale:!1,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],"char":"\ud83d\udebb",fitzpatrick_scale:!1,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],"char":"\ud83d\udeae",fitzpatrick_scale:!1,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],"char":"\ud83c\udfa6",fitzpatrick_scale:!1,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],"char":"\ud83d\udcf6",fitzpatrick_scale:!1,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],"char":"\ud83c\ude01",fitzpatrick_scale:!1,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],"char":"\ud83c\udd96",fitzpatrick_scale:!1,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],"char":"\ud83c\udd97",fitzpatrick_scale:!1,category:"symbols"},up:{keywords:["blue-square","above","high"],"char":"\ud83c\udd99",fitzpatrick_scale:!1,category:"symbols"},cool:{keywords:["words","blue-square"],"char":"\ud83c\udd92",fitzpatrick_scale:!1,category:"symbols"},"new":{keywords:["blue-square","words","start"],"char":"\ud83c\udd95",fitzpatrick_scale:!1,category:"symbols"},free:{keywords:["blue-square","words"],"char":"\ud83c\udd93",fitzpatrick_scale:!1,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],"char":"0\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},one:{keywords:["blue-square","numbers","1"],"char":"1\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],"char":"2\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],"char":"3\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},four:{keywords:["4","numbers","blue-square"],"char":"4\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],"char":"5\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},six:{keywords:["6","numbers","blue-square"],"char":"6\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],"char":"7\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],"char":"8\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],"char":"9\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],"char":"\ud83d\udd1f",fitzpatrick_scale:!1,category:"symbols"},asterisk:{keywords:["star","keycap"],"char":"*\u20e3",fitzpatrick_scale:!1,category:"symbols"},1234:{keywords:["numbers","blue-square"],"char":"\ud83d\udd22",fitzpatrick_scale:!1,category:"symbols"},eject_button:{keywords:["blue-square"],"char":"\u23cf\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],"char":"\u25b6\ufe0f",fitzpatrick_scale:!1,category:"symbols"},pause_button:{keywords:["pause","blue-square"],"char":"\u23f8",fitzpatrick_scale:!1,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],"char":"\u23ed",fitzpatrick_scale:!1,category:"symbols"},stop_button:{keywords:["blue-square"],"char":"\u23f9",fitzpatrick_scale:!1,category:"symbols"},record_button:{keywords:["blue-square"],"char":"\u23fa",fitzpatrick_scale:!1,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],"char":"\u23ef",fitzpatrick_scale:!1,category:"symbols"},previous_track_button:{keywords:["backward"],"char":"\u23ee",fitzpatrick_scale:!1,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],"char":"\u23e9",fitzpatrick_scale:!1,category:"symbols"},rewind:{keywords:["play","blue-square"],"char":"\u23ea",fitzpatrick_scale:!1,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],"char":"\ud83d\udd00",fitzpatrick_scale:!1,category:"symbols"},repeat:{keywords:["loop","record"],"char":"\ud83d\udd01",fitzpatrick_scale:!1,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],"char":"\ud83d\udd02",fitzpatrick_scale:!1,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],"char":"\u25c0\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],"char":"\ud83d\udd3c",fitzpatrick_scale:!1,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],"char":"\ud83d\udd3d",fitzpatrick_scale:!1,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],"char":"\u23eb",fitzpatrick_scale:!1,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],"char":"\u23ec",fitzpatrick_scale:!1,category:"symbols"},arrow_right:{keywords:["blue-square","next"],"char":"\u27a1\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],"char":"\u2b05\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],"char":"\u2b06\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],"char":"\u2b07\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],"char":"\u2197\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],"char":"\u2198\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],"char":"\u2199\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],"char":"\u2196\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],"char":"\u2195\ufe0f",fitzpatrick_scale:!1,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],"char":"\u2194\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],"char":"\ud83d\udd04",fitzpatrick_scale:!1,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],"char":"\u21aa\ufe0f",fitzpatrick_scale:!1,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],"char":"\u21a9\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],"char":"\u2934\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],"char":"\u2935\ufe0f",fitzpatrick_scale:!1,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],"char":"#\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],"char":"\u2139\ufe0f",fitzpatrick_scale:!1,category:"symbols"},abc:{keywords:["blue-square","alphabet"],"char":"\ud83d\udd24",fitzpatrick_scale:!1,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],"char":"\ud83d\udd21",fitzpatrick_scale:!1,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],"char":"\ud83d\udd20",fitzpatrick_scale:!1,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],"char":"\ud83d\udd23",fitzpatrick_scale:!1,category:"symbols"},musical_note:{keywords:["score","tone","sound"],"char":"\ud83c\udfb5",fitzpatrick_scale:!1,category:"symbols"},notes:{keywords:["music","score"],"char":"\ud83c\udfb6",fitzpatrick_scale:!1,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],"char":"\u3030\ufe0f",fitzpatrick_scale:!1,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],"char":"\u27b0",fitzpatrick_scale:!1,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],"char":"\u2714\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],"char":"\ud83d\udd03",fitzpatrick_scale:!1,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],"char":"\u2795",fitzpatrick_scale:!1,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],"char":"\u2796",fitzpatrick_scale:!1,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],"char":"\u2797",fitzpatrick_scale:!1,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],"char":"\u2716\ufe0f",fitzpatrick_scale:!1,category:"symbols"},infinity:{keywords:["forever"],"char":"\u267e",fitzpatrick_scale:!1,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],"char":"\ud83d\udcb2",fitzpatrick_scale:!1,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],"char":"\ud83d\udcb1",fitzpatrick_scale:!1,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],"char":"\xa9\ufe0f",fitzpatrick_scale:!1,category:"symbols"},registered:{keywords:["alphabet","circle"],"char":"\xae\ufe0f",fitzpatrick_scale:!1,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],"char":"\u2122\ufe0f",fitzpatrick_scale:!1,category:"symbols"},end:{keywords:["words","arrow"],"char":"\ud83d\udd1a",fitzpatrick_scale:!1,category:"symbols"},back:{keywords:["arrow","words","return"],"char":"\ud83d\udd19",fitzpatrick_scale:!1,category:"symbols"},on:{keywords:["arrow","words"],"char":"\ud83d\udd1b",fitzpatrick_scale:!1,category:"symbols"},top:{keywords:["words","blue-square"],"char":"\ud83d\udd1d",fitzpatrick_scale:!1,category:"symbols"},soon:{keywords:["arrow","words"],"char":"\ud83d\udd1c",fitzpatrick_scale:!1,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],"char":"\u2611\ufe0f",fitzpatrick_scale:!1,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],"char":"\ud83d\udd18",fitzpatrick_scale:!1,category:"symbols"},white_circle:{keywords:["shape","round"],"char":"\u26aa",fitzpatrick_scale:!1,category:"symbols"},black_circle:{keywords:["shape","button","round"],"char":"\u26ab",fitzpatrick_scale:!1,category:"symbols"},red_circle:{keywords:["shape","error","danger"],"char":"\ud83d\udd34",fitzpatrick_scale:!1,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],"char":"\ud83d\udd35",fitzpatrick_scale:!1,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],"char":"\ud83d\udd38",fitzpatrick_scale:!1,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],"char":"\ud83d\udd39",fitzpatrick_scale:!1,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],"char":"\ud83d\udd36",fitzpatrick_scale:!1,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],"char":"\ud83d\udd37",fitzpatrick_scale:!1,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],"char":"\ud83d\udd3a",fitzpatrick_scale:!1,category:"symbols"},black_small_square:{keywords:["shape","icon"],"char":"\u25aa\ufe0f",fitzpatrick_scale:!1,category:"symbols"},white_small_square:{keywords:["shape","icon"],"char":"\u25ab\ufe0f",fitzpatrick_scale:!1,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],"char":"\u2b1b",fitzpatrick_scale:!1,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],"char":"\u2b1c",fitzpatrick_scale:!1,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],"char":"\ud83d\udd3b",fitzpatrick_scale:!1,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],"char":"\u25fc\ufe0f",fitzpatrick_scale:!1,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],"char":"\u25fb\ufe0f",fitzpatrick_scale:!1,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],"char":"\u25fe",fitzpatrick_scale:!1,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],"char":"\u25fd",fitzpatrick_scale:!1,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],"char":"\ud83d\udd32",fitzpatrick_scale:!1,category:"symbols"},white_square_button:{keywords:["shape","input"],"char":"\ud83d\udd33",fitzpatrick_scale:!1,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],"char":"\ud83d\udd08",fitzpatrick_scale:!1,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],"char":"\ud83d\udd09",fitzpatrick_scale:!1,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],"char":"\ud83d\udd0a",fitzpatrick_scale:!1,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],"char":"\ud83d\udd07",fitzpatrick_scale:!1,category:"symbols"},mega:{keywords:["sound","speaker","volume"],"char":"\ud83d\udce3",fitzpatrick_scale:!1,category:"symbols"},loudspeaker:{keywords:["volume","sound"],"char":"\ud83d\udce2",fitzpatrick_scale:!1,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],"char":"\ud83d\udd14",fitzpatrick_scale:!1,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],"char":"\ud83d\udd15",fitzpatrick_scale:!1,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],"char":"\ud83c\udccf",fitzpatrick_scale:!1,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],"char":"\ud83c\udc04",fitzpatrick_scale:!1,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],"char":"\u2660\ufe0f",fitzpatrick_scale:!1,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],"char":"\u2663\ufe0f",fitzpatrick_scale:!1,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],"char":"\u2665\ufe0f",fitzpatrick_scale:!1,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],"char":"\u2666\ufe0f",fitzpatrick_scale:!1,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],"char":"\ud83c\udfb4",fitzpatrick_scale:!1,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],"char":"\ud83d\udcad",fitzpatrick_scale:!1,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],"char":"\ud83d\uddef",fitzpatrick_scale:!1,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],"char":"\ud83d\udcac",fitzpatrick_scale:!1,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],"char":"\ud83d\udde8",fitzpatrick_scale:!1,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd50",fitzpatrick_scale:!1,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd51",fitzpatrick_scale:!1,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd52",fitzpatrick_scale:!1,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd53",fitzpatrick_scale:!1,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd54",fitzpatrick_scale:!1,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],"char":"\ud83d\udd55",fitzpatrick_scale:!1,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd56",fitzpatrick_scale:!1,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd57",fitzpatrick_scale:!1,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd58",fitzpatrick_scale:!1,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd59",fitzpatrick_scale:!1,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd5a",fitzpatrick_scale:!1,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],"char":"\ud83d\udd5b",fitzpatrick_scale:!1,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd5c",fitzpatrick_scale:!1,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd5d",fitzpatrick_scale:!1,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd5e",fitzpatrick_scale:!1,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd5f",fitzpatrick_scale:!1,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd60",fitzpatrick_scale:!1,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd61",fitzpatrick_scale:!1,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd62",fitzpatrick_scale:!1,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd63",fitzpatrick_scale:!1,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd64",fitzpatrick_scale:!1,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd65",fitzpatrick_scale:!1,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd66",fitzpatrick_scale:!1,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd67",fitzpatrick_scale:!1,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},aland_islands:{keywords:["\xc5land","islands","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddfd",fitzpatrick_scale:!1,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],"char":"\ud83c\udde9\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\udde7",fitzpatrick_scale:!1,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddef",fitzpatrick_scale:!1,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},chile:{keywords:["flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],"char":"\ud83c\udde8\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddfd",fitzpatrick_scale:!1,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],"char":"\ud83c\udded\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},curacao:{keywords:["cura\xe7ao","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],"char":"\ud83c\udde9\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],"char":"\ud83c\udde9\ud83c\uddef",fitzpatrick_scale:!1,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],"char":"\ud83c\udde9\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],"char":"\ud83c\udde9\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},eu:{keywords:["european","union","flag","banner"],"char":"\ud83c\uddea\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],"char":"\ud83c\uddeb\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],"char":"\ud83c\uddeb\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],"char":"\ud83c\uddeb\ud83c\uddef",fitzpatrick_scale:!1,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],"char":"\ud83c\uddeb\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],"char":"\ud83c\uddeb\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],"char":"\ud83c\udde9\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],"char":"\ud83c\udded\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],"char":"\ud83c\udded\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],"char":"\ud83c\udded\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],"char":"\ud83c\udded\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],"char":"\ud83c\uddef\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],"char":"\ud83c\uddef\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],"char":"\ud83c\uddef\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],"char":"\ud83c\uddef\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],"char":"\ud83c\uddfd\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\udde7",fitzpatrick_scale:!1,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],"char":"\ud83c\uddfe\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddfd",fitzpatrick_scale:!1,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],"char":"\ud83c\uddeb\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],"char":"\ud83c\uddf0\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],"char":"\ud83c\uddf4\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],"char":"\ud83c\uddf6\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},reunion:{keywords:["r\xe9union","flag","nation","country","banner"],"char":"\ud83c\uddf7\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],"char":"\ud83c\uddf7\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],"char":"\ud83c\uddf7\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],"char":"\ud83c\uddf7\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},st_barthelemy:{keywords:["saint","barth\xe9lemy","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],"char":"\ud83c\uddfc\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],"char":"\ud83c\uddf7\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddfd",fitzpatrick_scale:!1,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\udde7",fitzpatrick_scale:!1,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],"char":"\ud83c\uddff\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],"char":"\ud83c\uddf0\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddef",fitzpatrick_scale:!1,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],"char":"\ud83c\uddfa\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],"char":"\ud83c\uddfa\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],"char":"\ud83c\uddec\ud83c\udde7",fitzpatrick_scale:!1,category:"flags"},england:{keywords:["flag","english"],"char":"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f",fitzpatrick_scale:!1,category:"flags"},scotland:{keywords:["flag","scottish"],"char":"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f",fitzpatrick_scale:!1,category:"flags"},wales:{keywords:["flag","welsh"],"char":"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f",fitzpatrick_scale:!1,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],"char":"\ud83c\uddfa\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],"char":"\ud83c\uddfa\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],"char":"\ud83c\uddfa\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],"char":"\ud83c\uddfc\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],"char":"\ud83c\uddfe\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],"char":"\ud83c\uddff\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],"char":"\ud83c\uddff\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},united_nations:{keywords:["un","flag","banner"],"char":"\ud83c\uddfa\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],"char":"\ud83c\udff4\u200d\u2620\ufe0f",fitzpatrick_scale:!1,category:"flags"}}); diff --git a/public/assets/tinymce/plugins/emoticons/js/emojis-3006b2aae9b4d0b2df2068968cc5523af58362fbd5759350b5f217f3f20c7236.js.gz b/public/assets/tinymce/plugins/emoticons/js/emojis-3006b2aae9b4d0b2df2068968cc5523af58362fbd5759350b5f217f3f20c7236.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..a31aaa619a6640fb30130dcc0a5f46d054807bc4 GIT binary patch literal 29374 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 J+U5=t0|28iO;Z2> literal 0 HcmV?d00001 diff --git a/public/assets/tinymce/plugins/emoticons/js/emojis.js b/public/assets/tinymce/plugins/emoticons/js/emojis.js new file mode 120000 index 00000000..549608a0 --- /dev/null +++ b/public/assets/tinymce/plugins/emoticons/js/emojis.js @@ -0,0 +1 @@ +emojis-3006b2aae9b4d0b2df2068968cc5523af58362fbd5759350b5f217f3f20c7236.js \ No newline at end of file diff --git a/public/assets/tinymce/plugins/emoticons/js/emojis.js.gz b/public/assets/tinymce/plugins/emoticons/js/emojis.js.gz new file mode 120000 index 00000000..0127b33a --- /dev/null +++ b/public/assets/tinymce/plugins/emoticons/js/emojis.js.gz @@ -0,0 +1 @@ +emojis-3006b2aae9b4d0b2df2068968cc5523af58362fbd5759350b5f217f3f20c7236.js.gz \ No newline at end of file diff --git a/public/assets/tinymce/plugins/emoticons/plugin-281a10488cd27bf645f84655f0bebb4185f34a9ddb5a6b1a8203ae2f2a43e96f.js b/public/assets/tinymce/plugins/emoticons/plugin-281a10488cd27bf645f84655f0bebb4185f34a9ddb5a6b1a8203ae2f2a43e96f.js new file mode 100644 index 00000000..cd61e306 --- /dev/null +++ b/public/assets/tinymce/plugins/emoticons/plugin-281a10488cd27bf645f84655f0bebb4185f34a9ddb5a6b1a8203ae2f2a43e96f.js @@ -0,0 +1,9 @@ +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.8.2 (2021-06-23) + */ +!function(){"use strict";var u,t,n,e,r=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=function(){return(o=Object.assign||function(t){for(var n,e=1,r=arguments.length;e=i.length&&o.substr(u,u+i.length)===i?e["char"].replace(/src="([^"]+)"/,function(t,n){return'src="'+f+n+'"'}):e["char"]),category:A(_,t.category)},c=l[a.category]!==undefined?l[a.category]:[];l[a.category]=c.concat([a]),s.push(a)}),r.set(h.some(l)),n.set(h.some(s))};e.on("init",function(){O.load(t,o).then(function(t){var n=T(e);i(c(t,n))},function(t){console.log("Failed to load emoticons: "+t),r.set(h.some({})),n.set(h.some([]))})});var u=function(){return n.get().getOr([])},a=function(){return r.get().isSome()&&n.get().isSome()};return{listCategories:function(){return[k].concat(y(r.get().getOr({})))},hasLoaded:a,waitForLoad:function(){return a()?j.resolve(!0):new j(function(t,n){var e=15,r=C.setInterval(function(){a()?(C.clearInterval(r),t(!0)):--e<0&&(console.log("Could not load emojis from url: "+o),C.clearInterval(r),n(!1))},100)})},listAll:u,listCategory:function(n){return n===k?u():r.get().bind(function(t){return h.from(t[n])}).getOr([])}}},x=function(t,n,e){for(var r=[],o=n.toLowerCase(),i=e.fold(function(){return l},function(n){return function(t){return n<=t}}),u=0;uCould not load emoticons

    "}]},buttons:[{type:"cancel",text:"Close",primary:!0}],initialData:{pattern:"",results:[]}}),f.focus(D),f.unblock()}))};r.add("emoticons",function(t,n){var e,r,o,i,u,a,c,l,s,f=(r=n,o=(e=t).getParam("emoticons_database","emojis","string"),e.getParam("emoticons_database_url",r+"/js/"+o+e.suffix+".js","string")),m=t.getParam("emoticons_database_id","tinymce.plugins.emoticons","string"),g=P(t,f,m);u=g,a=function(){return L(i,u)},(i=t).ui.registry.addButton("emoticons",{tooltip:"Emoticons",icon:"emoji",onAction:a}),i.ui.registry.addMenuItem("emoticons",{text:"Emoticons...",icon:"emoji",onAction:a}),l=g,(c=t).ui.registry.addAutocompleter("emoticons",{ch:":",columns:"auto",minChars:2,fetch:function(n,e){return l.waitForLoad().then(function(){var t=l.listAll();return x(t,n,h.some(e))})},onAction:function(t,n,e){c.selection.setRng(n),c.insertContent(e),t.hide()}}),(s=t).on("PreInit",function(){s.parser.addAttributeFilter("data-emoticon",function(t){!function(t,n){for(var e=0,r=t.length;emnKDc0N}w*RqI;dR^G_4wGR~sZ=W<@y|ZeCJ0zK`=D|kIct41!Qy5!=J7U{UR$#f zba+M?Gi*lFI8MxwEz?6IjOVDL84i_hTFsU5Wl|_J z^|OJxa07LG9JdQC8PaUm4b>=a@DX0rUaG`G$!l=HBTEDCOfjbFXuerQLT z!B0G>^^5#EPUK=yyl_9$rPxT0*J7S^bq#uEzS*~$DxV(QHZp5bb|4QJ$pB+%wuYLmyqPJ=vu3t zfZ2DL|MGpOLE296ybM zVlEfyL@1fhxu?XJRGZHVS4;(DL8v=s$dA4eZ!$9EP+RRwkt}Tb?fP} z^>opA+IM~Gx4!co)BAm+d$P3IxAfuJV@}FLwOt=jI0TJ@BV6kU*E+&&9MNx$w>F)w zzu^$o^~k|AD`5!Ej@2=X*}8T0SF$On*#<#>G9}~}jwm{m0KW*2Kv=H_TPM%56={%; z1w{&iZQ|^_?|h1Pa^9CO9{)CB{&t$eu8=8STJ(KXFQs^D-}VrAv4=BTI7D@b2@nxn zY6FNDb_@6F6*%fW6_5&#*heh92Sic!;dL@ zhxf4Hn%*G?CVSHU1-qLkCcKkRstCIlh0GQ7xC=vJ<82sXqA80h``FY+F)8E}@9*dz z6W~rRWxwM$x~}65Ida)ws#Jy$$c%WZt0V|k{FX|0Y69)T`&!%`&K;96D9y=gJ{2SW9gE5(^%5GMCT! z*d*Y=Cr>A5KP0Eg*~w4m&p(}?U~w5h3t^=X>{bwcDZ!iuU&%4yptTkiSlP;JkGL~p zW1avK;Zd-BCLK$;%Q!q359{}lsDK1IV;6cpWdan}#SJL@oayH2)hnBn)jhQ2m8g!} z;TZU&->Oy;awbF|KPg?FF+Th^8y&~&q}LCx!9m|^{NXa!EUSqF2mdvDBQ55y3Y71w z+Pr8$dkXU7s5SWucRRjrlPwUA;dwMU~!?>)VU1-{;VdCN zH~}!u=(rbE`*{bzh1#+JN3EF6Oycd0T`G4aOSl#|plV)o=z*dWy5_Lc>F}2eY7%3@ zl|i*>xnR;$WUJY{9`)9iCHF}Hu|361+-l|rFXkavs z2NhIqYaYtyb;cIbBajReH(MuKQEfqA3!kl;RViZv$x#(3@z1(W5CbDar2iT-nNV9XFdGgIY~b9ek@8?nX2Nhp!5Gk6W=%5SPzD++G%-f!Zu8)D$Dp8eG#i zf>k}9TQtQ%bTi2sgE3+Q2kF^Ve)daSHJB*%9~dz7B@TS#-i}|=Mz)vt3uzQa@l>W? z%d0l0i0lDuL)%4Ntc4xzg&Npxzd)a&1}=P$;u`s}-h?vWi51id1kho=HR}8Ns$OWX z=HPZl6r;e=sPJl8P~=b-YVPFy)l8bH+EZSJl4ug>izOc*43VC+kwNVfHa9!B;~2XP zLegG(HQ1OwBLE{6>8ns?$uLRCf1%K|fPDHZ3-~ua6cqZDNzg%TwDO)x`LOkFh;UXT z1-qhk=o%adB+3C`3bzK!w8;{nZ6Ne=Djoqj9wJ#i83dAIAS%NvZZu}ICEpei^b1}Rk}Xy;$-nNgGv8) zFYLr!AJz^jJilrdqDqMzk2^gA`!<6YxhMn*QpTylvNcoh?KQ?w>0Xk;tfnK~E<$~C zOWmNjV|MaTo`AX>E0FuiL_Z(17A_>3xyE zDpS2j)a?lk(eO(*YrY}0z+HIWqwi(qEt);_{|K7h6Y^QgQYHZL)g0l-B$hHU*Mv;2 zOwYwc`R<3az}#9I_9y9ESG!`%09sb@94KH@mQ`pL`f-mA%Yma!`5{F8%}l}h00z4t zrwHU`dQ43LOu5*jXCPKAWH^oR;%qk0!U_;E(@^rkft+bIx7{~PVw zaK80=r(KR$K0*GrXCYkQAc;{T5u+1Xgl{?rD?&Rv10N<3VrMLLSm6(L{qDbm3RnA? G8vp>=U5zLJ literal 0 HcmV?d00001 diff --git a/public/assets/tinymce/plugins/emoticons/plugin.js b/public/assets/tinymce/plugins/emoticons/plugin.js new file mode 120000 index 00000000..931f7662 --- /dev/null +++ b/public/assets/tinymce/plugins/emoticons/plugin.js @@ -0,0 +1 @@ +plugin-281a10488cd27bf645f84655f0bebb4185f34a9ddb5a6b1a8203ae2f2a43e96f.js \ No newline at end of file diff --git a/public/assets/tinymce/plugins/emoticons/plugin.js.gz b/public/assets/tinymce/plugins/emoticons/plugin.js.gz new file mode 120000 index 00000000..92cb02d3 --- /dev/null +++ b/public/assets/tinymce/plugins/emoticons/plugin.js.gz @@ -0,0 +1 @@ +plugin-281a10488cd27bf645f84655f0bebb4185f34a9ddb5a6b1a8203ae2f2a43e96f.js.gz \ No newline at end of file diff --git a/public/assets/tinymce/plugins/fullpage/plugin-9922360abd8ce20550ef2271d4c37e55e6b1ece541b8149427285bbe4731f67e.js b/public/assets/tinymce/plugins/fullpage/plugin-9922360abd8ce20550ef2271d4c37e55e6b1ece541b8149427285bbe4731f67e.js new file mode 100644 index 00000000..a30ee5af --- /dev/null +++ b/public/assets/tinymce/plugins/fullpage/plugin-9922360abd8ce20550ef2271d4c37e55e6b1ece541b8149427285bbe4731f67e.js @@ -0,0 +1,9 @@ +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.8.2 (2021-06-23) + */ +!function(){"use strict";var s=function(e){var t=e;return{get:function(){return t},set:function(e){t=e}}},e=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=function(){return(u=Object.assign||function(e){for(var t,n=1,l=arguments.length;n"),(n=r.getAll("title")[0])&&n.firstChild&&(a.title=n.firstChild.value),p.each(r.getAll("meta"),function(e){var t,n=e.attr("name"),l=e.attr("http-equiv");n?a[n.toLowerCase()]=e.attr("content"):"Content-Type"===l&&(t=/charset\s*=\s*(.*)\s*/gi.exec(e.attr("content")))&&(a.docencoding=t[1])}),(n=r.getAll("html")[0])&&(a.langcode=c(n,"lang")||c(n,"xml:lang")),a.stylesheets=[],p.each(r.getAll("link"),function(e){"stylesheet"===e.attr("rel")&&a.stylesheets.push(e.attr("href"))}),(n=r.getAll("body")[0])&&(a.langdir=c(n,"dir"),a.style=c(n,"style"),a.visited_color=c(n,"vlink"),a.link_color=c(n,"link"),a.active_color=c(n,"alink")),a),d=u(u({},{title:"",keywords:"",description:"",robots:"",author:"",docencoding:""}),s);l.windowManager.open({title:"Metadata and Document Properties",size:"normal",body:{type:"panel",items:[{name:"title",type:"input",label:"Title"},{name:"keywords",type:"input",label:"Keywords"},{name:"description",type:"input",label:"Description"},{name:"robots",type:"input",label:"Robots"},{name:"author",type:"input",label:"Author"},{name:"docencoding",type:"input",label:"Encoding"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:d,onSubmit:function(e){var t=e.getData(),n=function(e,o,t){var r,n,l=e.dom,i=function(e,t,n){e.attr(t,n||undefined)},a=function(e){s.firstChild?s.insert(e,s.firstChild):s.append(e)},c=v(t),s=c.getAll("head")[0];s||(r=c.getAll("html")[0],s=new m("head",1),r.firstChild?r.insert(s,r.firstChild,!0):r.append(s)),r=c.firstChild,o.xml_pi?(n='version="1.0"',o.docencoding&&(n+=' encoding="'+o.docencoding+'"'),7!==r.type&&(r=new m("xml",7),c.insert(r,c.firstChild,!0)),r.value=n):r&&7===r.type&&r.remove(),r=c.getAll("#doctype")[0],o.doctype?(r||(r=new m("#doctype",10),o.xml_pi?c.insert(r,c.firstChild):a(r)),r.value=o.doctype.substring(9,o.doctype.length-1)):r&&r.remove(),r=null,p.each(c.getAll("meta"),function(e){"Content-Type"===e.attr("http-equiv")&&(r=e)}),o.docencoding?(r||((r=new m("meta",1)).attr("http-equiv","Content-Type"),r.shortEnded=!0,a(r)),r.attr("content","text/html; charset="+o.docencoding)):r&&r.remove(),r=c.getAll("title")[0],o.title?(r?r.empty():(r=new m("title",1),a(r)),r.append(new m("#text",3)).value=o.title):r&&r.remove(),p.each("keywords,description,author,copyright,robots".split(","),function(e){for(var t,n=c.getAll("meta"),l=o[e],i=0;i"))}(l,p.extend(s,t),i.get());i.set(n),e.close()}})},_=p.each,b=function(e){return e.replace(/<\/?[A-Z]+/g,function(e){return e.toLowerCase()})},x=function(e,t,n,l){var i,o,r,a,c,s,d,u,m,f="",g=e.dom;l.selection||(a=e.getParam("protect"),c=l.content,p.each(a,function(e){c=c.replace(e,function(e){return"\x3c!--mce:protected "+escape(e)+"--\x3e"})}),r=c,"raw"===l.format&&t.get()||l.source_view&&h(e)||(0!==r.length||l.source_view||(r=p.trim(t.get())+"\n"+p.trim(r)+"\n"+p.trim(n.get())),-1!==(i=(r=r.replace(/<(\/?)BODY/gi,"<$1body")).indexOf("",i),t.set(b(r.substring(0,i+1))),-1===(o=r.indexOf("\n")),s=v(t.get()),_(s.getAll("style"),function(e){e.firstChild&&(f+=e.firstChild.value)}),(d=s.getAll("body")[0])&&g.setAttribs(e.getBody(),{style:d.attr("style")||"",dir:d.attr("dir")||"",vLink:d.attr("vlink")||"",link:d.attr("link")||"",aLink:d.attr("alink")||""}),g.remove("fullpage_styles"),u=e.getDoc().getElementsByTagName("head")[0],f&&g.add(u,"style",{id:"fullpage_styles"}).appendChild(document.createTextNode(f)),m={},p.each(u.getElementsByTagName("link"),function(e){"stylesheet"===e.rel&&e.getAttribute("data-mce-fullpage")&&(m[e.href]=e)}),p.each(s.getAll("link"),function(e){var t=e.attr("href");if(!t)return!0;m[t]||"stylesheet"!==e.attr("rel")||g.add(u,"link",{rel:"stylesheet",text:"text/css",href:t,"data-mce-fullpage":"1"}),delete m[t]}),p.each(m,function(e){e.parentNode.removeChild(e)})))},k=function(e){var t,n="",l="";return e.getParam("fullpage_default_xml_pi")&&(n+='\n'),n+=e.getParam("fullpage_default_doctype",""),n+="\n\n\n",(t=e.getParam("fullpage_default_title"))&&(n+=""+t+"\n"),(t=i(e))&&(n+='\n'),(t=g(e))&&(l+="font-family: "+t+";"),(t=y(e))&&(l+="font-size: "+t+";"),(t=e.getParam("fullpage_default_text_color"))&&(l+="color: "+t+";"),n+="\n\n"},C=function(e,t,n,l){"html"!==l.format||l.selection||l.source_view&&h(e)||(l.content=(p.trim(t)+"\n"+p.trim(l.content)+"\n"+p.trim(n)).replace(//g,function(e,t){return unescape(t)}))};e.add("fullpage",function(e){var t,n,l,i,o,r,a=s(""),c=s("");n=a,(t=e).addCommand("mceFullPageProperties",function(){d(t,n)}),(l=e).ui.registry.addButton("fullpage",{tooltip:"Metadata and document properties",icon:"document-properties",onAction:function(){l.execCommand("mceFullPageProperties")}}),l.ui.registry.addMenuItem("fullpage",{text:"Metadata and document properties",icon:"document-properties",onAction:function(){l.execCommand("mceFullPageProperties")}}),o=a,r=c,(i=e).on("BeforeSetContent",function(e){x(i,o,r,e)}),i.on("GetContent",function(e){C(i,o.get(),r.get(),e)})})}(); diff --git a/public/assets/tinymce/plugins/fullpage/plugin-9922360abd8ce20550ef2271d4c37e55e6b1ece541b8149427285bbe4731f67e.js.gz b/public/assets/tinymce/plugins/fullpage/plugin-9922360abd8ce20550ef2271d4c37e55e6b1ece541b8149427285bbe4731f67e.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..8745265bb1e30f71033878dc46253a6b286ca9c6 GIT binary patch literal 2977 zcmV;S3tsdeiwFQbm91g|1H~C@bKAJ_`~3;b>%Vsw0AI3_^Yu$76Pp0`y^DRolV{Jq37!QP#cETk#nJ>cVZo)+ zo8VF=OI>8eLdl8;Z*>v|FS9JLP*qUMN|tMxhKT)6B~n*14QidrGB8USy!-jXyPzlo z5hO*P%Q8_S3o-|1aejhB3sgzj5D3k^36!=3R%P)onV6s~3KPr$*dxO^ta4#gp<6
    ;@%vk}TPUhZE%d`f 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 Xzt{NRhz9>)jQHliTu{R4s~!LVJVL&@ literal 0 HcmV?d00001 diff --git a/public/assets/tinymce/plugins/fullpage/plugin.js b/public/assets/tinymce/plugins/fullpage/plugin.js new file mode 120000 index 00000000..079b11fb --- /dev/null +++ b/public/assets/tinymce/plugins/fullpage/plugin.js @@ -0,0 +1 @@ +plugin-9922360abd8ce20550ef2271d4c37e55e6b1ece541b8149427285bbe4731f67e.js \ No newline at end of file diff --git a/public/assets/tinymce/plugins/fullpage/plugin.js.gz b/public/assets/tinymce/plugins/fullpage/plugin.js.gz new file mode 120000 index 00000000..b14bc17c --- /dev/null +++ b/public/assets/tinymce/plugins/fullpage/plugin.js.gz @@ -0,0 +1 @@ +plugin-9922360abd8ce20550ef2271d4c37e55e6b1ece541b8149427285bbe4731f67e.js.gz \ No newline at end of file diff --git a/public/assets/tinymce/plugins/fullscreen/plugin-82a33cc62d1752e94284042a7a0847dd2d5ecb8657d108c9a08462f9e3b933a3.js b/public/assets/tinymce/plugins/fullscreen/plugin-82a33cc62d1752e94284042a7a0847dd2d5ecb8657d108c9a08462f9e3b933a3.js new file mode 100644 index 00000000..ebc903dd --- /dev/null +++ b/public/assets/tinymce/plugins/fullscreen/plugin-82a33cc62d1752e94284042a7a0847dd2d5ecb8657d108c9a08462f9e3b933a3.js @@ -0,0 +1,9 @@ +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.8.2 (2021-06-23) + */ +!function(){"use strict";var c=function(n){var e=n;return{get:function(){return e},set:function(n){e=n}}},n=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(n){return{isFullscreen:function(){return null!==n.get()}}},e=function(r){return function(n){return t=typeof(e=n),(null===e?"null":"object"==t&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==t&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":t)===r;var e,t}},t=function(e){return function(n){return typeof n===e}},r=e("string"),o=e("array"),u=t("boolean"),l=function(n){return!(null===(e=n)||e===undefined);var e},f=t("function"),a=t("number"),d=function(){},s=function(n){return function(){return n}};var m,h,g,p=s(!1),v=s(!0),y=function(){return w},w=(m=function(n){return n.isNone()},{fold:function(n,e){return n()},is:p,isSome:p,isNone:v,getOr:g=function(n){return n},getOrThunk:h=function(n){return n()},getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:s(null),getOrUndefined:s(undefined),or:g,orThunk:h,map:y,each:d,bind:y,exists:p,forall:v,filter:y,equals:m,equals_:m,toArray:function(){return[]},toString:s("none()")}),b=function(t){var n=s(t),e=function(){return o},r=function(n){return n(t)},o={fold:function(n,e){return e(t)},is:function(n){return t===n},isSome:v,isNone:p,getOr:n,getOrThunk:n,getOrDie:n,getOrNull:n,getOrUndefined:n,or:e,orThunk:e,map:function(n){return b(n(t))},each:function(n){n(t)},bind:r,exists:r,forall:r,filter:function(n){return n(t)?o:w},toArray:function(){return[t]},toString:function(){return"some("+t+")"},equals:function(n){return n.is(t)},equals_:function(n,e){return n.fold(p,function(n){return e(t,n)})}};return o},S={some:b,none:y,from:function(n){return null===n||n===undefined?w:b(n)}},E=function(){return n=function(n){return n.unbind()},e=c(S.none()),t=function(){return e.get().each(n)},{clear:function(){t(),e.set(S.none())},isSet:function(){return e.get().isSome()},set:function(n){t(),e.set(S.some(n))}};var n,e,t},F=Array.prototype.push,T=function(n,e){for(var t=n.length,r=new Array(t),o=0;ot6JkgGlQack2E+?ZOZ}V8EQq+WY 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 Ip}{c#0RD^L'+e.name+""};return{name:"plugins",title:"Plugins",items:[{type:"htmlpanel",presets:"document",html:[null==(n=e)?"":'
    '+function(a){var e,t,n,o=(t=y((e=a).plugins),(n=e.getParam("forced_plugins"))===undefined?t:function(e,t){for(var n=[],a=0,o=e.length;a"+(t=a,n=e,g(C,function(e){return e.key===n}).fold(function(){var e=t.plugins[n].getMetadata;return"function"==typeof e?l(e()):n},function(e){return l({name:e.name,url:"https://www.tiny.cloud/docs/plugins/"+e.type+"/"+e.slug})}))+"";var t,n}),r=i.length,s=i.join("");return"

    "+A.translate(["Plugins installed ({0}):",r])+"

      "+s+"
    "}(n)+"
    ",(t=d(["Accessibility Checker","Advanced Code Editor","Advanced Tables","Case Change","Checklist","Export","Tiny Comments","Tiny Drive","Enhanced Media Embed","Format Painter","Link Checker","Mentions","MoxieManager","Page Embed","Permanent Pen","PowerPaste","Spell Checker Pro"],function(e){return"
  • "+A.translate(e)+"
  • "}).join(""),'

    '+A.translate("Premium plugins:")+"

    ")].join("")}]}},P=tinymce.util.Tools.resolve("tinymce.EditorManager"),M=function(e,t){var n,a,o,i,r,s={name:"shortcuts",title:"Handy Shortcuts",items:[{type:"table",header:["Action","Shortcut"],cells:d(w,function(e){var t=d(e.shortcuts,v).join(" or ");return[e.action,t]})}]},l={name:"keyboardnav",title:"Keyboard Navigation",items:[{type:"htmlpanel",presets:"document",html:"

    Editor UI keyboard navigation

    \n\n

    Activating keyboard navigation

    \n\n

    The sections of the outer UI of the editor - the menubar, toolbar, sidebar and footer - are all keyboard navigable. As such, there are multiple ways to activate keyboard navigation:

    \n
      \n
    • Focus the menubar: Alt + F9 (Windows) or ⌥F9 (MacOS)
    • \n
    • Focus the toolbar: Alt + F10 (Windows) or ⌥F10 (MacOS)
    • \n
    • Focus the footer: Alt + F11 (Windows) or ⌥F11 (MacOS)
    • \n
    \n\n

    Focusing the menubar or toolbar will start keyboard navigation at the first item in the menubar or toolbar, which will be highlighted with a gray background. Focusing the footer will start keyboard navigation at the first item in the element path, which will be highlighted with an underline.

    \n\n

    Moving between UI sections

    \n\n

    When keyboard navigation is active, pressing tab will move the focus to the next major section of the UI, where applicable. These sections are:

    \n
      \n
    • the menubar
    • \n
    • each group of the toolbar
    • \n
    • the sidebar
    • \n
    • the element path in the footer
    • \n
    • the wordcount toggle button in the footer
    • \n
    • the branding link in the footer
    • \n
    • the editor resize handle in the footer
    • \n
    \n\n

    Pressing shift + tab will move backwards through the same sections, except when moving from the footer to the toolbar. Focusing the element path then pressing shift + tab will move focus to the first toolbar group, not the last.

    \n\n

    Moving within UI sections

    \n\n

    Keyboard navigation within UI sections can usually be achieved using the left and right arrow keys. This includes:

    \n
      \n
    • moving between menus in the menubar
    • \n
    • moving between buttons in a toolbar group
    • \n
    • moving between items in the element path
    • \n
    \n\n

    In all these UI sections, keyboard navigation will cycle within the section. For example, focusing the last button in a toolbar group then pressing right arrow will move focus to the first item in the same toolbar group.

    \n\n

    Executing buttons

    \n\n

    To execute a button, navigate the selection to the desired button and hit space or enter.

    \n\n

    Opening, navigating and closing menus

    \n\n

    When focusing a menubar button or a toolbar button with a menu, pressing space, enter or down arrow will open the menu. When the menu opens the first item will be selected. To move up or down the menu, press the up or down arrow key respectively. This is the same for submenus, which can also be opened and closed using the left and right arrow keys.

    \n\n

    To close any active menu, hit the escape key. When a menu is closed the selection will be restored to its previous selection. This also works for closing submenus.

    \n\n

    Context toolbars and menus

    \n\n

    To focus an open context toolbar such as the table context toolbar, press Ctrl + F9 (Windows) or ⌃F9 (MacOS).

    \n\n

    Context toolbar navigation is the same as toolbar navigation, and context menu navigation is the same as standard menu navigation.

    \n\n

    Dialog navigation

    \n\n

    There are two types of dialog UIs in TinyMCE: tabbed dialogs and non-tabbed dialogs.

    \n\n

    When a non-tabbed dialog is opened, the first interactive component in the dialog will be focused. Users can navigate between interactive components by pressing tab. This includes any footer buttons. Navigation will cycle back to the first dialog component if tab is pressed while focusing the last component in the dialog. Pressing shift + tab will navigate backwards.

    \n\n

    When a tabbed dialog is opened, the first button in the tab menu is focused. Pressing tab will navigate to the first interactive component in that tab, and will cycle through the tab\u2019s components, the footer buttons, then back to the tab button. To switch to another tab, focus the tab button for the current tab, then use the arrow keys to cycle through the tab buttons.

    "}]},c=T(e),u=(i='TinyMCE '+(a=P.majorVersion,o=P.minorVersion,0===a.indexOf("@")?"X.X.X":a+"."+o)+"",{name:"versions",title:"Version",items:[{type:"htmlpanel",html:"

    "+A.translate(["You are using {0}",i])+"

    ",presets:"document"}]}),h=m(((n={})[s.name]=s,n[l.name]=l,n[c.name]=c,n[u.name]=u,n),t.get());return r=e,p.from(r.getParam("help_tabs")).fold(function(){return t=y(e=h),-1!==(n=t.indexOf("versions"))&&(t.splice(n,1),t.push("versions")),{tabs:e,names:t};var e,t,n},function(e){return t=h,n={},a=d(e,function(e){return"string"==typeof e?(b(t,e)&&(n[e]=t[e]),e):(n[e.name]=e).name}),{tabs:n,names:a};var t,n,a})},F=function(o,i){return function(){var e=M(o,i),a=e.tabs,t=e.names,n={type:"tabpanel",tabs:function(e){for(var t=[],n=function(e){t.push(e)},a=0;ab<70Xsd^5%9G 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 U14e?lfLGuB5B})~$a6IS0HXm+(EtDd literal 0 HcmV?d00001 diff --git a/public/assets/tinymce/plugins/help/plugin.js b/public/assets/tinymce/plugins/help/plugin.js new file mode 120000 index 00000000..84cad881 --- /dev/null +++ b/public/assets/tinymce/plugins/help/plugin.js @@ -0,0 +1 @@ +plugin-21f93399a4c6379ac6afe1ef49e65bc00b7f8b3d949bdffe4392efc9ca251e78.js \ No newline at end of file diff --git a/public/assets/tinymce/plugins/help/plugin.js.gz b/public/assets/tinymce/plugins/help/plugin.js.gz new file mode 120000 index 00000000..8866121f --- /dev/null +++ b/public/assets/tinymce/plugins/help/plugin.js.gz @@ -0,0 +1 @@ +plugin-21f93399a4c6379ac6afe1ef49e65bc00b7f8b3d949bdffe4392efc9ca251e78.js.gz \ No newline at end of file diff --git a/public/assets/tinymce/plugins/hr/plugin-ef8c674f8aa76387c1d5508e978dac74447db0707b150a6d82150ad60874ce78.js b/public/assets/tinymce/plugins/hr/plugin-ef8c674f8aa76387c1d5508e978dac74447db0707b150a6d82150ad60874ce78.js new file mode 100644 index 00000000..d99ce8af --- /dev/null +++ b/public/assets/tinymce/plugins/hr/plugin-ef8c674f8aa76387c1d5508e978dac74447db0707b150a6d82150ad60874ce78.js @@ -0,0 +1,9 @@ +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.8.2 (2021-06-23) + */ +!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager");n.add("hr",function(n){var o,t;(o=n).addCommand("InsertHorizontalRule",function(){o.execCommand("mceInsertContent",!1,"
    ")}),(t=n).ui.registry.addButton("hr",{icon:"horizontal-rule",tooltip:"Horizontal line",onAction:function(){return t.execCommand("InsertHorizontalRule")}}),t.ui.registry.addMenuItem("hr",{icon:"horizontal-rule",text:"Horizontal line",onAction:function(){return t.execCommand("InsertHorizontalRule")}})})}(); diff --git a/public/assets/tinymce/plugins/hr/plugin-ef8c674f8aa76387c1d5508e978dac74447db0707b150a6d82150ad60874ce78.js.gz b/public/assets/tinymce/plugins/hr/plugin-ef8c674f8aa76387c1d5508e978dac74447db0707b150a6d82150ad60874ce78.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..6bd627dcd46f6b31f05fd54725aa570319dafff8 GIT binary patch literal 428 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 literal 0 HcmV?d00001 diff --git a/public/assets/tinymce/plugins/imagetools/plugin.js b/public/assets/tinymce/plugins/imagetools/plugin.js new file mode 120000 index 00000000..8ed7d70f --- /dev/null +++ b/public/assets/tinymce/plugins/imagetools/plugin.js @@ -0,0 +1 @@ +plugin-5f12b0cffddfd1af1a5ab053111cdb80ce4a107d42cb07b2cff4049110e831f8.js \ No newline at end of file diff --git a/public/assets/tinymce/plugins/imagetools/plugin.js.gz b/public/assets/tinymce/plugins/imagetools/plugin.js.gz new file mode 120000 index 00000000..c437ce27 --- /dev/null +++ b/public/assets/tinymce/plugins/imagetools/plugin.js.gz @@ -0,0 +1 @@ +plugin-5f12b0cffddfd1af1a5ab053111cdb80ce4a107d42cb07b2cff4049110e831f8.js.gz \ No newline at end of file diff --git a/public/assets/tinymce/plugins/importcss/plugin-ca965b67bec04673901973233461d6cea877764480feb6062dd7f12fd31d3370.js b/public/assets/tinymce/plugins/importcss/plugin-ca965b67bec04673901973233461d6cea877764480feb6062dd7f12fd31d3370.js new file mode 100644 index 00000000..810eb018 --- /dev/null +++ b/public/assets/tinymce/plugins/importcss/plugin-ca965b67bec04673901973233461d6cea877764480feb6062dd7f12fd31d3370.js @@ -0,0 +1,9 @@ +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.8.2 (2021-06-23) + */ +!function(){"use strict";var n,t=tinymce.util.Tools.resolve("tinymce.PluginManager"),v=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),f=tinymce.util.Tools.resolve("tinymce.EditorManager"),m=tinymce.util.Tools.resolve("tinymce.Env"),h=tinymce.util.Tools.resolve("tinymce.util.Tools"),d=function(t){return t.getParam("importcss_selector_converter")},o=(n="array",function(t){return r=typeof(e=t),(null===e?"null":"object"==r&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==r&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":r)===n;var e,r}),i=Array.prototype.push,l=function(t,e){return function(t){for(var e=[],r=0,n=t.length;r{8ZyPrf{+?g4A_{?wXv+5C4(%!nAx+aFfP)&b+b@c0 ztXGu8W<~CiTw6M={`)=L7fFuPB835oCg+8md7hck@b&9g(d+1)DK=IumOi2xi|&=) zME5dVYLlCVl8#3obS9#=c^=hLF0#@|`y^)~Xy2$zYA0t=sb|tgekr4yUv6(AW1}?6 z%xWcVrqVph8@XENXB^f-PRh=J@M|9_T^lH@`BP>-vc~vm4&hcA=lE}xdS&$9(5Vks z+g*BJxOg~xets4nj}lpK%GnTVLGyQM9jwIBzs2|BI-=K?*H;&p|GBvS7sK)JRc~JE zEcl^pOG>zQ-m1)#(Nk(8&3zI~t}-b~uX1s3Ozs5YV)7?RNq2UemkXsoraE0nOBjFp zCasxSiJyM`_!~qVl;+>0^nRwiu?JVHZ`0CGkX?S0?BNV5vt%D1&$d?j(js+YA^mM? z(-kFZRT%3t=N_EQkxOGAGNYfQ_2GIuZW5{!l3JT?2tQ-XCVo>$Gp91~j8k3ad6Fb@ zOu~x9#5@LskR-AFK7AX^2%yHBpe2;M?bg4-0;?)1;2kL}!%g~qQfrW4@%TXKbS2ri zz1CMw?f?M2_(xtEmA`c3n&a3qNaz|_lG`2QD*5_FMd_A2KMFdR`%oQ65A>k5on$iQ zHo4?F@gkRc;g=)(Mvn#q%eHDxdxrXnoigT^);vdAK1c7Zg>s0DnCGeYQb)?mRYV4M zK%(c=MH*~ObyP=(gNsG!V;p-nQX(yid_yI#t?t^J$sK)pQ}DXHC`1(8xlHnh89Meg9@xRN9A3k3^Ob3jO>1WaIJbb?R zEU@?8Pzkw~8LYklqMlq$0Xsdpo(fk!f-v-ob%7Ef#-B!MN+N_TOO|4levu#3f|8W0 z)dHaI$_dPj!Gf(Zp0;$z`c!K%t8 z1}wNS&(gjF!YK>NU236kTj(a>M|etLUb1cWV&aNa6W-qJ@JgQLsl&h%D`c?O6tiC}@9{oWo7 zZP<1r@J*Cf{$=xTTVPumY1_r{p+gnjrnA`xw4{6Ui#25tzr30TM#tf!p@L*FwapR( zMA%Oz60M21M&e_?vJ*to&Cm6S>Efdauzhy^6{VX_8*FzVx~zMB)7r+9X*_AsAt&I@YJjaH!W8ns|X z;n(x6!Bnqwn&Xb0FBjve@fR21db4Ep8{(~pI^bSEj056jJelr7y$MC+Wllg-jIZd= z3*Mu*bc3-JgU>w7`AA>*TJ1UDP=iwl=MWB}Wf09LX{b+ec@S%MM$H(31{Y$%L{X30 zPV7U0ka|w3OG4vw;&cifpWBRQ=uhKW-K0*^zeYUKIFP?I&(Tsdjys1^WE&{xq#5n1 z>M0EHqSWfYrTj3X`x>(m&F>d@Lc3llhXvK#hI}28(qhK8A#PM+9SV9~@p$c;r@Z7j zpYs(jMn}Bd7ySnWu|~;HCZml16~K^Oc>vc@TWMc~L_bVM53- zS!58eDoiF0BaG#jZ>UGDU0^1``%XdF>p&ISXR|`g0iljNU7tC_w-hYI%qjbQjGZqk z0_{)S7pEh9+pxIg z?W`5|&c_tfFmg$nE9szOx&T**O7rQJmJ;< M0cmgV`PUBs0CPjKc>n+a literal 0 HcmV?d00001 diff --git a/public/assets/tinymce/plugins/importcss/plugin.js b/public/assets/tinymce/plugins/importcss/plugin.js new file mode 120000 index 00000000..59f73c20 --- /dev/null +++ b/public/assets/tinymce/plugins/importcss/plugin.js @@ -0,0 +1 @@ +plugin-ca965b67bec04673901973233461d6cea877764480feb6062dd7f12fd31d3370.js \ No newline at end of file diff --git a/public/assets/tinymce/plugins/importcss/plugin.js.gz b/public/assets/tinymce/plugins/importcss/plugin.js.gz new file mode 120000 index 00000000..14333d0f --- /dev/null +++ b/public/assets/tinymce/plugins/importcss/plugin.js.gz @@ -0,0 +1 @@ +plugin-ca965b67bec04673901973233461d6cea877764480feb6062dd7f12fd31d3370.js.gz \ No newline at end of file diff --git a/public/assets/tinymce/plugins/insertdatetime/plugin-b60c2b569baf4f6c5bbb4f2b99701dd39d7eca515955af1ce0e677212e4dde61.js b/public/assets/tinymce/plugins/insertdatetime/plugin-b60c2b569baf4f6c5bbb4f2b99701dd39d7eca515955af1ce0e677212e4dde61.js new file mode 100644 index 00000000..22f5be7a --- /dev/null +++ b/public/assets/tinymce/plugins/insertdatetime/plugin-b60c2b569baf4f6c5bbb4f2b99701dd39d7eca515955af1ce0e677212e4dde61.js @@ -0,0 +1,9 @@ +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.8.2 (2021-06-23) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=function(e){return e.getParam("insertdatetime_timeformat",e.translate("%H:%M:%S"))},c=function(e){return e.getParam("insertdatetime_formats",["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"])},r="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),a="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),i="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),o="January February March April May June July August September October November December".split(" "),m=function(e,t){if((e=""+e).length'+n+"")):e.insertContent(s(e,t))},t=function(t){t.addCommand("mceInsertDate",function(){var e;l(t,(e=t).getParam("insertdatetime_dateformat",e.translate("%Y-%m-%d")))}),t.addCommand("mceInsertTime",function(){l(t,u(t))})},d=tinymce.util.Tools.resolve("tinymce.util.Tools"),n=function(n){var e,t,r,a,i=c(n),o=(a=c(r=n),e=0^7Z`(Ey{@!1~5->v5jQlce804ry+8|4Ux(i@qLl6W5 zBVB9`5-Ct*QX}<$-;wg0Vz+An!=iZ4J@?9^dhg!7A@9gXT`i29%`IVBM5aUVZ;7#aNPgxc=$_%;@+FLk4|OY4vSu>L({c2 zGP88_Bn*Mn6P6jo&dMU5YF*SZW)6VU2 zr#$ZDetFgGl1}B{&gnf`F)5umMaEi@sRQyi)_Xd4swlvae|3vC$1NplPNobg_iIZg|w@DmtDA` zxCLQY)Iuz_hy&7+@{$E1_J^Ibs5{`pHYDFbe2gr5Ex!x~R**}L&9sjh?_$PMISU6+ zlU>vVGVIs`sH=ctEqmR;AnFW;-9a0Q=VljmG8mrHvoTHR&A6S$4}o*{Z0oz-tlYPG zANJt#d+@V8xVT#-bg>5(dtmczaL4xs#j#MlYWmRI+;G7q*WB@pm!t2@A}F8)h2!n* zAUb6#tpf`Vn7o!-4Ga?#C2QJ`SY{u{(TO)t z)_$b)sB5}M^!-s+b?HgZ@4cr7^qTZy+3dD#STq}pJpYKds8BhhcynC^Er0AN-?;|E z%{MBT!bl4Qbvn>`gl6JxAa3AG&+DGVBGl4Ogwgz-bz~ zG|g}eF9>XxjF}YIkoHf+YAm0MyZ(LRm_c7t;4c_)vg6lk7+W0Fy8^t15xrbSBNaP| zzRe_lJS=>$6MtWPaMmL1Ro1YvB#xeBwSC;|Sq#C-DxpnkLd|=PsOgsE(Cwe5srKbz zn6F2$*}R1UmdB;2nB@DqFLqHuLbJKXPbrBPAi4lwEFLe#A>vP>aFF=ekXfsG?KK{;0c$az#=fDB%C5 z!z=G6V-r8~&9OuKI<#mRz8dY)N4dm-h@tHV)9N4m<9>yB7LDHg2NCEWqN)o30Mg)$ Au>b%7 literal 0 HcmV?d00001 diff --git a/public/assets/tinymce/plugins/insertdatetime/plugin.js b/public/assets/tinymce/plugins/insertdatetime/plugin.js new file mode 120000 index 00000000..a48b4202 --- /dev/null +++ b/public/assets/tinymce/plugins/insertdatetime/plugin.js @@ -0,0 +1 @@ +plugin-b60c2b569baf4f6c5bbb4f2b99701dd39d7eca515955af1ce0e677212e4dde61.js \ No newline at end of file diff --git a/public/assets/tinymce/plugins/insertdatetime/plugin.js.gz b/public/assets/tinymce/plugins/insertdatetime/plugin.js.gz new file mode 120000 index 00000000..7741ef34 --- /dev/null +++ b/public/assets/tinymce/plugins/insertdatetime/plugin.js.gz @@ -0,0 +1 @@ +plugin-b60c2b569baf4f6c5bbb4f2b99701dd39d7eca515955af1ce0e677212e4dde61.js.gz \ No newline at end of file diff --git a/public/assets/tinymce/plugins/legacyoutput/plugin-c460b8361cb93f80823af1cc29b4ad6b58e2bb8a711144abeb22cd61f9bce541.js b/public/assets/tinymce/plugins/legacyoutput/plugin-c460b8361cb93f80823af1cc29b4ad6b58e2bb8a711144abeb22cd61f9bce541.js new file mode 100644 index 00000000..7441bcd4 --- /dev/null +++ b/public/assets/tinymce/plugins/legacyoutput/plugin-c460b8361cb93f80823af1cc29b4ad6b58e2bb8a711144abeb22cd61f9bce541.js @@ -0,0 +1,9 @@ +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.8.2 (2021-06-23) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),l=tinymce.util.Tools.resolve("tinymce.util.Tools"),t=function(s){var e,t,i,a;t=!1,(e=s).settings.inline_styles=t,e.getParam("fontsize_formats")||(i="8pt=1 10pt=2 12pt=3 14pt=4 18pt=5 24pt=6 36pt=7",e.settings.fontsize_formats=i),e.getParam("font_formats")||(a="Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats",e.settings.font_formats=a),s.on("PreInit",function(){return e=s,t="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table",i=l.explode(e.getParam("font_size_style_values","xx-small,x-small,small,medium,large,x-large,xx-large")),a=e.schema,e.formatter.register({alignleft:{selector:t,attributes:{align:"left"}},aligncenter:{selector:t,attributes:{align:"center"}},alignright:{selector:t,attributes:{align:"right"}},alignjustify:{selector:t,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all",preserve_attributes:["class","style"]},{inline:"strong",remove:"all",preserve_attributes:["class","style"]},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all",preserve_attributes:["class","style"]},{inline:"em",remove:"all",preserve_attributes:["class","style"]},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all",preserve_attributes:["class","style"]},{inline:"span",styles:{textDecoration:"underline"},exact:!0}],strikethrough:[{inline:"strike",remove:"all",preserve_attributes:["class","style"]},{inline:"span",styles:{textDecoration:"line-through"},exact:!0}],fontname:{inline:"font",toggle:!1,attributes:{face:"%value"}},fontsize:{inline:"font",toggle:!1,attributes:{size:function(e){return String(l.inArray(i,e.value)+1)}}},forecolor:{inline:"font",attributes:{color:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0}}),l.each("b,i,u,strike".split(","),function(e){a.addValidElements(e+"[*]")}),a.getElementRule("font")||a.addValidElements("font[face|size|color|style]"),void l.each(t.split(","),function(e){var t=a.getElementRule(e);t&&(t.attributes.align||(t.attributes.align={},t.attributesOrder.push("align")))});var e,t,i,a})};e.add("legacyoutput",function(e){t(e)})}(); diff --git a/public/assets/tinymce/plugins/legacyoutput/plugin-c460b8361cb93f80823af1cc29b4ad6b58e2bb8a711144abeb22cd61f9bce541.js.gz b/public/assets/tinymce/plugins/legacyoutput/plugin-c460b8361cb93f80823af1cc29b4ad6b58e2bb8a711144abeb22cd61f9bce541.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..4d04cac9d907355e10eb0d40d20806bf65c6ae69 GIT binary patch literal 1269 zcmVMK&hM_;5VhKRn(aAEkJF@aXZP)gtIg(lu>SwewaA zPp3<63FJXwEg);XRN2fJ{p1upjtvJ(6mx4cg1!f5a0C%Ehah{A7g6PeQ& zjn7A9bcoZKjK(+}k>Fdrrn-bxe+qar&8}(4D^fGINMF$`+6&F_>jLZW)guFE7ikxUK z|899c4-4KcSi=>j4=U_{r>2&IoFgZBd!CE93UWy8hVo8LYb9p)A8?JJj@EF^dU{~} zD=@Z{JTJTXzP{hL4&`^Qb*>Jyy{=J|&t;s32j{DLZdC5#G@bFv)I9fbV*e4a8Q5BC z465&mU@sTLpwDEDWrOaKcPLC_riL}Th&7077T3KGGYj)pRNzC%{BD5}D?!8ZGu2pT z1r|WQ?B*{ZKES*P*_2=R#PkD>{nnOZpLnw%ft-h2x}Su*1mr1m85RpYv+!C=PuZZ1 zE%?@IEMA9oMH^O)ST$zV5v!iD>N%^9nJ<{HSRt3JRm>=+B=dZ(fHIk@3~m}_3P>KL zc&vd~b(c%7T0jHo&CR~6xl(L9cVi8OY-^^tEdh`ExhH6vGM=Mv7*D)W$U3+1*04>K z(jk$oxss(;u<(<$1BG4E*okL|vU1*faFY%(p#eiT8y1(?7m@pGEFEgc6x;pRcp_-W z@>lD;T&%vv)WZTBW^ysPSa-c^Lg$oOsLc{dj2C51|JYm(q+C#;xC>E^L8l)#Y{!pn z+UW9og*04K*7ecJI^6LGh_Rr-TD1BjlOA0W1HV*1-8+{&Vv@Dt$t&VSWgx?w7 z{!qOhZu~DGjE#>pO5bXv8wNMn&nAx#(U9<(UV*QyY0GM0Ot=5PS`;w*z2?u23Nh2X zhRIG+*rCjuvcy2*gF8&+1@_Ge{V7&_NaXEn_-)(~xob|a>rUqg(Pg6WF+Z`EuM&xU zAnHh;j?zukW6>LhrFBoyP<#j2S%;lWUpe%$4=lE(2ERuca8V_6j{lpsPY{~92F*zDno~B67SDK5yvMvQepOIo z+j0p!r5Af2X^NtF=+OPayH-Khr^6TI3w-hHBHZR}xRl%I@@+H?rLm=v1?g?`|7K43 znfd&IT1cn<$rEI|yP7O^K>Q0m+|1V-Hr)NwV(DZ}>o6!0fbRo(HywNfH|b^y!KDP- feaXejw7zMF&mJ1*aX?^_P9OaP9xbJJ@(Ta}pDlQ& literal 0 HcmV?d00001 diff --git a/public/assets/tinymce/plugins/legacyoutput/plugin.js b/public/assets/tinymce/plugins/legacyoutput/plugin.js new file mode 120000 index 00000000..4574bba1 --- /dev/null +++ b/public/assets/tinymce/plugins/legacyoutput/plugin.js @@ -0,0 +1 @@ +plugin-c460b8361cb93f80823af1cc29b4ad6b58e2bb8a711144abeb22cd61f9bce541.js \ No newline at end of file diff --git a/public/assets/tinymce/plugins/legacyoutput/plugin.js.gz b/public/assets/tinymce/plugins/legacyoutput/plugin.js.gz new file mode 120000 index 00000000..f1e22395 --- /dev/null +++ b/public/assets/tinymce/plugins/legacyoutput/plugin.js.gz @@ -0,0 +1 @@ +plugin-c460b8361cb93f80823af1cc29b4ad6b58e2bb8a711144abeb22cd61f9bce541.js.gz \ No newline at end of file diff --git a/public/assets/tinymce/plugins/link/plugin-8ee260979cd6327d7ed1bd3a08c5013203ff7a610f19fd9c5faa7dadd1f1e81c.js b/public/assets/tinymce/plugins/link/plugin-8ee260979cd6327d7ed1bd3a08c5013203ff7a610f19fd9c5faa7dadd1f1e81c.js new file mode 100644 index 00000000..11e5449c --- /dev/null +++ b/public/assets/tinymce/plugins/link/plugin-8ee260979cd6327d7ed1bd3a08c5013203ff7a610f19fd9c5faa7dadd1f1e81c.js @@ -0,0 +1,9 @@ +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.8.2 (2021-06-23) + */ +!function(){"use strict";var n,t,e,r,o=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=tinymce.util.Tools.resolve("tinymce.util.VK"),u=function(r){return function(t){return e=typeof(n=t),(null===n?"null":"object"==e&&(Array.prototype.isPrototypeOf(n)||n.constructor&&"Array"===n.constructor.name)?"array":"object"==e&&(String.prototype.isPrototypeOf(n)||n.constructor&&"String"===n.constructor.name)?"string":e)===r;var n,e}},a=function(n){return function(t){return typeof t===n}},l=u("string"),c=u("array"),f=function(t){return n===t},s=a("boolean"),m=a("function"),g=function(t){var n=t.getParam("link_assume_external_targets",!1);return s(n)&&n?1:!l(n)||"http"!==n&&"https"!==n?0:n},p=function(t){return t.getParam("default_link_target")},d=function(t){return t.getParam("target_list",!0)},h=function(t){return t.getParam("rel_list",[],"array")},v=function(t){return t.getParam("allow_unsafe_link_target",!1,"boolean")},y=function(){},k=function(t){return function(){return t}},x=k(!1),b=k(!(n=null)),O=function(){return w},w=(t=function(t){return t.isNone()},{fold:function(t,n){return t()},is:x,isSome:x,isNone:b,getOr:r=function(t){return t},getOrThunk:e=function(t){return t()},getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},getOrNull:k(null),getOrUndefined:k(undefined),or:r,orThunk:e,map:O,each:y,bind:O,exists:x,forall:b,filter:O,equals:t,equals_:t,toArray:function(){return[]},toString:k("none()")}),C=function(e){var t=k(e),n=function(){return o},r=function(t){return t(e)},o={fold:function(t,n){return n(e)},is:function(t){return e===t},isSome:b,isNone:x,getOr:t,getOrThunk:t,getOrDie:t,getOrNull:t,getOrUndefined:t,or:n,orThunk:n,map:function(t){return C(t(e))},each:function(t){t(e)},bind:r,exists:r,forall:r,filter:function(t){return t(e)?o:w},toArray:function(){return[e]},toString:function(){return"some("+e+")"},equals:function(t){return t.is(e)},equals_:function(t,n){return t.fold(x,function(t){return n(e,t)})}};return o},N={some:C,none:O,from:function(t){return null===t||t===undefined?w:C(t)}},A=Array.prototype.indexOf,P=Array.prototype.push,T=function(t,n){return e=t,r=n,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.childNodes.length?n.data.length:0}:n.previousSibling&&Ke(n.previousSibling)?{container:n.previousSibling,offset:n.previousSibling.data.length}:n.nextSibling&&Ke(n.nextSibling)?{container:n.nextSibling,offset:0}:{container:e,offset:t}},ut=function(e){var t=e.cloneRange(),n=at(e.startContainer,e.startOffset);t.setStart(n.container,n.offset);var r=at(e.endContainer,e.endOffset);return t.setEnd(r.container,r.offset),t},st=tinymce.util.Tools.resolve("tinymce.dom.DomQuery"),ct=function(e,t){var n=t||e.selection.getStart(!0);return e.dom.getParent(n,"OL,UL,DL",lt(e,n))},ft=function(e){var t,n,r,o=ct(e),i=e.selection.getSelectedBlocks();return r=i,(n=o)&&1===r.length&&r[0]===n?(t=o,He.grep(t.querySelectorAll("ol,ul,dl"),function(e){return Ve(e)})):He.grep(i,function(e){return Ve(e)&&o!==e})},dt=function(e){var n,t,r,o=e.selection.getSelectedBlocks();return He.grep((n=e,t=o,r=He.map(t,function(e){var t=n.dom.getParent(e,"li,dd,dt",lt(n,e));return t||e}),st.unique(r)),function(e){return Xe(e)})},lt=function(e,t){var n=e.dom.getParents(t,"TD,TH");return 0e.length?Nt:Ot)(n,e,t)},[]),P(r).map(function(e){return e.list}).toArray()},Rt=function(u,e,s){var t,n=Pt(e,(t=N(dt(u),pe.fromDom),vt(k(t,m(Tt)),k(A(t),m(Tt)),function(e,t){return{start:e,end:t}})));L(n,function(e){var t,n;t=e.entries,n=s,L(T(t,Dt),function(e){return function(e,t){switch(e){case"Indent":t.depth++;break;case"Outdent":t.depth--;break;case"Flatten":t.depth=0}t.dirty=!0}(n,e),0});var r,o,i,a=(r=u,o=e.entries,x(function(e,t){if(0===e.length)return[];for(var n=t(e[0]),r=[],o=[],i=0,a=e.length;i!dv6=^Y>Uar99fagp(HCl_O$cGL~; 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 F007(v7}x*+ literal 0 HcmV?d00001 diff --git a/public/assets/tinymce/plugins/lists/plugin.js b/public/assets/tinymce/plugins/lists/plugin.js new file mode 120000 index 00000000..8368b32e --- /dev/null +++ b/public/assets/tinymce/plugins/lists/plugin.js @@ -0,0 +1 @@ +plugin-0ae75e7f9b0630c93d30efaa3116fa98b18afb64668cd306c4e18e3938a371b9.js \ No newline at end of file diff --git a/public/assets/tinymce/plugins/lists/plugin.js.gz b/public/assets/tinymce/plugins/lists/plugin.js.gz new file mode 120000 index 00000000..038e1b91 --- /dev/null +++ b/public/assets/tinymce/plugins/lists/plugin.js.gz @@ -0,0 +1 @@ +plugin-0ae75e7f9b0630c93d30efaa3116fa98b18afb64668cd306c4e18e3938a371b9.js.gz \ No newline at end of file diff --git a/public/assets/tinymce/plugins/media/plugin-1aad849a21686186c2935ca9c25989b082ca58b71976aa2bc19a798ab4a7a675.js b/public/assets/tinymce/plugins/media/plugin-1aad849a21686186c2935ca9c25989b082ca58b71976aa2bc19a798ab4a7a675.js new file mode 100644 index 00000000..ed54be52 --- /dev/null +++ b/public/assets/tinymce/plugins/media/plugin-1aad849a21686186c2935ca9c25989b082ca58b71976aa2bc19a798ab4a7a675.js @@ -0,0 +1,9 @@ +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.8.2 (2021-06-23) + */ +!function(){"use strict";var e,t,r,n=tinymce.util.Tools.resolve("tinymce.PluginManager"),p=function(){return(p=Object.assign||function(e){for(var t,r=1,n=arguments.length;r"):"application/x-shockwave-flash"===n.sourcemime?(l='',s.poster&&(l+=''),l+=""):-1!==n.sourcemime.indexOf("audio")?(c=n,(u=f)?u(c):'"):"script"===n.type?'