diff --git a/public/assets/.sprockets-manifest-114af3849fd42bd9cfee7abc7e9f2957.json b/public/assets/.sprockets-manifest-114af3849fd42bd9cfee7abc7e9f2957.json
deleted file mode 100644
index c7de6bae..00000000
--- a/public/assets/.sprockets-manifest-114af3849fd42bd9cfee7abc7e9f2957.json
+++ /dev/null
@@ -1 +0,0 @@
-{"files":{"active_admin-36292b8422a4426cc0094944f9ebc5bf4765c10d523799d63b941faa6a163601.css":{"logical_path":"active_admin.css","mtime":"2018-11-08T20:34:37+01:00","size":102382,"digest":"36292b8422a4426cc0094944f9ebc5bf4765c10d523799d63b941faa6a163601","integrity":"sha256-NikrhCKkQmzACUlE+evFv0dlwQ1SN5nWO5QfqmoWNgE="},"active_admin/nested_menu_arrow-15084d93c65c1964d7077700ea748bd2d70cfa2d4c19707c58a9c64e232dd442.gif":{"logical_path":"active_admin/nested_menu_arrow.gif","mtime":"2018-08-15T00:16:46+02:00","size":70,"digest":"15084d93c65c1964d7077700ea748bd2d70cfa2d4c19707c58a9c64e232dd442","integrity":"sha256-FQhNk8ZcGWTXB3cA6nSL0tcM+i1MGXB8WKnGTiMt1EI="},"active_admin/nested_menu_arrow_dark-7c43b8e0a5f8823875f49a093c9d7a6b374f885b6f9cc248ae9cd7e6e9b29034.gif":{"logical_path":"active_admin/nested_menu_arrow_dark.gif","mtime":"2018-08-15T00:16:46+02:00","size":70,"digest":"7c43b8e0a5f8823875f49a093c9d7a6b374f885b6f9cc248ae9cd7e6e9b29034","integrity":"sha256-fEO44KX4gjh19JoJPJ16azdPiFtvnMJIrpzX5umykDQ="},"active_admin/orderable-29374dbb55b0012d78a37c614d573bb3474f0779849b478a147d0f1845ca6617.png":{"logical_path":"active_admin/orderable.png","mtime":"2018-08-15T00:16:46+02:00","size":220,"digest":"29374dbb55b0012d78a37c614d573bb3474f0779849b478a147d0f1845ca6617","integrity":"sha256-KTdNu1WwAS14o3xhTVc7s0dPB3mEm0eKFH0PGEXKZhc="},"active_admin/print-cf99cbf27fb92065a9eacd28e6fad48fa72cadaf6e0918790e8d35b11d8f99f6.css":{"logical_path":"active_admin/print.css","mtime":"2018-08-15T00:16:46+02:00","size":7086,"digest":"cf99cbf27fb92065a9eacd28e6fad48fa72cadaf6e0918790e8d35b11d8f99f6","integrity":"sha256-z5nL8n+5IGWp6s0o5vrUj6csra9uCRh5Do01sR2PmfY="},"active_admin-b259ca6ce02dc92d306a1a3c5a085c78dded2dcf996d65ce2a20738dbf436520.js":{"logical_path":"active_admin.js","mtime":"2018-11-08T20:34:41+01:00","size":946671,"digest":"b259ca6ce02dc92d306a1a3c5a085c78dded2dcf996d65ce2a20738dbf436520","integrity":"sha256-slnKbOAtyS0waho8WghceN3tLc+ZbWXOKiBzjb9DZSA="},"tinymce-de566058f98da4ed02d1875c43d69609716c234fc0449ae2b9fdd9b5d22c2862.js":{"logical_path":"tinymce.js","mtime":"2018-11-08T20:34:41+01:00","size":918053,"digest":"de566058f98da4ed02d1875c43d69609716c234fc0449ae2b9fdd9b5d22c2862","integrity":"sha256-3lZgWPmNpO0C0YdcQ9aWCXFsI0/ARJriuf3ZtdIsKGI="},"modernizr-654222debe8018b12f1993ceddff30dc163a7d5008d79869c399d6d167321f97.js":{"logical_path":"modernizr.js","mtime":"2018-03-12T11:54:27+01:00","size":51365,"digest":"654222debe8018b12f1993ceddff30dc163a7d5008d79869c399d6d167321f97","integrity":"sha256-ZUIi3r6AGLEvGZPO3f8w3BY6fVAI15hpw5nW0WcyH5c="},"font-awesome/fa-brands-400-9158ee2ef88ea648444ba1c9fcea310baa1e5e4e5fe86e338dcd29fcb081cfc7.eot":{"logical_path":"font-awesome/fa-brands-400.eot","mtime":"2018-11-08T20:34:37+01:00","size":126428,"digest":"9158ee2ef88ea648444ba1c9fcea310baa1e5e4e5fe86e338dcd29fcb081cfc7","integrity":"sha256-kVjuLviOpkhES6HJ/OoxC6oeXk5f6G4zjc0p/LCBz8c="},"font-awesome/fa-regular-400-169416887c9d3c310bf02a12eaf82269d4cf77b16af2e91745b1c152bba0061d.eot":{"logical_path":"font-awesome/fa-regular-400.eot","mtime":"2018-11-08T20:34:37+01:00","size":40460,"digest":"169416887c9d3c310bf02a12eaf82269d4cf77b16af2e91745b1c152bba0061d","integrity":"sha256-FpQWiHydPDEL8CoS6vgiadTPd7Fq8ukXRbHBUrugBh0="},"font-awesome/fa-solid-900-690be61fe58020511558ce4b04375178872629f6c737ed1b332aec65855fd937.eot":{"logical_path":"font-awesome/fa-solid-900.eot","mtime":"2018-11-08T20:34:37+01:00","size":197172,"digest":"690be61fe58020511558ce4b04375178872629f6c737ed1b332aec65855fd937","integrity":"sha256-aQvmH+WAIFEVWM5LBDdReIcmKfbHN+0bMyrsZYVf2Tc="},"font-awesome/fa-brands-400-7aadbc4ac7f80413de00052694c1a44e0b0dbf0e2d7f739c628b88b28bb72bfa.svg":{"logical_path":"font-awesome/fa-brands-400.svg","mtime":"2018-11-08T20:34:37+01:00","size":713576,"digest":"7aadbc4ac7f80413de00052694c1a44e0b0dbf0e2d7f739c628b88b28bb72bfa","integrity":"sha256-eq28Ssf4BBPeAAUmlMGkTgsNvw4tf3OcYouIsou3K/o="},"font-awesome/fa-regular-400-59dc408283c57a47d27b2a2852726f43db3285cab7e3d6297e8da7c901857f7b.svg":{"logical_path":"font-awesome/fa-regular-400.svg","mtime":"2018-11-08T20:34:37+01:00","size":140249,"digest":"59dc408283c57a47d27b2a2852726f43db3285cab7e3d6297e8da7c901857f7b","integrity":"sha256-WdxAgoPFekfSeyooUnJvQ9syhcq349Ypfo2nyQGFf3s="},"font-awesome/fa-solid-900-22f6af77ffeeb267c5270fa1e50681ae01a9a19f8e9ef976798e0196c941ade6.svg":{"logical_path":"font-awesome/fa-solid-900.svg","mtime":"2018-11-08T20:34:37+01:00","size":746673,"digest":"22f6af77ffeeb267c5270fa1e50681ae01a9a19f8e9ef976798e0196c941ade6","integrity":"sha256-Ivavd//usmfFJw+h5QaBrgGpoZ+Onvl2eY4BlslBreY="},"font-awesome/fa-brands-400-dbd08d025602b79ce71910b2a68577959cbf2ef02fc664e243bf50277754fdfc.ttf":{"logical_path":"font-awesome/fa-brands-400.ttf","mtime":"2018-11-08T20:34:37+01:00","size":126192,"digest":"dbd08d025602b79ce71910b2a68577959cbf2ef02fc664e243bf50277754fdfc","integrity":"sha256-29CNAlYCt5znGRCypoV3lZy/LvAvxmTiQ79QJ3dU/fw="},"font-awesome/fa-regular-400-ecb5719eb6408359d91fd2530646064a3f251aed691fd48277289cc8d6d53dfa.ttf":{"logical_path":"font-awesome/fa-regular-400.ttf","mtime":"2018-11-08T20:34:37+01:00","size":40232,"digest":"ecb5719eb6408359d91fd2530646064a3f251aed691fd48277289cc8d6d53dfa","integrity":"sha256-7LVxnrZAg1nZH9JTBkYGSj8lGu1pH9SCdyicyNbVPfo="},"font-awesome/fa-solid-900-b97adad7ece9792af4122ae88103cad8fab54558a529c4ba79b5224c2b02ebe9.ttf":{"logical_path":"font-awesome/fa-solid-900.ttf","mtime":"2018-11-08T20:34:37+01:00","size":196952,"digest":"b97adad7ece9792af4122ae88103cad8fab54558a529c4ba79b5224c2b02ebe9","integrity":"sha256-uXra1+zpeSr0EirogQPK2Pq1RVilKcS6ebUiTCsC6+k="},"font-awesome/fa-brands-400-ca441c07992a7160e4d2622e78f8970c9b92f176694c8dc07592326496a801d6.woff":{"logical_path":"font-awesome/fa-brands-400.woff","mtime":"2018-11-08T20:34:37+01:00","size":81612,"digest":"ca441c07992a7160e4d2622e78f8970c9b92f176694c8dc07592326496a801d6","integrity":"sha256-ykQcB5kqcWDk0mIuePiXDJuS8XZpTI3AdZIyZJaoAdY="},"font-awesome/fa-regular-400-f101b8f70e36be2e9004222875e9fd45b263f72769c68e25e3c7525d3871728b.woff":{"logical_path":"font-awesome/fa-regular-400.woff","mtime":"2018-11-08T20:34:37+01:00","size":18112,"digest":"f101b8f70e36be2e9004222875e9fd45b263f72769c68e25e3c7525d3871728b","integrity":"sha256-8QG49w42vi6QBCIoden9RbJj9ydpxo4l48dSXThxcos="},"font-awesome/fa-solid-900-8fb19633f125ca466a45da9e4cf291d8b9519dd74c214f99dde835ef83f3ab96.woff":{"logical_path":"font-awesome/fa-solid-900.woff","mtime":"2018-11-08T20:34:37+01:00","size":95436,"digest":"8fb19633f125ca466a45da9e4cf291d8b9519dd74c214f99dde835ef83f3ab96","integrity":"sha256-j7GWM/ElykZqRdqeTPKR2LlRnddMIU+Z3eg174Pzq5Y="},"font-awesome/fa-brands-400-05dbc51654b96590d176c27efbcef2cf4ac0497499a9f28b731b73eea399070c.woff2":{"logical_path":"font-awesome/fa-brands-400.woff2","mtime":"2018-11-08T20:34:37+01:00","size":69608,"digest":"05dbc51654b96590d176c27efbcef2cf4ac0497499a9f28b731b73eea399070c","integrity":"sha256-BdvFFlS5ZZDRdsJ++87yz0rASXSZqfKLcxtz7qOZBww="},"font-awesome/fa-regular-400-92ba7bfaa43a35c94353e96860d99376313ee9b5fce6124d4e64067280f9a841.woff2":{"logical_path":"font-awesome/fa-regular-400.woff2","mtime":"2018-11-08T20:34:37+01:00","size":14844,"digest":"92ba7bfaa43a35c94353e96860d99376313ee9b5fce6124d4e64067280f9a841","integrity":"sha256-krp7+qQ6NclDU+loYNmTdjE+6bX85hJNTmQGcoD5qEE="},"font-awesome/fa-solid-900-7798165ee5a3c6809310d8261dcbe7c8d0c12d795b7b09a71af3eb86ec8f33f2.woff2":{"logical_path":"font-awesome/fa-solid-900.woff2","mtime":"2018-11-08T20:34:37+01:00","size":73852,"digest":"7798165ee5a3c6809310d8261dcbe7c8d0c12d795b7b09a71af3eb86ec8f33f2","integrity":"sha256-d5gWXuWjxoCTENgmHcvnyNDBLXlbewmnGvPrhuyPM/I="},"agendadescommuns-0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33.png":{"logical_path":"agendadescommuns.png","mtime":"2018-03-01T22:17:10+01:00","size":2760,"digest":"0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33","integrity":"sha256-ABe+9T9iYcs7+VLUt4DGQwc2lxSy4eLU659p39mGqzM="},"alert-762ace9479328243a44061346b64c4d6b997e963c68dfc6bddd9e4d241192906.png":{"logical_path":"alert.png","mtime":"2014-07-04T14:08:56+02:00","size":47876,"digest":"762ace9479328243a44061346b64c4d6b997e963c68dfc6bddd9e4d241192906","integrity":"sha256-dirOlHkygkOkQGE0a2TE1rmX6WPGjfxr3dnk0kEZKQY="},"baby_gnu_adl-463a81820aa2d4ffd8e7210dbce1a19ffcac67ef362aa7b092280c6f95c903fc.png":{"logical_path":"baby_gnu_adl.png","mtime":"2018-03-01T22:17:10+01:00","size":7411,"digest":"463a81820aa2d4ffd8e7210dbce1a19ffcac67ef362aa7b092280c6f95c903fc","integrity":"sha256-RjqBggqi1P/Y5yENvOGhn/ysZ+82KqewkigMb5XJA/w="},"baby_gnu_adl-97251005d3225cf1d58b8c497d6b7905dbc9560cc8acd50118fcce60d0a2679e.svg":{"logical_path":"baby_gnu_adl.svg","mtime":"2016-09-11T17:42:49+02:00","size":109635,"digest":"97251005d3225cf1d58b8c497d6b7905dbc9560cc8acd50118fcce60d0a2679e","integrity":"sha256-lyUQBdMiXPHVi4xJfWt5BdvJVgzIrNUBGPzOYNCiZ54="},"communs-0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33.png":{"logical_path":"communs.png","mtime":"2018-03-01T22:17:10+01:00","size":2760,"digest":"0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33","integrity":"sha256-ABe+9T9iYcs7+VLUt4DGQwc2lxSy4eLU659p39mGqzM="},"lef-small-93285d531af463f877951d63fe844a6e9600b782c2c81f78723b730072fa942e.png":{"logical_path":"lef-small.png","mtime":"2018-03-01T22:17:10+01:00","size":1059,"digest":"93285d531af463f877951d63fe844a6e9600b782c2c81f78723b730072fa942e","integrity":"sha256-kyhdUxr0Y/h3lR1j/oRKbpYAt4LCyB94cjtzAHL6lC4="},"lef-15f93c1dccd4849a5e30613a3303013292a76cc4997877e626f123fe9afc2f75.png":{"logical_path":"lef.png","mtime":"2018-03-01T22:17:10+01:00","size":7377,"digest":"15f93c1dccd4849a5e30613a3303013292a76cc4997877e626f123fe9afc2f75","integrity":"sha256-Ffk8HczUhJpeMGE6MwMBMpKnbMSZeHfmJvEj/pr8L3U="},"priorite-logiciel-libre-je-soutiens-april_2_m-6442e454e96ed45cc1ebc40673a6c50bd286b9c28ea6a8b58572e94f7d6459fc.png":{"logical_path":"priorite-logiciel-libre-je-soutiens-april_2_m.png","mtime":"2018-07-15T15:58:42+02:00","size":16952,"digest":"6442e454e96ed45cc1ebc40673a6c50bd286b9c28ea6a8b58572e94f7d6459fc","integrity":"sha256-ZELkVOlu1FzB68QGc6bFC9KGucKOpqi1hXLpT31kWfw="},"regions/CA-QC-70699e6a6e25c69040a3f1548b0afd829c4903ccca2760b6c10f49cc87d5d174.png":{"logical_path":"regions/CA-QC.png","mtime":"2018-03-01T22:18:39+01:00","size":469,"digest":"70699e6a6e25c69040a3f1548b0afd829c4903ccca2760b6c10f49cc87d5d174","integrity":"sha256-cGmeam4lxpBAo/FUiwr9gpxJA8zKJ2C2wQ9JzIfV0XQ="},"team-65c86021cf8a1154493664094aeafcbe3e5aa13dc675bb8ef34b220481db98fa.png":{"logical_path":"team.png","mtime":"2018-03-01T22:17:10+01:00","size":3586,"digest":"65c86021cf8a1154493664094aeafcbe3e5aa13dc675bb8ef34b220481db98fa","integrity":"sha256-ZchgIc+KEVRJNmQJSur8vj5aoT3GdbuO80siBIHbmPo="},"application-5605ff641c9b98cb2f64836cdef985707cf326fd9b11541ef1ef2daad21c4c08.js":{"logical_path":"application.js","mtime":"2018-11-08T20:34:41+01:00","size":2001878,"digest":"5605ff641c9b98cb2f64836cdef985707cf326fd9b11541ef1ef2daad21c4c08","integrity":"sha256-VgX/ZBybmMsvZINs3vmFcHzzJv2bEVQe8e8tqtIcTAg="},"application-3f59179b0c2a06bb661d73a1de82e1f5c30bdb9d70ad1ec1ee9f383e4b4d373f.css":{"logical_path":"application.css","mtime":"2018-11-08T20:34:37+01:00","size":166238,"digest":"3f59179b0c2a06bb661d73a1de82e1f5c30bdb9d70ad1ec1ee9f383e4b4d373f","integrity":"sha256-P1kXmwwqBrtmHXOh3oLh9cML251wrR7B7p84PktNNz8="},"flags/4x3/ad-f67c4e5a3f709ead53c04d9ff35614e6c67517c3d3289170f7a317390f661497.svg":{"logical_path":"flags/4x3/ad.svg","mtime":"2018-04-02T14:38:31+02:00","size":33972,"digest":"f67c4e5a3f709ead53c04d9ff35614e6c67517c3d3289170f7a317390f661497","integrity":"sha256-9nxOWj9wnq1TwE2f81YU5sZ1F8PTKJFw96MXOQ9mFJc="},"flags/1x1/ad-a315836ec2c9dcc11ef9bfd8b18aa7ccfc2d31435cbf46a2c31930836076e09c.svg":{"logical_path":"flags/1x1/ad.svg","mtime":"2018-04-02T14:38:31+02:00","size":32745,"digest":"a315836ec2c9dcc11ef9bfd8b18aa7ccfc2d31435cbf46a2c31930836076e09c","integrity":"sha256-oxWDbsLJ3MEe+b/YsYqnzPwtMUNcv0aiwxkwg2B24Jw="},"flags/4x3/ae-7a3b3dc0f50b5310014cfbcc8200a5f1ce568127bf43452e40e8158e0cff2d2e.svg":{"logical_path":"flags/4x3/ae.svg","mtime":"2018-04-02T14:38:31+02:00","size":257,"digest":"7a3b3dc0f50b5310014cfbcc8200a5f1ce568127bf43452e40e8158e0cff2d2e","integrity":"sha256-ejs9wPULUxABTPvMggCl8c5WgSe/Q0UuQOgVjgz/LS4="},"flags/1x1/ae-bcdd9a4da09598785f3e31db4ff431e22687b2ead18209a3e615600655068cd5.svg":{"logical_path":"flags/1x1/ae.svg","mtime":"2018-04-02T14:38:31+02:00","size":265,"digest":"bcdd9a4da09598785f3e31db4ff431e22687b2ead18209a3e615600655068cd5","integrity":"sha256-vN2aTaCVmHhfPjHbT/Qx4iaHsurRggmj5hVgBlUGjNU="},"flags/4x3/af-01601b521fa86582e32c39eed8c88480afec1f801b6de929b52ed7e49da47260.svg":{"logical_path":"flags/4x3/af.svg","mtime":"2018-04-02T14:38:31+02:00","size":21279,"digest":"01601b521fa86582e32c39eed8c88480afec1f801b6de929b52ed7e49da47260","integrity":"sha256-AWAbUh+oZYLjLDnu2MiEgK/sH4AbbekptS7X5J2kcmA="},"flags/1x1/af-6332cf754a5e2866db631923e1f7cfc52a0a554d32b97bcf19f8263819e4ca7d.svg":{"logical_path":"flags/1x1/af.svg","mtime":"2018-04-02T14:38:31+02:00","size":21145,"digest":"6332cf754a5e2866db631923e1f7cfc52a0a554d32b97bcf19f8263819e4ca7d","integrity":"sha256-YzLPdUpeKGbbYxkj4ffPxSoKVU0yuXvPGfgmOBnkyn0="},"flags/4x3/ag-cb6952d821bac7855231c2cb4d1c44f7c730f6b3621518ab20f30d2b9afe604b.svg":{"logical_path":"flags/4x3/ag.svg","mtime":"2018-04-02T14:38:31+02:00","size":748,"digest":"cb6952d821bac7855231c2cb4d1c44f7c730f6b3621518ab20f30d2b9afe604b","integrity":"sha256-y2lS2CG6x4VSMcLLTRxE98cw9rNiFRirIPMNK5r+YEs="},"flags/1x1/ag-14f7d9978487aaf4446b55167e85a711c48a13ff07edac175c172969a38650c4.svg":{"logical_path":"flags/1x1/ag.svg","mtime":"2018-04-02T14:38:31+02:00","size":764,"digest":"14f7d9978487aaf4446b55167e85a711c48a13ff07edac175c172969a38650c4","integrity":"sha256-FPfZl4SHqvREa1UWfoWnEcSKE/8H7awXXBcpaaOGUMQ="},"flags/4x3/ai-f07c6cc0646fdfa441b9a506e1d46e8dce0d97b37222292e9c6733c995dc89bc.svg":{"logical_path":"flags/4x3/ai.svg","mtime":"2018-04-02T14:38:31+02:00","size":42208,"digest":"f07c6cc0646fdfa441b9a506e1d46e8dce0d97b37222292e9c6733c995dc89bc","integrity":"sha256-8HxswGRv36RBuaUG4dRujc4Nl7NyIikunGczyZXcibw="},"flags/1x1/ai-95099e544de29bcea3ba735de535823f2e19aeb4043e82dbc1d9862f9262b810.svg":{"logical_path":"flags/1x1/ai.svg","mtime":"2018-04-02T14:38:31+02:00","size":47975,"digest":"95099e544de29bcea3ba735de535823f2e19aeb4043e82dbc1d9862f9262b810","integrity":"sha256-lQmeVE3im86junNd5TWCPy4ZrrQEPoLbwdmGL5JiuBA="},"flags/4x3/al-9b997f2720de861e1b0ccec8ddf42a2890795ebf50817f9223e1ceba712c9b03.svg":{"logical_path":"flags/4x3/al.svg","mtime":"2018-04-02T14:38:31+02:00","size":3221,"digest":"9b997f2720de861e1b0ccec8ddf42a2890795ebf50817f9223e1ceba712c9b03","integrity":"sha256-m5l/JyDehh4bDM7I3fQqKJB5Xr9QgX+SI+HOunEsmwM="},"flags/1x1/al-94852d2711fc23abf3423534b9edb950a0c6aabf1d2d98bf2643f3c7dadfac09.svg":{"logical_path":"flags/1x1/al.svg","mtime":"2018-04-02T14:38:31+02:00","size":3228,"digest":"94852d2711fc23abf3423534b9edb950a0c6aabf1d2d98bf2643f3c7dadfac09","integrity":"sha256-lIUtJxH8I6vzQjU0ue25UKDGqr8dLZi/JkPzx9rfrAk="},"flags/4x3/am-85a199ec21d1af74a256335ead0c1e38592bb603d8da81feda4678945e9e00e6.svg":{"logical_path":"flags/4x3/am.svg","mtime":"2018-04-02T14:38:31+02:00","size":226,"digest":"85a199ec21d1af74a256335ead0c1e38592bb603d8da81feda4678945e9e00e6","integrity":"sha256-haGZ7CHRr3SiVjNerQweOFkrtgPY2oH+2kZ4lF6eAOY="},"flags/1x1/am-869391b014ac299924d30777d72a4aba430752177290a90a1fc3255a7ad79ee7.svg":{"logical_path":"flags/1x1/am.svg","mtime":"2018-04-02T14:38:31+02:00","size":234,"digest":"869391b014ac299924d30777d72a4aba430752177290a90a1fc3255a7ad79ee7","integrity":"sha256-hpORsBSsKZkk0wd31ypKukMHUhdykKkKH8MlWnrXnuc="},"flags/4x3/ao-29224a61bf632826d530cda55d87c2615884bd2c2c3a322036ed468e34d85c75.svg":{"logical_path":"flags/4x3/ao.svg","mtime":"2018-04-02T14:38:31+02:00","size":1608,"digest":"29224a61bf632826d530cda55d87c2615884bd2c2c3a322036ed468e34d85c75","integrity":"sha256-KSJKYb9jKCbVMM2lXYfCYViEvSwsOjIgNu1GjjTYXHU="},"flags/1x1/ao-048eacbc862fe1868cf0ec73457b70a8b49a598c80dea049856f0e1fd6fec83e.svg":{"logical_path":"flags/1x1/ao.svg","mtime":"2018-04-02T14:38:31+02:00","size":1608,"digest":"048eacbc862fe1868cf0ec73457b70a8b49a598c80dea049856f0e1fd6fec83e","integrity":"sha256-BI6svIYv4YaM8OxzRXtwqLSaWYyA3qBJhW8OH9b+yD4="},"flags/4x3/aq-b401a776d2f1a7944170114f0aeeceab5e1d962df3de7ed1eff47d96824b73fd.svg":{"logical_path":"flags/4x3/aq.svg","mtime":"2018-04-02T14:38:31+02:00","size":2974,"digest":"b401a776d2f1a7944170114f0aeeceab5e1d962df3de7ed1eff47d96824b73fd","integrity":"sha256-tAGndtLxp5RBcBFPCu7Oq14dli3z3n7R7/R9loJLc/0="},"flags/1x1/aq-a8d7ce9bfb860b6e2b58608b50bf2cafc5220c77f6d049ab7770891f64334531.svg":{"logical_path":"flags/1x1/aq.svg","mtime":"2018-04-02T14:38:31+02:00","size":3183,"digest":"a8d7ce9bfb860b6e2b58608b50bf2cafc5220c77f6d049ab7770891f64334531","integrity":"sha256-qNfOm/uGC24rWGCLUL8sr8UiDHf20Emrd3CJH2QzRTE="},"flags/4x3/ar-bf73475bb707100874dec538ce4b7e1b5afc4ed67dc50a8a800ee519e51cc826.svg":{"logical_path":"flags/4x3/ar.svg","mtime":"2018-04-02T14:38:31+02:00","size":3430,"digest":"bf73475bb707100874dec538ce4b7e1b5afc4ed67dc50a8a800ee519e51cc826","integrity":"sha256-v3NHW7cHEAh03sU4zkt+G1r8TtZ9xQqKgA7lGeUcyCY="},"flags/1x1/ar-fc6582cc6d3ef0782805d8497ee77ab2d836c53422e91007e48f81a4a9fa2e60.svg":{"logical_path":"flags/1x1/ar.svg","mtime":"2018-04-02T14:38:31+02:00","size":3503,"digest":"fc6582cc6d3ef0782805d8497ee77ab2d836c53422e91007e48f81a4a9fa2e60","integrity":"sha256-/GWCzG0+8HgoBdhJfud6stg2xTQi6RAH5I+BpKn6LmA="},"flags/4x3/as-79d395190345206ea03475b67b44638e1111562411504b60646483c9c0b0f7d1.svg":{"logical_path":"flags/4x3/as.svg","mtime":"2018-04-02T14:38:31+02:00","size":8098,"digest":"79d395190345206ea03475b67b44638e1111562411504b60646483c9c0b0f7d1","integrity":"sha256-edOVGQNFIG6gNHW2e0RjjhERViQRUEtgZGSDycCw99E="},"flags/1x1/as-04f0db77c5d8610a55c69508b226a7c338924f8cf7d6577d5d6590e85ee57183.svg":{"logical_path":"flags/1x1/as.svg","mtime":"2018-04-02T14:38:31+02:00","size":7845,"digest":"04f0db77c5d8610a55c69508b226a7c338924f8cf7d6577d5d6590e85ee57183","integrity":"sha256-BPDbd8XYYQpVxpUIsianwziST4z31ld9XWWQ6F7lcYM="},"flags/4x3/at-3d197de8f1f0096a2b0d440b6fc7d80821585a6637e646c05487a87718bf6b5f.svg":{"logical_path":"flags/4x3/at.svg","mtime":"2018-04-02T14:38:31+02:00","size":243,"digest":"3d197de8f1f0096a2b0d440b6fc7d80821585a6637e646c05487a87718bf6b5f","integrity":"sha256-PRl96PHwCWorDUQLb8fYCCFYWmY35kbAVIeodxi/a18="},"flags/1x1/at-ec4db9aeac793827ac7c8e40c072a76f7675010058cc8c8dfd3a86bb5acfa6b8.svg":{"logical_path":"flags/1x1/at.svg","mtime":"2018-04-02T14:38:31+02:00","size":245,"digest":"ec4db9aeac793827ac7c8e40c072a76f7675010058cc8c8dfd3a86bb5acfa6b8","integrity":"sha256-7E25rqx5OCesfI5AwHKnb3Z1AQBYzIyN/TqGu1rPprg="},"flags/4x3/au-126fa2500a315287a5f847f4d958bb929f11da9b39f35912cc440c0fcffb8b12.svg":{"logical_path":"flags/4x3/au.svg","mtime":"2018-04-02T14:38:31+02:00","size":1335,"digest":"126fa2500a315287a5f847f4d958bb929f11da9b39f35912cc440c0fcffb8b12","integrity":"sha256-Em+iUAoxUoel+Ef02Vi7kp8R2ps581kSzEQMD8/7ixI="},"flags/1x1/au-bf990dcc957c9f74eb908e8ffa733f1731277bf6ec8b7301a6ea1ed92b59cc4b.svg":{"logical_path":"flags/1x1/au.svg","mtime":"2018-04-02T14:38:31+02:00","size":1320,"digest":"bf990dcc957c9f74eb908e8ffa733f1731277bf6ec8b7301a6ea1ed92b59cc4b","integrity":"sha256-v5kNzJV8n3TrkI6P+nM/FzEne/bsi3MBpuoe2StZzEs="},"flags/4x3/aw-4524643452423e95f3b0dbe6216b059a9e52126b34c73ae4b3c17b682f893aa6.svg":{"logical_path":"flags/4x3/aw.svg","mtime":"2018-04-02T14:38:31+02:00","size":9948,"digest":"4524643452423e95f3b0dbe6216b059a9e52126b34c73ae4b3c17b682f893aa6","integrity":"sha256-RSRkNFJCPpXzsNvmIWsFmp5SEms0xzrks8F7aC+JOqY="},"flags/1x1/aw-f7002bceef55486a442bf6bf433be0c60d0b15b2aa548b81c524c67ccf0565a8.svg":{"logical_path":"flags/1x1/aw.svg","mtime":"2018-04-02T14:38:31+02:00","size":12088,"digest":"f7002bceef55486a442bf6bf433be0c60d0b15b2aa548b81c524c67ccf0565a8","integrity":"sha256-9wArzu9VSGpEK/a/Qzvgxg0LFbKqVIuBxSTGfM8FZag="},"flags/4x3/ax-c297e0eb654ca62e58f5eb3abb70df9f245e4919490f29bd0f1d49c4fe052d90.svg":{"logical_path":"flags/4x3/ax.svg","mtime":"2018-04-02T14:38:31+02:00","size":556,"digest":"c297e0eb654ca62e58f5eb3abb70df9f245e4919490f29bd0f1d49c4fe052d90","integrity":"sha256-wpfg62VMpi5Y9es6u3DfnyReSRlJDym9Dx1JxP4FLZA="},"flags/1x1/ax-a1245689ecbf321c0a9e556bba17f3c9f2aeb8b1f63d14fcb591d76a87f12880.svg":{"logical_path":"flags/1x1/ax.svg","mtime":"2018-04-02T14:38:31+02:00","size":544,"digest":"a1245689ecbf321c0a9e556bba17f3c9f2aeb8b1f63d14fcb591d76a87f12880","integrity":"sha256-oSRWiey/MhwKnlVruhfzyfKuuLH2PRT8tZHXaofxKIA="},"flags/4x3/az-132e68d5e0386d3b9fa05b4288a0fd66f1414e2bc7af6b9d437b6935a7dfa00c.svg":{"logical_path":"flags/4x3/az.svg","mtime":"2018-04-02T14:38:31+02:00","size":515,"digest":"132e68d5e0386d3b9fa05b4288a0fd66f1414e2bc7af6b9d437b6935a7dfa00c","integrity":"sha256-Ey5o1eA4bTufoFtCiKD9ZvFBTivHr2udQ3tpNaffoAw="},"flags/1x1/az-3990c0526b933bd650285d821f2b93e432a73ba709869549b8ef75b051d3bd2d.svg":{"logical_path":"flags/1x1/az.svg","mtime":"2018-04-02T14:38:31+02:00","size":501,"digest":"3990c0526b933bd650285d821f2b93e432a73ba709869549b8ef75b051d3bd2d","integrity":"sha256-OZDAUmuTO9ZQKF2CHyuT5DKnO6cJhpVJuO91sFHTvS0="},"flags/4x3/ba-89dd0c1600d94741de7d667a487310193a0c48c4cf1a5159c3bf9dd37d65d2b5.svg":{"logical_path":"flags/4x3/ba.svg","mtime":"2018-04-02T14:38:31+02:00","size":1306,"digest":"89dd0c1600d94741de7d667a487310193a0c48c4cf1a5159c3bf9dd37d65d2b5","integrity":"sha256-id0MFgDZR0HefWZ6SHMQGToMSMTPGlFZw7+d031l0rU="},"flags/1x1/ba-2dbe90eb12b937f4a9ae8db95760930a3e318f4ce5829ac05e292ead698bae5a.svg":{"logical_path":"flags/1x1/ba.svg","mtime":"2018-04-02T14:38:31+02:00","size":1247,"digest":"2dbe90eb12b937f4a9ae8db95760930a3e318f4ce5829ac05e292ead698bae5a","integrity":"sha256-Lb6Q6xK5N/Spro25V2CTCj4xj0zlgprAXikurWmLrlo="},"flags/4x3/bb-16f8249ff958bfbc18fb1f23a5282000347bffdb5769ac620966185b1dcb57f6.svg":{"logical_path":"flags/4x3/bb.svg","mtime":"2018-04-02T14:38:31+02:00","size":613,"digest":"16f8249ff958bfbc18fb1f23a5282000347bffdb5769ac620966185b1dcb57f6","integrity":"sha256-Fvgkn/lYv7wY+x8jpSggADR7/9tXaaxiCWYYWx3LV/Y="},"flags/1x1/bb-fae92d8426196ae24ffa561aca72613fae651a5e9c0bcda63ecc877add05b060.svg":{"logical_path":"flags/1x1/bb.svg","mtime":"2018-04-02T14:38:31+02:00","size":616,"digest":"fae92d8426196ae24ffa561aca72613fae651a5e9c0bcda63ecc877add05b060","integrity":"sha256-+ukthCYZauJP+lYaynJhP65lGl6cC82mPsyHet0FsGA="},"flags/4x3/bd-8dac0547e73ee25a04148a3f0fd026a90e56c23b7e92921565d4263050ba77a6.svg":{"logical_path":"flags/4x3/bd.svg","mtime":"2018-04-02T14:38:31+02:00","size":193,"digest":"8dac0547e73ee25a04148a3f0fd026a90e56c23b7e92921565d4263050ba77a6","integrity":"sha256-jawFR+c+4loEFIo/D9AmqQ5Wwjt+kpIVZdQmMFC6d6Y="},"flags/1x1/bd-ecc3c3e87d4cc59c8350f2b4d7dca8f5cf46bdb26319db0ee80b744482af50c1.svg":{"logical_path":"flags/1x1/bd.svg","mtime":"2018-04-02T14:38:31+02:00","size":195,"digest":"ecc3c3e87d4cc59c8350f2b4d7dca8f5cf46bdb26319db0ee80b744482af50c1","integrity":"sha256-7MPD6H1MxZyDUPK019yo9c9GvbJjGdsO6At0RIKvUME="},"flags/4x3/be-a180ca68521188017bb5367f19e503d9599d6cbecd61bf054e59a57f58e648ae.svg":{"logical_path":"flags/4x3/be.svg","mtime":"2018-04-02T14:38:31+02:00","size":293,"digest":"a180ca68521188017bb5367f19e503d9599d6cbecd61bf054e59a57f58e648ae","integrity":"sha256-oYDKaFIRiAF7tTZ/GeUD2VmdbL7NYb8FTlmlf1jmSK4="},"flags/1x1/be-c8d4194137bd01955285b329dfdf996490d16c3116a92ce2f322e354b6d7494e.svg":{"logical_path":"flags/1x1/be.svg","mtime":"2018-04-02T14:38:31+02:00","size":293,"digest":"c8d4194137bd01955285b329dfdf996490d16c3116a92ce2f322e354b6d7494e","integrity":"sha256-yNQZQTe9AZVShbMp39+ZZJDRbDEWqSzi8yLjVLbXSU4="},"flags/4x3/bf-6b214936ef89f19133d4a84e99cdf0cfdb99d6409f2f373f6d18694423013313.svg":{"logical_path":"flags/4x3/bf.svg","mtime":"2018-04-02T14:38:31+02:00","size":360,"digest":"6b214936ef89f19133d4a84e99cdf0cfdb99d6409f2f373f6d18694423013313","integrity":"sha256-ayFJNu+J8ZEz1KhOmc3wz9uZ1kCfLzc/bRhpRCMBMxM="},"flags/1x1/bf-04c7d61aa314adab5a41bd79d77aa780c10136bb6b8f4c62423e61e23e3851ee.svg":{"logical_path":"flags/1x1/bf.svg","mtime":"2018-04-02T14:38:31+02:00","size":386,"digest":"04c7d61aa314adab5a41bd79d77aa780c10136bb6b8f4c62423e61e23e3851ee","integrity":"sha256-BMfWGqMUrataQb1513qngMEBNrtrj0xiQj5h4j44Ue4="},"flags/4x3/bg-dd3985ba746942b0e65bc52a280cc4d28fb24fd2c7d9e22ac9afd2d75ee7bfc4.svg":{"logical_path":"flags/4x3/bg.svg","mtime":"2018-04-02T14:38:31+02:00","size":289,"digest":"dd3985ba746942b0e65bc52a280cc4d28fb24fd2c7d9e22ac9afd2d75ee7bfc4","integrity":"sha256-3TmFunRpQrDmW8UqKAzE0o+yT9LH2eIqya/S117nv8Q="},"flags/1x1/bg-f59294a736d5bdc0f102b58d70dbe45d02bd92df822820bf95336840f75a0746.svg":{"logical_path":"flags/1x1/bg.svg","mtime":"2018-04-02T14:38:31+02:00","size":297,"digest":"f59294a736d5bdc0f102b58d70dbe45d02bd92df822820bf95336840f75a0746","integrity":"sha256-9ZKUpzbVvcDxArWNcNvkXQK9kt+CKCC/lTNoQPdaB0Y="},"flags/4x3/bh-7c82c4a6ba963172c6c1b4423f39a0ebe9c999449cc7dd87018917943db4735c.svg":{"logical_path":"flags/4x3/bh.svg","mtime":"2018-04-02T14:38:31+02:00","size":546,"digest":"7c82c4a6ba963172c6c1b4423f39a0ebe9c999449cc7dd87018917943db4735c","integrity":"sha256-fILEprqWMXLGwbRCPzmg6+nJmUScx92HAYkXlD20c1w="},"flags/1x1/bh-6893aac3e55c6480e9dac0c023ec2179f6c12a0da82a0bc2717134384c097e88.svg":{"logical_path":"flags/1x1/bh.svg","mtime":"2018-04-02T14:38:31+02:00","size":572,"digest":"6893aac3e55c6480e9dac0c023ec2179f6c12a0da82a0bc2717134384c097e88","integrity":"sha256-aJOqw+VcZIDp2sDAI+whefbBKg2oKgvCcXE0OEwJfog="},"flags/4x3/bi-4fcd0116f7f93c0564c6955806f3c3563d0ea7334ae406f29a897255845c923c.svg":{"logical_path":"flags/4x3/bi.svg","mtime":"2018-04-02T14:38:31+02:00","size":1074,"digest":"4fcd0116f7f93c0564c6955806f3c3563d0ea7334ae406f29a897255845c923c","integrity":"sha256-T80BFvf5PAVkxpVYBvPDVj0OpzNK5AbymolyVYRckjw="},"flags/1x1/bi-91c34eb431b26be67852782a0b93e1d7d577a925454d6c8cea00a0d872d2de8a.svg":{"logical_path":"flags/1x1/bi.svg","mtime":"2018-04-02T14:38:31+02:00","size":1048,"digest":"91c34eb431b26be67852782a0b93e1d7d577a925454d6c8cea00a0d872d2de8a","integrity":"sha256-kcNOtDGya+Z4UngqC5Ph19V3qSVFTWyM6gCg2HLS3oo="},"flags/4x3/bj-63bddb4268f5f8c2ed867041bcf058fb18fcd9d1e0799e01286fca2d5e961c7f.svg":{"logical_path":"flags/4x3/bj.svg","mtime":"2018-04-02T14:38:31+02:00","size":499,"digest":"63bddb4268f5f8c2ed867041bcf058fb18fcd9d1e0799e01286fca2d5e961c7f","integrity":"sha256-Y73bQmj1+MLthnBBvPBY+xj82dHgeZ4BKG/KLV6WHH8="},"flags/1x1/bj-e2606c5a8498c474a6b6708626b88108fcb73840344766566dc56f804279cdfc.svg":{"logical_path":"flags/1x1/bj.svg","mtime":"2018-04-02T14:38:31+02:00","size":502,"digest":"e2606c5a8498c474a6b6708626b88108fcb73840344766566dc56f804279cdfc","integrity":"sha256-4mBsWoSYxHSmtnCGJriBCPy3OEA0R2ZWbcVvgEJ5zfw="},"flags/4x3/bl-824a7265f48789d5e1ad5c5b0042a13a7d2d4357210e5bd8124fca19931e8c74.svg":{"logical_path":"flags/4x3/bl.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"824a7265f48789d5e1ad5c5b0042a13a7d2d4357210e5bd8124fca19931e8c74","integrity":"sha256-gkpyZfSHidXhrVxbAEKhOn0tQ1chDlvYEk/KGZMejHQ="},"flags/1x1/bl-ba6a7881b0ca72ac57aee4d823ae611ab4ad24a938ee9e01a7a4d5ae04cfccf6.svg":{"logical_path":"flags/1x1/bl.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"ba6a7881b0ca72ac57aee4d823ae611ab4ad24a938ee9e01a7a4d5ae04cfccf6","integrity":"sha256-ump4gbDKcqxXruTYI65hGrStJKk47p4Bp6TVrgTPzPY="},"flags/4x3/bm-2e2f09e5a4edf4b18afff581656f50b0b4c37783db29591ff00ca768f7f755bc.svg":{"logical_path":"flags/4x3/bm.svg","mtime":"2018-04-02T14:38:31+02:00","size":22650,"digest":"2e2f09e5a4edf4b18afff581656f50b0b4c37783db29591ff00ca768f7f755bc","integrity":"sha256-Li8J5aTt9LGK//WBZW9QsLTDd4PbKVkf8AynaPf3Vbw="},"flags/1x1/bm-f553f953f8784ea4d67a5197f5d808a67747eb8a1cb56990d6838e690090d2d6.svg":{"logical_path":"flags/1x1/bm.svg","mtime":"2018-04-02T14:38:31+02:00","size":22337,"digest":"f553f953f8784ea4d67a5197f5d808a67747eb8a1cb56990d6838e690090d2d6","integrity":"sha256-9VP5U/h4TqTWelGX9dgIpndH64octWmQ1oOOaQCQ0tY="},"flags/4x3/bn-bcf9967c12eb6397346cb5b960ae92efa41f314f780d09a3d7c81f5dacac4180.svg":{"logical_path":"flags/4x3/bn.svg","mtime":"2018-04-02T14:38:31+02:00","size":14387,"digest":"bcf9967c12eb6397346cb5b960ae92efa41f314f780d09a3d7c81f5dacac4180","integrity":"sha256-vPmWfBLrY5c0bLW5YK6S76QfMU94DQmj18gfXaysQYA="},"flags/1x1/bn-1d1aad3fe9fd33ce922eba33c9ae6047a5646349239c20d1bc7307ec6d19a043.svg":{"logical_path":"flags/1x1/bn.svg","mtime":"2018-04-02T14:38:31+02:00","size":14521,"digest":"1d1aad3fe9fd33ce922eba33c9ae6047a5646349239c20d1bc7307ec6d19a043","integrity":"sha256-HRqtP+n9M86SLrozya5gR6VkY0kjnCDRvHMH7G0ZoEM="},"flags/4x3/bo-fa423f2bb4ab6e8e9dd399ad73781ea8d9cbafd30f1b7ee0bcecfb9e7b75581e.svg":{"logical_path":"flags/4x3/bo.svg","mtime":"2018-04-02T14:38:31+02:00","size":118272,"digest":"fa423f2bb4ab6e8e9dd399ad73781ea8d9cbafd30f1b7ee0bcecfb9e7b75581e","integrity":"sha256-+kI/K7Srbo6d05mtc3geqNnLr9MPG37gvOz7nnt1WB4="},"flags/1x1/bo-f5faa29e40191e0c76070ac1a1d2a1f2b18e9cd358b8a77cefaed8efc49a265e.svg":{"logical_path":"flags/1x1/bo.svg","mtime":"2018-04-02T14:38:31+02:00","size":119850,"digest":"f5faa29e40191e0c76070ac1a1d2a1f2b18e9cd358b8a77cefaed8efc49a265e","integrity":"sha256-9fqinkAZHgx2BwrBodKh8rGOnNNYuKd8767Y78SaJl4="},"flags/4x3/bq-493c92ab19204c3ad319e6caba021df050132b99bd57a8f9b74131b78229c29e.svg":{"logical_path":"flags/4x3/bq.svg","mtime":"2018-04-02T14:38:31+02:00","size":227,"digest":"493c92ab19204c3ad319e6caba021df050132b99bd57a8f9b74131b78229c29e","integrity":"sha256-STySqxkgTDrTGebKugId8FATK5m9V6j5t0Ext4Ipwp4="},"flags/1x1/bq-6e30bbeabc2aa097f657a411984b3c23278a8fcce2fc016b1cd6d2262f672d33.svg":{"logical_path":"flags/1x1/bq.svg","mtime":"2018-04-02T14:38:31+02:00","size":231,"digest":"6e30bbeabc2aa097f657a411984b3c23278a8fcce2fc016b1cd6d2262f672d33","integrity":"sha256-bjC76rwqoJf2V6QRmEs8IyeKj8zi/AFrHNbSJi9nLTM="},"flags/4x3/br-cf3ba80ec2c9fd4d3c845c3a3c43a2b9d81cf90707a2918789e8b1f596833e01.svg":{"logical_path":"flags/4x3/br.svg","mtime":"2018-04-02T14:38:31+02:00","size":8244,"digest":"cf3ba80ec2c9fd4d3c845c3a3c43a2b9d81cf90707a2918789e8b1f596833e01","integrity":"sha256-zzuoDsLJ/U08hFw6PEOiudgc+QcHopGHieix9ZaDPgE="},"flags/1x1/br-7bf4e4b31650ac25f0bc6c86eb87491a7e5a8eac13acccfcbde44346c88728f6.svg":{"logical_path":"flags/1x1/br.svg","mtime":"2018-04-02T14:38:31+02:00","size":7852,"digest":"7bf4e4b31650ac25f0bc6c86eb87491a7e5a8eac13acccfcbde44346c88728f6","integrity":"sha256-e/TksxZQrCXwvGyG64dJGn5ajqwTrMz8veRDRsiHKPY="},"flags/4x3/bs-69f60b5fea96b67dd939e597099994921bb3dc3bcf31b8dee7cc45be2885c836.svg":{"logical_path":"flags/4x3/bs.svg","mtime":"2018-04-02T14:38:31+02:00","size":549,"digest":"69f60b5fea96b67dd939e597099994921bb3dc3bcf31b8dee7cc45be2885c836","integrity":"sha256-afYLX+qWtn3ZOeWXCZmUkhuz3DvPMbje58xFviiFyDY="},"flags/1x1/bs-f5d6acf7ef7a240dc09ac88710fd77fd3494501104392db74d5c540d482f2262.svg":{"logical_path":"flags/1x1/bs.svg","mtime":"2018-04-02T14:38:31+02:00","size":571,"digest":"f5d6acf7ef7a240dc09ac88710fd77fd3494501104392db74d5c540d482f2262","integrity":"sha256-9das9+96JA3AmsiHEP13/TSUUBEEOS23TVxUDUgvImI="},"flags/4x3/bt-6c20b0c00e12d5898be0239a0c66ce775debd0bd536de56a271859a0285a039e.svg":{"logical_path":"flags/4x3/bt.svg","mtime":"2018-04-02T14:38:31+02:00","size":25345,"digest":"6c20b0c00e12d5898be0239a0c66ce775debd0bd536de56a271859a0285a039e","integrity":"sha256-bCCwwA4S1YmL4COaDGbOd13r0L1TbeVqJxhZoChaA54="},"flags/1x1/bt-58de3ca9438811ef1920e2f84c4ba4ce32d01069f4d197ab5d577de6acbe0c85.svg":{"logical_path":"flags/1x1/bt.svg","mtime":"2018-04-02T14:38:31+02:00","size":25172,"digest":"58de3ca9438811ef1920e2f84c4ba4ce32d01069f4d197ab5d577de6acbe0c85","integrity":"sha256-WN48qUOIEe8ZIOL4TEukzjLQEGn00ZerXVd95qy+DIU="},"flags/4x3/bv-ff173190fc339b3cb8b6e8235bc5e373853d7127fd94cbc32ac737e839aeb586.svg":{"logical_path":"flags/4x3/bv.svg","mtime":"2018-04-02T14:38:31+02:00","size":582,"digest":"ff173190fc339b3cb8b6e8235bc5e373853d7127fd94cbc32ac737e839aeb586","integrity":"sha256-/xcxkPwzmzy4tugjW8Xjc4U9cSf9lMvDKsc36DmutYY="},"flags/1x1/bv-59616ff1a722959064c83927ca2e49c1fce42a9b18e91b9ecbb74f62527aff43.svg":{"logical_path":"flags/1x1/bv.svg","mtime":"2018-04-02T14:38:31+02:00","size":585,"digest":"59616ff1a722959064c83927ca2e49c1fce42a9b18e91b9ecbb74f62527aff43","integrity":"sha256-WWFv8acilZBkyDknyi5JwfzkKpsY6Ruey7dPYlJ6/0M="},"flags/4x3/bw-4bb1d3131b88c65b5decc67f7b44903e931bca2fcac841942591c599f0cbb850.svg":{"logical_path":"flags/4x3/bw.svg","mtime":"2018-04-02T14:38:31+02:00","size":255,"digest":"4bb1d3131b88c65b5decc67f7b44903e931bca2fcac841942591c599f0cbb850","integrity":"sha256-S7HTExuIxltd7MZ/e0SQPpMbyi/KyEGUJZHFmfDLuFA="},"flags/1x1/bw-e08f50c0836ca5858aed7b0526aed6fb630da8dc6b6b96bd9a476af599dc89d6.svg":{"logical_path":"flags/1x1/bw.svg","mtime":"2018-04-02T14:38:31+02:00","size":257,"digest":"e08f50c0836ca5858aed7b0526aed6fb630da8dc6b6b96bd9a476af599dc89d6","integrity":"sha256-4I9QwINspYWK7XsFJq7W+2MNqNxra5a9mkdq9ZncidY="},"flags/4x3/by-324ac96bfbe075781c664be3b9e2ac6b4d2a46dd2b418ca0920284f64394c7d4.svg":{"logical_path":"flags/4x3/by.svg","mtime":"2018-04-02T14:38:31+02:00","size":5998,"digest":"324ac96bfbe075781c664be3b9e2ac6b4d2a46dd2b418ca0920284f64394c7d4","integrity":"sha256-MkrJa/vgdXgcZkvjueKsa00qRt0rQYygkgKE9kOUx9Q="},"flags/1x1/by-37b80e8bf7e51fef99a8307d6dffb04ee164790ceeafef606d516ca333e9488a.svg":{"logical_path":"flags/1x1/by.svg","mtime":"2018-04-02T14:38:31+02:00","size":6105,"digest":"37b80e8bf7e51fef99a8307d6dffb04ee164790ceeafef606d516ca333e9488a","integrity":"sha256-N7gOi/flH++ZqDB9bf+wTuFkeQzur+9gbVFsozPpSIo="},"flags/4x3/bz-156fdc45f8c15c9520a1ea9fc0f395f294f02077408ea1938c222a37cfbb7f1d.svg":{"logical_path":"flags/4x3/bz.svg","mtime":"2018-04-02T14:38:31+02:00","size":46916,"digest":"156fdc45f8c15c9520a1ea9fc0f395f294f02077408ea1938c222a37cfbb7f1d","integrity":"sha256-FW/cRfjBXJUgoeqfwPOV8pTwIHdAjqGTjCIqN8+7fx0="},"flags/1x1/bz-24577d4e7b29b33ab3b1d37914c8479889baa7e8c8399c6d1c99faed31ab053a.svg":{"logical_path":"flags/1x1/bz.svg","mtime":"2018-04-02T14:38:31+02:00","size":47160,"digest":"24577d4e7b29b33ab3b1d37914c8479889baa7e8c8399c6d1c99faed31ab053a","integrity":"sha256-JFd9TnspszqzsdN5FMhHmIm6p+jIOZxtHJn67TGrBTo="},"flags/4x3/ca-0d57cab46d5dbb0012a5e4ae0a9efee3baee90d5d157950a6c5d67edf2daa58f.svg":{"logical_path":"flags/4x3/ca.svg","mtime":"2018-04-02T14:38:31+02:00","size":731,"digest":"0d57cab46d5dbb0012a5e4ae0a9efee3baee90d5d157950a6c5d67edf2daa58f","integrity":"sha256-DVfKtG1duwASpeSuCp7+47rukNXRV5UKbF1n7fLapY8="},"flags/1x1/ca-192a6fb0544e5a6f33a32149d62f1e7ac0a1d61c5c5afa57f3a42346ca8e8c90.svg":{"logical_path":"flags/1x1/ca.svg","mtime":"2018-04-02T14:38:31+02:00","size":712,"digest":"192a6fb0544e5a6f33a32149d62f1e7ac0a1d61c5c5afa57f3a42346ca8e8c90","integrity":"sha256-GSpvsFROWm8zoyFJ1i8eesCh1hxcWvpX86QjRsqOjJA="},"flags/4x3/cc-a35f2a9e10a28d6918ced65e0623b03bb2fbf1f20670b581bc0a409d33b4e843.svg":{"logical_path":"flags/4x3/cc.svg","mtime":"2018-04-02T14:38:31+02:00","size":3144,"digest":"a35f2a9e10a28d6918ced65e0623b03bb2fbf1f20670b581bc0a409d33b4e843","integrity":"sha256-o18qnhCijWkYztZeBiOwO7L78fIGcLWBvApAnTO06EM="},"flags/1x1/cc-d2025eefc9d30f724f3fcd95c0fd9f7938930ecb01af7e0cd6ee6553d7358eb6.svg":{"logical_path":"flags/1x1/cc.svg","mtime":"2018-04-02T14:38:31+02:00","size":3092,"digest":"d2025eefc9d30f724f3fcd95c0fd9f7938930ecb01af7e0cd6ee6553d7358eb6","integrity":"sha256-0gJe78nTD3JPP82VwP2feTiTDssBr34M1u5lU9c1jrY="},"flags/4x3/cd-5d2127c991b30522ae0a29d05facbc88728c050d7e333a60d614af1545459c5c.svg":{"logical_path":"flags/4x3/cd.svg","mtime":"2018-04-02T14:38:31+02:00","size":352,"digest":"5d2127c991b30522ae0a29d05facbc88728c050d7e333a60d614af1545459c5c","integrity":"sha256-XSEnyZGzBSKuCinQX6y8iHKMBQ1+Mzpg1hSvFUVFnFw="},"flags/1x1/cd-59dacf424d1c8c779db66c5b7f2a93a3c8f14976c2975ccfb07639676a1602e3.svg":{"logical_path":"flags/1x1/cd.svg","mtime":"2018-04-02T14:38:31+02:00","size":510,"digest":"59dacf424d1c8c779db66c5b7f2a93a3c8f14976c2975ccfb07639676a1602e3","integrity":"sha256-WdrPQk0cjHedtmxbfyqTo8jxSXbCl1zPsHY5Z2oWAuM="},"flags/4x3/cf-ac0aaffba354d848eba2501a402ee81dc96a56ad0acd3741ec9905e76c372e1e.svg":{"logical_path":"flags/4x3/cf.svg","mtime":"2018-04-02T14:38:31+02:00","size":689,"digest":"ac0aaffba354d848eba2501a402ee81dc96a56ad0acd3741ec9905e76c372e1e","integrity":"sha256-rAqv+6NU2EjrolAaQC7oHclqVq0KzTdB7JkF52w3Lh4="},"flags/1x1/cf-e637674faf7edcdad37182192d038448c157421ab0c69377d9b8e56ab2c0249d.svg":{"logical_path":"flags/1x1/cf.svg","mtime":"2018-04-02T14:38:31+02:00","size":635,"digest":"e637674faf7edcdad37182192d038448c157421ab0c69377d9b8e56ab2c0249d","integrity":"sha256-5jdnT69+3NrTcYIZLQOESMFXQhqwxpN32bjlarLAJJ0="},"flags/4x3/cg-3729f717c83c9df7d0543a1a5d4a506efe184bdfeb39f9260b4b63edf19d2538.svg":{"logical_path":"flags/4x3/cg.svg","mtime":"2018-04-02T14:38:31+02:00","size":484,"digest":"3729f717c83c9df7d0543a1a5d4a506efe184bdfeb39f9260b4b63edf19d2538","integrity":"sha256-Nyn3F8g8nffQVDoaXUpQbv4YS9/rOfkmC0tj7fGdJTg="},"flags/1x1/cg-8353ff1f251714b1b8905eec1722378426719955d0637d206d35d1dcfa68ddcf.svg":{"logical_path":"flags/1x1/cg.svg","mtime":"2018-04-02T14:38:31+02:00","size":472,"digest":"8353ff1f251714b1b8905eec1722378426719955d0637d206d35d1dcfa68ddcf","integrity":"sha256-g1P/HyUXFLG4kF7sFyI3hCZxmVXQY30gbTXR3Ppo3c8="},"flags/4x3/ch-6739edee6d1ef72c4ed97cfe723d3bb7f17e4df5390f3a4ae234f1ffdeece0cf.svg":{"logical_path":"flags/4x3/ch.svg","mtime":"2018-04-02T14:38:31+02:00","size":300,"digest":"6739edee6d1ef72c4ed97cfe723d3bb7f17e4df5390f3a4ae234f1ffdeece0cf","integrity":"sha256-Zznt7m0e9yxO2Xz+cj07t/F+TfU5DzpK4jTx/97s4M8="},"flags/1x1/ch-7c3dec465228981c57a90a3a7b3a6c42dd3e699230663e770b55008ce6d14208.svg":{"logical_path":"flags/1x1/ch.svg","mtime":"2018-04-02T14:38:31+02:00","size":298,"digest":"7c3dec465228981c57a90a3a7b3a6c42dd3e699230663e770b55008ce6d14208","integrity":"sha256-fD3sRlIomBxXqQo6ezpsQt0+aZIwZj53C1UAjObRQgg="},"flags/4x3/ci-3e076d13c9524149508c442f8f727424660124e3591280d8ae9bddf9d8272a1e.svg":{"logical_path":"flags/4x3/ci.svg","mtime":"2018-04-02T14:38:31+02:00","size":283,"digest":"3e076d13c9524149508c442f8f727424660124e3591280d8ae9bddf9d8272a1e","integrity":"sha256-PgdtE8lSQUlQjEQvj3J0JGYBJONZEoDYrpvd+dgnKh4="},"flags/1x1/ci-691a0a8577b7d555fc90dc7170adc9ec7571191cb3507c46c0e8516fd1778a91.svg":{"logical_path":"flags/1x1/ci.svg","mtime":"2018-04-02T14:38:31+02:00","size":286,"digest":"691a0a8577b7d555fc90dc7170adc9ec7571191cb3507c46c0e8516fd1778a91","integrity":"sha256-aRoKhXe31VX8kNxxcK3J7HVxGRyzUHxGwOhRb9F3ipE="},"flags/4x3/ck-9cff098e505afde9bf5166cb7b0c409178575633b913ce08c1c700d08c477db6.svg":{"logical_path":"flags/4x3/ck.svg","mtime":"2018-04-02T14:38:31+02:00","size":1887,"digest":"9cff098e505afde9bf5166cb7b0c409178575633b913ce08c1c700d08c477db6","integrity":"sha256-nP8JjlBa/em/UWbLewxAkXhXVjO5E84IwccA0IxHfbY="},"flags/1x1/ck-9c8dffa3bd5953d8a121780831f25b58738e67f3be71961894c56dfd25848c88.svg":{"logical_path":"flags/1x1/ck.svg","mtime":"2018-04-02T14:38:31+02:00","size":1846,"digest":"9c8dffa3bd5953d8a121780831f25b58738e67f3be71961894c56dfd25848c88","integrity":"sha256-nI3/o71ZU9ihIXgIMfJbWHOOZ/O+cZYYlMVt/SWEjIg="},"flags/4x3/cl-a4c57ec2bb9adcb67e1850256e5165227b764187d6941a38d95d0def5144699b.svg":{"logical_path":"flags/4x3/cl.svg","mtime":"2018-04-02T14:38:31+02:00","size":560,"digest":"a4c57ec2bb9adcb67e1850256e5165227b764187d6941a38d95d0def5144699b","integrity":"sha256-pMV+wrua3LZ+GFAlblFlInt2QYfWlBo42V0N71FEaZs="},"flags/1x1/cl-5a3e95cf63358e3911c97404818c2cddfd46414d8445e47d6976ee166c48926c.svg":{"logical_path":"flags/1x1/cl.svg","mtime":"2018-04-02T14:38:31+02:00","size":577,"digest":"5a3e95cf63358e3911c97404818c2cddfd46414d8445e47d6976ee166c48926c","integrity":"sha256-Wj6Vz2M1jjkRyXQEgYws3f1GQU2EReR9aXbuFmxIkmw="},"flags/4x3/cm-5dce9f36d92a61bdc0c482141bdb4f55bfcec0a2ecc745db643a7953e2e5a722.svg":{"logical_path":"flags/4x3/cm.svg","mtime":"2018-04-02T14:38:31+02:00","size":827,"digest":"5dce9f36d92a61bdc0c482141bdb4f55bfcec0a2ecc745db643a7953e2e5a722","integrity":"sha256-Xc6fNtkqYb3AxIIUG9tPVb/OwKLsx0XbZDp5U+LlpyI="},"flags/1x1/cm-d8d21f54c44df5df9edef227691384a4ad37c15ff57c8aa0dead684d19eac8cd.svg":{"logical_path":"flags/1x1/cm.svg","mtime":"2018-04-02T14:38:31+02:00","size":827,"digest":"d8d21f54c44df5df9edef227691384a4ad37c15ff57c8aa0dead684d19eac8cd","integrity":"sha256-2NIfVMRN9d+e3vInaROEpK03wV/1fIqg3q1oTRnqyM0="},"flags/4x3/cn-48ce1c2837bb806a6aaf8b7a9878b6d040c0d069a0ffca9a8a49e7a31aa30e7f.svg":{"logical_path":"flags/4x3/cn.svg","mtime":"2018-04-02T14:38:31+02:00","size":804,"digest":"48ce1c2837bb806a6aaf8b7a9878b6d040c0d069a0ffca9a8a49e7a31aa30e7f","integrity":"sha256-SM4cKDe7gGpqr4t6mHi20EDA0Gmg/8qaiknnoxqjDn8="},"flags/1x1/cn-e6be64c6c4a976e64d39bfe8a6ae4a5b1d38a6aa1b138ddcacf34a942dff50bc.svg":{"logical_path":"flags/1x1/cn.svg","mtime":"2018-04-02T14:38:31+02:00","size":746,"digest":"e6be64c6c4a976e64d39bfe8a6ae4a5b1d38a6aa1b138ddcacf34a942dff50bc","integrity":"sha256-5r5kxsSpduZNOb/opq5KWx04pqobE43crPNKlC3/ULw="},"flags/4x3/co-648d3ff596a0ecf3e85ac17c53abe1d7ca4759688e10a7a3a8b56f096ba6b6f7.svg":{"logical_path":"flags/4x3/co.svg","mtime":"2018-04-02T14:38:31+02:00","size":292,"digest":"648d3ff596a0ecf3e85ac17c53abe1d7ca4759688e10a7a3a8b56f096ba6b6f7","integrity":"sha256-ZI0/9Zag7PPoWsF8U6vh18pHWWiOEKejqLVvCWumtvc="},"flags/1x1/co-d3c16180c6bce630f762aff789104d10e9dbc949e740535a61396cd0ec34c1a1.svg":{"logical_path":"flags/1x1/co.svg","mtime":"2018-04-02T14:38:31+02:00","size":292,"digest":"d3c16180c6bce630f762aff789104d10e9dbc949e740535a61396cd0ec34c1a1","integrity":"sha256-08FhgMa85jD3Yq/3iRBNEOnbyUnnQFNaYTls0Ow0waE="},"flags/4x3/cr-84aec60f19bd33e1ac1a209155fec8d372e17cb59dc1346bb9124e5cc867375d.svg":{"logical_path":"flags/4x3/cr.svg","mtime":"2018-04-02T14:38:31+02:00","size":296,"digest":"84aec60f19bd33e1ac1a209155fec8d372e17cb59dc1346bb9124e5cc867375d","integrity":"sha256-hK7GDxm9M+GsGiCRVf7I03LhfLWdwTRruRJOXMhnN10="},"flags/1x1/cr-5371cf8bc5ad1a805155c1b3065e420a0a418c8d63b472bc545890289a365b35.svg":{"logical_path":"flags/1x1/cr.svg","mtime":"2018-04-02T14:38:31+02:00","size":296,"digest":"5371cf8bc5ad1a805155c1b3065e420a0a418c8d63b472bc545890289a365b35","integrity":"sha256-U3HPi8WtGoBRVcGzBl5CCgpBjI1jtHK8VFiQKJo2WzU="},"flags/4x3/cu-bb3f857e02aeab606120d9f164283f07a44b227f12aad7d6d344c7579f7b3ff0.svg":{"logical_path":"flags/4x3/cu.svg","mtime":"2018-04-02T14:38:31+02:00","size":619,"digest":"bb3f857e02aeab606120d9f164283f07a44b227f12aad7d6d344c7579f7b3ff0","integrity":"sha256-uz+FfgKuq2BhINnxZCg/B6RLIn8SqtfW00THV597P/A="},"flags/1x1/cu-02c0054169b874a8d231de1f45b2d0884de48848157734e0ddcd0f684c05c18d.svg":{"logical_path":"flags/1x1/cu.svg","mtime":"2018-04-02T14:38:31+02:00","size":576,"digest":"02c0054169b874a8d231de1f45b2d0884de48848157734e0ddcd0f684c05c18d","integrity":"sha256-AsAFQWm4dKjSMd4fRbLQiE3kiEgVdzTg3c0PaEwFwY0="},"flags/4x3/cv-90ee90ab59713454a218d8c300c71139e62655de80bfbea81df93142a529b81f.svg":{"logical_path":"flags/4x3/cv.svg","mtime":"2018-04-02T14:38:31+02:00","size":1414,"digest":"90ee90ab59713454a218d8c300c71139e62655de80bfbea81df93142a529b81f","integrity":"sha256-kO6Qq1lxNFSiGNjDAMcROeYmVd6Av76oHfkxQqUpuB8="},"flags/1x1/cv-2cf3eede97a468d28459ccc2271c28bb5b6029af2388b0301f6203be55e49308.svg":{"logical_path":"flags/1x1/cv.svg","mtime":"2018-04-02T14:38:31+02:00","size":1362,"digest":"2cf3eede97a468d28459ccc2271c28bb5b6029af2388b0301f6203be55e49308","integrity":"sha256-LPPu3pekaNKEWczCJxwou1tgKa8jiLAwH2IDvlXkkwg="},"flags/4x3/cw-d46beb7b10b40fa82cfd40eb86a3b3879f59f5da2a2f5ef91d121ab9b16c0aad.svg":{"logical_path":"flags/4x3/cw.svg","mtime":"2018-04-02T14:38:31+02:00","size":678,"digest":"d46beb7b10b40fa82cfd40eb86a3b3879f59f5da2a2f5ef91d121ab9b16c0aad","integrity":"sha256-1GvrexC0D6gs/UDrhqOzh59Z9doqL175HRIaubFsCq0="},"flags/1x1/cw-ba78c834e61b24a8a2b6bc7c80ab9f14e42c3c69415941ddb7c8c1f652ccd8b5.svg":{"logical_path":"flags/1x1/cw.svg","mtime":"2018-04-02T14:38:31+02:00","size":685,"digest":"ba78c834e61b24a8a2b6bc7c80ab9f14e42c3c69415941ddb7c8c1f652ccd8b5","integrity":"sha256-unjINOYbJKiitrx8gKufFOQsPGlBWUHdt8jB9lLM2LU="},"flags/4x3/cx-28187fb9d91bedc6f239b107d26eb6ec1cc2a0c7730810306c5a6b313c14f2b2.svg":{"logical_path":"flags/4x3/cx.svg","mtime":"2018-04-02T14:38:31+02:00","size":2469,"digest":"28187fb9d91bedc6f239b107d26eb6ec1cc2a0c7730810306c5a6b313c14f2b2","integrity":"sha256-KBh/udkb7cbyObEH0m627BzCoMdzCBAwbFprMTwU8rI="},"flags/1x1/cx-8ebe073d997f93d092a493300ea1d234c91aef80c6e8f431e88aa7f8e724f9a6.svg":{"logical_path":"flags/1x1/cx.svg","mtime":"2018-04-02T14:38:31+02:00","size":2508,"digest":"8ebe073d997f93d092a493300ea1d234c91aef80c6e8f431e88aa7f8e724f9a6","integrity":"sha256-jr4HPZl/k9CSpJMwDqHSNMka74DG6PQx6Iqn+Ock+aY="},"flags/4x3/cy-8d633ecabc7968bb8a869c62545f122aacbbc3e108c25ceb421bb8bc8734b9be.svg":{"logical_path":"flags/4x3/cy.svg","mtime":"2018-04-02T14:38:31+02:00","size":5949,"digest":"8d633ecabc7968bb8a869c62545f122aacbbc3e108c25ceb421bb8bc8734b9be","integrity":"sha256-jWM+yrx5aLuKhpxiVF8SKqy7w+EIwlzrQhu4vIc0ub4="},"flags/1x1/cy-6ef37fdd7518f18727bec1ed9741bb4d1f854dde7ef1a7e9fd2f4ba6291a7790.svg":{"logical_path":"flags/1x1/cy.svg","mtime":"2018-04-02T14:38:31+02:00","size":6053,"digest":"6ef37fdd7518f18727bec1ed9741bb4d1f854dde7ef1a7e9fd2f4ba6291a7790","integrity":"sha256-bvN/3XUY8YcnvsHtl0G7TR+FTd5+8afp/S9Lpikad5A="},"flags/4x3/cz-6c94e3d53fc1ae5982d8eb058b76d86f07d3fb4cd325698fea3291fa35504c56.svg":{"logical_path":"flags/4x3/cz.svg","mtime":"2018-04-02T14:38:31+02:00","size":481,"digest":"6c94e3d53fc1ae5982d8eb058b76d86f07d3fb4cd325698fea3291fa35504c56","integrity":"sha256-bJTj1T/BrlmC2OsFi3bYbwfT+0zTJWmP6jKR+jVQTFY="},"flags/1x1/cz-af9898ebd32559cdbea2fd17b351e5eedafccada6fbc6a2b7952cad78369817e.svg":{"logical_path":"flags/1x1/cz.svg","mtime":"2018-04-02T14:38:31+02:00","size":483,"digest":"af9898ebd32559cdbea2fd17b351e5eedafccada6fbc6a2b7952cad78369817e","integrity":"sha256-r5iY69MlWc2+ov0Xs1Hl7tr8ytpvvGoreVLK14NpgX4="},"flags/4x3/de-e7323083675d25107c85f0cea6534bd21d21e77e6d524d92e1b2d0a4e21117a1.svg":{"logical_path":"flags/4x3/de.svg","mtime":"2018-04-02T14:38:31+02:00","size":216,"digest":"e7323083675d25107c85f0cea6534bd21d21e77e6d524d92e1b2d0a4e21117a1","integrity":"sha256-5zIwg2ddJRB8hfDOplNL0h0h535tUk2S4bLQpOIRF6E="},"flags/1x1/de-fdb60146952d3b2d104310b28882a0ecde44d808240c3bab2cd6c302a538b266.svg":{"logical_path":"flags/1x1/de.svg","mtime":"2018-04-02T14:38:31+02:00","size":224,"digest":"fdb60146952d3b2d104310b28882a0ecde44d808240c3bab2cd6c302a538b266","integrity":"sha256-/bYBRpUtOy0QQxCyiIKg7N5E2AgkDDurLNbDAqU4smY="},"flags/4x3/dj-546da4a0dae9b1ab74dc6ac6076d0c706f37ef2a0d799342dd0345e11f770f03.svg":{"logical_path":"flags/4x3/dj.svg","mtime":"2018-04-02T14:38:31+02:00","size":588,"digest":"546da4a0dae9b1ab74dc6ac6076d0c706f37ef2a0d799342dd0345e11f770f03","integrity":"sha256-VG2koNrpsat03GrGB20McG837yoNeZNC3QNF4R93DwM="},"flags/1x1/dj-c0481b667f003d9d5a3c93861023a97a98224227ac19aa7e07b5b6edd35fe900.svg":{"logical_path":"flags/1x1/dj.svg","mtime":"2018-04-02T14:38:31+02:00","size":588,"digest":"c0481b667f003d9d5a3c93861023a97a98224227ac19aa7e07b5b6edd35fe900","integrity":"sha256-wEgbZn8APZ1aPJOGECOpepgiQiesGap+B7W27dNf6QA="},"flags/4x3/dk-a13735c0337ab4679cd8679508bf5e8067637ab611ca5c54172c621d740420e5.svg":{"logical_path":"flags/4x3/dk.svg","mtime":"2018-04-02T14:38:31+02:00","size":242,"digest":"a13735c0337ab4679cd8679508bf5e8067637ab611ca5c54172c621d740420e5","integrity":"sha256-oTc1wDN6tGec2GeVCL9egGdjerYRylxUFyxiHXQEIOU="},"flags/1x1/dk-822a3b8b6948f49aa81fe7620bd173453d9a45406a9680f24bad7e714e58cb7c.svg":{"logical_path":"flags/1x1/dk.svg","mtime":"2018-04-02T14:38:31+02:00","size":238,"digest":"822a3b8b6948f49aa81fe7620bd173453d9a45406a9680f24bad7e714e58cb7c","integrity":"sha256-gio7i2lI9JqoH+diC9FzRT2aRUBqloDyS61+cU5Yy3w="},"flags/4x3/dm-7713fabd3cf341694b4c1ef5d1379820773722b61c190234ac7416f2872e3940.svg":{"logical_path":"flags/4x3/dm.svg","mtime":"2018-04-02T14:38:31+02:00","size":16026,"digest":"7713fabd3cf341694b4c1ef5d1379820773722b61c190234ac7416f2872e3940","integrity":"sha256-dxP6vTzzQWlLTB710TeYIHc3IrYcGQI0rHQW8ocuOUA="},"flags/1x1/dm-33d984fc9897bb2a3bd16c6672b876effc1a8adc0c57ad122a16db54061e4e46.svg":{"logical_path":"flags/1x1/dm.svg","mtime":"2018-04-02T14:38:31+02:00","size":16514,"digest":"33d984fc9897bb2a3bd16c6672b876effc1a8adc0c57ad122a16db54061e4e46","integrity":"sha256-M9mE/JiXuyo70Wxmcrh27/waitwMV60SKhbbVAYeTkY="},"flags/4x3/do-714b6f307ea3a9c3d30348684b8574e8b7f5078f51649dfa97ae2a69a7108b4a.svg":{"logical_path":"flags/4x3/do.svg","mtime":"2018-04-02T14:38:31+02:00","size":394146,"digest":"714b6f307ea3a9c3d30348684b8574e8b7f5078f51649dfa97ae2a69a7108b4a","integrity":"sha256-cUtvMH6jqcPTA0hoS4V06Lf1B49RZJ36l64qaacQi0o="},"flags/1x1/do-d37306c4b346f89ea14739144374caad69652be31e8ce8e2504c9a0d422a4857.svg":{"logical_path":"flags/1x1/do.svg","mtime":"2018-04-02T14:38:31+02:00","size":391714,"digest":"d37306c4b346f89ea14739144374caad69652be31e8ce8e2504c9a0d422a4857","integrity":"sha256-03MGxLNG+J6hRzkUQ3TKrWllK+MejOjiUEyaDUIqSFc="},"flags/4x3/dz-a96e943c830558fe9823044aac2bfb3f6a4caf3bd3c57943352280a7f6b68cb1.svg":{"logical_path":"flags/4x3/dz.svg","mtime":"2018-04-02T14:38:31+02:00","size":301,"digest":"a96e943c830558fe9823044aac2bfb3f6a4caf3bd3c57943352280a7f6b68cb1","integrity":"sha256-qW6UPIMFWP6YIwRKrCv7P2pMrzvTxXlDNSKAp/a2jLE="},"flags/1x1/dz-09400d3b2c58e641a1641a687b81476761d05f9d0ff65861aeaa33c7f508cda4.svg":{"logical_path":"flags/1x1/dz.svg","mtime":"2018-04-02T14:38:31+02:00","size":312,"digest":"09400d3b2c58e641a1641a687b81476761d05f9d0ff65861aeaa33c7f508cda4","integrity":"sha256-CUANOyxY5kGhZBpoe4FHZ2HQX50P9lhhrqozx/UIzaQ="},"flags/4x3/ec-6762ba85ea0f7bb289b0aa6219c797e5243103d281b1462c61b61030fa329d5e.svg":{"logical_path":"flags/4x3/ec.svg","mtime":"2018-04-02T14:38:31+02:00","size":29417,"digest":"6762ba85ea0f7bb289b0aa6219c797e5243103d281b1462c61b61030fa329d5e","integrity":"sha256-Z2K6heoPe7KJsKpiGceX5SQxA9KBsUYsYbYQMPoynV4="},"flags/1x1/ec-7410a75a013738fbb8cbd756d967380e02ae54ca74e9ef9a41c4b583c2c2794f.svg":{"logical_path":"flags/1x1/ec.svg","mtime":"2018-04-02T14:38:31+02:00","size":29972,"digest":"7410a75a013738fbb8cbd756d967380e02ae54ca74e9ef9a41c4b583c2c2794f","integrity":"sha256-dBCnWgE3OPu4y9dW2Wc4DgKuVMp06e+aQcS1g8LCeU8="},"flags/4x3/ee-ce3b622214bd9eefb43373cae2811ea8cf6ef6a16bb6afbaa5bcaaea34024da0.svg":{"logical_path":"flags/4x3/ee.svg","mtime":"2018-04-02T14:38:31+02:00","size":324,"digest":"ce3b622214bd9eefb43373cae2811ea8cf6ef6a16bb6afbaa5bcaaea34024da0","integrity":"sha256-zjtiIhS9nu+0M3PK4oEeqM9u9qFrtq+6pbyq6jQCTaA="},"flags/1x1/ee-a207a8363b4dde44f59951501c2cb539419e92b0814b25d6448710ced52226f8.svg":{"logical_path":"flags/1x1/ee.svg","mtime":"2018-04-02T14:38:31+02:00","size":355,"digest":"a207a8363b4dde44f59951501c2cb539419e92b0814b25d6448710ced52226f8","integrity":"sha256-ogeoNjtN3kT1mVFQHCy1OUGekrCBSyXWRIcQztUiJvg="},"flags/4x3/eg-16a11fa93856ddc5fd46f8811adfc93660175724b20eaab55ff046855a352d2c.svg":{"logical_path":"flags/4x3/eg.svg","mtime":"2018-04-02T14:38:31+02:00","size":9978,"digest":"16a11fa93856ddc5fd46f8811adfc93660175724b20eaab55ff046855a352d2c","integrity":"sha256-FqEfqThW3cX9RviBGt/JNmAXVySyDqq1X/BGhVo1LSw="},"flags/1x1/eg-9f4d098c604326bbc3692f9e2f335dbc9b34bdf2706565bf448380f0a889d1e2.svg":{"logical_path":"flags/1x1/eg.svg","mtime":"2018-04-02T14:38:31+02:00","size":9992,"digest":"9f4d098c604326bbc3692f9e2f335dbc9b34bdf2706565bf448380f0a889d1e2","integrity":"sha256-n00JjGBDJrvDaS+eLzNdvJs0vfJwZWW/RIOA8KiJ0eI="},"flags/4x3/eh-9cf4a74d29c1a1afc4137deeb5b678d55c8fbdf8d181217267f3a5cce6a76a97.svg":{"logical_path":"flags/4x3/eh.svg","mtime":"2018-04-02T14:38:31+02:00","size":878,"digest":"9cf4a74d29c1a1afc4137deeb5b678d55c8fbdf8d181217267f3a5cce6a76a97","integrity":"sha256-nPSnTSnBoa/EE33utbZ41VyPvfjRgSFyZ/OlzOanapc="},"flags/1x1/eh-16c3327dbcf3483e634b3536b056324b5478212dae6d060f2ffb2ec961cd382f.svg":{"logical_path":"flags/1x1/eh.svg","mtime":"2018-04-02T14:38:31+02:00","size":828,"digest":"16c3327dbcf3483e634b3536b056324b5478212dae6d060f2ffb2ec961cd382f","integrity":"sha256-FsMyfbzzSD5jSzU2sFYyS1R4IS2ubQYPL/suyWHNOC8="},"flags/4x3/er-69a1e1e45289d1282df4b1e5ce5e712d69fbe314abd0c922353fce90814c543e.svg":{"logical_path":"flags/4x3/er.svg","mtime":"2018-04-02T14:38:31+02:00","size":3207,"digest":"69a1e1e45289d1282df4b1e5ce5e712d69fbe314abd0c922353fce90814c543e","integrity":"sha256-aaHh5FKJ0Sgt9LHlzl5xLWn74xSr0MkiNT/OkIFMVD4="},"flags/1x1/er-90d49408e58955cf1cf3185b0193e03c4a107042d47ef5e975dbbe10c6ef7f4a.svg":{"logical_path":"flags/1x1/er.svg","mtime":"2018-04-02T14:38:31+02:00","size":3395,"digest":"90d49408e58955cf1cf3185b0193e03c4a107042d47ef5e975dbbe10c6ef7f4a","integrity":"sha256-kNSUCOWJVc8c8xhbAZPgPEoQcELUfvXpddu+EMbvf0o="},"flags/4x3/es-50e59681c6b6412498bd9cbfc473abedc713db75c54c538b839db3c394d64499.svg":{"logical_path":"flags/4x3/es.svg","mtime":"2018-04-02T14:38:31+02:00","size":92574,"digest":"50e59681c6b6412498bd9cbfc473abedc713db75c54c538b839db3c394d64499","integrity":"sha256-UOWWgca2QSSYvZy/xHOr7ccT23XFTFOLg52zw5TWRJk="},"flags/1x1/es-29c68fa3c9c8c2adacdc2eb0162e9c2fa998faa408836900ec6285000476800d.svg":{"logical_path":"flags/1x1/es.svg","mtime":"2018-04-02T14:38:31+02:00","size":94269,"digest":"29c68fa3c9c8c2adacdc2eb0162e9c2fa998faa408836900ec6285000476800d","integrity":"sha256-KcaPo8nIwq2s3C6wFi6cL6mY+qQIg2kA7GKFAAR2gA0="},"flags/4x3/et-14263ba7ea890fd0a4d89a2791343ecb7acc89aab1fc2593e00a6093b22251df.svg":{"logical_path":"flags/4x3/et.svg","mtime":"2018-04-02T14:38:31+02:00","size":1243,"digest":"14263ba7ea890fd0a4d89a2791343ecb7acc89aab1fc2593e00a6093b22251df","integrity":"sha256-FCY7p+qJD9Ck2JonkTQ+y3rMiaqx/CWT4Apgk7IiUd8="},"flags/1x1/et-086eefb70e9adad537cc1c640a72cc0fa843ec7a9b06b2778aa98b2db055bfe6.svg":{"logical_path":"flags/1x1/et.svg","mtime":"2018-04-02T14:38:31+02:00","size":1242,"digest":"086eefb70e9adad537cc1c640a72cc0fa843ec7a9b06b2778aa98b2db055bfe6","integrity":"sha256-CG7vtw6a2tU3zBxkCnLMD6hD7HqbBrJ3iqmLLbBVv+Y="},"flags/4x3/fi-a4c41caa02a4f6803ea0d6c36de4beebf20d150e3df742b1369a4099c2ff648e.svg":{"logical_path":"flags/4x3/fi.svg","mtime":"2018-04-02T14:38:31+02:00","size":240,"digest":"a4c41caa02a4f6803ea0d6c36de4beebf20d150e3df742b1369a4099c2ff648e","integrity":"sha256-pMQcqgKk9oA+oNbDbeS+6/INFQ4990KxNppAmcL/ZI4="},"flags/1x1/fi-c5fdf318fac5fdfc94fe54268618e58a2bc5933617ead09992900f90cc25de9a.svg":{"logical_path":"flags/1x1/fi.svg","mtime":"2018-04-02T14:38:31+02:00","size":243,"digest":"c5fdf318fac5fdfc94fe54268618e58a2bc5933617ead09992900f90cc25de9a","integrity":"sha256-xf3zGPrF/fyU/lQmhhjliivFkzYX6tCZkpAPkMwl3po="},"flags/4x3/fj-cb0cc4b3b5c202f07487ee519f48b3eadb47035f5f2d5d3f99d20f81e48d6b79.svg":{"logical_path":"flags/4x3/fj.svg","mtime":"2018-04-02T14:38:31+02:00","size":27388,"digest":"cb0cc4b3b5c202f07487ee519f48b3eadb47035f5f2d5d3f99d20f81e48d6b79","integrity":"sha256-ywzEs7XCAvB0h+5Rn0iz6ttHA19fLV0/mdIPgeSNa3k="},"flags/1x1/fj-c2c7fd536841925e7647b2d510d6a0c58700e2a8ded0e42008fb93ffacde101f.svg":{"logical_path":"flags/1x1/fj.svg","mtime":"2018-04-02T14:38:31+02:00","size":27519,"digest":"c2c7fd536841925e7647b2d510d6a0c58700e2a8ded0e42008fb93ffacde101f","integrity":"sha256-wsf9U2hBkl52R7LVENagxYcA4qje0OQgCPuT/6zeEB8="},"flags/4x3/fk-cb61eaa0d7221823f7d17de59ea88ed16b506f9585ab0c7291cf839449d82968.svg":{"logical_path":"flags/4x3/fk.svg","mtime":"2018-04-02T14:38:31+02:00","size":30453,"digest":"cb61eaa0d7221823f7d17de59ea88ed16b506f9585ab0c7291cf839449d82968","integrity":"sha256-y2HqoNciGCP30X3lnqiO0WtQb5WFqwxykc+DlEnYKWg="},"flags/1x1/fk-a871742380ae157d1211a63cc35cd3621b1bf6de6d67e4a8e3565ad200b1d8cf.svg":{"logical_path":"flags/1x1/fk.svg","mtime":"2018-04-02T14:38:31+02:00","size":30648,"digest":"a871742380ae157d1211a63cc35cd3621b1bf6de6d67e4a8e3565ad200b1d8cf","integrity":"sha256-qHF0I4CuFX0SEaY8w1zTYhsb9t5tZ+So41Za0gCx2M8="},"flags/4x3/fm-079b937562a9a412aae8fb762b571ddb49bf23627943c97247b6a9bbdb768153.svg":{"logical_path":"flags/4x3/fm.svg","mtime":"2018-04-02T14:38:31+02:00","size":773,"digest":"079b937562a9a412aae8fb762b571ddb49bf23627943c97247b6a9bbdb768153","integrity":"sha256-B5uTdWKppBKq6Pt2K1cd20m/I2J5Q8lyR7apu9t2gVM="},"flags/1x1/fm-dbec73633ecd8a6c50f56d54df36bbe6a2f8fb534ac7658477c82cad14a806a8.svg":{"logical_path":"flags/1x1/fm.svg","mtime":"2018-04-02T14:38:31+02:00","size":763,"digest":"dbec73633ecd8a6c50f56d54df36bbe6a2f8fb534ac7658477c82cad14a806a8","integrity":"sha256-2+xzYz7NimxQ9W1U3za75qL4+1NKx2WEd8gsrRSoBqg="},"flags/4x3/fo-27279c2481bb1cb3e44850a948987d6a8411acffa770c3aecd1b76d4c5853413.svg":{"logical_path":"flags/4x3/fo.svg","mtime":"2018-04-02T14:38:31+02:00","size":567,"digest":"27279c2481bb1cb3e44850a948987d6a8411acffa770c3aecd1b76d4c5853413","integrity":"sha256-JyecJIG7HLPkSFCpSJh9aoQRrP+ncMOuzRt21MWFNBM="},"flags/1x1/fo-7cb4fdbba1c7223702d843cb0709ddc799f89f909dfe101e3e36d6bf36c3e67f.svg":{"logical_path":"flags/1x1/fo.svg","mtime":"2018-04-02T14:38:31+02:00","size":537,"digest":"7cb4fdbba1c7223702d843cb0709ddc799f89f909dfe101e3e36d6bf36c3e67f","integrity":"sha256-fLT9u6HHIjcC2EPLBwndx5n4n5Cd/hAePjbWvzbD5n8="},"flags/4x3/fr-30ed2f68dc9a17927643640f48f3d2a858bd041770547035349c6e79713cd84e.svg":{"logical_path":"flags/4x3/fr.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"30ed2f68dc9a17927643640f48f3d2a858bd041770547035349c6e79713cd84e","integrity":"sha256-MO0vaNyaF5J2Q2QPSPPSqFi9BBdwVHA1NJxueXE82E4="},"flags/1x1/fr-6b849151204c66fa661c30b34e62919a13b9e66b7cd37a4fc8962e8e0baf9bdc.svg":{"logical_path":"flags/1x1/fr.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"6b849151204c66fa661c30b34e62919a13b9e66b7cd37a4fc8962e8e0baf9bdc","integrity":"sha256-a4SRUSBMZvpmHDCzTmKRmhO55mt803pPyJYujguvm9w="},"flags/4x3/ga-e3840f9d5bd6ee08db748d37a534500b837bee0f8ce65987b2f099a6afd2cc63.svg":{"logical_path":"flags/4x3/ga.svg","mtime":"2018-04-02T14:38:31+02:00","size":277,"digest":"e3840f9d5bd6ee08db748d37a534500b837bee0f8ce65987b2f099a6afd2cc63","integrity":"sha256-44QPnVvW7gjbdI03pTRQC4N77g+M5lmHsvCZpq/SzGM="},"flags/1x1/ga-9eafd5388042b3d2258ac6223075b726426210136b9851b637973105721b64d9.svg":{"logical_path":"flags/1x1/ga.svg","mtime":"2018-04-02T14:38:31+02:00","size":281,"digest":"9eafd5388042b3d2258ac6223075b726426210136b9851b637973105721b64d9","integrity":"sha256-nq/VOIBCs9IlisYiMHW3JkJiEBNrmFG2N5cxBXIbZNk="},"flags/4x3/gb-ce93c8a6b974d63998e263f6d25f898fc20580a28464457f2f4463b687e4fe8d.svg":{"logical_path":"flags/4x3/gb.svg","mtime":"2018-04-02T14:38:31+02:00","size":834,"digest":"ce93c8a6b974d63998e263f6d25f898fc20580a28464457f2f4463b687e4fe8d","integrity":"sha256-zpPIprl01jmY4mP20l+Jj8IFgKKEZEV/L0Rjtofk/o0="},"flags/1x1/gb-1d93e1ce2e2e10c1709e4dc50ac956c007b2c1a63a4bc22ddfd64354f79ad457.svg":{"logical_path":"flags/1x1/gb.svg","mtime":"2018-04-02T14:38:31+02:00","size":792,"digest":"1d93e1ce2e2e10c1709e4dc50ac956c007b2c1a63a4bc22ddfd64354f79ad457","integrity":"sha256-HZPhzi4uEMFwnk3FCslWwAeywaY6S8It39ZDVPea1Fc="},"flags/4x3/gd-7c3a6b6068bbd9a6abc98c2297dd4acd5e31022e5a4210fc0e1205ec28498fa2.svg":{"logical_path":"flags/4x3/gd.svg","mtime":"2018-04-02T14:38:31+02:00","size":1694,"digest":"7c3a6b6068bbd9a6abc98c2297dd4acd5e31022e5a4210fc0e1205ec28498fa2","integrity":"sha256-fDprYGi72aaryYwil91KzV4xAi5aQhD8DhIF7ChJj6I="},"flags/1x1/gd-2310bc03d9e8ddc8599b40891bfb10b812b07023881599a7e02e3028d1bc9ca8.svg":{"logical_path":"flags/1x1/gd.svg","mtime":"2018-04-02T14:38:31+02:00","size":1834,"digest":"2310bc03d9e8ddc8599b40891bfb10b812b07023881599a7e02e3028d1bc9ca8","integrity":"sha256-IxC8A9no3chZm0CJG/sQuBKwcCOIFZmn4C4wKNG8nKg="},"flags/4x3/ge-501c0135fb8c377dbd2859ff6290b47ef4907a8e2ab2ae1e39116b716db6795f.svg":{"logical_path":"flags/4x3/ge.svg","mtime":"2018-04-02T14:38:31+02:00","size":1400,"digest":"501c0135fb8c377dbd2859ff6290b47ef4907a8e2ab2ae1e39116b716db6795f","integrity":"sha256-UBwBNfuMN329KFn/YpC0fvSQeo4qsq4eORFrcW22eV8="},"flags/1x1/ge-ca9ee36883ec12048fbb7fbbfaf231c0d4848ae0b07dab74a46d53b7b34d8114.svg":{"logical_path":"flags/1x1/ge.svg","mtime":"2018-04-02T14:38:31+02:00","size":1544,"digest":"ca9ee36883ec12048fbb7fbbfaf231c0d4848ae0b07dab74a46d53b7b34d8114","integrity":"sha256-yp7jaIPsEgSPu3+7+vIxwNSEiuCwfat0pG1Tt7NNgRQ="},"flags/4x3/gf-7c165f90bfe6ac3674903632182221a992f017ff706354b1761002382e89c2c2.svg":{"logical_path":"flags/4x3/gf.svg","mtime":"2018-04-02T14:38:31+02:00","size":261,"digest":"7c165f90bfe6ac3674903632182221a992f017ff706354b1761002382e89c2c2","integrity":"sha256-fBZfkL/mrDZ0kDYyGCIhqZLwF/9wY1SxdhACOC6JwsI="},"flags/1x1/gf-8838337b15cdcf143fac16c714e8dbf2d893d2ea8f1c8ef06dadcb652dfec41c.svg":{"logical_path":"flags/1x1/gf.svg","mtime":"2018-04-02T14:38:31+02:00","size":264,"digest":"8838337b15cdcf143fac16c714e8dbf2d893d2ea8f1c8ef06dadcb652dfec41c","integrity":"sha256-iDgzexXNzxQ/rBbHFOjb8tiT0uqPHI7wba3LZS3+xBw="},"flags/4x3/gg-2c7bfc50d5bcd374b5f6107974d06af24e70edba31ad71a225e0c2ecc2d6e778.svg":{"logical_path":"flags/4x3/gg.svg","mtime":"2018-04-02T14:38:31+02:00","size":598,"digest":"2c7bfc50d5bcd374b5f6107974d06af24e70edba31ad71a225e0c2ecc2d6e778","integrity":"sha256-LHv8UNW803S19hB5dNBq8k5w7boxrXGiJeDC7MLW53g="},"flags/1x1/gg-509489b1792831bb27d6975c76aa0a2ac2fa2c3906bcf844f616de5e0fbbc359.svg":{"logical_path":"flags/1x1/gg.svg","mtime":"2018-04-02T14:38:31+02:00","size":628,"digest":"509489b1792831bb27d6975c76aa0a2ac2fa2c3906bcf844f616de5e0fbbc359","integrity":"sha256-UJSJsXkoMbsn1pdcdqoKKsL6LDkGvPhE9hbeXg+7w1k="},"flags/4x3/gh-79c187756e93df22fae571ad9419629c5247c016e32a74471e0d461048fdf5cf.svg":{"logical_path":"flags/4x3/gh.svg","mtime":"2018-04-02T14:38:31+02:00","size":286,"digest":"79c187756e93df22fae571ad9419629c5247c016e32a74471e0d461048fdf5cf","integrity":"sha256-ecGHdW6T3yL65XGtlBlinFJHwBbjKnRHHg1GEEj99c8="},"flags/1x1/gh-e7bf18e6337982ee31e3673ab93e722b3410b7a4c202656a4bc3887d8656286b.svg":{"logical_path":"flags/1x1/gh.svg","mtime":"2018-04-02T14:38:31+02:00","size":299,"digest":"e7bf18e6337982ee31e3673ab93e722b3410b7a4c202656a4bc3887d8656286b","integrity":"sha256-578Y5jN5gu4x42c6uT5yKzQQt6TCAmVqS8OIfYZWKGs="},"flags/4x3/gi-ed99b369c8c77e64abd59fab1f28155d71b4378b49625c66ab0ab6dff4f88087.svg":{"logical_path":"flags/4x3/gi.svg","mtime":"2018-04-02T14:38:31+02:00","size":2972,"digest":"ed99b369c8c77e64abd59fab1f28155d71b4378b49625c66ab0ab6dff4f88087","integrity":"sha256-7ZmzacjHfmSr1Z+rHygVXXG0N4tJYlxmqwq23/T4gIc="},"flags/1x1/gi-2e563e96e766e13c0a9c5a3a372059a44739bb696e853d71a6f6b08c491dfb9a.svg":{"logical_path":"flags/1x1/gi.svg","mtime":"2018-04-02T14:38:31+02:00","size":2964,"digest":"2e563e96e766e13c0a9c5a3a372059a44739bb696e853d71a6f6b08c491dfb9a","integrity":"sha256-LlY+ludm4TwKnFo6NyBZpEc5u2luhT1xpvawjEkd+5o="},"flags/4x3/gl-612e560dbad68d540be672b80e22c54db43d6e2070523e81c156ccd6b3fc4260.svg":{"logical_path":"flags/4x3/gl.svg","mtime":"2018-04-02T14:38:31+02:00","size":229,"digest":"612e560dbad68d540be672b80e22c54db43d6e2070523e81c156ccd6b3fc4260","integrity":"sha256-YS5WDbrWjVQL5nK4DiLFTbQ9biBwUj6BwVbM1rP8QmA="},"flags/1x1/gl-a9bb35d2b9ff27638658d9ad6b9e2c4f452072b9a80b508d32e76d37bf62cf6e.svg":{"logical_path":"flags/1x1/gl.svg","mtime":"2018-04-02T14:38:31+02:00","size":243,"digest":"a9bb35d2b9ff27638658d9ad6b9e2c4f452072b9a80b508d32e76d37bf62cf6e","integrity":"sha256-qbs10rn/J2OGWNmta54sT0UgcrmoC1CNMudtN79iz24="},"flags/4x3/gm-4a6f9670a41548cceaced2b728e4bc56acbc4a3ba5544e7a097f7dae7a8bb045.svg":{"logical_path":"flags/4x3/gm.svg","mtime":"2018-04-02T14:38:31+02:00","size":543,"digest":"4a6f9670a41548cceaced2b728e4bc56acbc4a3ba5544e7a097f7dae7a8bb045","integrity":"sha256-Sm+WcKQVSMzqztK3KOS8Vqy8SjulVE56CX99rnqLsEU="},"flags/1x1/gm-b67f9f6bce2f8c8700c198de8bfafac72d01b8a1e55b77f71e8cafdc58f8af5c.svg":{"logical_path":"flags/1x1/gm.svg","mtime":"2018-04-02T14:38:31+02:00","size":385,"digest":"b67f9f6bce2f8c8700c198de8bfafac72d01b8a1e55b77f71e8cafdc58f8af5c","integrity":"sha256-tn+fa84vjIcAwZjei/r6xy0BuKHlW3f3Hoyv3Fj4r1w="},"flags/4x3/gn-873b4eb52f34c7558bef93cfd1b82117b5c32c9fbc0610f8821ccd22f28abe28.svg":{"logical_path":"flags/4x3/gn.svg","mtime":"2018-04-02T14:38:31+02:00","size":298,"digest":"873b4eb52f34c7558bef93cfd1b82117b5c32c9fbc0610f8821ccd22f28abe28","integrity":"sha256-hztOtS80x1WL75PP0bghF7XDLJ+8BhD4ghzNIvKKvig="},"flags/1x1/gn-72f51dc30cf0ed5459ad0f239cf3043eac05ece75945bcaf4ea6653af868c504.svg":{"logical_path":"flags/1x1/gn.svg","mtime":"2018-04-02T14:38:31+02:00","size":298,"digest":"72f51dc30cf0ed5459ad0f239cf3043eac05ece75945bcaf4ea6653af868c504","integrity":"sha256-cvUdwwzw7VRZrQ8jnPMEPqwF7OdZRbyvTqZlOvhoxQQ="},"flags/4x3/gp-4559cad3eb2d173214161d16b0237c68f5c817749a39c862fa7b23dfb4aee923.svg":{"logical_path":"flags/4x3/gp.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"4559cad3eb2d173214161d16b0237c68f5c817749a39c862fa7b23dfb4aee923","integrity":"sha256-RVnK0+stFzIUFh0WsCN8aPXIF3SaOchi+nsj37Su6SM="},"flags/1x1/gp-d6669532054db5b7e441f4858c28920246a65ca3e8a15518c64c7bbb4f9c6416.svg":{"logical_path":"flags/1x1/gp.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"d6669532054db5b7e441f4858c28920246a65ca3e8a15518c64c7bbb4f9c6416","integrity":"sha256-1maVMgVNtbfkQfSFjCiSAkamXKPooVUYxkx7u0+cZBY="},"flags/4x3/gq-0c8dfe7f9543307056bbe6d6e44a16c17201228e5344d5afec1ccf1b9a5eb2f9.svg":{"logical_path":"flags/4x3/gq.svg","mtime":"2018-04-02T14:38:31+02:00","size":5188,"digest":"0c8dfe7f9543307056bbe6d6e44a16c17201228e5344d5afec1ccf1b9a5eb2f9","integrity":"sha256-DI3+f5VDMHBWu+bW5EoWwXIBIo5TRNWv7BzPG5pesvk="},"flags/1x1/gq-ecb761e6db59b9bf8ba37533eaf0c60b7fcc7c0dfa2fcf281ee84c970dcb10f8.svg":{"logical_path":"flags/1x1/gq.svg","mtime":"2018-04-02T14:38:31+02:00","size":5280,"digest":"ecb761e6db59b9bf8ba37533eaf0c60b7fcc7c0dfa2fcf281ee84c970dcb10f8","integrity":"sha256-7Ldh5ttZub+Lo3Uz6vDGC3/MfA36L88oHuhMlw3LEPg="},"flags/4x3/gr-4a4086310397bffa682d439be8650a9e28d94e32963b6411b61435292ac4cf80.svg":{"logical_path":"flags/4x3/gr.svg","mtime":"2018-04-02T14:38:31+02:00","size":818,"digest":"4a4086310397bffa682d439be8650a9e28d94e32963b6411b61435292ac4cf80","integrity":"sha256-SkCGMQOXv/poLUOb6GUKnijZTjKWO2QRthQ1KSrEz4A="},"flags/1x1/gr-0cbd171892c0568b055d3b6585d58ac13dd60dfbcfad16eda1f4f9ead11dd16f.svg":{"logical_path":"flags/1x1/gr.svg","mtime":"2018-04-02T14:38:31+02:00","size":875,"digest":"0cbd171892c0568b055d3b6585d58ac13dd60dfbcfad16eda1f4f9ead11dd16f","integrity":"sha256-DL0XGJLAVosFXTtlhdWKwT3WDfvPrRbtofT56tEd0W8="},"flags/4x3/gs-e45169a93a9e94c15f5cb765a6c863319171fb9b4dce56094411829cd688d486.svg":{"logical_path":"flags/4x3/gs.svg","mtime":"2018-04-02T14:38:31+02:00","size":34658,"digest":"e45169a93a9e94c15f5cb765a6c863319171fb9b4dce56094411829cd688d486","integrity":"sha256-5FFpqTqelMFfXLdlpshjMZFx+5tNzlYJRBGCnNaI1IY="},"flags/1x1/gs-3efc9e1b32961f9aa9d7faa2626e596282b63d049f6717c2378b28e3f508e79a.svg":{"logical_path":"flags/1x1/gs.svg","mtime":"2018-04-02T14:38:31+02:00","size":35151,"digest":"3efc9e1b32961f9aa9d7faa2626e596282b63d049f6717c2378b28e3f508e79a","integrity":"sha256-PvyeGzKWH5qp1/qiYm5ZYoK2PQSfZxfCN4so4/UI55o="},"flags/4x3/gt-64a7345cf66facf7f323d2142aebb4172191108a78ac7493b1a6077b78ac8ec5.svg":{"logical_path":"flags/4x3/gt.svg","mtime":"2018-04-02T14:38:31+02:00","size":37857,"digest":"64a7345cf66facf7f323d2142aebb4172191108a78ac7493b1a6077b78ac8ec5","integrity":"sha256-ZKc0XPZvrPfzI9IUKuu0FyGREIp4rHSTsaYHe3isjsU="},"flags/1x1/gt-436a2af3d95cf3cb13ded897f319cfd6e2c087d678ad0e971c198b0d2c029911.svg":{"logical_path":"flags/1x1/gt.svg","mtime":"2018-04-02T14:38:31+02:00","size":37857,"digest":"436a2af3d95cf3cb13ded897f319cfd6e2c087d678ad0e971c198b0d2c029911","integrity":"sha256-Q2oq89lc88sT3tiX8xnP1uLAh9Z4rQ6XHBmLDSwCmRE="},"flags/4x3/gu-f560822ee237e5277829e63613a615a2ee3d8cc6196dffffe0f0d56a49b11c53.svg":{"logical_path":"flags/4x3/gu.svg","mtime":"2018-04-02T14:38:31+02:00","size":4859,"digest":"f560822ee237e5277829e63613a615a2ee3d8cc6196dffffe0f0d56a49b11c53","integrity":"sha256-9WCCLuI35Sd4KeY2E6YVou49jMYZbf//4PDVakmxHFM="},"flags/1x1/gu-a71c9d290c66c1a0929b05436dc6a8229b1147d7cc62336e04c9adf697030450.svg":{"logical_path":"flags/1x1/gu.svg","mtime":"2018-04-02T14:38:31+02:00","size":4644,"digest":"a71c9d290c66c1a0929b05436dc6a8229b1147d7cc62336e04c9adf697030450","integrity":"sha256-pxydKQxmwaCSmwVDbcaoIpsRR9fMYjNuBMmt9pcDBFA="},"flags/4x3/gw-0dc9ec17735ed605b68672947ce55c49a4ec1551491ccd121f482c1875cdf219.svg":{"logical_path":"flags/4x3/gw.svg","mtime":"2018-04-02T14:38:31+02:00","size":816,"digest":"0dc9ec17735ed605b68672947ce55c49a4ec1551491ccd121f482c1875cdf219","integrity":"sha256-DcnsF3Ne1gW2hnKUfOVcSaTsFVFJHM0SH0gsGHXN8hk="},"flags/1x1/gw-7868c305e4a64b0d8ebfd3f7cb8c881841d71a7e0c3ead2683fe503c80de0674.svg":{"logical_path":"flags/1x1/gw.svg","mtime":"2018-04-02T14:38:31+02:00","size":892,"digest":"7868c305e4a64b0d8ebfd3f7cb8c881841d71a7e0c3ead2683fe503c80de0674","integrity":"sha256-eGjDBeSmSw2Ov9P3y4yIGEHXGn4MPq0mg/5QPIDeBnQ="},"flags/4x3/gy-c9126e544c62508abfb898f0af0bd79c46f4c767c9ed6f928418a24b0f246d85.svg":{"logical_path":"flags/4x3/gy.svg","mtime":"2018-04-02T14:38:31+02:00","size":491,"digest":"c9126e544c62508abfb898f0af0bd79c46f4c767c9ed6f928418a24b0f246d85","integrity":"sha256-yRJuVExiUIq/uJjwrwvXnEb0x2fJ7W+ShBiiSw8kbYU="},"flags/1x1/gy-0e3b849ce460f8ab1ec7cf66a25be1ba91e89b72d8b0aa679a0553464f37a972.svg":{"logical_path":"flags/1x1/gy.svg","mtime":"2018-04-02T14:38:31+02:00","size":484,"digest":"0e3b849ce460f8ab1ec7cf66a25be1ba91e89b72d8b0aa679a0553464f37a972","integrity":"sha256-DjuEnORg+Ksex89molvhupHom3LYsKpnmgVTRk83qXI="},"flags/4x3/hk-cece9126ccbf9151feadfed75791ebf32d4a16beab12f182404519d0cc24eec7.svg":{"logical_path":"flags/4x3/hk.svg","mtime":"2018-04-02T14:38:31+02:00","size":3511,"digest":"cece9126ccbf9151feadfed75791ebf32d4a16beab12f182404519d0cc24eec7","integrity":"sha256-zs6RJsy/kVH+rf7XV5Hr8y1KFr6rEvGCQEUZ0Mwk7sc="},"flags/1x1/hk-9fad00e06f9034877149394914baa2bc3292223b0e32df2b1f9399d4de6e167d.svg":{"logical_path":"flags/1x1/hk.svg","mtime":"2018-04-02T14:38:31+02:00","size":3561,"digest":"9fad00e06f9034877149394914baa2bc3292223b0e32df2b1f9399d4de6e167d","integrity":"sha256-n60A4G+QNIdxSTlJFLqivDKSIjsOMt8rH5OZ1N5uFn0="},"flags/4x3/hm-4b4923b81da24d62ebf31a9bc0addf76beef84593374b1cbd03ba19f3b12e3e9.svg":{"logical_path":"flags/4x3/hm.svg","mtime":"2018-04-02T14:38:31+02:00","size":1328,"digest":"4b4923b81da24d62ebf31a9bc0addf76beef84593374b1cbd03ba19f3b12e3e9","integrity":"sha256-S0kjuB2iTWLr8xqbwK3fdr7vhFkzdLHL0DuhnzsS4+k="},"flags/1x1/hm-776c822113a22e83581234d05f40bfc0ed38b60648d87f513f3da3fff96ffb61.svg":{"logical_path":"flags/1x1/hm.svg","mtime":"2018-04-02T14:38:31+02:00","size":1312,"digest":"776c822113a22e83581234d05f40bfc0ed38b60648d87f513f3da3fff96ffb61","integrity":"sha256-d2yCIROiLoNYEjTQX0C/wO04tgZI2H9RPz2j//lv+2E="},"flags/4x3/hn-855c830786283862a5f399e0d69dffe52b6223b91b32e31b55d55c82f2fa32c9.svg":{"logical_path":"flags/4x3/hn.svg","mtime":"2018-04-02T14:38:31+02:00","size":1115,"digest":"855c830786283862a5f399e0d69dffe52b6223b91b32e31b55d55c82f2fa32c9","integrity":"sha256-hVyDB4YoOGKl85ng1p3/5StiI7kbMuMbVdVcgvL6Msk="},"flags/1x1/hn-64c38bac9403417c4e276bf5536d284fc5410fc04b80acd39a961d298f430dbd.svg":{"logical_path":"flags/1x1/hn.svg","mtime":"2018-04-02T14:38:31+02:00","size":1119,"digest":"64c38bac9403417c4e276bf5536d284fc5410fc04b80acd39a961d298f430dbd","integrity":"sha256-ZMOLrJQDQXxOJ2v1U20oT8VBD8BLgKzTmpYdKY9DDb0="},"flags/4x3/hr-c8cad861f7398a22b9d27ea682d2778df0dde8e146d30142b5294daf988854af.svg":{"logical_path":"flags/4x3/hr.svg","mtime":"2018-04-02T14:38:31+02:00","size":41617,"digest":"c8cad861f7398a22b9d27ea682d2778df0dde8e146d30142b5294daf988854af","integrity":"sha256-yMrYYfc5iiK50n6mgtJ3jfDd6OFG0wFCtSlNr5iIVK8="},"flags/1x1/hr-60c093df6760e4cc6abe26c37a52be3b51458f02712f18e11f08b07dc623b489.svg":{"logical_path":"flags/1x1/hr.svg","mtime":"2018-04-02T14:38:31+02:00","size":41808,"digest":"60c093df6760e4cc6abe26c37a52be3b51458f02712f18e11f08b07dc623b489","integrity":"sha256-YMCT32dg5MxqvibDelK+O1FFjwJxLxjhHwiwfcYjtIk="},"flags/4x3/ht-fe81da06228fa36e7f211bec0d9f0c020f5b9c7f81534b4cb2251848aa276b16.svg":{"logical_path":"flags/4x3/ht.svg","mtime":"2018-04-02T14:38:31+02:00","size":15231,"digest":"fe81da06228fa36e7f211bec0d9f0c020f5b9c7f81534b4cb2251848aa276b16","integrity":"sha256-/oHaBiKPo25/IRvsDZ8MAg9bnH+BU0tMsiUYSKonaxY="},"flags/1x1/ht-dd0197c078859c5a66ff3a51d3a3f92809768e36bfabdec0fc0ab60d068afcd9.svg":{"logical_path":"flags/1x1/ht.svg","mtime":"2018-04-02T14:38:31+02:00","size":15317,"digest":"dd0197c078859c5a66ff3a51d3a3f92809768e36bfabdec0fc0ab60d068afcd9","integrity":"sha256-3QGXwHiFnFpm/zpR06P5KAl2jja/q97A/Aq2DQaK/Nk="},"flags/4x3/hu-9aa998e636687aede491e307f3d068dbe58f2d90bfdfaec0e7ad03baa5b36344.svg":{"logical_path":"flags/4x3/hu.svg","mtime":"2018-04-02T14:38:31+02:00","size":277,"digest":"9aa998e636687aede491e307f3d068dbe58f2d90bfdfaec0e7ad03baa5b36344","integrity":"sha256-mqmY5jZoeu3kkeMH89Bo2+WPLZC/367A560DuqWzY0Q="},"flags/1x1/hu-06858d0fbd4320496e849010e35c8fe82eb618188cf6ec329aef93f5e7af1c23.svg":{"logical_path":"flags/1x1/hu.svg","mtime":"2018-04-02T14:38:31+02:00","size":279,"digest":"06858d0fbd4320496e849010e35c8fe82eb618188cf6ec329aef93f5e7af1c23","integrity":"sha256-BoWND71DIEluhJAQ41yP6C62GBiM9uwymu+T9eevHCM="},"flags/4x3/id-775dbfedd6533afdf5bd017ccc1ad4f8f4238cbe87393d9c837a669196f17293.svg":{"logical_path":"flags/4x3/id.svg","mtime":"2018-04-02T14:38:31+02:00","size":240,"digest":"775dbfedd6533afdf5bd017ccc1ad4f8f4238cbe87393d9c837a669196f17293","integrity":"sha256-d12/7dZTOv31vQF8zBrU+PQjjL6HOT2cg3pmkZbxcpM="},"flags/1x1/id-3920ce662a7ea937b2c11707d8e1f53db52611dd004edf753b0389ed490d9d29.svg":{"logical_path":"flags/1x1/id.svg","mtime":"2018-04-02T14:38:31+02:00","size":242,"digest":"3920ce662a7ea937b2c11707d8e1f53db52611dd004edf753b0389ed490d9d29","integrity":"sha256-OSDOZip+qTeywRcH2OH1PbUmEd0ATt91OwOJ7UkNnSk="},"flags/4x3/ie-6368a1c92440fcf80d3c35607543bcaa2d4662d6e0bc7acf6749ddbc418a72c0.svg":{"logical_path":"flags/4x3/ie.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"6368a1c92440fcf80d3c35607543bcaa2d4662d6e0bc7acf6749ddbc418a72c0","integrity":"sha256-Y2ihySRA/PgNPDVgdUO8qi1GYtbgvHrPZ0ndvEGKcsA="},"flags/1x1/ie-1997e9de640fa764677aa8f5d52f7888bb24a029160e8f67b06dbd043b4f11b3.svg":{"logical_path":"flags/1x1/ie.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"1997e9de640fa764677aa8f5d52f7888bb24a029160e8f67b06dbd043b4f11b3","integrity":"sha256-GZfp3mQPp2Rneqj11S94iLskoCkWDo9nsG29BDtPEbM="},"flags/4x3/il-d76883a2330f9a05a4a64990ba955fc1be90bb46bcb19ae548c21816e7e74178.svg":{"logical_path":"flags/4x3/il.svg","mtime":"2018-04-02T14:38:31+02:00","size":898,"digest":"d76883a2330f9a05a4a64990ba955fc1be90bb46bcb19ae548c21816e7e74178","integrity":"sha256-12iDojMPmgWkpkmQupVfwb6Qu0a8sZrlSMIYFufnQXg="},"flags/1x1/il-f5e643d0e10169a438119dc441ea3100b52a2ff569bbb3a3ad6d1131b47602d8.svg":{"logical_path":"flags/1x1/il.svg","mtime":"2018-04-02T14:38:31+02:00","size":851,"digest":"f5e643d0e10169a438119dc441ea3100b52a2ff569bbb3a3ad6d1131b47602d8","integrity":"sha256-9eZD0OEBaaQ4EZ3EQeoxALUqL/Vpu7OjrW0RMbR2Atg="},"flags/4x3/im-bbae8aa9dd129f8446556afe4904194ad43377d882f9a705fcf1da2bdbfabccf.svg":{"logical_path":"flags/4x3/im.svg","mtime":"2018-04-02T14:38:31+02:00","size":9948,"digest":"bbae8aa9dd129f8446556afe4904194ad43377d882f9a705fcf1da2bdbfabccf","integrity":"sha256-u66Kqd0Sn4RGVWr+SQQZStQzd9iC+acF/PHaK9v6vM8="},"flags/1x1/im-767d72c2e72d732d65c9b016adad983778dfbbb2b5b52e71830f4e41297728d3.svg":{"logical_path":"flags/1x1/im.svg","mtime":"2018-04-02T14:38:31+02:00","size":10295,"digest":"767d72c2e72d732d65c9b016adad983778dfbbb2b5b52e71830f4e41297728d3","integrity":"sha256-dn1ywuctcy1lybAWra2YN3jfu7K1tS5xgw9OQSl3KNM="},"flags/4x3/in-519e33321b8b2ba70a0b7557d66c62d7efdc9723896c49f82528b107028ffe29.svg":{"logical_path":"flags/4x3/in.svg","mtime":"2018-04-02T14:38:31+02:00","size":1077,"digest":"519e33321b8b2ba70a0b7557d66c62d7efdc9723896c49f82528b107028ffe29","integrity":"sha256-UZ4zMhuLK6cKC3VX1mxi1+/clyOJbEn4JSixBwKP/ik="},"flags/1x1/in-27831f76dc6a218a529b6e5d0eafc4c19c999461327b7c013f59226c0601a361.svg":{"logical_path":"flags/1x1/in.svg","mtime":"2018-04-02T14:38:31+02:00","size":1091,"digest":"27831f76dc6a218a529b6e5d0eafc4c19c999461327b7c013f59226c0601a361","integrity":"sha256-J4MfdtxqIYpSm25dDq/EwZyZlGEye3wBP1kibAYBo2E="},"flags/4x3/io-8d25a8e98f682199b413adfbcb6898c37058c9bae085e427fbab03d56e8c0de6.svg":{"logical_path":"flags/4x3/io.svg","mtime":"2018-04-02T14:38:31+02:00","size":27446,"digest":"8d25a8e98f682199b413adfbcb6898c37058c9bae085e427fbab03d56e8c0de6","integrity":"sha256-jSWo6Y9oIZm0E637y2iYw3BYybrgheQn+6sD1W6MDeY="},"flags/1x1/io-627f3b0cef72fd91ff426d74a007dc32d74c9fe677cf2c8355cba84359e16fde.svg":{"logical_path":"flags/1x1/io.svg","mtime":"2018-04-02T14:38:31+02:00","size":27497,"digest":"627f3b0cef72fd91ff426d74a007dc32d74c9fe677cf2c8355cba84359e16fde","integrity":"sha256-Yn87DO9y/ZH/Qm10oAfcMtdMn+Z3zyyDVcuoQ1nhb94="},"flags/4x3/iq-96b24d1439184d0a4c35ca7cea65e5f20469a0e8c8438963aad016e59c399cc6.svg":{"logical_path":"flags/4x3/iq.svg","mtime":"2018-04-02T14:38:31+02:00","size":1479,"digest":"96b24d1439184d0a4c35ca7cea65e5f20469a0e8c8438963aad016e59c399cc6","integrity":"sha256-lrJNFDkYTQpMNcp86mXl8gRpoOjIQ4ljqtAW5Zw5nMY="},"flags/1x1/iq-af04db139f8c44cfe0c612e2c05e848ccfad88fbbfcb58e88cdb7c80db365669.svg":{"logical_path":"flags/1x1/iq.svg","mtime":"2018-04-02T14:38:31+02:00","size":1484,"digest":"af04db139f8c44cfe0c612e2c05e848ccfad88fbbfcb58e88cdb7c80db365669","integrity":"sha256-rwTbE5+MRM/gxhLiwF6EjM+tiPu/y1jojNt8gNs2Vmk="},"flags/4x3/ir-db2c230d355ade2b1ac235ec647bb1535e4703c639a44f9ce112473272ee1019.svg":{"logical_path":"flags/4x3/ir.svg","mtime":"2018-04-02T14:38:31+02:00","size":15484,"digest":"db2c230d355ade2b1ac235ec647bb1535e4703c639a44f9ce112473272ee1019","integrity":"sha256-2ywjDTVa3isawjXsZHuxU15HA8Y5pE+c4RJHMnLuEBk="},"flags/1x1/ir-c648cbf56fc8f324fda477ea816783c9df8a7d398f45f5f94acc1c16c8877b63.svg":{"logical_path":"flags/1x1/ir.svg","mtime":"2018-04-02T14:38:31+02:00","size":15387,"digest":"c648cbf56fc8f324fda477ea816783c9df8a7d398f45f5f94acc1c16c8877b63","integrity":"sha256-xkjL9W/I8yT9pHfqgWeDyd+KfTmPRfX5SswcFsiHe2M="},"flags/4x3/is-29508693138977229758b0f322ba34e90dbcd7a8a74e8820729933d24051d9a7.svg":{"logical_path":"flags/4x3/is.svg","mtime":"2018-04-02T14:38:31+02:00","size":521,"digest":"29508693138977229758b0f322ba34e90dbcd7a8a74e8820729933d24051d9a7","integrity":"sha256-KVCGkxOJdyKXWLDzIro06Q2816inToggcpkz0kBR2ac="},"flags/1x1/is-b1c5db1d4b4853b8144f1d88ababbf14fc88752340457ba3e2c94ab5d54c9c01.svg":{"logical_path":"flags/1x1/is.svg","mtime":"2018-04-02T14:38:31+02:00","size":529,"digest":"b1c5db1d4b4853b8144f1d88ababbf14fc88752340457ba3e2c94ab5d54c9c01","integrity":"sha256-scXbHUtIU7gUTx2Iq6u/FPyIdSNARXuj4slKtdVMnAE="},"flags/4x3/it-d2c168050fc509adac1163b097b0ed409217560735b27802ae9259587c146562.svg":{"logical_path":"flags/4x3/it.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"d2c168050fc509adac1163b097b0ed409217560735b27802ae9259587c146562","integrity":"sha256-0sFoBQ/FCa2sEWOwl7DtQJIXVgc1sngCrpJZWHwUZWI="},"flags/1x1/it-592d34fb666430fa00f98d333623d5efa3c8e0e65ac4eee06bbc4c1de7ce4bea.svg":{"logical_path":"flags/1x1/it.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"592d34fb666430fa00f98d333623d5efa3c8e0e65ac4eee06bbc4c1de7ce4bea","integrity":"sha256-WS00+2ZkMPoA+Y0zNiPV76PI4OZaxO7ga7xMHefOS+o="},"flags/4x3/je-b363a4e3a21630f10791c2ebeb7f918320816ef87c155d4fd29ce37982f4df35.svg":{"logical_path":"flags/4x3/je.svg","mtime":"2018-04-02T14:38:31+02:00","size":4776,"digest":"b363a4e3a21630f10791c2ebeb7f918320816ef87c155d4fd29ce37982f4df35","integrity":"sha256-s2Ok46IWMPEHkcLr63+RgyCBbvh8FV1P0pzjeYL03zU="},"flags/1x1/je-6d43f74e30e099bc056da925ec34c0200708f0a6e90da34db1e59d54ce10cfd9.svg":{"logical_path":"flags/1x1/je.svg","mtime":"2018-04-02T14:38:31+02:00","size":4757,"digest":"6d43f74e30e099bc056da925ec34c0200708f0a6e90da34db1e59d54ce10cfd9","integrity":"sha256-bUP3TjDgmbwFbakl7DTAIAcI8KbpDaNNseWdVM4Qz9k="},"flags/4x3/jm-3d133fbc2564f29e036855e8be224d1579fe66fe49e0f5a2ba0bdcf3cb272823.svg":{"logical_path":"flags/4x3/jm.svg","mtime":"2018-04-02T14:38:31+02:00","size":392,"digest":"3d133fbc2564f29e036855e8be224d1579fe66fe49e0f5a2ba0bdcf3cb272823","integrity":"sha256-PRM/vCVk8p4DaFXoviJNFXn+Zv5J4PWiugvc88snKCM="},"flags/1x1/jm-1aea8ea5d8cbc717fa3ef331d8caa9a1421c88a7bd076e40f8276a5b6f8d0467.svg":{"logical_path":"flags/1x1/jm.svg","mtime":"2018-04-02T14:38:31+02:00","size":392,"digest":"1aea8ea5d8cbc717fa3ef331d8caa9a1421c88a7bd076e40f8276a5b6f8d0467","integrity":"sha256-GuqOpdjLxxf6PvMx2MqpoUIciKe9B25A+CdqW2+NBGc="},"flags/4x3/jo-eee432339f8ea6750987e1121187eb4b53ec537dd7ccb240c018de63f7a92db6.svg":{"logical_path":"flags/4x3/jo.svg","mtime":"2018-04-02T14:38:31+02:00","size":717,"digest":"eee432339f8ea6750987e1121187eb4b53ec537dd7ccb240c018de63f7a92db6","integrity":"sha256-7uQyM5+OpnUJh+ESEYfrS1PsU33XzLJAwBjeY/epLbY="},"flags/1x1/jo-7969b2083c535c85b7e714b755459a6606940e0b5ddb1b71e24daf0a180d14aa.svg":{"logical_path":"flags/1x1/jo.svg","mtime":"2018-04-02T14:38:31+02:00","size":694,"digest":"7969b2083c535c85b7e714b755459a6606940e0b5ddb1b71e24daf0a180d14aa","integrity":"sha256-eWmyCDxTXIW35xS3VUWaZgaUDgtd2xtx4k2vChgNFKo="},"flags/4x3/jp-2eadcfc67ba8cd50c1da86e08e6778e0102c3072865dab8c312cc88006da0abe.svg":{"logical_path":"flags/4x3/jp.svg","mtime":"2018-04-02T14:38:31+02:00","size":484,"digest":"2eadcfc67ba8cd50c1da86e08e6778e0102c3072865dab8c312cc88006da0abe","integrity":"sha256-Lq3PxnuozVDB2obgjmd44BAsMHKGXauMMSzIgAbaCr4="},"flags/1x1/jp-551281a75e6c6fd64eb65b39f56102b52c182f6c38ee045c9422f6592f0f65c5.svg":{"logical_path":"flags/1x1/jp.svg","mtime":"2018-04-02T14:38:31+02:00","size":500,"digest":"551281a75e6c6fd64eb65b39f56102b52c182f6c38ee045c9422f6592f0f65c5","integrity":"sha256-VRKBp15sb9ZOtls59WECtSwYL2w47gRclCL2WS8PZcU="},"flags/4x3/ke-45790bc3ec1ed8ed0124777a7c9e09163353b5af4ff70ae6604a61b53712df4b.svg":{"logical_path":"flags/4x3/ke.svg","mtime":"2018-04-02T14:38:31+02:00","size":1383,"digest":"45790bc3ec1ed8ed0124777a7c9e09163353b5af4ff70ae6604a61b53712df4b","integrity":"sha256-RXkLw+we2O0BJHd6fJ4JFjNTta9P9wrmYEphtTcS30s="},"flags/1x1/ke-2cca24ecf024b801543c0572efc9969ffdaf25cec313e2149c64961839bc301b.svg":{"logical_path":"flags/1x1/ke.svg","mtime":"2018-04-02T14:38:31+02:00","size":1495,"digest":"2cca24ecf024b801543c0572efc9969ffdaf25cec313e2149c64961839bc301b","integrity":"sha256-LMok7PAkuAFUPAVy78mWn/2vJc7DE+IUnGSWGDm8MBs="},"flags/4x3/kg-3879f8931d74cc9c5927261f4095b2bb786f3d62c803b2a96ec550a23fae9f49.svg":{"logical_path":"flags/4x3/kg.svg","mtime":"2018-04-02T14:38:31+02:00","size":3387,"digest":"3879f8931d74cc9c5927261f4095b2bb786f3d62c803b2a96ec550a23fae9f49","integrity":"sha256-OHn4kx10zJxZJyYfQJWyu3hvPWLIA7KpbsVQoj+un0k="},"flags/1x1/kg-74318932808f85b72df308358f2f2699ab0cb7ab4f7ad3c84c4be4024f0fb140.svg":{"logical_path":"flags/1x1/kg.svg","mtime":"2018-04-02T14:38:31+02:00","size":3337,"digest":"74318932808f85b72df308358f2f2699ab0cb7ab4f7ad3c84c4be4024f0fb140","integrity":"sha256-dDGJMoCPhbct8wg1jy8mmasMt6tPetPITEvkAk8PsUA="},"flags/4x3/kh-7409fab4ba4e676db7b5c61020b97893b1735fe0b8e39e9b4f96108400be704e.svg":{"logical_path":"flags/4x3/kh.svg","mtime":"2018-04-02T14:38:31+02:00","size":7295,"digest":"7409fab4ba4e676db7b5c61020b97893b1735fe0b8e39e9b4f96108400be704e","integrity":"sha256-dAn6tLpOZ223tcYQILl4k7FzX+C4456bT5YQhAC+cE4="},"flags/1x1/kh-2603f6a61b400cb12b87397eeba60ae1707511467d5e0c430c05809bf89e5042.svg":{"logical_path":"flags/1x1/kh.svg","mtime":"2018-04-02T14:38:31+02:00","size":7296,"digest":"2603f6a61b400cb12b87397eeba60ae1707511467d5e0c430c05809bf89e5042","integrity":"sha256-JgP2phtADLErhzl+66YK4XB1EUZ9XgxDDAWAm/ieUEI="},"flags/4x3/ki-617c1b52f3d9aee99d094edbd1775cae77aade266a1318eb4671b2bb1620ded5.svg":{"logical_path":"flags/4x3/ki.svg","mtime":"2018-04-02T14:38:31+02:00","size":5818,"digest":"617c1b52f3d9aee99d094edbd1775cae77aade266a1318eb4671b2bb1620ded5","integrity":"sha256-YXwbUvPZrumdCU7b0Xdcrneq3iZqExjrRnGyuxYg3tU="},"flags/1x1/ki-74615266b440a24f09abdeae3853d7e1111f0eba77df71ccd176d83fbd1fd9ad.svg":{"logical_path":"flags/1x1/ki.svg","mtime":"2018-04-02T14:38:31+02:00","size":5955,"digest":"74615266b440a24f09abdeae3853d7e1111f0eba77df71ccd176d83fbd1fd9ad","integrity":"sha256-dGFSZrRAok8Jq96uOFPX4REfDrp333HM0XbYP70f2a0="},"flags/4x3/km-0c9bcbf7e677a541fc8dff6f848c9d92b6982ac2934ae75faa56a2b846bb5698.svg":{"logical_path":"flags/4x3/km.svg","mtime":"2018-04-02T14:38:31+02:00","size":1061,"digest":"0c9bcbf7e677a541fc8dff6f848c9d92b6982ac2934ae75faa56a2b846bb5698","integrity":"sha256-DJvL9+Z3pUH8jf9vhIydkraYKsKTSudfqlaiuEa7Vpg="},"flags/1x1/km-81b0fbe53d09194270e8ed4cbe9be8eb1ae727e77957005369ad8bdc651dd1c8.svg":{"logical_path":"flags/1x1/km.svg","mtime":"2018-04-02T14:38:31+02:00","size":1044,"digest":"81b0fbe53d09194270e8ed4cbe9be8eb1ae727e77957005369ad8bdc651dd1c8","integrity":"sha256-gbD75T0JGUJw6O1Mvpvo6xrnJ+d5VwBTaa2L3GUd0cg="},"flags/4x3/kn-0442f55f81cd3b1057c609301f0af2b503d89a895a954af8c970df997e92bd03.svg":{"logical_path":"flags/4x3/kn.svg","mtime":"2018-04-02T14:38:31+02:00","size":816,"digest":"0442f55f81cd3b1057c609301f0af2b503d89a895a954af8c970df997e92bd03","integrity":"sha256-BEL1X4HNOxBXxgkwHwrytQPYmolalUr4yXDfmX6SvQM="},"flags/1x1/kn-897c34ef54bee486f0d24d2191e2400f49a19d98efb19f8c3f1a27fb0b97131a.svg":{"logical_path":"flags/1x1/kn.svg","mtime":"2018-04-02T14:38:31+02:00","size":820,"digest":"897c34ef54bee486f0d24d2191e2400f49a19d98efb19f8c3f1a27fb0b97131a","integrity":"sha256-iXw071S+5Ibw0k0hkeJAD0mhnZjvsZ+MPxon+wuXExo="},"flags/4x3/kp-a54f7201982b29530381b71a5e2a11c1153860f22c04c0a2d91bb0d20fedf78e.svg":{"logical_path":"flags/4x3/kp.svg","mtime":"2018-04-02T14:38:31+02:00","size":792,"digest":"a54f7201982b29530381b71a5e2a11c1153860f22c04c0a2d91bb0d20fedf78e","integrity":"sha256-pU9yAZgrKVMDgbcaXioRwRU4YPIsBMCi2Ruw0g/t944="},"flags/1x1/kp-758eccd89ef3707808fb68d931f086e49333904f4cc67c88468f3c96fb43b7b6.svg":{"logical_path":"flags/1x1/kp.svg","mtime":"2018-04-02T14:38:31+02:00","size":855,"digest":"758eccd89ef3707808fb68d931f086e49333904f4cc67c88468f3c96fb43b7b6","integrity":"sha256-dY7M2J7zcHgI+2jZMfCG5JMzkE9MxnyIRo88lvtDt7Y="},"flags/4x3/kr-c0b9b2c854133410c0ad9cadbc10b1e0bacf0305519883126d55bfa3214f9d06.svg":{"logical_path":"flags/4x3/kr.svg","mtime":"2018-04-02T14:38:31+02:00","size":1827,"digest":"c0b9b2c854133410c0ad9cadbc10b1e0bacf0305519883126d55bfa3214f9d06","integrity":"sha256-wLmyyFQTNBDArZytvBCx4LrPAwVRmIMSbVW/oyFPnQY="},"flags/1x1/kr-7c0457ac5d284b28b742ea2e061a1aa2a35f63171e464b3a7eb501a48756ce7b.svg":{"logical_path":"flags/1x1/kr.svg","mtime":"2018-04-02T14:38:31+02:00","size":1733,"digest":"7c0457ac5d284b28b742ea2e061a1aa2a35f63171e464b3a7eb501a48756ce7b","integrity":"sha256-fARXrF0oSyi3QuouBhoaoqNfYxceRks6frUBpIdWzns="},"flags/4x3/kw-81c3d5d25c7b840ef14783b51d18c6b7cfc61f94932c664bbc9e5879fef020eb.svg":{"logical_path":"flags/4x3/kw.svg","mtime":"2018-04-02T14:38:31+02:00","size":506,"digest":"81c3d5d25c7b840ef14783b51d18c6b7cfc61f94932c664bbc9e5879fef020eb","integrity":"sha256-gcPV0lx7hA7xR4O1HRjGt8/GH5STLGZLvJ5Yef7wIOs="},"flags/1x1/kw-66670211a67a4e61d4652a19d821dc5195f01a28a3a9b28b7e4c6048cd86b19c.svg":{"logical_path":"flags/1x1/kw.svg","mtime":"2018-04-02T14:38:31+02:00","size":510,"digest":"66670211a67a4e61d4652a19d821dc5195f01a28a3a9b28b7e4c6048cd86b19c","integrity":"sha256-ZmcCEaZ6TmHUZSoZ2CHcUZXwGiijqbKLfkxgSM2GsZw="},"flags/4x3/ky-0f4ab66d951ae33f800d680aaa5704804ba9c8844d4d80e5bee2e3fa0e100af3.svg":{"logical_path":"flags/4x3/ky.svg","mtime":"2018-04-02T14:38:31+02:00","size":21886,"digest":"0f4ab66d951ae33f800d680aaa5704804ba9c8844d4d80e5bee2e3fa0e100af3","integrity":"sha256-D0q2bZUa4z+ADWgKqlcEgEupyIRNTYDlvuLj+g4QCvM="},"flags/1x1/ky-fb5f57bb58b74d23377bad9954a75ab88d1587af68546ce137a6ae7a88a7701e.svg":{"logical_path":"flags/1x1/ky.svg","mtime":"2018-04-02T14:38:31+02:00","size":22495,"digest":"fb5f57bb58b74d23377bad9954a75ab88d1587af68546ce137a6ae7a88a7701e","integrity":"sha256-+19Xu1i3TSM3e62ZVKdauI0Vh69oVGzhN6aueoincB4="},"flags/4x3/kz-39edc952c598c71be2c9510944a8faf708d8e4b367b5ad78a688d1cd37f522eb.svg":{"logical_path":"flags/4x3/kz.svg","mtime":"2018-04-02T14:38:31+02:00","size":11339,"digest":"39edc952c598c71be2c9510944a8faf708d8e4b367b5ad78a688d1cd37f522eb","integrity":"sha256-Oe3JUsWYxxviyVEJRKj69wjY5LNnta14pojRzTf1Ius="},"flags/1x1/kz-924c04dc19267b049f35213af0e2b0c540933c06389433cb4aacd8dda33b286c.svg":{"logical_path":"flags/1x1/kz.svg","mtime":"2018-04-02T14:38:31+02:00","size":11433,"digest":"924c04dc19267b049f35213af0e2b0c540933c06389433cb4aacd8dda33b286c","integrity":"sha256-kkwE3BkmewSfNSE68OKwxUCTPAY4lDPLSqzY3aM7KGw="},"flags/4x3/la-e3a36a3bd0003442c3a21d3a192995fa6fb3b3c08a2daadc8f38f62736b5b1e3.svg":{"logical_path":"flags/4x3/la.svg","mtime":"2018-04-02T14:38:31+02:00","size":457,"digest":"e3a36a3bd0003442c3a21d3a192995fa6fb3b3c08a2daadc8f38f62736b5b1e3","integrity":"sha256-46NqO9AANELDoh06GSmV+m+zs8CKLarcjzj2Jza1seM="},"flags/1x1/la-c9d4223a897e5e2938a4892bbc593d3828093b9439fc3f6de21520e4013ddbc5.svg":{"logical_path":"flags/1x1/la.svg","mtime":"2018-04-02T14:38:31+02:00","size":507,"digest":"c9d4223a897e5e2938a4892bbc593d3828093b9439fc3f6de21520e4013ddbc5","integrity":"sha256-ydQiOol+Xik4pIkrvFk9OCgJO5Q5/D9t4hUg5AE928U="},"flags/4x3/lb-508c2a5a9b50d604895675b9f1c1e5914c394a7f468f5d823eb0476acaacbc7f.svg":{"logical_path":"flags/4x3/lb.svg","mtime":"2018-04-02T14:38:31+02:00","size":2814,"digest":"508c2a5a9b50d604895675b9f1c1e5914c394a7f468f5d823eb0476acaacbc7f","integrity":"sha256-UIwqWptQ1gSJVnW58cHlkUw5Sn9Gj12CPrBHasqsvH8="},"flags/1x1/lb-10c9ba8ea7aa3189f16a7273c837982a887fc4ddfc9d514d8f5a660d72356f7f.svg":{"logical_path":"flags/1x1/lb.svg","mtime":"2018-04-02T14:38:31+02:00","size":2754,"digest":"10c9ba8ea7aa3189f16a7273c837982a887fc4ddfc9d514d8f5a660d72356f7f","integrity":"sha256-EMm6jqeqMYnxanJzyDeYKoh/xN38nVFNj1pmDXI1b38="},"flags/4x3/lc-04ccd92fb1578654181febaea30ebd6b6620f56115730b2a2d673c712307bf5c.svg":{"logical_path":"flags/4x3/lc.svg","mtime":"2018-04-02T14:38:31+02:00","size":373,"digest":"04ccd92fb1578654181febaea30ebd6b6620f56115730b2a2d673c712307bf5c","integrity":"sha256-BMzZL7FXhlQYH+uuow69a2Yg9WEVcwsqLWc8cSMHv1w="},"flags/1x1/lc-4ffb53afb8bd296d526ac26fd8007afc74855e92833a893d3c934a5d12eb152a.svg":{"logical_path":"flags/1x1/lc.svg","mtime":"2018-04-02T14:38:31+02:00","size":373,"digest":"4ffb53afb8bd296d526ac26fd8007afc74855e92833a893d3c934a5d12eb152a","integrity":"sha256-T/tTr7i9KW1SasJv2AB6/HSFXpKDOok9PJNKXRLrFSo="},"flags/4x3/li-3058dc4aeaf2bd2da8cb910892137d732b56e5e9d342e565a4059de1a8e40e40.svg":{"logical_path":"flags/4x3/li.svg","mtime":"2018-04-02T14:38:31+02:00","size":8327,"digest":"3058dc4aeaf2bd2da8cb910892137d732b56e5e9d342e565a4059de1a8e40e40","integrity":"sha256-MFjcSuryvS2oy5EIkhN9cytW5enTQuVlpAWd4ajkDkA="},"flags/1x1/li-0780a4f218b9ee466e33d14274b8a01575a86b3787b347e3269a3b301c220d5f.svg":{"logical_path":"flags/1x1/li.svg","mtime":"2018-04-02T14:38:31+02:00","size":8350,"digest":"0780a4f218b9ee466e33d14274b8a01575a86b3787b347e3269a3b301c220d5f","integrity":"sha256-B4Ck8hi57kZuM9FCdLigFXWoazeHs0fjJpo7MBwiDV8="},"flags/4x3/lk-a13d6ab1da51be3b1d2c5b80f4d866c923d42b017e197469e1bfc0dd021c4bfe.svg":{"logical_path":"flags/4x3/lk.svg","mtime":"2018-04-02T14:38:31+02:00","size":11333,"digest":"a13d6ab1da51be3b1d2c5b80f4d866c923d42b017e197469e1bfc0dd021c4bfe","integrity":"sha256-oT1qsdpRvjsdLFuA9NhmySPUKwF+GXRp4b/A3QIcS/4="},"flags/1x1/lk-99759363f0df6b868fd1398bf05666c680bafe1eeec8b859b64d450930213e02.svg":{"logical_path":"flags/1x1/lk.svg","mtime":"2018-04-02T14:38:31+02:00","size":11345,"digest":"99759363f0df6b868fd1398bf05666c680bafe1eeec8b859b64d450930213e02","integrity":"sha256-mXWTY/Dfa4aP0TmL8FZmxoC6/h7uyLhZtk1FCTAhPgI="},"flags/4x3/lr-b06a1d70899826b305ce387fa31e1fa0bdb3bcb17c1392f15f995ce1dba723cf.svg":{"logical_path":"flags/4x3/lr.svg","mtime":"2018-04-02T14:38:31+02:00","size":724,"digest":"b06a1d70899826b305ce387fa31e1fa0bdb3bcb17c1392f15f995ce1dba723cf","integrity":"sha256-sGodcImYJrMFzjh/ox4foL2zvLF8E5LxX5lc4dunI88="},"flags/1x1/lr-820a9d023e5b1e68ed640bfaba8f84ad4379c42a6c5c982cb76b0390dd2bcbdd.svg":{"logical_path":"flags/1x1/lr.svg","mtime":"2018-04-02T14:38:31+02:00","size":697,"digest":"820a9d023e5b1e68ed640bfaba8f84ad4379c42a6c5c982cb76b0390dd2bcbdd","integrity":"sha256-ggqdAj5bHmjtZAv6uo+ErUN5xCpsXJgst2sDkN0ry90="},"flags/4x3/ls-d02bcefe7c298c153665f35c33eedb08e2e2b345350e4bf1714a87abf86b2d0e.svg":{"logical_path":"flags/4x3/ls.svg","mtime":"2018-04-02T14:38:31+02:00","size":1222,"digest":"d02bcefe7c298c153665f35c33eedb08e2e2b345350e4bf1714a87abf86b2d0e","integrity":"sha256-0CvO/nwpjBU2ZfNcM+7bCOLis0U1DkvxcUqHq/hrLQ4="},"flags/1x1/ls-85c731c313a46db12bdb27fe229e9f7d052b447c624663b73ffa1dbab97f03fb.svg":{"logical_path":"flags/1x1/ls.svg","mtime":"2018-04-02T14:38:31+02:00","size":1245,"digest":"85c731c313a46db12bdb27fe229e9f7d052b447c624663b73ffa1dbab97f03fb","integrity":"sha256-hccxwxOkbbEr2yf+Ip6ffQUrRHxiRmO3P/odurl/A/s="},"flags/4x3/lt-c08eb18a15d2003cb544432b11c5081d3d5741370669b4df306d1c6bce14cb51.svg":{"logical_path":"flags/4x3/lt.svg","mtime":"2018-04-02T14:38:31+02:00","size":445,"digest":"c08eb18a15d2003cb544432b11c5081d3d5741370669b4df306d1c6bce14cb51","integrity":"sha256-wI6xihXSADy1REMrEcUIHT1XQTcGabTfMG0ca84Uy1E="},"flags/1x1/lt-c1bd7e3d289ac9b0df06d47237780eaf4d30f01281ed50a7df9a22bc3a2489c5.svg":{"logical_path":"flags/1x1/lt.svg","mtime":"2018-04-02T14:38:31+02:00","size":445,"digest":"c1bd7e3d289ac9b0df06d47237780eaf4d30f01281ed50a7df9a22bc3a2489c5","integrity":"sha256-wb1+PSiaybDfBtRyN3gOr00w8BKB7VCn35oivDokicU="},"flags/4x3/lu-99e7b6adb3a9e0f867b17eb3b1f0f33db92fd27cfd7b651f62453f359bace22f.svg":{"logical_path":"flags/4x3/lu.svg","mtime":"2018-04-02T14:38:31+02:00","size":231,"digest":"99e7b6adb3a9e0f867b17eb3b1f0f33db92fd27cfd7b651f62453f359bace22f","integrity":"sha256-mee2rbOp4PhnsX6zsfDzPbkv0nz9e2UfYkU/NZus4i8="},"flags/1x1/lu-ab544445f16afa450549288ac86c2cc9a458a9d7747b3a89d5ecef7db9c83ce7.svg":{"logical_path":"flags/1x1/lu.svg","mtime":"2018-04-02T14:38:31+02:00","size":235,"digest":"ab544445f16afa450549288ac86c2cc9a458a9d7747b3a89d5ecef7db9c83ce7","integrity":"sha256-q1RERfFq+kUFSSiKyGwsyaRYqdd0ezqJ1ezvfbnIPOc="},"flags/4x3/lv-f8844d50b89f0369f73d580d3676553e7e55dd8ab2460e592a29a530d9bed886.svg":{"logical_path":"flags/4x3/lv.svg","mtime":"2018-04-02T14:38:31+02:00","size":236,"digest":"f8844d50b89f0369f73d580d3676553e7e55dd8ab2460e592a29a530d9bed886","integrity":"sha256-+IRNULifA2n3PVgNNnZVPn5V3YqyRg5ZKimlMNm+2IY="},"flags/1x1/lv-baeced49dd4249e36a25b0f23a5c601a69e9dee3137627cd4450194b85a99dd4.svg":{"logical_path":"flags/1x1/lv.svg","mtime":"2018-04-02T14:38:31+02:00","size":240,"digest":"baeced49dd4249e36a25b0f23a5c601a69e9dee3137627cd4450194b85a99dd4","integrity":"sha256-uuztSd1CSeNqJbDyOlxgGmnp3uMTdifNRFAZS4WpndQ="},"flags/4x3/ly-03209121483967f9d74849fb9261de23e9ff2e02c4e40b29f1cda0631b8a5fae.svg":{"logical_path":"flags/4x3/ly.svg","mtime":"2018-04-02T14:38:31+02:00","size":534,"digest":"03209121483967f9d74849fb9261de23e9ff2e02c4e40b29f1cda0631b8a5fae","integrity":"sha256-AyCRIUg5Z/nXSEn7kmHeI+n/LgLE5Asp8c2gYxuKX64="},"flags/1x1/ly-1e6e070aaa4bfc97a5a446a39bf746ab3c4c81d9f62c975cab164e16de3a3ffe.svg":{"logical_path":"flags/1x1/ly.svg","mtime":"2018-04-02T14:38:31+02:00","size":533,"digest":"1e6e070aaa4bfc97a5a446a39bf746ab3c4c81d9f62c975cab164e16de3a3ffe","integrity":"sha256-Hm4HCqpL/JelpEajm/dGqzxMgdn2LJdcqxZOFt46P/4="},"flags/4x3/ma-9a25cc7c2868fa45b251dd1b99a0be3b583df69732146142020fe9c6c0c95b63.svg":{"logical_path":"flags/4x3/ma.svg","mtime":"2018-04-02T14:38:31+02:00","size":253,"digest":"9a25cc7c2868fa45b251dd1b99a0be3b583df69732146142020fe9c6c0c95b63","integrity":"sha256-miXMfCho+kWyUd0bmaC+O1g99pcyFGFCAg/pxsDJW2M="},"flags/1x1/ma-4f18b9c355b8b8bf0db69badb235a183dbd558deb6439bf03b4f18e56837a7f3.svg":{"logical_path":"flags/1x1/ma.svg","mtime":"2018-04-02T14:38:31+02:00","size":253,"digest":"4f18b9c355b8b8bf0db69badb235a183dbd558deb6439bf03b4f18e56837a7f3","integrity":"sha256-Txi5w1W4uL8NtputsjWhg9vVWN62Q5vwO08Y5Wg3p/M="},"flags/4x3/mc-b0c50599ea2a550680a6a867579930e0b47d3e05193a7294a26b7849a7ad35e2.svg":{"logical_path":"flags/4x3/mc.svg","mtime":"2018-04-02T14:38:31+02:00","size":240,"digest":"b0c50599ea2a550680a6a867579930e0b47d3e05193a7294a26b7849a7ad35e2","integrity":"sha256-sMUFmeoqVQaApqhnV5kw4LR9PgUZOnKUomt4SaetNeI="},"flags/1x1/mc-8f1fe6210338399d8791d91f39234b1a09acf2aa5e0387696048dc7068534a28.svg":{"logical_path":"flags/1x1/mc.svg","mtime":"2018-04-02T14:38:31+02:00","size":240,"digest":"8f1fe6210338399d8791d91f39234b1a09acf2aa5e0387696048dc7068534a28","integrity":"sha256-jx/mIQM4OZ2HkdkfOSNLGgms8qpeA4dpYEjccGhTSig="},"flags/4x3/md-8849eef7bdf916e962f7bb31af87c8d47aef33f9f4a2017b2ce55c4166e79643.svg":{"logical_path":"flags/4x3/md.svg","mtime":"2018-04-02T14:38:31+02:00","size":11283,"digest":"8849eef7bdf916e962f7bb31af87c8d47aef33f9f4a2017b2ce55c4166e79643","integrity":"sha256-iEnu9735Fuli97sxr4fI1HrvM/n0ogF7LOVcQWbnlkM="},"flags/1x1/md-43f1bb4157545abe6e79215459efb548d913bbe7922078cd40cb722a4e19d9b4.svg":{"logical_path":"flags/1x1/md.svg","mtime":"2018-04-02T14:38:31+02:00","size":11387,"digest":"43f1bb4157545abe6e79215459efb548d913bbe7922078cd40cb722a4e19d9b4","integrity":"sha256-Q/G7QVdUWr5ueSFUWe+1SNkTu+eSIHjNQMtyKk4Z2bQ="},"flags/4x3/me-983d452d43cfb8d628bfc5c0cf4991c2ba3cf0e39e70aa5353cfd4e9ec3da62d.svg":{"logical_path":"flags/4x3/me.svg","mtime":"2018-04-02T14:38:31+02:00","size":63177,"digest":"983d452d43cfb8d628bfc5c0cf4991c2ba3cf0e39e70aa5353cfd4e9ec3da62d","integrity":"sha256-mD1FLUPPuNYov8XAz0mRwro88OOecKpTU8/U6ew9pi0="},"flags/1x1/me-104d6a96038ef06d3d8b89c9221996f3649b5b821139b11b2e07695b0f6fda2f.svg":{"logical_path":"flags/1x1/me.svg","mtime":"2018-04-02T14:38:31+02:00","size":64191,"digest":"104d6a96038ef06d3d8b89c9221996f3649b5b821139b11b2e07695b0f6fda2f","integrity":"sha256-EE1qlgOO8G09i4nJIhmW82SbW4IRObEbLgdpWw9v2i8="},"flags/4x3/mf-31fb851bfcc2340d2fa43e86a099cc7becfc8e7f996a4d2ca56bd050e6537086.svg":{"logical_path":"flags/4x3/mf.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"31fb851bfcc2340d2fa43e86a099cc7becfc8e7f996a4d2ca56bd050e6537086","integrity":"sha256-MfuFG/zCNA0vpD6GoJnMe+z8jn+Zak0spWvQUOZTcIY="},"flags/1x1/mf-fe20ce9bf911631d6e79edf21c8cff0716f2dc1ffded39515735444d9a66fa55.svg":{"logical_path":"flags/1x1/mf.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"fe20ce9bf911631d6e79edf21c8cff0716f2dc1ffded39515735444d9a66fa55","integrity":"sha256-/iDOm/kRYx1uee3yHIz/Bxby3B/97TlRVzVETZpm+lU="},"flags/4x3/mg-5effe963e29f804a26f95dbbc9519add454a0fd9eb918ddfeb55e1e99a1a2701.svg":{"logical_path":"flags/4x3/mg.svg","mtime":"2018-04-02T14:38:31+02:00","size":305,"digest":"5effe963e29f804a26f95dbbc9519add454a0fd9eb918ddfeb55e1e99a1a2701","integrity":"sha256-Xv/pY+KfgEom+V27yVGa3UVKD9nrkY3f61Xh6ZoaJwE="},"flags/1x1/mg-9e546cfb78810d9b25c814a84aadd6907880b8e0cdd2e4e30738b519e7c1ac91.svg":{"logical_path":"flags/1x1/mg.svg","mtime":"2018-04-02T14:38:31+02:00","size":305,"digest":"9e546cfb78810d9b25c814a84aadd6907880b8e0cdd2e4e30738b519e7c1ac91","integrity":"sha256-nlRs+3iBDZslyBSoSq3WkHiAuODN0uTjBzi1GefBrJE="},"flags/4x3/mh-d8cfd123007dbb99aa700c335957926a6d5e877ab49680c79629a32716d7a782.svg":{"logical_path":"flags/4x3/mh.svg","mtime":"2018-04-02T14:38:31+02:00","size":744,"digest":"d8cfd123007dbb99aa700c335957926a6d5e877ab49680c79629a32716d7a782","integrity":"sha256-2M/RIwB9u5mqcAwzWVeSam1eh3q0loDHlimjJxbXp4I="},"flags/1x1/mh-3fe03d4d063a4729fc8b68fd5e9d7d2eef6e65c4e82954c83f76b138cea2eb45.svg":{"logical_path":"flags/1x1/mh.svg","mtime":"2018-04-02T14:38:31+02:00","size":767,"digest":"3fe03d4d063a4729fc8b68fd5e9d7d2eef6e65c4e82954c83f76b138cea2eb45","integrity":"sha256-P+A9TQY6Ryn8i2j9Xp19Lu9uZcToKVTIP3axOM6i60U="},"flags/4x3/mk-6e8071d15f2ff125d30bf89d000dcb47db9545cf9b7ff04f1474650ec2f4d25c.svg":{"logical_path":"flags/4x3/mk.svg","mtime":"2018-04-02T14:38:31+02:00","size":385,"digest":"6e8071d15f2ff125d30bf89d000dcb47db9545cf9b7ff04f1474650ec2f4d25c","integrity":"sha256-boBx0V8v8SXTC/idAA3LR9uVRc+bf/BPFHRlDsL00lw="},"flags/1x1/mk-fdc9212f9f311cbface56b6587468a2e845111b697edc11b7edda9fcf100c1d5.svg":{"logical_path":"flags/1x1/mk.svg","mtime":"2018-04-02T14:38:31+02:00","size":413,"digest":"fdc9212f9f311cbface56b6587468a2e845111b697edc11b7edda9fcf100c1d5","integrity":"sha256-/ckhL58xHL+s5Wtlh0aKLoRREbaX7cEbft2p/PEAwdU="},"flags/4x3/ml-a730102e0c6f6362de9c10ef8da6cf7b123465d01a297e7a89808b01fa4771cd.svg":{"logical_path":"flags/4x3/ml.svg","mtime":"2018-04-02T14:38:31+02:00","size":279,"digest":"a730102e0c6f6362de9c10ef8da6cf7b123465d01a297e7a89808b01fa4771cd","integrity":"sha256-pzAQLgxvY2LenBDvjabPexI0ZdAaKX56iYCLAfpHcc0="},"flags/1x1/ml-a661355da206b0cb7ac4c84b6cdf7e411fbca8fcb271ae999fa60d5c67578192.svg":{"logical_path":"flags/1x1/ml.svg","mtime":"2018-04-02T14:38:31+02:00","size":282,"digest":"a661355da206b0cb7ac4c84b6cdf7e411fbca8fcb271ae999fa60d5c67578192","integrity":"sha256-pmE1XaIGsMt6xMhLbN9+QR+8qPyyca6Zn6YNXGdXgZI="},"flags/4x3/mm-6d0d207d662477110f2b863488088818d8400386358dcbc669a2d8c54d1bae16.svg":{"logical_path":"flags/4x3/mm.svg","mtime":"2018-04-02T14:38:31+02:00","size":851,"digest":"6d0d207d662477110f2b863488088818d8400386358dcbc669a2d8c54d1bae16","integrity":"sha256-bQ0gfWYkdxEPK4Y0iAiIGNhAA4Y1jcvGaaLYxU0brhY="},"flags/1x1/mm-de7d46b6543343af61ba997045cb41a707bd0db1e7a5879971ca8fddcbdf9e99.svg":{"logical_path":"flags/1x1/mm.svg","mtime":"2018-04-02T14:38:31+02:00","size":868,"digest":"de7d46b6543343af61ba997045cb41a707bd0db1e7a5879971ca8fddcbdf9e99","integrity":"sha256-3n1GtlQzQ69huplwRctBpwe9DbHnpYeZccqP3cvfnpk="},"flags/4x3/mn-656eb51e88bfce82401e4080eb791ddf16d571cbba102cdd4316c5de4711ac65.svg":{"logical_path":"flags/4x3/mn.svg","mtime":"2018-04-02T14:38:31+02:00","size":1256,"digest":"656eb51e88bfce82401e4080eb791ddf16d571cbba102cdd4316c5de4711ac65","integrity":"sha256-ZW61Hoi/zoJAHkCA63kd3xbVccu6ECzdQxbF3kcRrGU="},"flags/1x1/mn-ad22cb2c195a7d8ca8e4174db011d5f58238ee25039b5b2da2649d8ca8b00123.svg":{"logical_path":"flags/1x1/mn.svg","mtime":"2018-04-02T14:38:31+02:00","size":1263,"digest":"ad22cb2c195a7d8ca8e4174db011d5f58238ee25039b5b2da2649d8ca8b00123","integrity":"sha256-rSLLLBlafYyo5BdNsBHV9YI47iUDm1stomSdjKiwASM="},"flags/4x3/mo-37a1088aa687af13951bc93886e3e51cb246eccfde1b56528f189327ea291792.svg":{"logical_path":"flags/4x3/mo.svg","mtime":"2018-04-02T14:38:31+02:00","size":1516,"digest":"37a1088aa687af13951bc93886e3e51cb246eccfde1b56528f189327ea291792","integrity":"sha256-N6EIiqaHrxOVG8k4huPlHLJG7M/eG1ZSjxiTJ+opF5I="},"flags/1x1/mo-b463a1c37b69131d662e3fb2ae937583458824a09bcf68fc7ed2d7fd729138d1.svg":{"logical_path":"flags/1x1/mo.svg","mtime":"2018-04-02T14:38:31+02:00","size":1550,"digest":"b463a1c37b69131d662e3fb2ae937583458824a09bcf68fc7ed2d7fd729138d1","integrity":"sha256-tGOhw3tpEx1mLj+yrpN1g0WIJKCbz2j8ftLX/XKRONE="},"flags/4x3/mp-ecd12cadc358fdf293e856c0a3ffc09409123cabd3c7201225b2d21b59551e14.svg":{"logical_path":"flags/4x3/mp.svg","mtime":"2018-04-02T14:38:31+02:00","size":23425,"digest":"ecd12cadc358fdf293e856c0a3ffc09409123cabd3c7201225b2d21b59551e14","integrity":"sha256-7NEsrcNY/fKT6FbAo//AlAkSPKvTxyASJbLSG1lVHhQ="},"flags/1x1/mp-d1f4ba10c1409e713253f1fbb107eeccbd4ec1a8f9036663f1ac1991aee53835.svg":{"logical_path":"flags/1x1/mp.svg","mtime":"2018-04-02T14:38:31+02:00","size":23663,"digest":"d1f4ba10c1409e713253f1fbb107eeccbd4ec1a8f9036663f1ac1991aee53835","integrity":"sha256-0fS6EMFAnnEyU/H7sQfuzL1Owaj5A2Zj8awZka7lODU="},"flags/4x3/mq-b4e1b08a93c1364c79e6d61f95b16fca5b884da6e77835bc0e0adfff8ecc2d7f.svg":{"logical_path":"flags/4x3/mq.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"b4e1b08a93c1364c79e6d61f95b16fca5b884da6e77835bc0e0adfff8ecc2d7f","integrity":"sha256-tOGwipPBNkx55tYflbFvyluITabneDW8Dgrf/47MLX8="},"flags/1x1/mq-19cb6f7cb7354c3fd40e987c93a2d76329d34b2ed3873c3f25fe56802f251ea8.svg":{"logical_path":"flags/1x1/mq.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"19cb6f7cb7354c3fd40e987c93a2d76329d34b2ed3873c3f25fe56802f251ea8","integrity":"sha256-GctvfLc1TD/UDph8k6LXYynTSy7Thzw/Jf5WgC8lHqg="},"flags/4x3/mr-9f64af3ed5c6d8d1f68b5cb09fd1aa9d28c3c95107e063f64a0ef95f0cb9429a.svg":{"logical_path":"flags/4x3/mr.svg","mtime":"2018-04-02T14:38:31+02:00","size":450,"digest":"9f64af3ed5c6d8d1f68b5cb09fd1aa9d28c3c95107e063f64a0ef95f0cb9429a","integrity":"sha256-n2SvPtXG2NH2i1ywn9GqnSjDyVEH4GP2Sg75Xwy5Qpo="},"flags/1x1/mr-0e79b7bcc669bb871d94021db2b78b162b9867c7eaf934d8f7a3025fd5903576.svg":{"logical_path":"flags/1x1/mr.svg","mtime":"2018-04-02T14:38:31+02:00","size":438,"digest":"0e79b7bcc669bb871d94021db2b78b162b9867c7eaf934d8f7a3025fd5903576","integrity":"sha256-Dnm3vMZpu4cdlAIdsreLFiuYZ8fq+TTY96MCX9WQNXY="},"flags/4x3/ms-32620dd70353777b2ee62951556976f398cd38ae359b5a8c97311a1dc61eb8bc.svg":{"logical_path":"flags/4x3/ms.svg","mtime":"2018-04-02T14:38:31+02:00","size":6792,"digest":"32620dd70353777b2ee62951556976f398cd38ae359b5a8c97311a1dc61eb8bc","integrity":"sha256-MmIN1wNTd3su5ilRVWl285jNOK41m1qMlzEaHcYeuLw="},"flags/1x1/ms-4104d4f36cb5cf1c6de78e52e90bc3c5b8bfa262617b16a737673feb8c30a00c.svg":{"logical_path":"flags/1x1/ms.svg","mtime":"2018-04-02T14:38:31+02:00","size":6700,"digest":"4104d4f36cb5cf1c6de78e52e90bc3c5b8bfa262617b16a737673feb8c30a00c","integrity":"sha256-QQTU82y1zxxt545S6QvDxbi/omJhexanN2c/64wwoAw="},"flags/4x3/mt-0c9819aa69b34b84c1ee43620922737122eb38f107be9864a0690ac66ef8aa64.svg":{"logical_path":"flags/4x3/mt.svg","mtime":"2018-04-02T14:38:31+02:00","size":8807,"digest":"0c9819aa69b34b84c1ee43620922737122eb38f107be9864a0690ac66ef8aa64","integrity":"sha256-DJgZqmmzS4TB7kNiCSJzcSLrOPEHvphkoGkKxm74qmQ="},"flags/1x1/mt-3c3fe71f2a2bf0d961fd145ad7e48ca1e9d3a05cce514354714ba4568503d106.svg":{"logical_path":"flags/1x1/mt.svg","mtime":"2018-04-02T14:38:31+02:00","size":10519,"digest":"3c3fe71f2a2bf0d961fd145ad7e48ca1e9d3a05cce514354714ba4568503d106","integrity":"sha256-PD/nHyor8Nlh/RRa1+SMoenToFzOUUNUcUukVoUD0QY="},"flags/4x3/mu-c78c23f1499756b9db762ae434ca354d1481447fa94c66bc10aca9443b399059.svg":{"logical_path":"flags/4x3/mu.svg","mtime":"2018-04-02T14:38:31+02:00","size":322,"digest":"c78c23f1499756b9db762ae434ca354d1481447fa94c66bc10aca9443b399059","integrity":"sha256-x4wj8UmXVrnbdirkNMo1TRSBRH+pTGa8EKypRDs5kFk="},"flags/1x1/mu-91ebc79d0fa306127ea8b7a33f77d5b28f35c516ea91ff0468c7344dc838db69.svg":{"logical_path":"flags/1x1/mu.svg","mtime":"2018-04-02T14:38:31+02:00","size":322,"digest":"91ebc79d0fa306127ea8b7a33f77d5b28f35c516ea91ff0468c7344dc838db69","integrity":"sha256-kevHnQ+jBhJ+qLejP3fVso81xRbqkf8EaMc0Tcg422k="},"flags/4x3/mv-a17c947e17adae6aacef01a3e131c4150aa094911b53fbaead41783683e008eb.svg":{"logical_path":"flags/4x3/mv.svg","mtime":"2018-04-02T14:38:31+02:00","size":292,"digest":"a17c947e17adae6aacef01a3e131c4150aa094911b53fbaead41783683e008eb","integrity":"sha256-oXyUfhetrmqs7wGj4THEFQqglJEbU/uurUF4NoPgCOs="},"flags/1x1/mv-d138e94d9d2ed093ef1425c1164493b780202f9a7f7937241a7b081b79ff8b01.svg":{"logical_path":"flags/1x1/mv.svg","mtime":"2018-04-02T14:38:31+02:00","size":310,"digest":"d138e94d9d2ed093ef1425c1164493b780202f9a7f7937241a7b081b79ff8b01","integrity":"sha256-0TjpTZ0u0JPvFCXBFkSTt4AgL5p/eTckGnsIG3n/iwE="},"flags/4x3/mw-21f116afdf71df80e3c59084c6ba640814fa5389430328ff55c9403b5c239632.svg":{"logical_path":"flags/4x3/mw.svg","mtime":"2018-04-02T14:38:31+02:00","size":3721,"digest":"21f116afdf71df80e3c59084c6ba640814fa5389430328ff55c9403b5c239632","integrity":"sha256-IfEWr99x34DjxZCExrpkCBT6U4lDAyj/VclAO1wjljI="},"flags/1x1/mw-5c2228d3f1cf1f9cf8cb158e813202981828c11e8caf117836fc57fa6bc1c788.svg":{"logical_path":"flags/1x1/mw.svg","mtime":"2018-04-02T14:38:31+02:00","size":3930,"digest":"5c2228d3f1cf1f9cf8cb158e813202981828c11e8caf117836fc57fa6bc1c788","integrity":"sha256-XCIo0/HPH5z4yxWOgTICmBgowR6MrxF4NvxX+mvBx4g="},"flags/4x3/mx-a235f9b16921590b7e78caa6f76339361356946eaf0046badd10732b4647c0b6.svg":{"logical_path":"flags/4x3/mx.svg","mtime":"2018-04-02T14:38:31+02:00","size":95864,"digest":"a235f9b16921590b7e78caa6f76339361356946eaf0046badd10732b4647c0b6","integrity":"sha256-ojX5sWkhWQt+eMqm92M5NhNWlG6vAEa63RBzK0ZHwLY="},"flags/1x1/mx-cdab01ebcdccc020ca16e1355ef1fd18ca0043b501f399ca8edc48adfa8c7292.svg":{"logical_path":"flags/1x1/mx.svg","mtime":"2018-04-02T14:38:31+02:00","size":91341,"digest":"cdab01ebcdccc020ca16e1355ef1fd18ca0043b501f399ca8edc48adfa8c7292","integrity":"sha256-zasB683MwCDKFuE1XvH9GMoAQ7UB85nKjtxIrfqMcpI="},"flags/4x3/my-0ed63574cf5f20c0663ab8cd1f700e150fb641fd0b93602ba013abbfaae5ee59.svg":{"logical_path":"flags/4x3/my.svg","mtime":"2018-04-02T14:38:31+02:00","size":1284,"digest":"0ed63574cf5f20c0663ab8cd1f700e150fb641fd0b93602ba013abbfaae5ee59","integrity":"sha256-DtY1dM9fIMBmOrjNH3AOFQ+2Qf0Lk2AroBOrv6rl7lk="},"flags/1x1/my-5e8d31ef06ffc8af33a5616d760592ecd022c52afc8ba33c721f1e4989da0628.svg":{"logical_path":"flags/1x1/my.svg","mtime":"2018-04-02T14:38:31+02:00","size":1275,"digest":"5e8d31ef06ffc8af33a5616d760592ecd022c52afc8ba33c721f1e4989da0628","integrity":"sha256-Xo0x7wb/yK8zpWFtdgWS7NAixSr8i6M8ch8eSYnaBig="},"flags/4x3/mz-752e2293917b1d2ece3f097104caeadf6a679054a779e9d3be8e49dc324bb88a.svg":{"logical_path":"flags/4x3/mz.svg","mtime":"2018-04-02T14:38:31+02:00","size":2623,"digest":"752e2293917b1d2ece3f097104caeadf6a679054a779e9d3be8e49dc324bb88a","integrity":"sha256-dS4ik5F7HS7OPwlxBMrq32pnkFSneenTvo5J3DJLuIo="},"flags/1x1/mz-300cba975ad43c962ceca0d266ded1fe3d21d6b4d701d657fb42b27268ea2964.svg":{"logical_path":"flags/1x1/mz.svg","mtime":"2018-04-02T14:38:31+02:00","size":2604,"digest":"300cba975ad43c962ceca0d266ded1fe3d21d6b4d701d657fb42b27268ea2964","integrity":"sha256-MAy6l1rUPJYs7KDSZt7R/j0h1rTXAdZX+0KycmjqKWQ="},"flags/4x3/na-a0655a2e70751278e6a60d31e818f672864a6e68e8b3d3361b2fbb70fa9bfef8.svg":{"logical_path":"flags/4x3/na.svg","mtime":"2018-04-02T14:38:31+02:00","size":1005,"digest":"a0655a2e70751278e6a60d31e818f672864a6e68e8b3d3361b2fbb70fa9bfef8","integrity":"sha256-oGVaLnB1Enjmpg0x6Bj2coZKbmjos9M2Gy+7cPqb/vg="},"flags/1x1/na-1ce089a189db5be15eb05df8155f9bd017b61fc1a497e5b3021ff2ca664e122d.svg":{"logical_path":"flags/1x1/na.svg","mtime":"2018-04-02T14:38:31+02:00","size":983,"digest":"1ce089a189db5be15eb05df8155f9bd017b61fc1a497e5b3021ff2ca664e122d","integrity":"sha256-HOCJoYnbW+FesF34FV+b0Be2H8Gkl+WzAh/yymZOEi0="},"flags/4x3/nc-0c7171d91c44414ed69808611db588f1283ee7e34ea8a74a9a5101ba4b1cb305.svg":{"logical_path":"flags/4x3/nc.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"0c7171d91c44414ed69808611db588f1283ee7e34ea8a74a9a5101ba4b1cb305","integrity":"sha256-DHFx2RxEQU7WmAhhHbWI8Sg+5+NOqKdKmlEBukscswU="},"flags/1x1/nc-d3a1629f06dc3200af7669f2d895fce1908d2c1ca02d71e530bdfa6646a9516c.svg":{"logical_path":"flags/1x1/nc.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"d3a1629f06dc3200af7669f2d895fce1908d2c1ca02d71e530bdfa6646a9516c","integrity":"sha256-06FinwbcMgCvdmny2JX84ZCNLBygLXHlML36ZkapUWw="},"flags/4x3/ne-2b61d30a6cb4554535538e3b753926853e8c629a494a347286b9731c803548e4.svg":{"logical_path":"flags/4x3/ne.svg","mtime":"2018-04-02T14:38:31+02:00","size":279,"digest":"2b61d30a6cb4554535538e3b753926853e8c629a494a347286b9731c803548e4","integrity":"sha256-K2HTCmy0VUU1U447dTkmhT6MYppJSjRyhrlzHIA1SOQ="},"flags/1x1/ne-9c5f798ccd7d3dd3771ae628b4a39dfb2a4578fefd2e006f3ce89c3e494d0cb1.svg":{"logical_path":"flags/1x1/ne.svg","mtime":"2018-04-02T14:38:31+02:00","size":285,"digest":"9c5f798ccd7d3dd3771ae628b4a39dfb2a4578fefd2e006f3ce89c3e494d0cb1","integrity":"sha256-nF95jM19PdN3GuYotKOd+ypFeP79LgBvPOicPklNDLE="},"flags/4x3/nf-4e615baa83a8b4db3e39fe1d251ab913943d64e0cd320f251d619ab54e7512d3.svg":{"logical_path":"flags/4x3/nf.svg","mtime":"2018-04-02T14:38:31+02:00","size":5845,"digest":"4e615baa83a8b4db3e39fe1d251ab913943d64e0cd320f251d619ab54e7512d3","integrity":"sha256-TmFbqoOotNs+Of4dJRq5E5Q9ZODNMg8lHWGatU51EtM="},"flags/1x1/nf-45403247c90050484813acf23c50f543779528e346317274373c3c24fd830103.svg":{"logical_path":"flags/1x1/nf.svg","mtime":"2018-04-02T14:38:31+02:00","size":5598,"digest":"45403247c90050484813acf23c50f543779528e346317274373c3c24fd830103","integrity":"sha256-RUAyR8kAUEhIE6zyPFD1Q3eVKONGMXJ0Nzw8JP2DAQM="},"flags/4x3/ng-d52fd188be973f31dd34e5a0b3fed0de68fe736c8a41c6028d9c248c038c8641.svg":{"logical_path":"flags/4x3/ng.svg","mtime":"2018-04-02T14:38:31+02:00","size":263,"digest":"d52fd188be973f31dd34e5a0b3fed0de68fe736c8a41c6028d9c248c038c8641","integrity":"sha256-1S/RiL6XPzHdNOWgs/7Q3mj+c2yKQcYCjZwkjAOMhkE="},"flags/1x1/ng-f22edcc5867554d69ecbe15add0fbbb1389631f3ced07a4f820065c7770c65f5.svg":{"logical_path":"flags/1x1/ng.svg","mtime":"2018-04-02T14:38:31+02:00","size":263,"digest":"f22edcc5867554d69ecbe15add0fbbb1389631f3ced07a4f820065c7770c65f5","integrity":"sha256-8i7cxYZ1VNaey+Fa3Q+7sTiWMfPO0HpPggBlx3cMZfU="},"flags/4x3/ni-2fbb883e46fbe3b2ecfed9dac004ceb546f25c77a84a5966eea224674aebc610.svg":{"logical_path":"flags/4x3/ni.svg","mtime":"2018-04-02T14:38:31+02:00","size":18584,"digest":"2fbb883e46fbe3b2ecfed9dac004ceb546f25c77a84a5966eea224674aebc610","integrity":"sha256-L7uIPkb747Ls/tnawATOtUbyXHeoSllm7qIkZ0rrxhA="},"flags/1x1/ni-214aed148b615c4846f842b47f99cf178ac62a96cf18c5dd6b23467184b56680.svg":{"logical_path":"flags/1x1/ni.svg","mtime":"2018-04-02T14:38:31+02:00","size":18664,"digest":"214aed148b615c4846f842b47f99cf178ac62a96cf18c5dd6b23467184b56680","integrity":"sha256-IUrtFIthXEhG+EK0f5nPF4rGKpbPGMXdayNGcYS1ZoA="},"flags/4x3/nl-4f0ecea529dd4c0099dd41a7801fa5ac44aa04cd872ca31e11efd58b5a813774.svg":{"logical_path":"flags/4x3/nl.svg","mtime":"2018-04-02T14:38:31+02:00","size":367,"digest":"4f0ecea529dd4c0099dd41a7801fa5ac44aa04cd872ca31e11efd58b5a813774","integrity":"sha256-Tw7OpSndTACZ3UGngB+lrESqBM2HLKMeEe/Vi1qBN3Q="},"flags/1x1/nl-9c8f60e638879d642487818975e58c61cd3102f0e68c360708243c076436ff68.svg":{"logical_path":"flags/1x1/nl.svg","mtime":"2018-04-02T14:38:31+02:00","size":375,"digest":"9c8f60e638879d642487818975e58c61cd3102f0e68c360708243c076436ff68","integrity":"sha256-nI9g5jiHnWQkh4GJdeWMYc0xAvDmjDYHCCQ8B2Q2/2g="},"flags/4x3/no-270f7ee9d1d2efa6abf16f693faba8586adae842d79d8aad9e3f37e96c27cbce.svg":{"logical_path":"flags/4x3/no.svg","mtime":"2018-04-02T14:38:31+02:00","size":324,"digest":"270f7ee9d1d2efa6abf16f693faba8586adae842d79d8aad9e3f37e96c27cbce","integrity":"sha256-Jw9+6dHS76ar8W9pP6uoWGra6ELXnYqtnj836Wwny84="},"flags/1x1/no-7d377325e8c5ec4de0376e9f4c13463f183af637e6c443716f22020c7a313979.svg":{"logical_path":"flags/1x1/no.svg","mtime":"2018-04-02T14:38:31+02:00","size":324,"digest":"7d377325e8c5ec4de0376e9f4c13463f183af637e6c443716f22020c7a313979","integrity":"sha256-fTdzJejF7E3gN26fTBNGPxg69jfmxENxbyICDHoxOXk="},"flags/4x3/np-69637ddb3a173c4522a71598278aa32462e1762e34dd99c9dc99a515433a6cf8.svg":{"logical_path":"flags/4x3/np.svg","mtime":"2018-04-02T14:38:31+02:00","size":1061,"digest":"69637ddb3a173c4522a71598278aa32462e1762e34dd99c9dc99a515433a6cf8","integrity":"sha256-aWN92zoXPEUipxWYJ4qjJGLhdi403ZnJ3JmlFUM6bPg="},"flags/1x1/np-44ead118cce3a1fcbb720cc8d6eab6ecb6b62292315f61ae5963a40262ee11d2.svg":{"logical_path":"flags/1x1/np.svg","mtime":"2018-04-02T14:38:31+02:00","size":1199,"digest":"44ead118cce3a1fcbb720cc8d6eab6ecb6b62292315f61ae5963a40262ee11d2","integrity":"sha256-ROrRGMzjofy7cgzI1uq27La2IpIxX2GuWWOkAmLuEdI="},"flags/4x3/nr-0bd3c0ba7bbac4bd5985b838096eeebd67711d39065619ef092fa4bb55b22a6d.svg":{"logical_path":"flags/4x3/nr.svg","mtime":"2018-04-02T14:38:31+02:00","size":648,"digest":"0bd3c0ba7bbac4bd5985b838096eeebd67711d39065619ef092fa4bb55b22a6d","integrity":"sha256-C9PAunu6xL1Zhbg4CW7uvWdxHTkGVhnvCS+ku1WyKm0="},"flags/1x1/nr-63b9c44e5dd66a59895f52707dc24db5bd1eab6e535298d24e414c0f2dafcb3c.svg":{"logical_path":"flags/1x1/nr.svg","mtime":"2018-04-02T14:38:31+02:00","size":671,"digest":"63b9c44e5dd66a59895f52707dc24db5bd1eab6e535298d24e414c0f2dafcb3c","integrity":"sha256-Y7nETl3WalmJX1JwfcJNtb0eq25TUpjSTkFMDy2vyzw="},"flags/4x3/nu-259989e1eea0cbf6b41a33176a4c9c1eaa2e7ae6571ad80a324c6309bd5aa5fc.svg":{"logical_path":"flags/4x3/nu.svg","mtime":"2018-04-02T14:38:31+02:00","size":1748,"digest":"259989e1eea0cbf6b41a33176a4c9c1eaa2e7ae6571ad80a324c6309bd5aa5fc","integrity":"sha256-JZmJ4e6gy/a0GjMXakycHqoueuZXGtgKMkxjCb1apfw="},"flags/1x1/nu-1cb535708f64ed8b386a245e571e677e935009af92f2b214760a2832c1ee1b53.svg":{"logical_path":"flags/1x1/nu.svg","mtime":"2018-04-02T14:38:31+02:00","size":1736,"digest":"1cb535708f64ed8b386a245e571e677e935009af92f2b214760a2832c1ee1b53","integrity":"sha256-HLU1cI9k7Ys4aiReVx5nfpNQCa+S8rIUdgooMsHuG1M="},"flags/4x3/nz-90ceca2a683fbec395a91b77b0880cea99c3b2cbdb24caa5474925cbdcc3675e.svg":{"logical_path":"flags/4x3/nz.svg","mtime":"2018-04-02T14:38:31+02:00","size":3019,"digest":"90ceca2a683fbec395a91b77b0880cea99c3b2cbdb24caa5474925cbdcc3675e","integrity":"sha256-kM7KKmg/vsOVqRt3sIgM6pnDssvbJMqlR0kly9zDZ14="},"flags/1x1/nz-b0d78f165a72edd46599222a2ea5f6a91a8252975cb03e33c4ca08e389859aac.svg":{"logical_path":"flags/1x1/nz.svg","mtime":"2018-04-02T14:38:31+02:00","size":3045,"digest":"b0d78f165a72edd46599222a2ea5f6a91a8252975cb03e33c4ca08e389859aac","integrity":"sha256-sNePFlpy7dRlmSIqLqX2qRqCUpdcsD4zxMoI44mFmqw="},"flags/4x3/om-aadcca7bc7ad318400097b84849dd64c4744306cd9b4f152fba34f2e84116965.svg":{"logical_path":"flags/4x3/om.svg","mtime":"2018-04-02T14:38:31+02:00","size":22891,"digest":"aadcca7bc7ad318400097b84849dd64c4744306cd9b4f152fba34f2e84116965","integrity":"sha256-qtzKe8etMYQACXuEhJ3WTEdEMGzZtPFS+6NPLoQRaWU="},"flags/1x1/om-705e2bd2b2fc7d13c152aa06bfb9e6ee4ad8b299f8c06ca16adad0b18b2b18ed.svg":{"logical_path":"flags/1x1/om.svg","mtime":"2018-04-02T14:38:31+02:00","size":22875,"digest":"705e2bd2b2fc7d13c152aa06bfb9e6ee4ad8b299f8c06ca16adad0b18b2b18ed","integrity":"sha256-cF4r0rL8fRPBUqoGv7nm7krYspn4wGyhatrQsYsrGO0="},"flags/4x3/pa-027e679bd65dcaa2c53145a14669c1e674a467a889ef702cbe2a260f7ca8ad38.svg":{"logical_path":"flags/4x3/pa.svg","mtime":"2018-04-02T14:38:31+02:00","size":746,"digest":"027e679bd65dcaa2c53145a14669c1e674a467a889ef702cbe2a260f7ca8ad38","integrity":"sha256-An5nm9ZdyqLFMUWhRmnB5nSkZ6iJ73AsviomD3yorTg="},"flags/1x1/pa-edeb4faeadaa286de7fdc667e25d38ad0cdbccaec5023182fed6a3c74e8b09eb.svg":{"logical_path":"flags/1x1/pa.svg","mtime":"2018-04-02T14:38:31+02:00","size":662,"digest":"edeb4faeadaa286de7fdc667e25d38ad0cdbccaec5023182fed6a3c74e8b09eb","integrity":"sha256-7etPrq2qKG3n/cZn4l04rQzbzK7FAjGC/tajx06LCes="},"flags/4x3/pe-7ec59842737c90d6ff543f1831fd69b51e1e7ee1b068c3ac6259cbf2c214d611.svg":{"logical_path":"flags/4x3/pe.svg","mtime":"2018-04-02T14:38:31+02:00","size":74343,"digest":"7ec59842737c90d6ff543f1831fd69b51e1e7ee1b068c3ac6259cbf2c214d611","integrity":"sha256-fsWYQnN8kNb/VD8YMf1ptR4efuGwaMOsYlnL8sIU1hE="},"flags/1x1/pe-97d1b8ed1d4ed5e5f0348a731ca4a3a4b9abc7d440447dc87a521f229f375ed3.svg":{"logical_path":"flags/1x1/pe.svg","mtime":"2018-04-02T14:38:31+02:00","size":73629,"digest":"97d1b8ed1d4ed5e5f0348a731ca4a3a4b9abc7d440447dc87a521f229f375ed3","integrity":"sha256-l9G47R1O1eXwNIpzHKSjpLmrx9RARH3IelIfIp83XtM="},"flags/4x3/pf-27955c73c5be4043c5b7ddf64c8f46d11c6648e3b1fc0efe028b8afea21a40e1.svg":{"logical_path":"flags/4x3/pf.svg","mtime":"2018-04-02T14:38:31+02:00","size":4292,"digest":"27955c73c5be4043c5b7ddf64c8f46d11c6648e3b1fc0efe028b8afea21a40e1","integrity":"sha256-J5Vcc8W+QEPFt932TI9G0RxmSOOx/A7+AouK/qIaQOE="},"flags/1x1/pf-83e3e1d36fba45e015c62f938e6d182029edc05ebfdc50bcb33860f36f96d73a.svg":{"logical_path":"flags/1x1/pf.svg","mtime":"2018-04-02T14:38:31+02:00","size":4235,"digest":"83e3e1d36fba45e015c62f938e6d182029edc05ebfdc50bcb33860f36f96d73a","integrity":"sha256-g+Ph02+6ReAVxi+Tjm0YICntwF6/3FC8szhg82+W1zo="},"flags/4x3/pg-c2fdd2551f9044c461eccfae2d7ba0a347a99143f6002b71a429942af0217897.svg":{"logical_path":"flags/4x3/pg.svg","mtime":"2018-04-02T14:38:31+02:00","size":1671,"digest":"c2fdd2551f9044c461eccfae2d7ba0a347a99143f6002b71a429942af0217897","integrity":"sha256-wv3SVR+QRMRh7M+uLXugo0epkUP2ACtxpCmUKvAheJc="},"flags/1x1/pg-cf60257fa85f9270b1e9980e703435186110167f76c153bc460c10ee8b2d4b09.svg":{"logical_path":"flags/1x1/pg.svg","mtime":"2018-04-02T14:38:31+02:00","size":2111,"digest":"cf60257fa85f9270b1e9980e703435186110167f76c153bc460c10ee8b2d4b09","integrity":"sha256-z2Alf6hfknCx6ZgOcDQ1GGEQFn92wVO8RgwQ7ostSwk="},"flags/4x3/ph-bf3394850a6cec6a535420eabce263e7f8193413e4af1fb317c76da025388c1b.svg":{"logical_path":"flags/4x3/ph.svg","mtime":"2018-04-02T14:38:31+02:00","size":1303,"digest":"bf3394850a6cec6a535420eabce263e7f8193413e4af1fb317c76da025388c1b","integrity":"sha256-vzOUhQps7GpTVCDqvOJj5/gZNBPkrx+zF8dtoCU4jBs="},"flags/1x1/ph-006c3218effe4269252cb9638de82ea339eb2894951705c630533ceffa842169.svg":{"logical_path":"flags/1x1/ph.svg","mtime":"2018-04-02T14:38:31+02:00","size":1303,"digest":"006c3218effe4269252cb9638de82ea339eb2894951705c630533ceffa842169","integrity":"sha256-AGwyGO/+QmklLLljjeguoznrKJSVFwXGMFM87/qEIWk="},"flags/4x3/pk-b64f6a32e5bb598f57cfe49c4899c2021f2d153653f3d92101e6e11b2158e500.svg":{"logical_path":"flags/4x3/pk.svg","mtime":"2018-04-02T14:38:31+02:00","size":743,"digest":"b64f6a32e5bb598f57cfe49c4899c2021f2d153653f3d92101e6e11b2158e500","integrity":"sha256-tk9qMuW7WY9Xz+ScSJnCAh8tFTZT89khAebhGyFY5QA="},"flags/1x1/pk-d2d58def913c9081c5eeeda5f0b6895068ec13c955694e359531e23422145e60.svg":{"logical_path":"flags/1x1/pk.svg","mtime":"2018-04-02T14:38:31+02:00","size":694,"digest":"d2d58def913c9081c5eeeda5f0b6895068ec13c955694e359531e23422145e60","integrity":"sha256-0tWN75E8kIHF7u2l8LaJUGjsE8lVaU41lTHiNCIUXmA="},"flags/4x3/pl-f55a710991a94c2e6c2f9f1a7a4a36ebb84b24b7c9d9df4e1ffe86d61321fa6f.svg":{"logical_path":"flags/4x3/pl.svg","mtime":"2018-04-02T14:38:31+02:00","size":228,"digest":"f55a710991a94c2e6c2f9f1a7a4a36ebb84b24b7c9d9df4e1ffe86d61321fa6f","integrity":"sha256-9VpxCZGpTC5sL58aeko267hLJLfJ2d9OH/6G1hMh+m8="},"flags/1x1/pl-fafb539259385f2b99df910cff085710a9b4d9706b74e4e0f8a6ef627615c4e7.svg":{"logical_path":"flags/1x1/pl.svg","mtime":"2018-04-02T14:38:31+02:00","size":228,"digest":"fafb539259385f2b99df910cff085710a9b4d9706b74e4e0f8a6ef627615c4e7","integrity":"sha256-+vtTklk4XyuZ35EM/whXEKm02XBrdOTg+KbvYnYVxOc="},"flags/4x3/pm-8f6338d2ae3e0e42adc9754720ca21ad4979095cf6d7467a8db5a5a1c3e0b2a5.svg":{"logical_path":"flags/4x3/pm.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"8f6338d2ae3e0e42adc9754720ca21ad4979095cf6d7467a8db5a5a1c3e0b2a5","integrity":"sha256-j2M40q4+DkKtyXVHIMohrUl5CVz210Z6jbWlocPgsqU="},"flags/1x1/pm-63029c6198dc42c404ec39807a99528b1d198eeeea6f9a1e309548242480140b.svg":{"logical_path":"flags/1x1/pm.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"63029c6198dc42c404ec39807a99528b1d198eeeea6f9a1e309548242480140b","integrity":"sha256-YwKcYZjcQsQE7DmAeplSix0Zju7qb5oeMJVIJCSAFAs="},"flags/4x3/pn-4006c11ca83011c0dd60a13ac30b27da0578b9f1368bd8c6de5aab423f6662d8.svg":{"logical_path":"flags/4x3/pn.svg","mtime":"2018-04-02T14:38:31+02:00","size":10953,"digest":"4006c11ca83011c0dd60a13ac30b27da0578b9f1368bd8c6de5aab423f6662d8","integrity":"sha256-QAbBHKgwEcDdYKE6wwsn2gV4ufE2i9jG3lqrQj9mYtg="},"flags/1x1/pn-6c433f7f9cb79c6d5ed7bbeade8a495e3b26ca2604f4fd3995096109684ac5dd.svg":{"logical_path":"flags/1x1/pn.svg","mtime":"2018-04-02T14:38:31+02:00","size":8624,"digest":"6c433f7f9cb79c6d5ed7bbeade8a495e3b26ca2604f4fd3995096109684ac5dd","integrity":"sha256-bEM/f5y3nG1e17vq3opJXjsmyiYE9P05lQlhCWhKxd0="},"flags/4x3/pr-6287e1515fa80e2d05133ed93f14ca03a1be6909a9ef6c736fd60f9c9fe73132.svg":{"logical_path":"flags/4x3/pr.svg","mtime":"2018-04-02T14:38:31+02:00","size":634,"digest":"6287e1515fa80e2d05133ed93f14ca03a1be6909a9ef6c736fd60f9c9fe73132","integrity":"sha256-YofhUV+oDi0FEz7ZPxTKA6G+aQmp72xzb9YPnJ/nMTI="},"flags/1x1/pr-526985b3a6d2d6de577ed0ed92d0b49ce854667e3ff630304813fd5af15527cd.svg":{"logical_path":"flags/1x1/pr.svg","mtime":"2018-04-02T14:38:31+02:00","size":622,"digest":"526985b3a6d2d6de577ed0ed92d0b49ce854667e3ff630304813fd5af15527cd","integrity":"sha256-UmmFs6bS1t5XftDtktC0nOhUZn4/9jAwSBP9WvFVJ80="},"flags/4x3/ps-31f50e1fcb44b9aa6e9ce4473c3085f744e70ea0fa1fd8d85787f4e7b0c4a69b.svg":{"logical_path":"flags/4x3/ps.svg","mtime":"2018-04-02T14:38:31+02:00","size":558,"digest":"31f50e1fcb44b9aa6e9ce4473c3085f744e70ea0fa1fd8d85787f4e7b0c4a69b","integrity":"sha256-MfUOH8tEuapunORHPDCF90TnDqD6H9jYV4f057DEpps="},"flags/1x1/ps-c43918bc71bef71b24dd46e8cacc53e0df53e02dcce6199d06d11a4637f08a04.svg":{"logical_path":"flags/1x1/ps.svg","mtime":"2018-04-02T14:38:31+02:00","size":544,"digest":"c43918bc71bef71b24dd46e8cacc53e0df53e02dcce6199d06d11a4637f08a04","integrity":"sha256-xDkYvHG+9xsk3UboysxT4N9T4C3M5hmdBtEaRjfwigQ="},"flags/4x3/pt-9aab20caed714ee47fc408f017037aea94a649b3ba4d87e2da37870ee31e4f92.svg":{"logical_path":"flags/4x3/pt.svg","mtime":"2018-04-02T14:38:31+02:00","size":8393,"digest":"9aab20caed714ee47fc408f017037aea94a649b3ba4d87e2da37870ee31e4f92","integrity":"sha256-mqsgyu1xTuR/xAjwFwN66pSmSbO6TYfi2jeHDuMeT5I="},"flags/1x1/pt-a309869e5018c9690a65ebdf8a2d69d61f82772068a7920f9680ed0581ae5966.svg":{"logical_path":"flags/1x1/pt.svg","mtime":"2018-04-02T14:38:31+02:00","size":8775,"digest":"a309869e5018c9690a65ebdf8a2d69d61f82772068a7920f9680ed0581ae5966","integrity":"sha256-owmGnlAYyWkKZevfii1p1h+CdyBop5IPloDtBYGuWWY="},"flags/4x3/pw-9262037d114d0f61571c74f9a5455809709b43e6565443ae2667981eecb5f12a.svg":{"logical_path":"flags/4x3/pw.svg","mtime":"2018-04-02T14:38:31+02:00","size":467,"digest":"9262037d114d0f61571c74f9a5455809709b43e6565443ae2667981eecb5f12a","integrity":"sha256-kmIDfRFND2FXHHT5pUVYCXCbQ+ZWVEOuJmeYHuy18So="},"flags/1x1/pw-a6f42019653ae26d43c6e9b7bef83fc98cff8ec5e8d0c50ad7cb0a17d5e565a6.svg":{"logical_path":"flags/1x1/pw.svg","mtime":"2018-04-02T14:38:31+02:00","size":511,"digest":"a6f42019653ae26d43c6e9b7bef83fc98cff8ec5e8d0c50ad7cb0a17d5e565a6","integrity":"sha256-pvQgGWU64m1Dxum3vvg/yYz/jsXo0MUK18sKF9XlZaY="},"flags/4x3/py-5bc9e9f0dee94ae3d9bd80ae6fb1aac297dc81a1c592d0a73bc3383bce73af74.svg":{"logical_path":"flags/4x3/py.svg","mtime":"2018-04-02T14:38:31+02:00","size":17312,"digest":"5bc9e9f0dee94ae3d9bd80ae6fb1aac297dc81a1c592d0a73bc3383bce73af74","integrity":"sha256-W8np8N7pSuPZvYCub7GqwpfcgaHFktCnO8M4O85zr3Q="},"flags/1x1/py-182eff300f4507fd9399fb6310d1cd3b45adadd7924ad2814003c7111ec5c0de.svg":{"logical_path":"flags/1x1/py.svg","mtime":"2018-04-02T14:38:31+02:00","size":17478,"digest":"182eff300f4507fd9399fb6310d1cd3b45adadd7924ad2814003c7111ec5c0de","integrity":"sha256-GC7/MA9FB/2TmftjENHNO0WtrdeSStKBQAPHER7FwN4="},"flags/4x3/qa-32c93970f8e521850eddfaf2a89dfff987f0ae3b0b73a253c301b61cf547cf9e.svg":{"logical_path":"flags/4x3/qa.svg","mtime":"2018-04-02T14:38:31+02:00","size":362,"digest":"32c93970f8e521850eddfaf2a89dfff987f0ae3b0b73a253c301b61cf547cf9e","integrity":"sha256-Msk5cPjlIYUO3fryqJ3/+YfwrjsLc6JTwwG2HPVHz54="},"flags/1x1/qa-182e4d8ace2607d0c02d3c29d65eb084af71092357006bc41cd601981ec3b81c.svg":{"logical_path":"flags/1x1/qa.svg","mtime":"2018-04-02T14:38:31+02:00","size":359,"digest":"182e4d8ace2607d0c02d3c29d65eb084af71092357006bc41cd601981ec3b81c","integrity":"sha256-GC5Nis4mB9DALTwp1l6whK9xCSNXAGvEHNYBmB7DuBw="},"flags/4x3/re-8b2ea1f2727c266a2b80cb12a9b7195f6b656f521552b67893b6761a07f9bc92.svg":{"logical_path":"flags/4x3/re.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"8b2ea1f2727c266a2b80cb12a9b7195f6b656f521552b67893b6761a07f9bc92","integrity":"sha256-iy6h8nJ8JmorgMsSqbcZX2tlb1IVUrZ4k7Z2Ggf5vJI="},"flags/1x1/re-07eb7d855022bc678b47b0ce5fd05da5044d6dde86ad3697d4ae55c68ff447c1.svg":{"logical_path":"flags/1x1/re.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"07eb7d855022bc678b47b0ce5fd05da5044d6dde86ad3697d4ae55c68ff447c1","integrity":"sha256-B+t9hVAivGeLR7DOX9BdpQRNbd6GrTaX1K5Vxo/0R8E="},"flags/4x3/ro-4ab797571e1d9eb326486f75654a4590fd33f20444f85b77ba0997eb6138c21f.svg":{"logical_path":"flags/4x3/ro.svg","mtime":"2018-04-02T14:38:31+02:00","size":308,"digest":"4ab797571e1d9eb326486f75654a4590fd33f20444f85b77ba0997eb6138c21f","integrity":"sha256-SreXVx4dnrMmSG91ZUpFkP0z8gRE+Ft3ugmX62E4wh8="},"flags/1x1/ro-ddfcbaec04d11bf7f95abebd1d3a42b2862b1af8fca9b02764a6ed0e409a1d75.svg":{"logical_path":"flags/1x1/ro.svg","mtime":"2018-04-02T14:38:31+02:00","size":308,"digest":"ddfcbaec04d11bf7f95abebd1d3a42b2862b1af8fca9b02764a6ed0e409a1d75","integrity":"sha256-3fy67ATRG/f5Wr69HTpCsoYrGvj8qbAnZKbtDkCaHXU="},"flags/4x3/rs-dd8a52473ea40e23b393b5f4a30d1edd91865aab167f0c1835ae84b15dcce585.svg":{"logical_path":"flags/4x3/rs.svg","mtime":"2018-04-02T14:38:31+02:00","size":187640,"digest":"dd8a52473ea40e23b393b5f4a30d1edd91865aab167f0c1835ae84b15dcce585","integrity":"sha256-3YpSRz6kDiOzk7X0ow0e3ZGGWqsWfwwYNa6EsV3M5YU="},"flags/1x1/rs-42bf40209c92e4e7169daf29fbcb7253b2804eee7a463051529327f38851f865.svg":{"logical_path":"flags/1x1/rs.svg","mtime":"2018-04-02T14:38:31+02:00","size":187503,"digest":"42bf40209c92e4e7169daf29fbcb7253b2804eee7a463051529327f38851f865","integrity":"sha256-Qr9AIJyS5OcWna8p+8tyU7KATu56RjBRUpMn84hR+GU="},"flags/4x3/ru-13f4525a4caad6e31afa523d2bc4a0c1e6377c0bef1bfd872682130d3f199d1d.svg":{"logical_path":"flags/4x3/ru.svg","mtime":"2018-04-02T14:38:31+02:00","size":289,"digest":"13f4525a4caad6e31afa523d2bc4a0c1e6377c0bef1bfd872682130d3f199d1d","integrity":"sha256-E/RSWkyq1uMa+lI9K8SgweY3fAvvG/2HJoITDT8ZnR0="},"flags/1x1/ru-b9792a963faf667447e0456dba5be80a3b37c197a4284d1539a3433721d9e2fe.svg":{"logical_path":"flags/1x1/ru.svg","mtime":"2018-04-02T14:38:31+02:00","size":293,"digest":"b9792a963faf667447e0456dba5be80a3b37c197a4284d1539a3433721d9e2fe","integrity":"sha256-uXkqlj+vZnRH4EVtulvoCjs3wZekKE0VOaNDNyHZ4v4="},"flags/4x3/rw-bc38bcd6e19d2941839b253af6e863b13338cde1174874f9674471026c15e422.svg":{"logical_path":"flags/4x3/rw.svg","mtime":"2018-04-02T14:38:31+02:00","size":750,"digest":"bc38bcd6e19d2941839b253af6e863b13338cde1174874f9674471026c15e422","integrity":"sha256-vDi81uGdKUGDmyU69uhjsTM4zeEXSHT5Z0RxAmwV5CI="},"flags/1x1/rw-456698123775b83d2b0fa1b9fe073f9ccdba0b6bf39a703b8979dcce158eb32c.svg":{"logical_path":"flags/1x1/rw.svg","mtime":"2018-04-02T14:38:31+02:00","size":751,"digest":"456698123775b83d2b0fa1b9fe073f9ccdba0b6bf39a703b8979dcce158eb32c","integrity":"sha256-RWaYEjd1uD0rD6G5/gc/nM26C2vzmnA7iXnczhWOsyw="},"flags/4x3/sa-2b2fd6abb48415d5407c576c24a24fbd80af5877ef06cf2d026452f6c67f5f4d.svg":{"logical_path":"flags/4x3/sa.svg","mtime":"2018-04-02T14:38:31+02:00","size":10303,"digest":"2b2fd6abb48415d5407c576c24a24fbd80af5877ef06cf2d026452f6c67f5f4d","integrity":"sha256-Ky/Wq7SEFdVAfFdsJKJPvYCvWHfvBs8tAmRS9sZ/X00="},"flags/1x1/sa-d9ebc73e7957f86604164dd5054fb32601ad14d7dfd4bfe73da5bdd10bb2f8ae.svg":{"logical_path":"flags/1x1/sa.svg","mtime":"2018-04-02T14:38:31+02:00","size":10233,"digest":"d9ebc73e7957f86604164dd5054fb32601ad14d7dfd4bfe73da5bdd10bb2f8ae","integrity":"sha256-2evHPnlX+GYEFk3VBU+zJgGtFNff1L/nPaW90Quy+K4="},"flags/4x3/sb-37761927039d0a37ba0995c59fd31bbe36c8a0ca161e5b72b8131e3659f8dddf.svg":{"logical_path":"flags/4x3/sb.svg","mtime":"2018-04-02T14:38:31+02:00","size":950,"digest":"37761927039d0a37ba0995c59fd31bbe36c8a0ca161e5b72b8131e3659f8dddf","integrity":"sha256-N3YZJwOdCje6CZXFn9MbvjbIoMoWHltyuBMeNln43d8="},"flags/1x1/sb-bedbf8464cd82f391bfe6178c63055b650d0cf3aee60c37fa79a586f95783b79.svg":{"logical_path":"flags/1x1/sb.svg","mtime":"2018-04-02T14:38:31+02:00","size":956,"digest":"bedbf8464cd82f391bfe6178c63055b650d0cf3aee60c37fa79a586f95783b79","integrity":"sha256-vtv4RkzYLzkb/mF4xjBVtlDQzzruYMN/p5pYb5V4O3k="},"flags/4x3/sc-f6a2f8f37be93f07600b491b52cb58d80d74b92d8ace0af313f4ce081b0d1345.svg":{"logical_path":"flags/4x3/sc.svg","mtime":"2018-04-02T14:38:31+02:00","size":568,"digest":"f6a2f8f37be93f07600b491b52cb58d80d74b92d8ace0af313f4ce081b0d1345","integrity":"sha256-9qL483vpPwdgC0kbUstY2A10uS2KzgrzE/TOCBsNE0U="},"flags/1x1/sc-5dcd01b98c34460c9624280fb5047811fbae7d976620cd0a70ad4263a9085b60.svg":{"logical_path":"flags/1x1/sc.svg","mtime":"2018-04-02T14:38:31+02:00","size":573,"digest":"5dcd01b98c34460c9624280fb5047811fbae7d976620cd0a70ad4263a9085b60","integrity":"sha256-Xc0BuYw0RgyWJCgPtQR4EfuufZdmIM0KcK1CY6kIW2A="},"flags/4x3/sd-cc9cf97e8a37622b9e1bad28811d46c4471595afa448dc055e0e3aae7687fe4b.svg":{"logical_path":"flags/4x3/sd.svg","mtime":"2018-04-02T14:38:31+02:00","size":494,"digest":"cc9cf97e8a37622b9e1bad28811d46c4471595afa448dc055e0e3aae7687fe4b","integrity":"sha256-zJz5foo3YiueG60ogR1GxEcVla+kSNwFXg46rnaH/ks="},"flags/1x1/sd-1f5d13f9780085acbaad13d959b1918c796ba7b0450954b15d145e87cebe045c.svg":{"logical_path":"flags/1x1/sd.svg","mtime":"2018-04-02T14:38:31+02:00","size":496,"digest":"1f5d13f9780085acbaad13d959b1918c796ba7b0450954b15d145e87cebe045c","integrity":"sha256-H10T+XgAhay6rRPZWbGRjHlrp7BFCVSxXRReh86+BFw="},"flags/4x3/se-84b06bcd5bd90ea8dd6d1c3c8d2799a843c47b0256ce098aef75414964618286.svg":{"logical_path":"flags/4x3/se.svg","mtime":"2018-04-02T14:38:31+02:00","size":688,"digest":"84b06bcd5bd90ea8dd6d1c3c8d2799a843c47b0256ce098aef75414964618286","integrity":"sha256-hLBrzVvZDqjdbRw8jSeZqEPEewJWzgmK73VBSWRhgoY="},"flags/1x1/se-39f128686652cf914f8601110fcc9ac879bca204407013b93aff4ca4fb2ed9bc.svg":{"logical_path":"flags/1x1/se.svg","mtime":"2018-04-02T14:38:31+02:00","size":701,"digest":"39f128686652cf914f8601110fcc9ac879bca204407013b93aff4ca4fb2ed9bc","integrity":"sha256-OfEoaGZSz5FPhgERD8yayHm8ogRAcBO5Ov9MpPsu2bw="},"flags/4x3/sg-a82acd90077e76318ddb0be96999d9695b9a9f4627e8a0f341d3987a62747dcc.svg":{"logical_path":"flags/4x3/sg.svg","mtime":"2018-04-02T14:38:31+02:00","size":890,"digest":"a82acd90077e76318ddb0be96999d9695b9a9f4627e8a0f341d3987a62747dcc","integrity":"sha256-qCrNkAd+djGN2wvpaZnZaVuan0Yn6KDzQdOYemJ0fcw="},"flags/1x1/sg-c22e093634568aae249bf35f9ddcaa6796b5f27d76c39ff5336abf7f1b8a47d4.svg":{"logical_path":"flags/1x1/sg.svg","mtime":"2018-04-02T14:38:31+02:00","size":954,"digest":"c22e093634568aae249bf35f9ddcaa6796b5f27d76c39ff5336abf7f1b8a47d4","integrity":"sha256-wi4JNjRWiq4km/NfndyqZ5a18n12w5/1M2q/fxuKR9Q="},"flags/4x3/sh-57470d9a75955f0fac605a94e853bab524c7461a4c025e809fb09db762ebe46f.svg":{"logical_path":"flags/4x3/sh.svg","mtime":"2018-04-02T14:38:31+02:00","size":29702,"digest":"57470d9a75955f0fac605a94e853bab524c7461a4c025e809fb09db762ebe46f","integrity":"sha256-V0cNmnWVXw+sYFqU6FO6tSTHRhpMAl6An7Cdt2Lr5G8="},"flags/1x1/sh-8d06a0fff61e51eb65357d138e00736545835b8649aa2694152f4cdc9f941c16.svg":{"logical_path":"flags/1x1/sh.svg","mtime":"2018-04-02T14:38:31+02:00","size":30308,"digest":"8d06a0fff61e51eb65357d138e00736545835b8649aa2694152f4cdc9f941c16","integrity":"sha256-jQag//YeUetlNX0TjgBzZUWDW4ZJqiaUFS9M3J+UHBY="},"flags/4x3/si-289d6417f154323e7922df09ffc0f49ded31548c7ee8020c39cb85724ffbcea8.svg":{"logical_path":"flags/4x3/si.svg","mtime":"2018-04-02T14:38:31+02:00","size":2055,"digest":"289d6417f154323e7922df09ffc0f49ded31548c7ee8020c39cb85724ffbcea8","integrity":"sha256-KJ1kF/FUMj55It8J/8D0ne0xVIx+6AIMOcuFck/7zqg="},"flags/1x1/si-ca40a5f4f38119d6f52ffd3ddb36af95951a2aa1fadcd897f5bc1641bb2e0051.svg":{"logical_path":"flags/1x1/si.svg","mtime":"2018-04-02T14:38:31+02:00","size":2068,"digest":"ca40a5f4f38119d6f52ffd3ddb36af95951a2aa1fadcd897f5bc1641bb2e0051","integrity":"sha256-ykCl9POBGdb1L/092zavlZUaKqH63NiX9bwWQbsuAFE="},"flags/4x3/sj-67d4cdd268d0c0cd93fc561b506cb5646cb508385c93ed350d11f94aa1c83833.svg":{"logical_path":"flags/4x3/sj.svg","mtime":"2018-04-02T14:38:31+02:00","size":324,"digest":"67d4cdd268d0c0cd93fc561b506cb5646cb508385c93ed350d11f94aa1c83833","integrity":"sha256-Z9TN0mjQwM2T/FYbUGy1ZGy1CDhck+01DRH5SqHIODM="},"flags/1x1/sj-f7c489607033138039612d6abe7f4b0b4b6dada5cac75d78204f404a0d292b1c.svg":{"logical_path":"flags/1x1/sj.svg","mtime":"2018-04-02T14:38:31+02:00","size":324,"digest":"f7c489607033138039612d6abe7f4b0b4b6dada5cac75d78204f404a0d292b1c","integrity":"sha256-98SJYHAzE4A5YS1qvn9LC0ttraXKx114IE9ASg0pKxw="},"flags/4x3/sk-a0bdbb7f5d6998ffe9fcbc80bbdf0e6cff3629740d2ce1b8d61025e0a8b322b5.svg":{"logical_path":"flags/4x3/sk.svg","mtime":"2018-04-02T14:38:31+02:00","size":1208,"digest":"a0bdbb7f5d6998ffe9fcbc80bbdf0e6cff3629740d2ce1b8d61025e0a8b322b5","integrity":"sha256-oL27f11pmP/p/LyAu98ObP82KXQNLOG41hAl4KizIrU="},"flags/1x1/sk-a82a813b2d81af9be1aa775f22b2c2457d11e870e072d7e23957a11d0878faed.svg":{"logical_path":"flags/1x1/sk.svg","mtime":"2018-04-02T14:38:31+02:00","size":1187,"digest":"a82a813b2d81af9be1aa775f22b2c2457d11e870e072d7e23957a11d0878faed","integrity":"sha256-qCqBOy2Br5vhqndfIrLCRX0R6HDgctfiOVehHQh4+u0="},"flags/4x3/sl-be265bed24cfe0b25778201f251e52e4e721e3d319795875913805d1aea84ebb.svg":{"logical_path":"flags/4x3/sl.svg","mtime":"2018-04-02T14:38:31+02:00","size":278,"digest":"be265bed24cfe0b25778201f251e52e4e721e3d319795875913805d1aea84ebb","integrity":"sha256-viZb7STP4LJXeCAfJR5S5Och49MZeVh1kTgF0a6oTrs="},"flags/1x1/sl-cb8bccbaa21957f006ed4ae0144da81c999e93bd8014023b16b500fdcdc397d3.svg":{"logical_path":"flags/1x1/sl.svg","mtime":"2018-04-02T14:38:31+02:00","size":441,"digest":"cb8bccbaa21957f006ed4ae0144da81c999e93bd8014023b16b500fdcdc397d3","integrity":"sha256-y4vMuqIZV/AG7UrgFE2oHJmek72AFAI7FrUA/c3Dl9M="},"flags/4x3/sm-d7818df3f8f2d5dbed27dc5a0a80b1e41cdcd6130eeff221da58f0321e925f27.svg":{"logical_path":"flags/4x3/sm.svg","mtime":"2018-04-02T14:38:31+02:00","size":15960,"digest":"d7818df3f8f2d5dbed27dc5a0a80b1e41cdcd6130eeff221da58f0321e925f27","integrity":"sha256-14GN8/jy1dvtJ9xaCoCx5Bzc1hMO7/Ih2ljwMh6SXyc="},"flags/1x1/sm-6f87660dcac925bbdb036c79a0e20d3b208215d327be4c4764ae1069d6464efd.svg":{"logical_path":"flags/1x1/sm.svg","mtime":"2018-04-02T14:38:31+02:00","size":15881,"digest":"6f87660dcac925bbdb036c79a0e20d3b208215d327be4c4764ae1069d6464efd","integrity":"sha256-b4dmDcrJJbvbA2x5oOINOyCCFdMnvkxHZK4QadZGTv0="},"flags/4x3/sn-b131b17a374bcfbd00d442d282fa52f0e4e0e448cda1cdfaac25a95ff56443c0.svg":{"logical_path":"flags/4x3/sn.svg","mtime":"2018-04-02T14:38:31+02:00","size":427,"digest":"b131b17a374bcfbd00d442d282fa52f0e4e0e448cda1cdfaac25a95ff56443c0","integrity":"sha256-sTGxejdLz70A1ELSgvpS8OTg5EjNoc36rCWpX/VkQ8A="},"flags/1x1/sn-d180d3ce9846966dee6a3d9433ede7d24801dc4311636aabd470ec5b8765d772.svg":{"logical_path":"flags/1x1/sn.svg","mtime":"2018-04-02T14:38:31+02:00","size":418,"digest":"d180d3ce9846966dee6a3d9433ede7d24801dc4311636aabd470ec5b8765d772","integrity":"sha256-0YDTzphGlm3uaj2UM+3n0kgB3EMRY2qr1HDsW4dl13I="},"flags/4x3/so-3b5b77b371299478144a94b60c99524fb6b99bfedb3dcc976ab70185e07f399e.svg":{"logical_path":"flags/4x3/so.svg","mtime":"2018-04-02T14:38:31+02:00","size":494,"digest":"3b5b77b371299478144a94b60c99524fb6b99bfedb3dcc976ab70185e07f399e","integrity":"sha256-O1t3s3EplHgUSpS2DJlST7a5m/7bPcyXarcBheB/OZ4="},"flags/1x1/so-50aa941f2d2954285ef9e5ac260cdd264a73cf2e4b0c627677f04141fff2afd3.svg":{"logical_path":"flags/1x1/so.svg","mtime":"2018-04-02T14:38:31+02:00","size":501,"digest":"50aa941f2d2954285ef9e5ac260cdd264a73cf2e4b0c627677f04141fff2afd3","integrity":"sha256-UKqUHy0pVChe+eWsJgzdJkpzzy5LDGJ2d/BBQf/yr9M="},"flags/4x3/sr-94d0f0aefcbdea8d7ba35648eda5037e99bf4126723ce36416582ea43b08d3e2.svg":{"logical_path":"flags/4x3/sr.svg","mtime":"2018-04-02T14:38:31+02:00","size":318,"digest":"94d0f0aefcbdea8d7ba35648eda5037e99bf4126723ce36416582ea43b08d3e2","integrity":"sha256-lNDwrvy96o17o1ZI7aUDfpm/QSZyPONkFlgupDsI0+I="},"flags/1x1/sr-3944d683068d437471725d22fd71ccbe6a63ae307ff9775690417d3bf262cf82.svg":{"logical_path":"flags/1x1/sr.svg","mtime":"2018-04-02T14:38:31+02:00","size":323,"digest":"3944d683068d437471725d22fd71ccbe6a63ae307ff9775690417d3bf262cf82","integrity":"sha256-OUTWgwaNQ3Rxcl0i/XHMvmpjrjB/+XdWkEF9O/Jiz4I="},"flags/4x3/ss-f391e5002cbce83f97f7d1a11c284fa2e36a7d6dc734757d733656801ab17d0a.svg":{"logical_path":"flags/4x3/ss.svg","mtime":"2018-04-02T14:38:31+02:00","size":389,"digest":"f391e5002cbce83f97f7d1a11c284fa2e36a7d6dc734757d733656801ab17d0a","integrity":"sha256-85HlACy86D+X99GhHChPouNqfW3HNHV9czZWgBqxfQo="},"flags/1x1/ss-853bd9f713d2f6b1fe540a82e8bf4754912da21575b3fe756b8741767f318f7a.svg":{"logical_path":"flags/1x1/ss.svg","mtime":"2018-04-02T14:38:31+02:00","size":400,"digest":"853bd9f713d2f6b1fe540a82e8bf4754912da21575b3fe756b8741767f318f7a","integrity":"sha256-hTvZ9xPS9rH+VAqC6L9HVJEtohV1s/51a4dBdn8xj3o="},"flags/4x3/st-b52bb48a2c0800f5cb4b07bdd93c3908f77bcb6800be883ebf943bbd3d99d42c.svg":{"logical_path":"flags/4x3/st.svg","mtime":"2018-04-02T14:38:31+02:00","size":919,"digest":"b52bb48a2c0800f5cb4b07bdd93c3908f77bcb6800be883ebf943bbd3d99d42c","integrity":"sha256-tSu0iiwIAPXLSwe92Tw5CPd7y2gAvog+v5Q7vT2Z1Cw="},"flags/1x1/st-d8b5b1c8b9fe947086a4d277d2ac5d6b9cff188dfd37bda66c8bf5e02c5facc8.svg":{"logical_path":"flags/1x1/st.svg","mtime":"2018-04-02T14:38:31+02:00","size":923,"digest":"d8b5b1c8b9fe947086a4d277d2ac5d6b9cff188dfd37bda66c8bf5e02c5facc8","integrity":"sha256-2LWxyLn+lHCGpNJ30qxda5z/GI39N72mbIv14CxfrMg="},"flags/4x3/sv-6d02d63c7f04c9388e98f892cc43d8daa2110fc84242758d5627fcd247bfd09b.svg":{"logical_path":"flags/4x3/sv.svg","mtime":"2018-04-02T14:38:31+02:00","size":84037,"digest":"6d02d63c7f04c9388e98f892cc43d8daa2110fc84242758d5627fcd247bfd09b","integrity":"sha256-bQLWPH8EyTiOmPiSzEPY2qIRD8hCQnWNVif80ke/0Js="},"flags/1x1/sv-fb4c8d7eb98396a93c5b9c37195d70e809e0d71d8b8f9316e842121f95bb82ea.svg":{"logical_path":"flags/1x1/sv.svg","mtime":"2018-04-02T14:38:31+02:00","size":84509,"digest":"fb4c8d7eb98396a93c5b9c37195d70e809e0d71d8b8f9316e842121f95bb82ea","integrity":"sha256-+0yNfrmDlqk8W5w3GV1w6Ang1x2Lj5MW6EISH5W7guo="},"flags/4x3/sx-fb6a7b1cbc5b29eeeb39a5aec64ef7aad432c37bbe848d29955a3786b9763224.svg":{"logical_path":"flags/4x3/sx.svg","mtime":"2018-04-02T14:38:31+02:00","size":13306,"digest":"fb6a7b1cbc5b29eeeb39a5aec64ef7aad432c37bbe848d29955a3786b9763224","integrity":"sha256-+2p7HLxbKe7rOaWuxk73qtQyw3u+hI0plVo3hrl2MiQ="},"flags/1x1/sx-a37b124212f8530b921aef7657cfb35c2895a731c7a06f333faee4c93f32806a.svg":{"logical_path":"flags/1x1/sx.svg","mtime":"2018-04-02T14:38:31+02:00","size":13115,"digest":"a37b124212f8530b921aef7657cfb35c2895a731c7a06f333faee4c93f32806a","integrity":"sha256-o3sSQhL4UwuSGu92V8+zXCiVpzHHoG8zP67kyT8ygGo="},"flags/4x3/sy-e35f8d88c864ed4f38edb2f9f96d5bd69f6df078b50515b8c5467bf6b1689f50.svg":{"logical_path":"flags/4x3/sy.svg","mtime":"2018-04-02T14:38:31+02:00","size":568,"digest":"e35f8d88c864ed4f38edb2f9f96d5bd69f6df078b50515b8c5467bf6b1689f50","integrity":"sha256-41+NiMhk7U847bL5+W1b1p9t8Hi1BRW4xUZ79rFon1A="},"flags/1x1/sy-5d537bd5b42b58f6e8a7e33fbe5942a16126abb639edf9cb58b88938c57ebaa9.svg":{"logical_path":"flags/1x1/sy.svg","mtime":"2018-04-02T14:38:31+02:00","size":582,"digest":"5d537bd5b42b58f6e8a7e33fbe5942a16126abb639edf9cb58b88938c57ebaa9","integrity":"sha256-XVN71bQrWPbop+M/vllCoWEmq7Y57fnLWLiJOMV+uqk="},"flags/4x3/sz-c65ae592e943217787848364bdb4c57335869f4626ce705adabdc2620669c1c6.svg":{"logical_path":"flags/4x3/sz.svg","mtime":"2018-04-02T14:38:31+02:00","size":6755,"digest":"c65ae592e943217787848364bdb4c57335869f4626ce705adabdc2620669c1c6","integrity":"sha256-xlrlkulDIXeHhINkvbTFczWGn0YmznBa2r3CYgZpwcY="},"flags/1x1/sz-dd3d1c65bdf09317553f205e588e3dc7336acec1cb9315bfbe0f5bd8ca5bba3f.svg":{"logical_path":"flags/1x1/sz.svg","mtime":"2018-04-02T14:38:31+02:00","size":6706,"digest":"dd3d1c65bdf09317553f205e588e3dc7336acec1cb9315bfbe0f5bd8ca5bba3f","integrity":"sha256-3T0cZb3wkxdVPyBeWI49xzNqzsHLkxW/vg9b2Mpbuj8="},"flags/4x3/tc-594b6cc87040836c6d6777afb5833d565d3e5e75f404350a51443ec4588a1ccb.svg":{"logical_path":"flags/4x3/tc.svg","mtime":"2018-04-02T14:38:31+02:00","size":14585,"digest":"594b6cc87040836c6d6777afb5833d565d3e5e75f404350a51443ec4588a1ccb","integrity":"sha256-WUtsyHBAg2xtZ3evtYM9Vl0+XnX0BDUKUUQ+xFiKHMs="},"flags/1x1/tc-34a37006252eea340488220585c31d047b57e3e7934c77180d930972aaceadc3.svg":{"logical_path":"flags/1x1/tc.svg","mtime":"2018-04-02T14:38:31+02:00","size":14843,"digest":"34a37006252eea340488220585c31d047b57e3e7934c77180d930972aaceadc3","integrity":"sha256-NKNwBiUu6jQEiCIFhcMdBHtX4+eTTHcYDZMJcqrOrcM="},"flags/4x3/td-b67a1978e3badb895ff640c80bb6c0e33eac354220c08cf3fc93d62bf5d685a3.svg":{"logical_path":"flags/4x3/td.svg","mtime":"2018-04-02T14:38:31+02:00","size":270,"digest":"b67a1978e3badb895ff640c80bb6c0e33eac354220c08cf3fc93d62bf5d685a3","integrity":"sha256-tnoZeOO624lf9kDIC7bA4z6sNUIgwIzz/JPWK/XWhaM="},"flags/1x1/td-556b3a7991c17010cb7e1ff23c4edcc2dcdb8c406a128d407fd165ea8a19d311.svg":{"logical_path":"flags/1x1/td.svg","mtime":"2018-04-02T14:38:31+02:00","size":282,"digest":"556b3a7991c17010cb7e1ff23c4edcc2dcdb8c406a128d407fd165ea8a19d311","integrity":"sha256-VWs6eZHBcBDLfh/yPE7cwtzbjEBqEo1Af9Fl6ooZ0xE="},"flags/4x3/tf-35cd83351521f3022a43e01f0c40f34663a66ac1e92045979f31d3fd65c16d02.svg":{"logical_path":"flags/4x3/tf.svg","mtime":"2018-04-02T14:38:31+02:00","size":1091,"digest":"35cd83351521f3022a43e01f0c40f34663a66ac1e92045979f31d3fd65c16d02","integrity":"sha256-Nc2DNRUh8wIqQ+AfDEDzRmOmasHpIEWXnzHT/WXBbQI="},"flags/1x1/tf-485e71f61ff577735dbc4ba1025515c22a83c48ee7f3a2ed49804766c35f6ea5.svg":{"logical_path":"flags/1x1/tf.svg","mtime":"2018-04-02T14:38:31+02:00","size":1199,"digest":"485e71f61ff577735dbc4ba1025515c22a83c48ee7f3a2ed49804766c35f6ea5","integrity":"sha256-SF5x9h/1d3NdvEuhAlUVwiqDxI7n86LtSYBHZsNfbqU="},"flags/4x3/tg-24b25f4c2213fe35e5f5586d7ab23abf0c25ad2049708cd52ba72e1ec7b754ff.svg":{"logical_path":"flags/4x3/tg.svg","mtime":"2018-04-02T14:38:31+02:00","size":725,"digest":"24b25f4c2213fe35e5f5586d7ab23abf0c25ad2049708cd52ba72e1ec7b754ff","integrity":"sha256-JLJfTCIT/jXl9VhterI6vwwlrSBJcIzVK6cuHse3VP8="},"flags/1x1/tg-05f3d98392a5ec3e4aecf8f629d3d03f05ac55abb7d9d84187d599acfe271374.svg":{"logical_path":"flags/1x1/tg.svg","mtime":"2018-04-02T14:38:31+02:00","size":736,"digest":"05f3d98392a5ec3e4aecf8f629d3d03f05ac55abb7d9d84187d599acfe271374","integrity":"sha256-BfPZg5Kl7D5K7Pj2KdPQPwWsVau32dhBh9WZrP4nE3Q="},"flags/4x3/th-cc936bacd84dddd15454ef06bc64e357f83854af34692fc37363272d61f637d4.svg":{"logical_path":"flags/4x3/th.svg","mtime":"2018-04-02T14:38:31+02:00","size":287,"digest":"cc936bacd84dddd15454ef06bc64e357f83854af34692fc37363272d61f637d4","integrity":"sha256-zJNrrNhN3dFUVO8GvGTjV/g4VK80aS/Dc2MnLWH2N9Q="},"flags/1x1/th-de82cbd770db2be53a8e3d59d86e2b748a5d3f96eb8584f7b9364cefbd06a172.svg":{"logical_path":"flags/1x1/th.svg","mtime":"2018-04-02T14:38:31+02:00","size":288,"digest":"de82cbd770db2be53a8e3d59d86e2b748a5d3f96eb8584f7b9364cefbd06a172","integrity":"sha256-3oLL13DbK+U6jj1Z2G4rdIpdP5brhYT3uTZM770GoXI="},"flags/4x3/tj-b90bf3e2dd63265d55b67962b160df65f021c42b6ea304e2943c10b9e2a8749d.svg":{"logical_path":"flags/4x3/tj.svg","mtime":"2018-04-02T14:38:31+02:00","size":1831,"digest":"b90bf3e2dd63265d55b67962b160df65f021c42b6ea304e2943c10b9e2a8749d","integrity":"sha256-uQvz4t1jJl1VtnlisWDfZfAhxCtuowTilDwQueKodJ0="},"flags/1x1/tj-5f6571e74b1f8720f9ecc2d3aa2098ca45d2e7ad6602b2a57c206384719b9f36.svg":{"logical_path":"flags/1x1/tj.svg","mtime":"2018-04-02T14:38:31+02:00","size":1788,"digest":"5f6571e74b1f8720f9ecc2d3aa2098ca45d2e7ad6602b2a57c206384719b9f36","integrity":"sha256-X2Vx50sfhyD57MLTqiCYykXS561mArKlfCBjhHGbnzY="},"flags/4x3/tk-602520b29b909c96baea17a38eb654d6c6fbc7088f46a0cb8d8fe34ff92e3cb8.svg":{"logical_path":"flags/4x3/tk.svg","mtime":"2018-04-02T14:38:31+02:00","size":791,"digest":"602520b29b909c96baea17a38eb654d6c6fbc7088f46a0cb8d8fe34ff92e3cb8","integrity":"sha256-YCUgspuQnJa66hejjrZU1sb7xwiPRqDLjY/jT/kuPLg="},"flags/1x1/tk-fe1dc8aaa0643a45a74ecec8aec09f0fe2207d104bb3c28c0b84405f1275aeba.svg":{"logical_path":"flags/1x1/tk.svg","mtime":"2018-04-02T14:38:31+02:00","size":781,"digest":"fe1dc8aaa0643a45a74ecec8aec09f0fe2207d104bb3c28c0b84405f1275aeba","integrity":"sha256-/h3IqqBkOkWnTs7IrsCfD+IgfRBLs8KMC4RAXxJ1rro="},"flags/4x3/tl-ebdb862aa5ae5de1a72242571deaa70bfb222f488a93b70e304f2075b474d54b.svg":{"logical_path":"flags/4x3/tl.svg","mtime":"2018-04-02T14:38:31+02:00","size":600,"digest":"ebdb862aa5ae5de1a72242571deaa70bfb222f488a93b70e304f2075b474d54b","integrity":"sha256-69uGKqWuXeGnIkJXHeqnC/siL0iKk7cOME8gdbR01Us="},"flags/1x1/tl-485f02183bdb192ba3ce6e5f076e184112739f883ae0a8fde33c454377b848d6.svg":{"logical_path":"flags/1x1/tl.svg","mtime":"2018-04-02T14:38:31+02:00","size":582,"digest":"485f02183bdb192ba3ce6e5f076e184112739f883ae0a8fde33c454377b848d6","integrity":"sha256-SF8CGDvbGSujzm5fB24YQRJzn4g64Kj94zxFQ3e4SNY="},"flags/4x3/tm-5ddb4128bf0becd7c60413d5418027f5f01ca4bc72561d54b94febfee7a5a24b.svg":{"logical_path":"flags/4x3/tm.svg","mtime":"2018-04-02T14:38:31+02:00","size":32579,"digest":"5ddb4128bf0becd7c60413d5418027f5f01ca4bc72561d54b94febfee7a5a24b","integrity":"sha256-XdtBKL8L7NfGBBPVQYAn9fAcpLxyVh1UuU/r/ueloks="},"flags/1x1/tm-3521ad569a4095aa8d4166d5d9094fccfdbb3ea411207ad685b6dd5814ef3392.svg":{"logical_path":"flags/1x1/tm.svg","mtime":"2018-04-02T14:38:31+02:00","size":31884,"digest":"3521ad569a4095aa8d4166d5d9094fccfdbb3ea411207ad685b6dd5814ef3392","integrity":"sha256-NSGtVppAlaqNQWbV2QlPzP27PqQRIHrWhbbdWBTvM5I="},"flags/4x3/tn-ca27eb50d88b11d20b5b09e2bbecb7753267222489920c526608e5d2acd22d79.svg":{"logical_path":"flags/4x3/tn.svg","mtime":"2018-04-02T14:38:31+02:00","size":753,"digest":"ca27eb50d88b11d20b5b09e2bbecb7753267222489920c526608e5d2acd22d79","integrity":"sha256-yifrUNiLEdILWwniu+y3dTJnIiSJkgxSZgjl0qzSLXk="},"flags/1x1/tn-222c6cd4742c558f48ebcacb47ea334057642fffa3456a1c75e0fad9e728d09b.svg":{"logical_path":"flags/1x1/tn.svg","mtime":"2018-04-02T14:38:31+02:00","size":743,"digest":"222c6cd4742c558f48ebcacb47ea334057642fffa3456a1c75e0fad9e728d09b","integrity":"sha256-Iixs1HQsVY9I68rLR+ozQFdkL/+jRWocdeD62eco0Js="},"flags/4x3/to-c9c509fc24f591fbe52bbf732c44291384c787796e1fc9c703a973587c3f8ad1.svg":{"logical_path":"flags/4x3/to.svg","mtime":"2018-04-02T14:38:31+02:00","size":358,"digest":"c9c509fc24f591fbe52bbf732c44291384c787796e1fc9c703a973587c3f8ad1","integrity":"sha256-ycUJ/CT1kfvlK79zLEQpE4THh3luH8nHA6lzWHw/itE="},"flags/1x1/to-cf26dfb44b56b915b2f11896355cb778b938ed54423311d69d7cda9626887dda.svg":{"logical_path":"flags/1x1/to.svg","mtime":"2018-04-02T14:38:31+02:00","size":364,"digest":"cf26dfb44b56b915b2f11896355cb778b938ed54423311d69d7cda9626887dda","integrity":"sha256-zybftEtWuRWy8RiWNVy3eLk47VRCMxHWnXzaliaIfdo="},"flags/4x3/tr-c40f697070cf8d8358785b9203d1c8f438976e3cd644a87d9ee16fa9960deaa4.svg":{"logical_path":"flags/4x3/tr.svg","mtime":"2018-04-02T14:38:31+02:00","size":557,"digest":"c40f697070cf8d8358785b9203d1c8f438976e3cd644a87d9ee16fa9960deaa4","integrity":"sha256-xA9pcHDPjYNYeFuSA9HI9DiXbjzWRKh9nuFvqZYN6qQ="},"flags/1x1/tr-627dcf91a1e5153c045e33a3459b5d56002530fddd3fc53927f4d0fb7ea004a5.svg":{"logical_path":"flags/1x1/tr.svg","mtime":"2018-04-02T14:38:31+02:00","size":578,"digest":"627dcf91a1e5153c045e33a3459b5d56002530fddd3fc53927f4d0fb7ea004a5","integrity":"sha256-Yn3PkaHlFTwEXjOjRZtdVgAlMP3dP8U5J/TQ+36gBKU="},"flags/4x3/tt-04786ffedbde2c96a30ad1cbf4db000848f14bd700324651fc88364e5f3c2fd0.svg":{"logical_path":"flags/4x3/tt.svg","mtime":"2018-04-02T14:38:31+02:00","size":324,"digest":"04786ffedbde2c96a30ad1cbf4db000848f14bd700324651fc88364e5f3c2fd0","integrity":"sha256-BHhv/tveLJajCtHL9NsACEjxS9cAMkZR/Ig2Tl88L9A="},"flags/1x1/tt-6a3c73bfa7782366d95e673d847ef8f84c0475b364d359def1efd264297bac30.svg":{"logical_path":"flags/1x1/tt.svg","mtime":"2018-04-02T14:38:31+02:00","size":323,"digest":"6a3c73bfa7782366d95e673d847ef8f84c0475b364d359def1efd264297bac30","integrity":"sha256-ajxzv6d4I2bZXmc9hH74+EwEdbNk01ne8e/SZCl7rDA="},"flags/4x3/tv-20b56e7c0a2fbaa2a0b7b1bd87afc6368440f175fb3a0589de5e34e99d163fd7.svg":{"logical_path":"flags/4x3/tv.svg","mtime":"2018-04-02T14:38:31+02:00","size":2299,"digest":"20b56e7c0a2fbaa2a0b7b1bd87afc6368440f175fb3a0589de5e34e99d163fd7","integrity":"sha256-ILVufAovuqKgt7G9h6/GNoRA8XX7OgWJ3l406Z0WP9c="},"flags/1x1/tv-8bce1d7bde2e20dcc473ed3a33c66e4bedcf1acf2d2fff6d54353a480b8cafbc.svg":{"logical_path":"flags/1x1/tv.svg","mtime":"2018-04-02T14:38:31+02:00","size":2166,"digest":"8bce1d7bde2e20dcc473ed3a33c66e4bedcf1acf2d2fff6d54353a480b8cafbc","integrity":"sha256-i84de94uINzEc+06M8ZuS+3PGs8tL/9tVDU6SAuMr7w="},"flags/4x3/tw-36070ac0a15ab1f4811478da62e7678756a9aa266b141ed0549aba1c0e04333a.svg":{"logical_path":"flags/4x3/tw.svg","mtime":"2018-04-02T14:38:31+02:00","size":945,"digest":"36070ac0a15ab1f4811478da62e7678756a9aa266b141ed0549aba1c0e04333a","integrity":"sha256-NgcKwKFasfSBFHjaYudnh1apqiZrFB7QVJq6HA4EMzo="},"flags/1x1/tw-fd7a0db2f3808842ca99176f097356fe9e6f3c120d6aa9e8c4a9c2dd4c3943ba.svg":{"logical_path":"flags/1x1/tw.svg","mtime":"2018-04-02T14:38:31+02:00","size":960,"digest":"fd7a0db2f3808842ca99176f097356fe9e6f3c120d6aa9e8c4a9c2dd4c3943ba","integrity":"sha256-/XoNsvOAiELKmRdvCXNW/p5vPBINaqnoxKnC3Uw5Q7o="},"flags/4x3/tz-51ad7d69f059075df61b9226468af0d78642af4ad34a7540f64c5bea82e803d7.svg":{"logical_path":"flags/4x3/tz.svg","mtime":"2018-04-02T14:38:31+02:00","size":546,"digest":"51ad7d69f059075df61b9226468af0d78642af4ad34a7540f64c5bea82e803d7","integrity":"sha256-Ua19afBZB132G5ImRorw14ZCr0rTSnVA9kxb6oLoA9c="},"flags/1x1/tz-0703f29a7ae02a9a1753cb1726dd2934d75ed3a12e8d63faa9fa866e1fe61440.svg":{"logical_path":"flags/1x1/tz.svg","mtime":"2018-04-02T14:38:31+02:00","size":605,"digest":"0703f29a7ae02a9a1753cb1726dd2934d75ed3a12e8d63faa9fa866e1fe61440","integrity":"sha256-BwPymnrgKpoXU8sXJt0pNNde06EujWP6qfqGbh/mFEA="},"flags/4x3/ua-7f7db03c3b492aaacd11b0abac70d543a7c0ec5265a36d529bbb80a7c432d81a.svg":{"logical_path":"flags/4x3/ua.svg","mtime":"2018-04-02T14:38:31+02:00","size":241,"digest":"7f7db03c3b492aaacd11b0abac70d543a7c0ec5265a36d529bbb80a7c432d81a","integrity":"sha256-f32wPDtJKqrNEbCrrHDVQ6fA7FJlo21Sm7uAp8Qy2Bo="},"flags/1x1/ua-25192fa80f120edb1dd1c4757fd7b79ef38f5e1729238f4135003e6a1501bf28.svg":{"logical_path":"flags/1x1/ua.svg","mtime":"2018-04-02T14:38:31+02:00","size":241,"digest":"25192fa80f120edb1dd1c4757fd7b79ef38f5e1729238f4135003e6a1501bf28","integrity":"sha256-JRkvqA8SDtsd0cR1f9e3nvOPXhcpI49BNQA+ahUBvyg="},"flags/4x3/ug-7635df53eafdf411be0809df835bfbcffd61badd6c4df3db0909c8b3188015a0.svg":{"logical_path":"flags/4x3/ug.svg","mtime":"2018-04-02T14:38:31+02:00","size":3959,"digest":"7635df53eafdf411be0809df835bfbcffd61badd6c4df3db0909c8b3188015a0","integrity":"sha256-djXfU+r99BG+CAnfg1v7z/1hut1sTfPbCQnIsxiAFaA="},"flags/1x1/ug-537f34f64e723fbe7cb7902ea0e61303f1ada79214197efc39ebe2c52ce24186.svg":{"logical_path":"flags/1x1/ug.svg","mtime":"2018-04-02T14:38:31+02:00","size":4038,"digest":"537f34f64e723fbe7cb7902ea0e61303f1ada79214197efc39ebe2c52ce24186","integrity":"sha256-U3809k5yP758t5AuoOYTA/Gtp5IUGX78OevixSziQYY="},"flags/4x3/um-a0ae80e34bbf94677dd6052ea87cc0090aba747dab5440e5ca6e231f7f07c96d.svg":{"logical_path":"flags/4x3/um.svg","mtime":"2018-04-02T14:38:31+02:00","size":4524,"digest":"a0ae80e34bbf94677dd6052ea87cc0090aba747dab5440e5ca6e231f7f07c96d","integrity":"sha256-oK6A40u/lGd91gUuqHzACQq6dH2rVEDlym4jH38HyW0="},"flags/1x1/um-3f1bc09babe7fdcf32518bb49d1aac3a66d0204f955eacca291c58d4f4ef895a.svg":{"logical_path":"flags/1x1/um.svg","mtime":"2018-04-02T14:38:31+02:00","size":3975,"digest":"3f1bc09babe7fdcf32518bb49d1aac3a66d0204f955eacca291c58d4f4ef895a","integrity":"sha256-PxvAm6vn/c8yUYu0nRqsOmbQIE+VXqzKKRxY1PTviVo="},"flags/4x3/us-aefd8f7e57d11f7b0416d01d9c665ab3848b10af849f35a4d772d58d24d83329.svg":{"logical_path":"flags/4x3/us.svg","mtime":"2018-04-02T14:38:31+02:00","size":4468,"digest":"aefd8f7e57d11f7b0416d01d9c665ab3848b10af849f35a4d772d58d24d83329","integrity":"sha256-rv2PflfRH3sEFtAdnGZas4SLEK+EnzWk13LVjSTYMyk="},"flags/1x1/us-87af45be9346e8c820312976abe332ee11f8931e29fa361328d28660a711b1e2.svg":{"logical_path":"flags/1x1/us.svg","mtime":"2018-04-02T14:38:31+02:00","size":3924,"digest":"87af45be9346e8c820312976abe332ee11f8931e29fa361328d28660a711b1e2","integrity":"sha256-h69FvpNG6MggMSl2q+My7hH4kx4p+jYTKNKGYKcRseI="},"flags/4x3/uy-9f636c8283abf56cc930746fd427c1d1644dcf8736c537629df13f760da96ebc.svg":{"logical_path":"flags/4x3/uy.svg","mtime":"2018-04-02T14:38:31+02:00","size":1721,"digest":"9f636c8283abf56cc930746fd427c1d1644dcf8736c537629df13f760da96ebc","integrity":"sha256-n2NsgoOr9WzJMHRv1CfB0WRNz4c2xTdinfE/dg2pbrw="},"flags/1x1/uy-e216b762a93ec55bf9b4ae3d35b7febe0b192a12246fd66c45139ce77fb2095e.svg":{"logical_path":"flags/1x1/uy.svg","mtime":"2018-04-02T14:38:31+02:00","size":1718,"digest":"e216b762a93ec55bf9b4ae3d35b7febe0b192a12246fd66c45139ce77fb2095e","integrity":"sha256-4ha3Yqk+xVv5tK49Nbf+vgsZKhIkb9ZsRROc53+yCV4="},"flags/4x3/uz-697d596705372323beddccb3626d1ce405b36249315c6b006ff1529e24909ceb.svg":{"logical_path":"flags/4x3/uz.svg","mtime":"2018-04-02T14:38:31+02:00","size":1457,"digest":"697d596705372323beddccb3626d1ce405b36249315c6b006ff1529e24909ceb","integrity":"sha256-aX1ZZwU3IyO+3cyzYm0c5AWzYkkxXGsAb/FSniSQnOs="},"flags/1x1/uz-aa34cbe4f6f0e4b5d890975578d28cc9b1e88ebd503d3bdca693748eb29b3353.svg":{"logical_path":"flags/1x1/uz.svg","mtime":"2018-04-02T14:38:31+02:00","size":1457,"digest":"aa34cbe4f6f0e4b5d890975578d28cc9b1e88ebd503d3bdca693748eb29b3353","integrity":"sha256-qjTL5Pbw5LXYkJdVeNKMybHojr1QPTvcppN0jrKbM1M="},"flags/4x3/va-d24d3c5bee108c396997c3d5b2bd2273433752d8c222eb531650e51551a4afd0.svg":{"logical_path":"flags/4x3/va.svg","mtime":"2018-04-02T14:38:31+02:00","size":91241,"digest":"d24d3c5bee108c396997c3d5b2bd2273433752d8c222eb531650e51551a4afd0","integrity":"sha256-0k08W+4QjDlpl8PVsr0ic0M3UtjCIutTFlDlFVGkr9A="},"flags/1x1/va-01160c1bffda12f0b94554ba0c50162a88da807943617334bd4c57a030985e95.svg":{"logical_path":"flags/1x1/va.svg","mtime":"2018-04-02T14:38:31+02:00","size":90876,"digest":"01160c1bffda12f0b94554ba0c50162a88da807943617334bd4c57a030985e95","integrity":"sha256-ARYMG//aEvC5RVS6DFAWKojagHlDYXM0vUxXoDCYXpU="},"flags/4x3/vc-ddf979bee2889414e5a05ac55f39a9c93f34e0aff0d35f007605049a2d8b5afb.svg":{"logical_path":"flags/4x3/vc.svg","mtime":"2018-04-02T14:38:31+02:00","size":454,"digest":"ddf979bee2889414e5a05ac55f39a9c93f34e0aff0d35f007605049a2d8b5afb","integrity":"sha256-3fl5vuKIlBTloFrFXzmpyT804K/w018AdgUEmi2LWvs="},"flags/1x1/vc-ac776e16dec19ff2e2d9238f541dae5d977282b451a83ab3d4122efed2392be9.svg":{"logical_path":"flags/1x1/vc.svg","mtime":"2018-04-02T14:38:31+02:00","size":501,"digest":"ac776e16dec19ff2e2d9238f541dae5d977282b451a83ab3d4122efed2392be9","integrity":"sha256-rHduFt7Bn/Li2SOPVB2uXZdygrRRqDqz1BIu/tI5K+k="},"flags/4x3/ve-e23abd006cc75a8c4f9ec1cb122b46f9b52e26c5606532d2c868277d4ccd523b.svg":{"logical_path":"flags/4x3/ve.svg","mtime":"2018-04-02T14:38:31+02:00","size":1171,"digest":"e23abd006cc75a8c4f9ec1cb122b46f9b52e26c5606532d2c868277d4ccd523b","integrity":"sha256-4jq9AGzHWoxPnsHLEitG+bUuJsVgZTLSyGgnfUzNUjs="},"flags/1x1/ve-1480713f28719e0a83da2c5f1333407dbfa5bcc0de8c9ba718fcf47273ee95ef.svg":{"logical_path":"flags/1x1/ve.svg","mtime":"2018-04-02T14:38:31+02:00","size":1191,"digest":"1480713f28719e0a83da2c5f1333407dbfa5bcc0de8c9ba718fcf47273ee95ef","integrity":"sha256-FIBxPyhxngqD2ixfEzNAfb+lvMDejJunGPz0cnPule8="},"flags/4x3/vg-7f8f24a4d6995e4dd39e3d9098dad5e14649821fa12ffc200edf0a586285ee15.svg":{"logical_path":"flags/4x3/vg.svg","mtime":"2018-04-02T14:38:31+02:00","size":24818,"digest":"7f8f24a4d6995e4dd39e3d9098dad5e14649821fa12ffc200edf0a586285ee15","integrity":"sha256-f48kpNaZXk3Tnj2QmNrV4UZJgh+hL/wgDt8KWGKF7hU="},"flags/1x1/vg-b464b6a78e46c29df9e4bdadc2646208f11c59168706456075f970552a24efa8.svg":{"logical_path":"flags/1x1/vg.svg","mtime":"2018-04-02T14:38:31+02:00","size":24997,"digest":"b464b6a78e46c29df9e4bdadc2646208f11c59168706456075f970552a24efa8","integrity":"sha256-tGS2p45Gwp355L2twmRiCPEcWRaHBkVgdflwVSok76g="},"flags/4x3/vi-58311325a293b046044976d899f288ce0fbe9bfd705a23947a9b38d7991983d7.svg":{"logical_path":"flags/4x3/vi.svg","mtime":"2018-04-02T14:38:31+02:00","size":8775,"digest":"58311325a293b046044976d899f288ce0fbe9bfd705a23947a9b38d7991983d7","integrity":"sha256-WDETJaKTsEYESXbYmfKIzg++m/1wWiOUeps415kZg9c="},"flags/1x1/vi-1c132d2cff66cdbdb7b6acf504bb0cd9d7579595d80c3fa6604ff24ca7a0184d.svg":{"logical_path":"flags/1x1/vi.svg","mtime":"2018-04-02T14:38:31+02:00","size":8730,"digest":"1c132d2cff66cdbdb7b6acf504bb0cd9d7579595d80c3fa6604ff24ca7a0184d","integrity":"sha256-HBMtLP9mzb23tqz1BLsM2ddXlZXYDD+mYE/yTKegGE0="},"flags/4x3/vn-a918d3c9cdc368b1d2ff9614d58cbcd1d43b725889b0ba18f5d4e693071e389a.svg":{"logical_path":"flags/4x3/vn.svg","mtime":"2018-04-02T14:38:31+02:00","size":492,"digest":"a918d3c9cdc368b1d2ff9614d58cbcd1d43b725889b0ba18f5d4e693071e389a","integrity":"sha256-qRjTyc3DaLHS/5YU1Yy80dQ7cliJsLoY9dTmkwceOJo="},"flags/1x1/vn-895e428ae3d98c99dbb02088cf8ef040bfb031df6f16c3c8fc3678505d869791.svg":{"logical_path":"flags/1x1/vn.svg","mtime":"2018-04-02T14:38:31+02:00","size":501,"digest":"895e428ae3d98c99dbb02088cf8ef040bfb031df6f16c3c8fc3678505d869791","integrity":"sha256-iV5CiuPZjJnbsCCIz47wQL+wMd9vFsPI/DZ4UF2Gl5E="},"flags/4x3/vu-2c286c778a7bed03cb603ab24b68dc91868f4f054cf4f851bdd17aa16731571c.svg":{"logical_path":"flags/4x3/vu.svg","mtime":"2018-04-02T14:38:31+02:00","size":3771,"digest":"2c286c778a7bed03cb603ab24b68dc91868f4f054cf4f851bdd17aa16731571c","integrity":"sha256-LChsd4p77QPLYDqyS2jckYaPTwVM9PhRvdF6oWcxVxw="},"flags/1x1/vu-51ef23121e2641ebeeac50d31c4e52b7d00d3ab1bc9fc0ad95ea86fd3631975a.svg":{"logical_path":"flags/1x1/vu.svg","mtime":"2018-04-02T14:38:31+02:00","size":3740,"digest":"51ef23121e2641ebeeac50d31c4e52b7d00d3ab1bc9fc0ad95ea86fd3631975a","integrity":"sha256-Ue8jEh4mQevurFDTHE5St9ANOrG8n8CtleqG/TYxl1o="},"flags/4x3/wf-f7e9ac5edac196ac32d7bafa04b5c0d924b89e9d7e4f3535a6a26c6c1523639c.svg":{"logical_path":"flags/4x3/wf.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"f7e9ac5edac196ac32d7bafa04b5c0d924b89e9d7e4f3535a6a26c6c1523639c","integrity":"sha256-9+msXtrBlqwy17r6BLXA2SS4np1+TzU1pqJsbBUjY5w="},"flags/1x1/wf-95a920a79aa32d92f8a362321aae4230e17025ac04d976593f4423d0c37c1aee.svg":{"logical_path":"flags/1x1/wf.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"95a920a79aa32d92f8a362321aae4230e17025ac04d976593f4423d0c37c1aee","integrity":"sha256-lakgp5qjLZL4o2IyGq5CMOFwJawE2XZZP0Qj0MN8Gu4="},"flags/4x3/ws-efc6505a802a3fa2018bc102fc2e11db8c738464c619381b6edc32d0a89341a3.svg":{"logical_path":"flags/4x3/ws.svg","mtime":"2018-04-02T14:38:31+02:00","size":663,"digest":"efc6505a802a3fa2018bc102fc2e11db8c738464c619381b6edc32d0a89341a3","integrity":"sha256-78ZQWoAqP6IBi8EC/C4R24xzhGTGGTgbbtwy0KiTQaM="},"flags/1x1/ws-e3afb81c037c814620027bf61ac5e266683cab7ba5796ecf10b64c110cfcb932.svg":{"logical_path":"flags/1x1/ws.svg","mtime":"2018-04-02T14:38:31+02:00","size":645,"digest":"e3afb81c037c814620027bf61ac5e266683cab7ba5796ecf10b64c110cfcb932","integrity":"sha256-46+4HAN8gUYgAnv2GsXiZmg8q3uleW7PELZMEQz8uTI="},"flags/4x3/ye-fd88856e70d66b01b4f0f608936a61cf3b1d9dad40a2932fc5da4d01f72a447b.svg":{"logical_path":"flags/4x3/ye.svg","mtime":"2018-04-02T14:38:31+02:00","size":278,"digest":"fd88856e70d66b01b4f0f608936a61cf3b1d9dad40a2932fc5da4d01f72a447b","integrity":"sha256-/YiFbnDWawG08PYIk2phzzsdna1AopMvxdpNAfcqRHs="},"flags/1x1/ye-0c0e32330871e6d83af54affb7dadbbe736f9799068508211fbae54db9bbdcc6.svg":{"logical_path":"flags/1x1/ye.svg","mtime":"2018-04-02T14:38:31+02:00","size":278,"digest":"0c0e32330871e6d83af54affb7dadbbe736f9799068508211fbae54db9bbdcc6","integrity":"sha256-DA4yMwhx5tg69Ur/t9rbvnNvl5kGhQghH7rlTbm73MY="},"flags/4x3/yt-2eef17b543424082d9f9b42a67e84c20b52e7f7eae8c4326d60711158da51d5b.svg":{"logical_path":"flags/4x3/yt.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"2eef17b543424082d9f9b42a67e84c20b52e7f7eae8c4326d60711158da51d5b","integrity":"sha256-Lu8XtUNCQILZ+bQqZ+hMILUuf36ujEMm1gcRFY2lHVs="},"flags/1x1/yt-911da8075337fd8f75ecc8a338c294cb771c6b9a08576f96c9de1437888cd2a7.svg":{"logical_path":"flags/1x1/yt.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"911da8075337fd8f75ecc8a338c294cb771c6b9a08576f96c9de1437888cd2a7","integrity":"sha256-kR2oB1M3/Y917MijOMKUy3cca5oIV2+Wyd4UN4iM0qc="},"flags/4x3/za-45991a2aee307198510e56bf92523070aac4241cafe6c3ddb8f89b20a61d6371.svg":{"logical_path":"flags/4x3/za.svg","mtime":"2018-04-02T14:38:31+02:00","size":856,"digest":"45991a2aee307198510e56bf92523070aac4241cafe6c3ddb8f89b20a61d6371","integrity":"sha256-RZkaKu4wcZhRDla/klIwcKrEJByv5sPduPibIKYdY3E="},"flags/1x1/za-bc09a89b29311ea7e582ef60bf4e18aff7c29de6fbefe309463ca765723a0ce8.svg":{"logical_path":"flags/1x1/za.svg","mtime":"2018-04-02T14:38:31+02:00","size":875,"digest":"bc09a89b29311ea7e582ef60bf4e18aff7c29de6fbefe309463ca765723a0ce8","integrity":"sha256-vAmomykxHqflgu9gv04Yr/fCneb77+MJRjynZXI6DOg="},"flags/4x3/zm-07c0f30d86e66d0cad9d66cd9c9384d9cce1844f159d245deff6717101fe49c2.svg":{"logical_path":"flags/4x3/zm.svg","mtime":"2018-04-02T14:38:31+02:00","size":5508,"digest":"07c0f30d86e66d0cad9d66cd9c9384d9cce1844f159d245deff6717101fe49c2","integrity":"sha256-B8DzDYbmbQytnWbNnJOE2czhhE8VnSRd7/ZxcQH+ScI="},"flags/1x1/zm-fc5bce3834c71fe36617ea5f57f0bd1dcf3880a7c6aa515dcf92ae067f796241.svg":{"logical_path":"flags/1x1/zm.svg","mtime":"2018-04-02T14:38:31+02:00","size":5429,"digest":"fc5bce3834c71fe36617ea5f57f0bd1dcf3880a7c6aa515dcf92ae067f796241","integrity":"sha256-/FvOODTHH+NmF+pfV/C9Hc84gKfGqlFdz5KuBn95YkE="},"flags/4x3/zw-5217c74f14d9fdda244b69c5982bbabee052ac0f1cc0704926e8b1e621e50f9a.svg":{"logical_path":"flags/4x3/zw.svg","mtime":"2018-04-02T14:38:31+02:00","size":6791,"digest":"5217c74f14d9fdda244b69c5982bbabee052ac0f1cc0704926e8b1e621e50f9a","integrity":"sha256-UhfHTxTZ/dokS2nFmCu6vuBSrA8cwHBJJuix5iHlD5o="},"flags/1x1/zw-a33b191c631709b9e1d85e06f5b15535fb544d4668c8bef865ede2a0b6a88ed9.svg":{"logical_path":"flags/1x1/zw.svg","mtime":"2018-04-02T14:38:31+02:00","size":6770,"digest":"a33b191c631709b9e1d85e06f5b15535fb544d4668c8bef865ede2a0b6a88ed9","integrity":"sha256-ozsZHGMXCbnh2F4G9bFVNftUTUZoyL74Ze3ioLaojtk="},"flags/4x3/es-ct-bcbb454a50c9a647efd43dcf041445f15e8dd70654bde530bf62401d4fb7738d.svg":{"logical_path":"flags/4x3/es-ct.svg","mtime":"2018-04-02T14:38:31+02:00","size":261,"digest":"bcbb454a50c9a647efd43dcf041445f15e8dd70654bde530bf62401d4fb7738d","integrity":"sha256-vLtFSlDJpkfv1D3PBBRF8V6N1wZUveUwv2JAHU+3c40="},"flags/1x1/es-ct-7f13eb2b2f5c11dccd7043286bed7540d4dad4b1a8367b0aca1b8405a351b2ef.svg":{"logical_path":"flags/1x1/es-ct.svg","mtime":"2018-04-02T14:38:31+02:00","size":260,"digest":"7f13eb2b2f5c11dccd7043286bed7540d4dad4b1a8367b0aca1b8405a351b2ef","integrity":"sha256-fxPrKy9cEdzNcEMoa+11QNTa1LGoNnsKyhuEBaNRsu8="},"flags/4x3/eu-5f129db64306353251b78f998d531d2f1019404cfa890ae63ed70dc316c7f240.svg":{"logical_path":"flags/4x3/eu.svg","mtime":"2018-04-02T14:38:31+02:00","size":1252,"digest":"5f129db64306353251b78f998d531d2f1019404cfa890ae63ed70dc316c7f240","integrity":"sha256-XxKdtkMGNTJRt4+ZjVMdLxAZQEz6iQrmPtcNwxbH8kA="},"flags/1x1/eu-ec59ac8daf2a63ea8e299ad63a208445d68a96affe6a10a7328acb6799d44127.svg":{"logical_path":"flags/1x1/eu.svg","mtime":"2018-04-02T14:38:31+02:00","size":1253,"digest":"ec59ac8daf2a63ea8e299ad63a208445d68a96affe6a10a7328acb6799d44127","integrity":"sha256-7Fmsja8qY+qOKZrWOiCERdaKlq/+ahCnMorLZ5nUQSc="},"flags/4x3/gb-eng-1895f4e35ae299f5d869da2462ffcf98df4b08dcddc531c8f175e49720001a14.svg":{"logical_path":"flags/4x3/gb-eng.svg","mtime":"2018-04-02T14:38:31+02:00","size":245,"digest":"1895f4e35ae299f5d869da2462ffcf98df4b08dcddc531c8f175e49720001a14","integrity":"sha256-GJX041rimfXYadokYv/PmN9LCNzdxTHI8XXklyAAGhQ="},"flags/1x1/gb-eng-d11afb87f40f35acda435a886ea044bd5e0b6f363ba0c7319f1d0181551fecf3.svg":{"logical_path":"flags/1x1/gb-eng.svg","mtime":"2018-04-02T14:38:31+02:00","size":235,"digest":"d11afb87f40f35acda435a886ea044bd5e0b6f363ba0c7319f1d0181551fecf3","integrity":"sha256-0Rr7h/QPNazaQ1qIbqBEvV4LbzY7oMcxnx0BgVUf7PM="},"flags/4x3/gb-nir-b280f09c787f495c1074376cd67537b40216f672917e7d204bb12b8e7c72afaf.svg":{"logical_path":"flags/4x3/gb-nir.svg","mtime":"2018-04-02T14:38:31+02:00","size":23738,"digest":"b280f09c787f495c1074376cd67537b40216f672917e7d204bb12b8e7c72afaf","integrity":"sha256-soDwnHh/SVwQdDds1nU3tAIW9nKRfn0gS7Erjnxyr68="},"flags/1x1/gb-nir-2e516e72e0e8e244ef430e6608322f8c4fb276807ab033279b2a6570dd68fd41.svg":{"logical_path":"flags/1x1/gb-nir.svg","mtime":"2018-04-02T14:38:31+02:00","size":25263,"digest":"2e516e72e0e8e244ef430e6608322f8c4fb276807ab033279b2a6570dd68fd41","integrity":"sha256-LlFucuDo4kTvQw5mCDIvjE+ydoB6sDMnmyplcN1o/UE="},"flags/4x3/gb-sct-1b9e407802ae901cf8da740c382ec2b19821837d76271a73346e0c63c2244506.svg":{"logical_path":"flags/4x3/gb-sct.svg","mtime":"2018-04-02T14:38:31+02:00","size":234,"digest":"1b9e407802ae901cf8da740c382ec2b19821837d76271a73346e0c63c2244506","integrity":"sha256-G55AeAKukBz42nQMOC7CsZghg312JxpzNG4MY8IkRQY="},"flags/1x1/gb-sct-d01e8a06a340e30ce52e8a3aba7ca6207afb96fdb238a815cc6cb92df8fa5df3.svg":{"logical_path":"flags/1x1/gb-sct.svg","mtime":"2018-04-02T14:38:31+02:00","size":242,"digest":"d01e8a06a340e30ce52e8a3aba7ca6207afb96fdb238a815cc6cb92df8fa5df3","integrity":"sha256-0B6KBqNA4wzlLoo6unymIHr7lv2yOKgVzGy5Lfj6XfM="},"flags/4x3/gb-wls-5232b3e376a19866cddec8225cba242783b2a48063811957f1ce5a2c347c5bc9.svg":{"logical_path":"flags/4x3/gb-wls.svg","mtime":"2018-04-02T14:38:31+02:00","size":9188,"digest":"5232b3e376a19866cddec8225cba242783b2a48063811957f1ce5a2c347c5bc9","integrity":"sha256-UjKz43ahmGbN3sgiXLokJ4OypIBjgRlX8c5aLDR8W8k="},"flags/1x1/gb-wls-126615bc3597fda1ca4ee931ef24f6c2cf2547998c06db9c1ded69fe66c479e9.svg":{"logical_path":"flags/1x1/gb-wls.svg","mtime":"2018-04-02T14:38:31+02:00","size":9083,"digest":"126615bc3597fda1ca4ee931ef24f6c2cf2547998c06db9c1ded69fe66c479e9","integrity":"sha256-EmYVvDWX/aHKTukx7yT2ws8lR5mMBtucHe1p/mbEeek="},"flags/4x3/un-31dece22ae18c3e01e86648ef3ef45f2f5b3d9d28a1e2bbbcdb1d87c37af55af.svg":{"logical_path":"flags/4x3/un.svg","mtime":"2018-04-02T14:38:31+02:00","size":20268,"digest":"31dece22ae18c3e01e86648ef3ef45f2f5b3d9d28a1e2bbbcdb1d87c37af55af","integrity":"sha256-Md7OIq4Yw+AehmSO8+9F8vWz2dKKHiu7zbHYfDevVa8="},"flags/1x1/un-455b5f3173ca9ac64f2135fac4ead7217d7fbe07551d0d2cc60216f83208f798.svg":{"logical_path":"flags/1x1/un.svg","mtime":"2018-04-02T14:38:31+02:00","size":20476,"digest":"455b5f3173ca9ac64f2135fac4ead7217d7fbe07551d0d2cc60216f83208f798","integrity":"sha256-RVtfMXPKmsZPITX6xOrXIX1/vgdVHQ0sxgIW+DII95g="},"leaflet/dist/images/layers-1dbbe9d028e292f36fcba8f8b3a28d5e8932754fc2215b9ac69e4cdecf5107c6.png":{"logical_path":"leaflet/dist/images/layers.png","mtime":"2018-08-23T19:40:32+02:00","size":696,"digest":"1dbbe9d028e292f36fcba8f8b3a28d5e8932754fc2215b9ac69e4cdecf5107c6","integrity":"sha256-Hbvp0CjikvNvy6j4s6KNXokydU/CIVuaxp5M3s9RB8Y="},"leaflet/dist/images/layers-2x-066daca850d8ffbef007af00b06eac0015728dee279c51f3cb6c716df7c42edf.png":{"logical_path":"leaflet/dist/images/layers-2x.png","mtime":"2018-08-23T19:40:32+02:00","size":1259,"digest":"066daca850d8ffbef007af00b06eac0015728dee279c51f3cb6c716df7c42edf","integrity":"sha256-Bm2sqFDY/77wB68AsG6sABVyje4nnFHzy2xxbffELt8="},"leaflet/dist/images/marker-icon-574c3a5cca85f4114085b6841596d62f00d7c892c7b03f28cbfa301deb1dc437.png":{"logical_path":"leaflet/dist/images/marker-icon.png","mtime":"2018-08-23T19:40:32+02:00","size":1466,"digest":"574c3a5cca85f4114085b6841596d62f00d7c892c7b03f28cbfa301deb1dc437","integrity":"sha256-V0w6XMqF9BFAhbaEFZbWLwDXyJLHsD8oy/owHesdxDc="},"markers-soft-e78784e4ed70aaffddd73c315fab590233cc4e7b72388d7dd47a14796fc7c739.png":{"logical_path":"markers-soft.png","mtime":"2016-05-21T23:41:15+02:00","size":41226,"digest":"e78784e4ed70aaffddd73c315fab590233cc4e7b72388d7dd47a14796fc7c739","integrity":"sha256-54eE5O1wqv/d1zwxX6tZAjPMTntyOI191HoUeW/Hxzk="},"markers-shadow-8703a2262710f5e3d29e65d2acdf90d6512e159e119d27b8234731d8a6208a20.png":{"logical_path":"markers-shadow.png","mtime":"2016-05-21T23:41:15+02:00","size":535,"digest":"8703a2262710f5e3d29e65d2acdf90d6512e159e119d27b8234731d8a6208a20","integrity":"sha256-hwOiJicQ9ePSnmXSrN+Q1lEuFZ4RnSe4I0cx2KYgiiA="},"markers-soft@2x-c1e77253a8bfbe30cec24885d7046f443b76ebb66f4c961f77083b03f4a5cbaf.png":{"logical_path":"markers-soft@2x.png","mtime":"2016-05-21T23:41:15+02:00","size":66408,"digest":"c1e77253a8bfbe30cec24885d7046f443b76ebb66f4c961f77083b03f4a5cbaf","integrity":"sha256-wedyU6i/vjDOwkiF1wRvRDt267ZvTJYfdwg7A/Sly68="},"markers-shadow@2x-b21a536be27313fb504f69f5899ff0b1245b276571769ac08d6c32c35676e47a.png":{"logical_path":"markers-shadow@2x.png","mtime":"2016-05-21T23:41:15+02:00","size":1469,"digest":"b21a536be27313fb504f69f5899ff0b1245b276571769ac08d6c32c35676e47a","integrity":"sha256-shpTa+JzE/tQT2n1iZ/wsSRbJ2VxdprAjWwyw1Z25Ho="},"markers-matte-497826545a90e09a240504d14530eba45823b19fd44175e09e27c47cd822ddb9.png":{"logical_path":"markers-matte.png","mtime":"2016-05-21T23:41:15+02:00","size":14323,"digest":"497826545a90e09a240504d14530eba45823b19fd44175e09e27c47cd822ddb9","integrity":"sha256-SXgmVFqQ4JokBQTRRTDrpFgjsZ/UQXXgnifEfNgi3bk="},"markers-matte@2x-948fc8c4426f04f60964ed20394247f45b0b60e575d02398b9b6810e7a29a823.png":{"logical_path":"markers-matte@2x.png","mtime":"2016-05-21T23:41:15+02:00","size":31113,"digest":"948fc8c4426f04f60964ed20394247f45b0b60e575d02398b9b6810e7a29a823","integrity":"sha256-lI/IxEJvBPYJZO0gOUJH9FsLYOV10COYubaBDnopqCM="},"markers-plain-cf233423aa44e75ac0031e77b8ba571cd3331010517e1197e63fb7b06856c1ff.png":{"logical_path":"markers-plain.png","mtime":"2016-05-21T23:41:15+02:00","size":7946,"digest":"cf233423aa44e75ac0031e77b8ba571cd3331010517e1197e63fb7b06856c1ff","integrity":"sha256-zyM0I6pE51rAAx53uLpXHNMzEBBRfhGX5j+3sGhWwf8="},"leaflet/dist/images/marker-icon-2x-00179c4c1ee830d3a108412ae0d294f55776cfeb085c60129a39aa6fc4ae2528.png":{"logical_path":"leaflet/dist/images/marker-icon-2x.png","mtime":"2018-08-23T19:40:32+02:00","size":2464,"digest":"00179c4c1ee830d3a108412ae0d294f55776cfeb085c60129a39aa6fc4ae2528","integrity":"sha256-ABecTB7oMNOhCEEq4NKU9Vd2z+sIXGASmjmqb8SuJSg="},"leaflet/dist/images/marker-shadow-264f5c640339f042dd729062cfc04c17f8ea0f29882b538e3848ed8f10edb4da.png":{"logical_path":"leaflet/dist/images/marker-shadow.png","mtime":"2018-08-23T19:40:32+02:00","size":618,"digest":"264f5c640339f042dd729062cfc04c17f8ea0f29882b538e3848ed8f10edb4da","integrity":"sha256-Jk9cZAM58ELdcpBiz8BMF/jqDymIK1OOOEjtjxDttNo="},"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-ae65a7ae22c4c23115948fdeb5c05c9137dbd13ca2d426b3c4c3c4183451e410.png":{"logical_path":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png","mtime":"2018-03-12T11:55:26+01:00","size":86,"digest":"ae65a7ae22c4c23115948fdeb5c05c9137dbd13ca2d426b3c4c3c4183451e410","integrity":"sha256-rmWnriLEwjEVlI/etcBckTfb0Tyi1CazxMPEGDRR5BA="},"jquery-ui/ui-icons_444444_256x240-31d988765b4e6f56553c29588c500381dc3e6f0aa2980c8212202e5644aefd5d.png":{"logical_path":"jquery-ui/ui-icons_444444_256x240.png","mtime":"2018-03-12T11:55:26+01:00","size":3756,"digest":"31d988765b4e6f56553c29588c500381dc3e6f0aa2980c8212202e5644aefd5d","integrity":"sha256-MdmIdltOb1ZVPClYjFADgdw+bwqimAyCEiAuVkSu/V0="},"jquery-ui/ui-icons_555555_256x240-32175261daee76c82bb0edf0eea16a56421866fbc31e94f3c1d570aa114502f5.png":{"logical_path":"jquery-ui/ui-icons_555555_256x240.png","mtime":"2018-03-12T11:55:26+01:00","size":3756,"digest":"32175261daee76c82bb0edf0eea16a56421866fbc31e94f3c1d570aa114502f5","integrity":"sha256-MhdSYdrudsgrsO3w7qFqVkIYZvvDHpTzwdVwqhFFAvU="},"jquery-ui/ui-icons_777620_256x240-0b020fc6e696d88d296e7bb1f61f1eb2ad827848e2c7382a4c3e0999e702dd9b.png":{"logical_path":"jquery-ui/ui-icons_777620_256x240.png","mtime":"2018-03-12T11:55:26+01:00","size":3756,"digest":"0b020fc6e696d88d296e7bb1f61f1eb2ad827848e2c7382a4c3e0999e702dd9b","integrity":"sha256-CwIPxuaW2I0pbnux9h8esq2CeEjixzgqTD4JmecC3Zs="},"jquery-ui/ui-icons_777777_256x240-faf32007ae120c302213557626e660dd10e711c5dd4f1113d35f26dc05b78d2f.png":{"logical_path":"jquery-ui/ui-icons_777777_256x240.png","mtime":"2018-03-12T11:55:26+01:00","size":3756,"digest":"faf32007ae120c302213557626e660dd10e711c5dd4f1113d35f26dc05b78d2f","integrity":"sha256-+vMgB64SDDAiE1V2JuZg3RDnEcXdTxET018m3AW3jS8="},"jquery-ui/ui-icons_cc0000_256x240-40985a64b4d5dd213fba27fcd862a1bd1b337a97674f6ff0b9ec20abcee4bc69.png":{"logical_path":"jquery-ui/ui-icons_cc0000_256x240.png","mtime":"2018-03-12T11:55:26+01:00","size":3756,"digest":"40985a64b4d5dd213fba27fcd862a1bd1b337a97674f6ff0b9ec20abcee4bc69","integrity":"sha256-QJhaZLTV3SE/uif82GKhvRszepdnT2/wuewgq87kvGk="},"jquery-ui/ui-icons_ffffff_256x240-350df1b7131037de20e83c5c0f3a41a770d2ac48b5762ea772b3f4a8a7b9d47a.png":{"logical_path":"jquery-ui/ui-icons_ffffff_256x240.png","mtime":"2018-03-12T11:55:26+01:00","size":3756,"digest":"350df1b7131037de20e83c5c0f3a41a770d2ac48b5762ea772b3f4a8a7b9d47a","integrity":"sha256-NQ3xtxMQN94g6DxcDzpBp3DSrEi1di6ncrP0qKe51Ho="},"tinymce/langs/af_ZA-6d5614830d9cc3d504d9922bf5373665246936adc337530a7a672e9bf5fc21ea.js":{"logical_path":"tinymce/langs/af_ZA.js","mtime":"2018-03-12T11:55:28+01:00","size":7669,"digest":"6d5614830d9cc3d504d9922bf5373665246936adc337530a7a672e9bf5fc21ea","integrity":"sha256-bVYUgw2cw9UE2ZIr9Tc2ZSRpNq3DN1MKemcum/X8Ieo="},"tinymce/langs/ar-5a0ab86d268d50c7c9462e0645b96e6c09d928976c0b27007f85f7c5638cbbf8.js":{"logical_path":"tinymce/langs/ar.js","mtime":"2018-03-12T11:55:28+01:00","size":21817,"digest":"5a0ab86d268d50c7c9462e0645b96e6c09d928976c0b27007f85f7c5638cbbf8","integrity":"sha256-Wgq4bSaNUMfJRi4GRblubAnZKJdsCycAf4X3xWOMu/g="},"tinymce/langs/ar_SA-24b62c76e99e114ae44480a67edbacf74f9fed0ff7afbeacce4966f1bc80333b.js":{"logical_path":"tinymce/langs/ar_SA.js","mtime":"2018-03-12T11:55:28+01:00","size":10003,"digest":"24b62c76e99e114ae44480a67edbacf74f9fed0ff7afbeacce4966f1bc80333b","integrity":"sha256-JLYsdumeEUrkRICmftus90+f7Q/3r76szklm8byAMzs="},"tinymce/langs/az-d40cecd6eb423f910f528ae98dcdaba4c2449802621759437174cf8c8c0d5b25.js":{"logical_path":"tinymce/langs/az.js","mtime":"2018-03-12T11:55:28+01:00","size":9680,"digest":"d40cecd6eb423f910f528ae98dcdaba4c2449802621759437174cf8c8c0d5b25","integrity":"sha256-1Azs1utCP5EPUorpjc2rpMJEmAJiF1lDcXTPjIwNWyU="},"tinymce/langs/be-2d601b695076754977002cf73d6809919ca8c0758850a45e34a692af7b08fb1d.js":{"logical_path":"tinymce/langs/be.js","mtime":"2018-03-12T11:55:28+01:00","size":22653,"digest":"2d601b695076754977002cf73d6809919ca8c0758850a45e34a692af7b08fb1d","integrity":"sha256-LWAbaVB2dUl3ACz3PWgJkZyowHWIUKReNKaSr3sI+x0="},"tinymce/langs/bg_BG-0272f963807ba8672db0d5f6b8919d2f3aa2f8bb172a17c5f8c2934760ba0dce.js":{"logical_path":"tinymce/langs/bg_BG.js","mtime":"2018-03-12T11:55:28+01:00","size":28023,"digest":"0272f963807ba8672db0d5f6b8919d2f3aa2f8bb172a17c5f8c2934760ba0dce","integrity":"sha256-AnL5Y4B7qGctsNX2uJGdLzqi+LsXKhfF+MKTR2C6Dc4="},"tinymce/langs/bn_BD-ef48a9094445dfa624af0c35902f60b7949b30585b5e9bc760a225fe2c07cbd3.js":{"logical_path":"tinymce/langs/bn_BD.js","mtime":"2018-03-12T11:55:28+01:00","size":6846,"digest":"ef48a9094445dfa624af0c35902f60b7949b30585b5e9bc760a225fe2c07cbd3","integrity":"sha256-70ipCURF36Ykrww1kC9gt5SbMFhbXpvHYKIl/iwHy9M="},"tinymce/langs/bs-eb66c6d6910a30b950d7a0e784027ed288e6e5a2c6db7741da3359f2067e2e0e.js":{"logical_path":"tinymce/langs/bs.js","mtime":"2018-03-12T11:55:28+01:00","size":6970,"digest":"eb66c6d6910a30b950d7a0e784027ed288e6e5a2c6db7741da3359f2067e2e0e","integrity":"sha256-62bG1pEKMLlQ16DnhAJ+0ojm5aLG23dB2jNZ8gZ+Lg4="},"tinymce/langs/ca-e4765b96adf2232248998c6b703730652cd4302035ee39733cd6e5df8d79ee22.js":{"logical_path":"tinymce/langs/ca.js","mtime":"2018-03-12T11:55:28+01:00","size":9647,"digest":"e4765b96adf2232248998c6b703730652cd4302035ee39733cd6e5df8d79ee22","integrity":"sha256-5HZblq3yIyJImYxrcDcwZSzUMCA17jlzPNbl34157iI="},"tinymce/langs/cs-77418e2f6150bfb0391227eeff79499f8654a9fcc5314f30ec88e4684e8e5fa6.js":{"logical_path":"tinymce/langs/cs.js","mtime":"2018-03-12T11:55:28+01:00","size":10817,"digest":"77418e2f6150bfb0391227eeff79499f8654a9fcc5314f30ec88e4684e8e5fa6","integrity":"sha256-d0GOL2FQv7A5Eifu/3lJn4ZUqfzFMU8w7IjkaE6OX6Y="},"tinymce/langs/cs_CZ-4b0778d233e200dea350f8361129da2844e23d1c0f2d524aeffa6d34e581368d.js":{"logical_path":"tinymce/langs/cs_CZ.js","mtime":"2018-03-12T11:55:28+01:00","size":8399,"digest":"4b0778d233e200dea350f8361129da2844e23d1c0f2d524aeffa6d34e581368d","integrity":"sha256-Swd40jPiAN6jUPg2ESnaKETiPRwPLVJK7/ptNOWBNo0="},"tinymce/langs/cy-d337e01ca993cd9fb80ce3fccc39dff7f1dc47021264bf9ec14ac9af2b3d74b5.js":{"logical_path":"tinymce/langs/cy.js","mtime":"2018-03-12T11:55:28+01:00","size":7751,"digest":"d337e01ca993cd9fb80ce3fccc39dff7f1dc47021264bf9ec14ac9af2b3d74b5","integrity":"sha256-0zfgHKmTzZ+4DOP8zDnf9/HcRwISZL+ewUrJrys9dLU="},"tinymce/langs/da-4a040df5d2a225dcd10aa1c7d05ff7f36a854d4834919497812c3ba5aa5b06f4.js":{"logical_path":"tinymce/langs/da.js","mtime":"2018-03-12T11:55:28+01:00","size":9262,"digest":"4a040df5d2a225dcd10aa1c7d05ff7f36a854d4834919497812c3ba5aa5b06f4","integrity":"sha256-SgQN9dKiJdzRCqHH0F/382qFTUg0kZSXgSw7papbBvQ="},"tinymce/langs/de-f9a88202d526e76875d22053cc659e4aabb43fa88411296ba122b8cf4d468eef.js":{"logical_path":"tinymce/langs/de.js","mtime":"2018-03-12T11:55:28+01:00","size":10076,"digest":"f9a88202d526e76875d22053cc659e4aabb43fa88411296ba122b8cf4d468eef","integrity":"sha256-+aiCAtUm52h10iBTzGWeSqu0P6iEESlroSK4z01Gju8="},"tinymce/langs/de_AT-2c6a1926c1cddd2079d27e844db153d797505e21bab6bdab018c2e5d1f0532fb.js":{"logical_path":"tinymce/langs/de_AT.js","mtime":"2018-03-12T11:55:28+01:00","size":10065,"digest":"2c6a1926c1cddd2079d27e844db153d797505e21bab6bdab018c2e5d1f0532fb","integrity":"sha256-LGoZJsHN3SB50n6ETbFT15dQXiG6tr2rAYwuXR8FMvs="},"tinymce/langs/dv-3b3e040a7e24fd18903d4833a8da09f2e2b65fbd1c3ac325a3cd373775f9bd23.js":{"logical_path":"tinymce/langs/dv.js","mtime":"2018-03-12T11:55:28+01:00","size":22234,"digest":"3b3e040a7e24fd18903d4833a8da09f2e2b65fbd1c3ac325a3cd373775f9bd23","integrity":"sha256-Oz4ECn4k/RiQPUgzqNoJ8uK2X70cOsMlo803N3X5vSM="},"tinymce/langs/el-0d51a187db018442cb94826f66155adb3fd805ac792c1110a04a548bc7d5d6c2.js":{"logical_path":"tinymce/langs/el.js","mtime":"2018-03-12T11:55:28+01:00","size":24860,"digest":"0d51a187db018442cb94826f66155adb3fd805ac792c1110a04a548bc7d5d6c2","integrity":"sha256-DVGhh9sBhELLlIJvZhVa2z/YBax5LBEQoEpUi8fV1sI="},"tinymce/langs/en_CA-2c64a16614c895022cc2b6aa4f134f4917ec8dd045c2184672653f3fae158db4.js":{"logical_path":"tinymce/langs/en_CA.js","mtime":"2018-03-12T11:55:28+01:00","size":8530,"digest":"2c64a16614c895022cc2b6aa4f134f4917ec8dd045c2184672653f3fae158db4","integrity":"sha256-LGShZhTIlQIswraqTxNPSRfsjdBFwhhGcmU/P64VjbQ="},"tinymce/langs/en_GB-4eb69d31cb70a3d3c53185883d58027a70524b0f5db82200bfa45b6a8ea22224.js":{"logical_path":"tinymce/langs/en_GB.js","mtime":"2018-03-12T11:55:28+01:00","size":7438,"digest":"4eb69d31cb70a3d3c53185883d58027a70524b0f5db82200bfa45b6a8ea22224","integrity":"sha256-TradMctwo9PFMYWIPVgCenBSSw9duCIAv6Rbao6iIiQ="},"tinymce/langs/eo-cbac4d7ebcb0679845b852d9354e74586e78cf13eef82de1400cf6b465e203cd.js":{"logical_path":"tinymce/langs/eo.js","mtime":"2018-03-12T11:55:28+01:00","size":7466,"digest":"cbac4d7ebcb0679845b852d9354e74586e78cf13eef82de1400cf6b465e203cd","integrity":"sha256-y6xNfrywZ5hFuFLZNU50WG54zxPu+C3hQAz2tGXiA80="},"tinymce/langs/es-4fd5fd5b991c2c1e3032a297ae4605088bcd6835a467e64f9568de1b554e559c.js":{"logical_path":"tinymce/langs/es.js","mtime":"2018-03-12T11:55:28+01:00","size":9447,"digest":"4fd5fd5b991c2c1e3032a297ae4605088bcd6835a467e64f9568de1b554e559c","integrity":"sha256-T9X9W5kcLB4wMqKXrkYFCIvNaDWkZ+ZPlWjeG1VOVZw="},"tinymce/langs/es_MX-bc4f779c4782ed7bc7e7c4b7cd9293d7803256660cc529307dca05a40c49b94d.js":{"logical_path":"tinymce/langs/es_MX.js","mtime":"2018-03-12T11:55:28+01:00","size":9555,"digest":"bc4f779c4782ed7bc7e7c4b7cd9293d7803256660cc529307dca05a40c49b94d","integrity":"sha256-vE93nEeC7XvH58S3zZKT14AyVmYMxSkwfcoFpAxJuU0="},"tinymce/langs/et-26b7ced79b21dc8a21fda1dd95247e93c35096461238c8579dea16e48d12b4ef.js":{"logical_path":"tinymce/langs/et.js","mtime":"2018-03-12T11:55:28+01:00","size":8364,"digest":"26b7ced79b21dc8a21fda1dd95247e93c35096461238c8579dea16e48d12b4ef","integrity":"sha256-JrfO15sh3Ioh/aHdlSR+k8NQlkYSOMhXneoW5I0StO8="},"tinymce/langs/eu-8698ae4de236fcd490d0f45d485dbd33d8e9de6eb3db51191e1b4f8ea96a4d06.js":{"logical_path":"tinymce/langs/eu.js","mtime":"2018-03-12T11:55:28+01:00","size":7011,"digest":"8698ae4de236fcd490d0f45d485dbd33d8e9de6eb3db51191e1b4f8ea96a4d06","integrity":"sha256-hpiuTeI2/NSQ0PRdSF29M9jp3m6z21EZHhtPjqlqTQY="},"tinymce/langs/fa-7eff96595e93d4b0df484dd90c14b7b412966157ed8293f54429e9418882bdb2.js":{"logical_path":"tinymce/langs/fa.js","mtime":"2018-03-12T11:55:28+01:00","size":16462,"digest":"7eff96595e93d4b0df484dd90c14b7b412966157ed8293f54429e9418882bdb2","integrity":"sha256-fv+WWV6T1LDfSE3ZDBS3tBKWYVftgpP1RCnpQYiCvbI="},"tinymce/langs/fa_IR-4103bdacd3e4b53f30b27019dc9cdbc6402e3345331a93a5768900d591633201.js":{"logical_path":"tinymce/langs/fa_IR.js","mtime":"2018-03-12T11:55:28+01:00","size":22191,"digest":"4103bdacd3e4b53f30b27019dc9cdbc6402e3345331a93a5768900d591633201","integrity":"sha256-QQO9rNPktT8wsnAZ3JzbxkAuM0UzGpOldokA1ZFjMgE="},"tinymce/langs/fi-6ca2a93d045067a86e8ea973d0b89368054b15eb9b9625bf1ca871608a5cb77c.js":{"logical_path":"tinymce/langs/fi.js","mtime":"2018-03-12T11:55:28+01:00","size":8143,"digest":"6ca2a93d045067a86e8ea973d0b89368054b15eb9b9625bf1ca871608a5cb77c","integrity":"sha256-bKKpPQRQZ6hujqlz0LiTaAVLFeubliW/HKhxYIpct3w="},"tinymce/langs/fo-340609cecd5571e4eacb8fe7bd1343c8553d96d12610fb77d9a812dc6d3635fd.js":{"logical_path":"tinymce/langs/fo.js","mtime":"2018-03-12T11:55:28+01:00","size":8044,"digest":"340609cecd5571e4eacb8fe7bd1343c8553d96d12610fb77d9a812dc6d3635fd","integrity":"sha256-NAYJzs1VceTqy4/nvRNDyFU9ltEmEPt32agS3G02Nf0="},"tinymce/langs/fr_CH-e0f43c0f20727368ff0767f3bf099bc23eed9fe3e81f8bbe514381e786526928.js":{"logical_path":"tinymce/langs/fr_CH.js","mtime":"2018-03-12T11:55:28+01:00","size":8074,"digest":"e0f43c0f20727368ff0767f3bf099bc23eed9fe3e81f8bbe514381e786526928","integrity":"sha256-4PQ8DyByc2j/B2fzvwmbwj7tn+PoH4u+UUOB54ZSaSg="},"tinymce/langs/fr_FR-c7b4bea9c3f186767ffee3f06d12830574620a5f58c4f76dede76d311be2a9c6.js":{"logical_path":"tinymce/langs/fr_FR.js","mtime":"2018-03-12T11:55:28+01:00","size":9839,"digest":"c7b4bea9c3f186767ffee3f06d12830574620a5f58c4f76dede76d311be2a9c6","integrity":"sha256-x7S+qcPxhnZ//uPwbRKDBXRiCl9YxPdt7edtMRviqcY="},"tinymce/langs/ga-7c1e918737301e611973d91e10c27930873e97dd690f7d10862d0cd40e639055.js":{"logical_path":"tinymce/langs/ga.js","mtime":"2018-03-12T11:55:28+01:00","size":10477,"digest":"7c1e918737301e611973d91e10c27930873e97dd690f7d10862d0cd40e639055","integrity":"sha256-fB6RhzcwHmEZc9keEMJ5MIc+l91pD30Qhi0M1A5jkFU="},"tinymce/langs/gd-0453e8b97bf3b6cca4065712ec59f20343ad6131735b38547e865177a1c1c490.js":{"logical_path":"tinymce/langs/gd.js","mtime":"2018-03-12T11:55:28+01:00","size":8808,"digest":"0453e8b97bf3b6cca4065712ec59f20343ad6131735b38547e865177a1c1c490","integrity":"sha256-BFPouXvztsykBlcS7FnyA0OtYTFzWzhUfoZRd6HBxJA="},"tinymce/langs/gl-f6ec1cbe13f00683a8fceb6e73a353dfced77ab3f63d99fa2ae7c40bd6b3a64c.js":{"logical_path":"tinymce/langs/gl.js","mtime":"2018-03-12T11:55:28+01:00","size":9315,"digest":"f6ec1cbe13f00683a8fceb6e73a353dfced77ab3f63d99fa2ae7c40bd6b3a64c","integrity":"sha256-9uwcvhPwBoOo/Otuc6NT387XerP2PZn6KufEC9azpkw="},"tinymce/langs/he_IL-74b957588e5998649fde6c6f3686bb74790d7173d0f31c90a4272a4596b16b32.js":{"logical_path":"tinymce/langs/he_IL.js","mtime":"2018-03-12T11:55:28+01:00","size":17345,"digest":"74b957588e5998649fde6c6f3686bb74790d7173d0f31c90a4272a4596b16b32","integrity":"sha256-dLlXWI5ZmGSf3mxvNoa7dHkNcXPQ8xyQpCcqRZaxazI="},"tinymce/langs/hi_IN-695e0cdc22974fe45e0f35289f0249ddab87245165c9df765ec1b885ec55f0be.js":{"logical_path":"tinymce/langs/hi_IN.js","mtime":"2018-03-12T11:55:28+01:00","size":18458,"digest":"695e0cdc22974fe45e0f35289f0249ddab87245165c9df765ec1b885ec55f0be","integrity":"sha256-aV4M3CKXT+ReDzUonwJJ3auHJFFlyd92XsG4hexV8L4="},"tinymce/langs/hr-1dda1c40a40645a936a214478697c44137c805bf8b9c9e4485a0fb142e4ffe18.js":{"logical_path":"tinymce/langs/hr.js","mtime":"2018-03-12T11:55:28+01:00","size":9037,"digest":"1dda1c40a40645a936a214478697c44137c805bf8b9c9e4485a0fb142e4ffe18","integrity":"sha256-HdocQKQGRak2ohRHhpfEQTfIBb+LnJ5EhaD7FC5P/hg="},"tinymce/langs/hu_HU-9e74f5ada14970f167ee2ec1f46c8fd41d8bb98f9f5f5df9b4ad041cdaa81fd7.js":{"logical_path":"tinymce/langs/hu_HU.js","mtime":"2018-03-12T11:55:28+01:00","size":11691,"digest":"9e74f5ada14970f167ee2ec1f46c8fd41d8bb98f9f5f5df9b4ad041cdaa81fd7","integrity":"sha256-nnT1raFJcPFn7i7B9GyP1B2LuY+fX135tK0EHNqoH9c="},"tinymce/langs/hy-0d384f3f82cd76793d3e7428a2140ea97f40a943f25ef99a2e3709a3e02b0930.js":{"logical_path":"tinymce/langs/hy.js","mtime":"2018-03-12T11:55:28+01:00","size":20375,"digest":"0d384f3f82cd76793d3e7428a2140ea97f40a943f25ef99a2e3709a3e02b0930","integrity":"sha256-DThPP4LNdnk9PnQoohQOqX9AqUPyXvmaLjcJo+ArCTA="},"tinymce/langs/id-e9fd018be745b5f14f4af47887420f98c590c607e01d57aca77ef5affe188523.js":{"logical_path":"tinymce/langs/id.js","mtime":"2018-03-12T11:55:28+01:00","size":7141,"digest":"e9fd018be745b5f14f4af47887420f98c590c607e01d57aca77ef5affe188523","integrity":"sha256-6f0Bi+dFtfFPSvR4h0IPmMWQxgfgHVesp371r/4YhSM="},"tinymce/langs/is_IS-c6e8c3e7b0e6b447faec3d8d258928f97c84558b29882c056513fb71cf237bfa.js":{"logical_path":"tinymce/langs/is_IS.js","mtime":"2018-03-12T11:55:28+01:00","size":7928,"digest":"c6e8c3e7b0e6b447faec3d8d258928f97c84558b29882c056513fb71cf237bfa","integrity":"sha256-xujD57DmtEf67D2NJYko+XyEVYspiCwFZRP7cc8je/o="},"tinymce/langs/it-c4549598b4e13df2201efb7f5b971e5bc55a731b25dd9ac7adb5f75780fe5f34.js":{"logical_path":"tinymce/langs/it.js","mtime":"2018-03-12T11:55:28+01:00","size":9264,"digest":"c4549598b4e13df2201efb7f5b971e5bc55a731b25dd9ac7adb5f75780fe5f34","integrity":"sha256-xFSVmLThPfIgHvt/W5ceW8Vacxsl3ZrHrbX3V4D+XzQ="},"tinymce/langs/ja-da6414959d66a9b0cb46078592bd018bc8dc6707588d5ab911ebd09e589f92f6.js":{"logical_path":"tinymce/langs/ja.js","mtime":"2018-03-12T11:55:28+01:00","size":15243,"digest":"da6414959d66a9b0cb46078592bd018bc8dc6707588d5ab911ebd09e589f92f6","integrity":"sha256-2mQUlZ1mqbDLRgeFkr0Bi8jcZwdYjVq5EevQnlifkvY="},"tinymce/langs/ka_GE-480559d4cffe96c5cae5e41f9ffd06f979785b3ce93e547462fbabc5cc1a88fb.js":{"logical_path":"tinymce/langs/ka_GE.js","mtime":"2018-03-12T11:55:28+01:00","size":22807,"digest":"480559d4cffe96c5cae5e41f9ffd06f979785b3ce93e547462fbabc5cc1a88fb","integrity":"sha256-SAVZ1M/+lsXK5eQfn/0G+Xl4WzzpPlR0YvurxcwaiPs="},"tinymce/langs/kab-dc638a064c01cae2218d445beec60da010ee8dee8524f245ae3b99c8c5b3567c.js":{"logical_path":"tinymce/langs/kab.js","mtime":"2018-03-12T11:55:28+01:00","size":7904,"digest":"dc638a064c01cae2218d445beec60da010ee8dee8524f245ae3b99c8c5b3567c","integrity":"sha256-3GOKBkwByuIhjURb7sYNoBDuje6FJPJFrjuZyMWzVnw="},"tinymce/langs/kk-282b790d721dcaf6b44d930f70825e06969602572e477b7ef73766360eefdbaf.js":{"logical_path":"tinymce/langs/kk.js","mtime":"2018-03-12T11:55:28+01:00","size":21706,"digest":"282b790d721dcaf6b44d930f70825e06969602572e477b7ef73766360eefdbaf","integrity":"sha256-KCt5DXIdyva0TZMPcIJeBpaWAlcuR3t+9zdmNg7v268="},"tinymce/langs/km_KH-dddeacc3c7112c6f230c4746d0fc9e9de1a3f53e419524ce03f483a35a49aaad.js":{"logical_path":"tinymce/langs/km_KH.js","mtime":"2018-03-12T11:55:28+01:00","size":25877,"digest":"dddeacc3c7112c6f230c4746d0fc9e9de1a3f53e419524ce03f483a35a49aaad","integrity":"sha256-3d6sw8cRLG8jDEdG0PyeneGj9T5BlSTOA/SDo1pJqq0="},"tinymce/langs/ko-ca535bfa388701fb020d24bdfb3f1e3aab127005b54e943cb1bd60b723c8194d.js":{"logical_path":"tinymce/langs/ko.js","mtime":"2018-03-12T11:55:28+01:00","size":10105,"digest":"ca535bfa388701fb020d24bdfb3f1e3aab127005b54e943cb1bd60b723c8194d","integrity":"sha256-ylNb+jiHAfsCDSS9+z8eOqsScAW1TpQ8sb1gtyPIGU0="},"tinymce/langs/ko_KR-90aae14954461fa073104c36c0f2d7d2c95bbbf0e41be4ef4f04ac402ab8d0a8.js":{"logical_path":"tinymce/langs/ko_KR.js","mtime":"2018-03-12T11:55:28+01:00","size":12447,"digest":"90aae14954461fa073104c36c0f2d7d2c95bbbf0e41be4ef4f04ac402ab8d0a8","integrity":"sha256-kKrhSVRGH6BzEEw2wPLX0slbu/DkG+TvTwSsQCq40Kg="},"tinymce/langs/ku-95e2ffe4f0112df658f10327c26f2cdddedc2e2ed769767366ae22a465c14725.js":{"logical_path":"tinymce/langs/ku.js","mtime":"2018-03-12T11:55:28+01:00","size":18274,"digest":"95e2ffe4f0112df658f10327c26f2cdddedc2e2ed769767366ae22a465c14725","integrity":"sha256-leL/5PARLfZY8QMnwm8s3d7cLi7XaXZzZq4ipGXBRyU="},"tinymce/langs/ku_IQ-a212e8d41695989e56834facf72474e1934ef166c3fcaf7e255ef573a3c6e76c.js":{"logical_path":"tinymce/langs/ku_IQ.js","mtime":"2018-03-12T11:55:28+01:00","size":18364,"digest":"a212e8d41695989e56834facf72474e1934ef166c3fcaf7e255ef573a3c6e76c","integrity":"sha256-ohLo1BaVmJ5Wg0+s9yR04ZNO8WbD/K9+JV71c6PG52w="},"tinymce/langs/lb-94992279091f1a0be927d5d858d3724037d8d81ee6b63cc9ddde84af6124cc04.js":{"logical_path":"tinymce/langs/lb.js","mtime":"2018-03-12T11:55:28+01:00","size":7467,"digest":"94992279091f1a0be927d5d858d3724037d8d81ee6b63cc9ddde84af6124cc04","integrity":"sha256-lJkieQkfGgvpJ9XYWNNyQDfY2B7mtjzJ3d6Er2EkzAQ="},"tinymce/langs/lt-ae7cefbe2cb5420770b31eabf92605728135ab5d6a2d2cfca2d19809be67e6a8.js":{"logical_path":"tinymce/langs/lt.js","mtime":"2018-03-12T11:55:28+01:00","size":8899,"digest":"ae7cefbe2cb5420770b31eabf92605728135ab5d6a2d2cfca2d19809be67e6a8","integrity":"sha256-rnzvviy1Qgdwsx6r+SYFcoE1q11qLSz8otGYCb5n5qg="},"tinymce/langs/lv-6c706e8dbf25774d07fea54cc1cbfaaf60c205c95392eee90ae55ac9cae74768.js":{"logical_path":"tinymce/langs/lv.js","mtime":"2018-03-12T11:55:28+01:00","size":11056,"digest":"6c706e8dbf25774d07fea54cc1cbfaaf60c205c95392eee90ae55ac9cae74768","integrity":"sha256-bHBujb8ld00H/qVMwcv6r2DCBclTku7pCuVaycrnR2g="},"tinymce/langs/mk_MK-55aadb5d7c82c940cfcf42f24423ef0471294c9b02994a6b22e1b4173baa7ec6.js":{"logical_path":"tinymce/langs/mk_MK.js","mtime":"2018-03-12T11:55:28+01:00","size":18733,"digest":"55aadb5d7c82c940cfcf42f24423ef0471294c9b02994a6b22e1b4173baa7ec6","integrity":"sha256-VarbXXyCyUDPz0LyRCPvBHEpTJsCmUprIuG0FzuqfsY="},"tinymce/langs/ml-685de0808683c02274dcbe9f8de023a4d72a49b040e7526a99e3d5c786ff71ae.js":{"logical_path":"tinymce/langs/ml.js","mtime":"2018-03-12T11:55:28+01:00","size":7339,"digest":"685de0808683c02274dcbe9f8de023a4d72a49b040e7526a99e3d5c786ff71ae","integrity":"sha256-aF3ggIaDwCJ03L6fjeAjpNcqSbBA51JqmePVx4b/ca4="},"tinymce/langs/ml_IN-1ab433621d6257c7632718048bacc5ed98a302d33cf0438bbbb4200914e01aac.js":{"logical_path":"tinymce/langs/ml_IN.js","mtime":"2018-03-12T11:55:28+01:00","size":20019,"digest":"1ab433621d6257c7632718048bacc5ed98a302d33cf0438bbbb4200914e01aac","integrity":"sha256-GrQzYh1iV8djJxgEi6zF7ZijAtM88EOLu7QgCRTgGqw="},"tinymce/langs/mn_MN-b89f88cb9b0dd7c879e27532b2979c421c1e69648f65a4108a56060f1e1cb009.js":{"logical_path":"tinymce/langs/mn_MN.js","mtime":"2018-03-12T11:55:28+01:00","size":6877,"digest":"b89f88cb9b0dd7c879e27532b2979c421c1e69648f65a4108a56060f1e1cb009","integrity":"sha256-uJ+Iy5sN18h54nUyspecQhweaWSPZaQQilYGDx4csAk="},"tinymce/langs/nb_NO-8bd2c254b03046ae60710293e7485d4c5cf9fdc3cbce52f97f0bf682ee44e1f8.js":{"logical_path":"tinymce/langs/nb_NO.js","mtime":"2018-03-12T11:55:28+01:00","size":9248,"digest":"8bd2c254b03046ae60710293e7485d4c5cf9fdc3cbce52f97f0bf682ee44e1f8","integrity":"sha256-i9LCVLAwRq5gcQKT50hdTFz5/cPLzlL5fwv2gu5E4fg="},"tinymce/langs/nl-0436131db0f369f1d07ce9a27f61cd351d8b2a441d352f8261cde3990f7b59d8.js":{"logical_path":"tinymce/langs/nl.js","mtime":"2018-03-12T11:55:28+01:00","size":8979,"digest":"0436131db0f369f1d07ce9a27f61cd351d8b2a441d352f8261cde3990f7b59d8","integrity":"sha256-BDYTHbDzafHQfOmif2HNNR2LKkQdNS+CYc3jmQ97Wdg="},"tinymce/langs/pl-eaf96c2c80d9268c2477628c1d23f947391de01553ef43bb488ee88d7bb3b8e6.js":{"logical_path":"tinymce/langs/pl.js","mtime":"2018-03-12T11:55:28+01:00","size":10178,"digest":"eaf96c2c80d9268c2477628c1d23f947391de01553ef43bb488ee88d7bb3b8e6","integrity":"sha256-6vlsLIDZJowkd2KMHSP5Rzkd4BVT70O7SI7ojXuzuOY="},"tinymce/langs/pt_BR-32ccbdf38597b6d0239e8ba70d73ab75de0661bb06c86fc9a90d1c0a890bc31e.js":{"logical_path":"tinymce/langs/pt_BR.js","mtime":"2018-03-12T11:55:28+01:00","size":9820,"digest":"32ccbdf38597b6d0239e8ba70d73ab75de0661bb06c86fc9a90d1c0a890bc31e","integrity":"sha256-Msy984WXttAjnounDXOrdd4GYbsGyG/JqQ0cCokLwx4="},"tinymce/langs/pt_PT-a364a3ca02a98259f33046338ab1bdd32dd4ebf24fa56e88d2578066bc7f0597.js":{"logical_path":"tinymce/langs/pt_PT.js","mtime":"2018-03-12T11:55:28+01:00","size":10011,"digest":"a364a3ca02a98259f33046338ab1bdd32dd4ebf24fa56e88d2578066bc7f0597","integrity":"sha256-o2SjygKpglnzMEYzirG90y3U6/JPpW6I0leAZrx/BZc="},"tinymce/langs/ro-83fd95a929d491cbfbfac83f132bdc41c956a7f4b0459c243fd92613c9c841ef.js":{"logical_path":"tinymce/langs/ro.js","mtime":"2018-03-12T11:55:28+01:00","size":8848,"digest":"83fd95a929d491cbfbfac83f132bdc41c956a7f4b0459c243fd92613c9c841ef","integrity":"sha256-g/2VqSnUkcv7+sg/EyvcQclWp/SwRZwkP9kmE8nIQe8="},"tinymce/langs/ru-2566ddc510b999f19c499a9838d7b987d5a8332b5802f2211beb4274ae2cd563.js":{"logical_path":"tinymce/langs/ru.js","mtime":"2018-03-12T11:55:28+01:00","size":27189,"digest":"2566ddc510b999f19c499a9838d7b987d5a8332b5802f2211beb4274ae2cd563","integrity":"sha256-JWbdxRC5mfGcSZqYONe5h9WoMytYAvIhG+tCdK4s1WM="},"tinymce/langs/ru_RU-9f18ef14f3493cc586cc0b4827fd9e1c2ed3d5790ce536d94f87e2d6aac2a688.js":{"logical_path":"tinymce/langs/ru_RU.js","mtime":"2018-03-12T11:55:28+01:00","size":4955,"digest":"9f18ef14f3493cc586cc0b4827fd9e1c2ed3d5790ce536d94f87e2d6aac2a688","integrity":"sha256-nxjvFPNJPMWGzAtIJ/2eHC7T1XkM5TbZT4fi1qrCpog="},"tinymce/langs/si_LK-5bfefe9b2fe82574d8ed839df18fd8ff65f1e1cd458b0a843cf1aadd1be704ea.js":{"logical_path":"tinymce/langs/si_LK.js","mtime":"2018-03-12T11:55:28+01:00","size":15856,"digest":"5bfefe9b2fe82574d8ed839df18fd8ff65f1e1cd458b0a843cf1aadd1be704ea","integrity":"sha256-W/7+my/oJXTY7YOd8Y/Y/2Xx4c1FiwqEPPGq3RvnBOo="},"tinymce/langs/sk-01d012310139d40e606a633db845a03fe285c32cb47043d6d9d761afa0cc3530.js":{"logical_path":"tinymce/langs/sk.js","mtime":"2018-03-12T11:55:28+01:00","size":10588,"digest":"01d012310139d40e606a633db845a03fe285c32cb47043d6d9d761afa0cc3530","integrity":"sha256-AdASMQE51A5gamM9uEWgP+KFwyy0cEPW2ddhr6DMNTA="},"tinymce/langs/sl_SI-ea499e07b7f4c9430bb15f34f6278f7248334c2553a544e240a21a84195d9582.js":{"logical_path":"tinymce/langs/sl_SI.js","mtime":"2018-03-12T11:55:28+01:00","size":8219,"digest":"ea499e07b7f4c9430bb15f34f6278f7248334c2553a544e240a21a84195d9582","integrity":"sha256-6kmeB7f0yUMLsV809iePckgzTCVTpUTiQKIahBldlYI="},"tinymce/langs/sr-e0b97453a0c1000b19f7ce37fcf86bcacbf9125d81076f60a77686820c7925c6.js":{"logical_path":"tinymce/langs/sr.js","mtime":"2018-03-12T11:55:28+01:00","size":6336,"digest":"e0b97453a0c1000b19f7ce37fcf86bcacbf9125d81076f60a77686820c7925c6","integrity":"sha256-4Ll0U6DBAAsZ9843/Phrysv5El2BB29gp3aGggx5JcY="},"tinymce/langs/sv_SE-7af54d4c82419671562478bf4a66d185be79406f3287628df0d2ad8ac044a485.js":{"logical_path":"tinymce/langs/sv_SE.js","mtime":"2018-03-12T11:55:28+01:00","size":9334,"digest":"7af54d4c82419671562478bf4a66d185be79406f3287628df0d2ad8ac044a485","integrity":"sha256-evVNTIJBlnFWJHi/SmbRhb55QG8yh2KN8NKtisBEpIU="},"tinymce/langs/ta-3b428d97786e6eded1c4973fef3fb487786a79f1eee59f15483bd02b96c76239.js":{"logical_path":"tinymce/langs/ta.js","mtime":"2018-03-12T11:55:28+01:00","size":28524,"digest":"3b428d97786e6eded1c4973fef3fb487786a79f1eee59f15483bd02b96c76239","integrity":"sha256-O0KNl3hubt7RxJc/7z+0h3hqefHu5Z8VSDvQK5bHYjk="},"tinymce/langs/ta_IN-44bf4b6c5e4de01a2c7f2ccc69b6dd561b8afce86397229a9ff27efaf0600812.js":{"logical_path":"tinymce/langs/ta_IN.js","mtime":"2018-03-12T11:55:28+01:00","size":28527,"digest":"44bf4b6c5e4de01a2c7f2ccc69b6dd561b8afce86397229a9ff27efaf0600812","integrity":"sha256-RL9LbF5N4BosfyzMabbdVhuK/OhjlyKan/J++vBgCBI="},"tinymce/langs/tg-1618248bf0aeda614a37ced9fd28b6623ae24f8453368bfb8c483ce820a3cb34.js":{"logical_path":"tinymce/langs/tg.js","mtime":"2018-03-12T11:55:28+01:00","size":18183,"digest":"1618248bf0aeda614a37ced9fd28b6623ae24f8453368bfb8c483ce820a3cb34","integrity":"sha256-Fhgki/Cu2mFKN87Z/Si2YjriT4RTNov7jEg86CCjyzQ="},"tinymce/langs/th_TH-5869e7cc393913371f3314057c1691e6e0fa296b496cf2d5c465276c31645479.js":{"logical_path":"tinymce/langs/th_TH.js","mtime":"2018-03-12T11:55:28+01:00","size":20172,"digest":"5869e7cc393913371f3314057c1691e6e0fa296b496cf2d5c465276c31645479","integrity":"sha256-WGnnzDk5EzcfMxQFfBaR5uD6KWtJbPLVxGUnbDFkVHk="},"tinymce/langs/tr-6a58fb650e940025d957945ae4850f6fbb8446c5f092a661063af9606afc1db8.js":{"logical_path":"tinymce/langs/tr.js","mtime":"2018-03-12T11:55:28+01:00","size":10454,"digest":"6a58fb650e940025d957945ae4850f6fbb8446c5f092a661063af9606afc1db8","integrity":"sha256-alj7ZQ6UACXZV5Ra5IUPb7uERsXwkqZhBjr5YGr8Hbg="},"tinymce/langs/tr_TR-d97de581e91c05fc4f3d9fe1419ad201e227bcd0ff3f036f7b59519395f4dcc2.js":{"logical_path":"tinymce/langs/tr_TR.js","mtime":"2018-03-12T11:55:28+01:00","size":10598,"digest":"d97de581e91c05fc4f3d9fe1419ad201e227bcd0ff3f036f7b59519395f4dcc2","integrity":"sha256-2X3lgekcBfxPPZ/hQZrSAeInvND/PwNve1lRk5X03MI="},"tinymce/langs/tt-22e302672df0a77de14688f58dbedf82de7a26e9089c9535a2a3cd1c0ccd7903.js":{"logical_path":"tinymce/langs/tt.js","mtime":"2018-03-12T11:55:28+01:00","size":19035,"digest":"22e302672df0a77de14688f58dbedf82de7a26e9089c9535a2a3cd1c0ccd7903","integrity":"sha256-IuMCZy3wp33hRoj1jb7fgt56JukInJU1oqPNHAzNeQM="},"tinymce/langs/ug-50232038bf7262c90be4f2919c74ff93792cdb82e6064d0f5c86f885b93271c5.js":{"logical_path":"tinymce/langs/ug.js","mtime":"2018-03-12T11:55:28+01:00","size":16888,"digest":"50232038bf7262c90be4f2919c74ff93792cdb82e6064d0f5c86f885b93271c5","integrity":"sha256-UCMgOL9yYskL5PKRnHT/k3ks24LmBk0PXIb4hbkyccU="},"tinymce/langs/uk-00866ab0fe7746d258b215475089740306b790d572d081b7f53ce65ec313f413.js":{"logical_path":"tinymce/langs/uk.js","mtime":"2018-03-12T11:55:28+01:00","size":26089,"digest":"00866ab0fe7746d258b215475089740306b790d572d081b7f53ce65ec313f413","integrity":"sha256-AIZqsP53RtJYshVHUIl0Awa3kNVy0IG39TzmXsMT9BM="},"tinymce/langs/uk_UA-52b101eeb7079c629edbe4615e64018757791541930fd2733957810a37197356.js":{"logical_path":"tinymce/langs/uk_UA.js","mtime":"2018-03-12T11:55:28+01:00","size":26018,"digest":"52b101eeb7079c629edbe4615e64018757791541930fd2733957810a37197356","integrity":"sha256-UrEB7rcHnGKe2+RhXmQBh1d5FUGTD9JzOVeBCjcZc1Y="},"tinymce/langs/uz-d6923a3190a76dc149ccb2893574e981250344a6c4f6dcaf458df1cce2ea3b30.js":{"logical_path":"tinymce/langs/uz.js","mtime":"2018-03-12T11:55:28+01:00","size":9696,"digest":"d6923a3190a76dc149ccb2893574e981250344a6c4f6dcaf458df1cce2ea3b30","integrity":"sha256-1pI6MZCnbcFJzLKJNXTpgSUDRKbE9tyvRY3xzOLqOzA="},"tinymce/langs/vi-6aa451047e4df911c92e10178e6a70147534e438c64df7a88eee37b4a440726e.js":{"logical_path":"tinymce/langs/vi.js","mtime":"2018-03-12T11:55:28+01:00","size":9901,"digest":"6aa451047e4df911c92e10178e6a70147534e438c64df7a88eee37b4a440726e","integrity":"sha256-aqRRBH5N+RHJLhAXjmpwFHU05DjGTfeoju43tKRAcm4="},"tinymce/langs/vi_VN-54d1da8a0ca8d0242457ddab5e0230c2cca140d3e480bfd55b9dfbaec7868baa.js":{"logical_path":"tinymce/langs/vi_VN.js","mtime":"2018-03-12T11:55:28+01:00","size":10769,"digest":"54d1da8a0ca8d0242457ddab5e0230c2cca140d3e480bfd55b9dfbaec7868baa","integrity":"sha256-VNHaigyo0CQkV92rXgIwwsyhQNPkgL/VW537rseGi6o="},"tinymce/langs/zh_CN-07499e6b0821cb49c5e16efbe4a68a4d843b4d6939a45866aabe6f9ad7fc805d.js":{"logical_path":"tinymce/langs/zh_CN.js","mtime":"2018-03-12T11:55:28+01:00","size":11103,"digest":"07499e6b0821cb49c5e16efbe4a68a4d843b4d6939a45866aabe6f9ad7fc805d","integrity":"sha256-B0meawghy0nF4W775KaKTYQ7TWk5pFhmqr5vmtf8gF0="},"tinymce/langs/zh_TW-c00c3a6539c0e1696436182c935a0a5929ab09ae7bdc43ca9c4ad21098079d53.js":{"logical_path":"tinymce/langs/zh_TW.js","mtime":"2018-03-12T11:55:28+01:00","size":11059,"digest":"c00c3a6539c0e1696436182c935a0a5929ab09ae7bdc43ca9c4ad21098079d53","integrity":"sha256-wAw6ZTnA4WlkNhgsk1oKWSmrCa573EPKnErSEJgHnVM="},"tinymce/preinit-84328a53e798df12f891eb49871773fd9f925439c8630e9e22423a82ef9e6f89.js":{"logical_path":"tinymce/preinit.js","mtime":"2018-11-08T20:34:41+01:00","size":82,"digest":"84328a53e798df12f891eb49871773fd9f925439c8630e9e22423a82ef9e6f89","integrity":"sha256-hDKKU+eY3xL4ketJhxdz/Z+SVDnIYw6eIkI6gu+eb4k="},"tinymce/rails-bf7fd5c952f25481010758dde6a2681498074f9509230f601b317356a6a54fca.js":{"logical_path":"tinymce/rails.js","mtime":"2018-11-08T20:34:41+01:00","size":1345,"digest":"bf7fd5c952f25481010758dde6a2681498074f9509230f601b317356a6a54fca","integrity":"sha256-v3/VyVLyVIEBB1jd5qJoFJgHT5UJIw9gGzFzVqalT8o="},"tinymce/tinymce-1098dd3a232d42146ff7bf2cdffed0f7358ac2cf1798aa209abc7ab367ff59f4.js":{"logical_path":"tinymce/tinymce.js","mtime":"2018-11-08T20:34:41+01:00","size":916623,"digest":"1098dd3a232d42146ff7bf2cdffed0f7358ac2cf1798aa209abc7ab367ff59f4","integrity":"sha256-EJjdOiMtQhRv978s3/7Q9zWKws8XmKogmrx6s2f/WfQ="},"tinymce/jquery.tinymce-db2bc0a724d3123cc432dc4d9d8029736b4afc8c8502967e359dce2ed3170c16.js":{"logical_path":"tinymce/jquery.tinymce.js","mtime":"2018-11-08T20:34:41+01:00","size":3562,"digest":"db2bc0a724d3123cc432dc4d9d8029736b4afc8c8502967e359dce2ed3170c16","integrity":"sha256-2yvApyTTEjzEMtxNnYApc2tK/IyFApZ+NZ3OLtMXDBY="},"tinymce/langs/readme-5a8b6a04d57b5c88e3fb7f2a870b8e2d3a48ec03ce6474206c41df78c155b2de.md":{"logical_path":"tinymce/langs/readme.md","mtime":"2018-11-08T20:34:41+01:00","size":151,"digest":"5a8b6a04d57b5c88e3fb7f2a870b8e2d3a48ec03ce6474206c41df78c155b2de","integrity":"sha256-WotqBNV7XIjj+38qhwuOLTpI7APOZHQgbEHfeMFVst4="},"tinymce/license-47a9dcd2574891a5a465112fd9dfcebcc7e61844edec27fa936a64642008fe66.txt":{"logical_path":"tinymce/license.txt","mtime":"2018-11-08T20:34:41+01:00","size":26441,"digest":"47a9dcd2574891a5a465112fd9dfcebcc7e61844edec27fa936a64642008fe66","integrity":"sha256-R6nc0ldIkaWkZREv2d/OvMfmGETt7Cf6k2pkZCAI/mY="},"tinymce/plugins/advlist/plugin-7b5bed8c5b41dbabee490dca68a3fc215c6c2d08ad1174d20fd4ebc27feb9b18.js":{"logical_path":"tinymce/plugins/advlist/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":2227,"digest":"7b5bed8c5b41dbabee490dca68a3fc215c6c2d08ad1174d20fd4ebc27feb9b18","integrity":"sha256-e1vtjFtB26vuSQ3KaKP8IVxsLQitEXTSD9Trwn/rmxg="},"tinymce/plugins/anchor/plugin-8fc6aac86dcfda2df29f3e402541e9f5ed45743f0dce76b80bc4e3c6a16be585.js":{"logical_path":"tinymce/plugins/anchor/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":1447,"digest":"8fc6aac86dcfda2df29f3e402541e9f5ed45743f0dce76b80bc4e3c6a16be585","integrity":"sha256-j8aqyG3P2i3ynz5AJUHp9e1FdD8Nzna4C8TjxqFr5YU="},"tinymce/plugins/autolink/plugin-aacef7388395131adb8a2d04e3d130c13150b04a39ba15bfebdd8b5673e74b56.js":{"logical_path":"tinymce/plugins/autolink/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":2128,"digest":"aacef7388395131adb8a2d04e3d130c13150b04a39ba15bfebdd8b5673e74b56","integrity":"sha256-qs73OIOVExrbii0E49EwwTFQsEo5uhW/692LVnPnS1Y="},"tinymce/plugins/autoresize/plugin-79ff6671020ca454d50be43a8cd68e51bbbab80f6f11d3ef1afc29df593a9cc0.js":{"logical_path":"tinymce/plugins/autoresize/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":2075,"digest":"79ff6671020ca454d50be43a8cd68e51bbbab80f6f11d3ef1afc29df593a9cc0","integrity":"sha256-ef9mcQIMpFTVC+Q6jNaOUbu6uA9vEdPvGvwp31k6nMA="},"tinymce/plugins/autosave/plugin-cf03af11d02898b971ee99e69c481e0829a9ec4d0879acff5ff9f8cde1670089.js":{"logical_path":"tinymce/plugins/autosave/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":3084,"digest":"cf03af11d02898b971ee99e69c481e0829a9ec4d0879acff5ff9f8cde1670089","integrity":"sha256-zwOvEdAomLlx7pnmnEgeCCmp7E0Ieaz/X/n4zeFnAIk="},"tinymce/plugins/bbcode/plugin-8acda51f6565daa44af5423768602b2296eff9cbc3b2355f82a1ae4490428833.js":{"logical_path":"tinymce/plugins/bbcode/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":2851,"digest":"8acda51f6565daa44af5423768602b2296eff9cbc3b2355f82a1ae4490428833","integrity":"sha256-is2lH2Vl2qRK9UI3aGArIpbv+cvDsjVfgqGuRJBCiDM="},"tinymce/plugins/charmap/plugin-f0d451ae7fcfa1f30f73c2d9185c58173e1a8e44d893d752778b226b665f020b.js":{"logical_path":"tinymce/plugins/charmap/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":8602,"digest":"f0d451ae7fcfa1f30f73c2d9185c58173e1a8e44d893d752778b226b665f020b","integrity":"sha256-8NRRrn/PofMPc8LZGFxYFz4ajkTYk9dSd4sia2ZfAgs="},"tinymce/plugins/code/plugin-46957c79ea5f5757444d628fdb90bac81f078d87bc9601df76cc087d4976564b.js":{"logical_path":"tinymce/plugins/code/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":1025,"digest":"46957c79ea5f5757444d628fdb90bac81f078d87bc9601df76cc087d4976564b","integrity":"sha256-RpV8eepfV1dETWKP25C6yB8HjYe8lgHfdswIfUl2Vks="},"tinymce/plugins/codesample/css/prism-1988b66704b4d23e78c6c20c38a6856cbc1f0be96d6d60a3a0b12f4408f1057e.css":{"logical_path":"tinymce/plugins/codesample/css/prism.css","mtime":"2018-11-08T20:34:41+01:00","size":1776,"digest":"1988b66704b4d23e78c6c20c38a6856cbc1f0be96d6d60a3a0b12f4408f1057e","integrity":"sha256-GYi2ZwS00j54xsIMOKaFbLwfC+ltbWCjoLEvRAjxBX4="},"tinymce/plugins/codesample/plugin-850e9f396e000d41d915c20867bcb78d3e6ae394ac5a28f069b3d90edc0138f8.js":{"logical_path":"tinymce/plugins/codesample/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":19336,"digest":"850e9f396e000d41d915c20867bcb78d3e6ae394ac5a28f069b3d90edc0138f8","integrity":"sha256-hQ6fOW4ADUHZFcIIZ7y3jT5q45SsWijwabPZDtwBOPg="},"tinymce/plugins/colorpicker/plugin-48d6719fa10b7bc1b3982d9d9f952d320ebba056102701e49e3945ce3bf8911d.js":{"logical_path":"tinymce/plugins/colorpicker/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":1350,"digest":"48d6719fa10b7bc1b3982d9d9f952d320ebba056102701e49e3945ce3bf8911d","integrity":"sha256-SNZxn6ELe8GzmC2dn5UtMg67oFYQJwHknjlFzjv4kR0="},"tinymce/plugins/contextmenu/plugin-1b3d07a3487dbbf4eb7f0ce2252bdfc13cb849d1e8749b75c3523b22ea8f4761.js":{"logical_path":"tinymce/plugins/contextmenu/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":1825,"digest":"1b3d07a3487dbbf4eb7f0ce2252bdfc13cb849d1e8749b75c3523b22ea8f4761","integrity":"sha256-Gz0Ho0h9u/TrfwziJSvfwTy4SdHodJt1w1I7IuqPR2E="},"tinymce/plugins/directionality/plugin-0893c42f76c330cbae77ee849d287028e03574dcf50b6a0770d4b771f7324f1c.js":{"logical_path":"tinymce/plugins/directionality/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":858,"digest":"0893c42f76c330cbae77ee849d287028e03574dcf50b6a0770d4b771f7324f1c","integrity":"sha256-CJPEL3bDMMuud+6EnShwKOA1dNz1C2oHcNS3cfcyTxw="},"tinymce/plugins/emoticons/img/smiley-cool-bb0e93a050a32df7913e4026b3c88a176998e0e3e073ba06e9b73f6c24227c9c.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-cool.gif","mtime":"2018-11-08T20:34:41+01:00","size":354,"digest":"bb0e93a050a32df7913e4026b3c88a176998e0e3e073ba06e9b73f6c24227c9c","integrity":"sha256-uw6ToFCjLfeRPkAms8iKF2mY4OPgc7oG6bc/bCQifJw="},"tinymce/plugins/emoticons/img/smiley-cry-a0c5f3e7a682449c973c9d9f7c46342081c46920686d2353f57aff91ab907f68.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-cry.gif","mtime":"2018-11-08T20:34:41+01:00","size":329,"digest":"a0c5f3e7a682449c973c9d9f7c46342081c46920686d2353f57aff91ab907f68","integrity":"sha256-oMXz56aCRJyXPJ2ffEY0IIHEaSBobSNT9Xr/kauQf2g="},"tinymce/plugins/emoticons/img/smiley-embarassed-d3cafcb50b335672cb5e9f4600ea9ea261dac7828dd28844d4927c393a25618f.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-embarassed.gif","mtime":"2018-11-08T20:34:41+01:00","size":331,"digest":"d3cafcb50b335672cb5e9f4600ea9ea261dac7828dd28844d4927c393a25618f","integrity":"sha256-08r8tQszVnLLXp9GAOqeomHax4KN0ohE1JJ8OTolYY8="},"tinymce/plugins/emoticons/img/smiley-foot-in-mouth-03fe04d3ed533423ac81f05146584b0c451be3d4a30e76687ceef283ed07071f.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif","mtime":"2018-11-08T20:34:41+01:00","size":342,"digest":"03fe04d3ed533423ac81f05146584b0c451be3d4a30e76687ceef283ed07071f","integrity":"sha256-A/4E0+1TNCOsgfBRRlhLDEUb49SjDnZofO7yg+0HBx8="},"tinymce/plugins/emoticons/img/smiley-frown-1b984bf98931dd1debb54461eb9d83e985f2b2999fe14bcb556d6c0921bc83b0.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-frown.gif","mtime":"2018-11-08T20:34:41+01:00","size":340,"digest":"1b984bf98931dd1debb54461eb9d83e985f2b2999fe14bcb556d6c0921bc83b0","integrity":"sha256-G5hL+Ykx3R3rtURh652D6YXyspmf4UvLVW1sCSG8g7A="},"tinymce/plugins/emoticons/img/smiley-innocent-8db353ef102196f2c6ddf5c4666446de955d7b14fc0957c806c9dbfb48fb0c29.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-innocent.gif","mtime":"2018-11-08T20:34:41+01:00","size":336,"digest":"8db353ef102196f2c6ddf5c4666446de955d7b14fc0957c806c9dbfb48fb0c29","integrity":"sha256-jbNT7xAhlvLG3fXEZmRG3pVdexT8CVfIBsnb+0j7DCk="},"tinymce/plugins/emoticons/img/smiley-kiss-3154c3665356c13ab10fefdbac1fe187fff978a0052037c99cdc4a97103413f2.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-kiss.gif","mtime":"2018-11-08T20:34:41+01:00","size":338,"digest":"3154c3665356c13ab10fefdbac1fe187fff978a0052037c99cdc4a97103413f2","integrity":"sha256-MVTDZlNWwTqxD+/brB/hh//5eKAFIDfJnNxKlxA0E/I="},"tinymce/plugins/emoticons/img/smiley-laughing-8f6adedcd091975ffead171867a6304d908bb6541a6ccb4919286ec6b7d4551e.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-laughing.gif","mtime":"2018-11-08T20:34:41+01:00","size":343,"digest":"8f6adedcd091975ffead171867a6304d908bb6541a6ccb4919286ec6b7d4551e","integrity":"sha256-j2re3NCRl1/+rRcYZ6YwTZCLtlQabMtJGShuxrfUVR4="},"tinymce/plugins/emoticons/img/smiley-money-mouth-f0b9f4f22e237f5dbc851f900fed8d7eca4c954ae6fbc606c0cd8be431d0ac80.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-money-mouth.gif","mtime":"2018-11-08T20:34:41+01:00","size":321,"digest":"f0b9f4f22e237f5dbc851f900fed8d7eca4c954ae6fbc606c0cd8be431d0ac80","integrity":"sha256-8Ln08i4jf128hR+QD+2NfspMlUrm+8YGwM2L5DHQrIA="},"tinymce/plugins/emoticons/img/smiley-sealed-9933b442636b6e537df7b564e2c3f7a2873526eea6b022a98eb1e468e5204c32.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-sealed.gif","mtime":"2018-11-08T20:34:41+01:00","size":323,"digest":"9933b442636b6e537df7b564e2c3f7a2873526eea6b022a98eb1e468e5204c32","integrity":"sha256-mTO0QmNrblN997Vk4sP3ooc1Ju6msCKpjrHkaOUgTDI="},"tinymce/plugins/emoticons/img/smiley-smile-fd89cd460ffcacb7e725e00c0275ef5b3924ce468248e5ff4fb43545571cfa65.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-smile.gif","mtime":"2018-11-08T20:34:41+01:00","size":344,"digest":"fd89cd460ffcacb7e725e00c0275ef5b3924ce468248e5ff4fb43545571cfa65","integrity":"sha256-/YnNRg/8rLfnJeAMAnXvWzkkzkaCSOX/T7Q1RVcc+mU="},"tinymce/plugins/emoticons/img/smiley-surprised-3871f356cb41976d7ae8a5f005e8739e4d014352a8adef9b33f773d81b6e6c01.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-surprised.gif","mtime":"2018-11-08T20:34:41+01:00","size":338,"digest":"3871f356cb41976d7ae8a5f005e8739e4d014352a8adef9b33f773d81b6e6c01","integrity":"sha256-OHHzVstBl2166KXwBehznk0BQ1Kore+bM/dz2BtubAE="},"tinymce/plugins/emoticons/img/smiley-tongue-out-5843c85667a8226dc43be83749fd9fbbc5d20b1577de2b763915d99815d37d47.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-tongue-out.gif","mtime":"2018-11-08T20:34:41+01:00","size":328,"digest":"5843c85667a8226dc43be83749fd9fbbc5d20b1577de2b763915d99815d37d47","integrity":"sha256-WEPIVmeoIm3EO+g3Sf2fu8XSCxV33it2ORXZmBXTfUc="},"tinymce/plugins/emoticons/img/smiley-undecided-d8b9bcbb433951ff3c4ca8dd959ac3844239b98e6d52218833e1485a91f67347.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-undecided.gif","mtime":"2018-11-08T20:34:41+01:00","size":337,"digest":"d8b9bcbb433951ff3c4ca8dd959ac3844239b98e6d52218833e1485a91f67347","integrity":"sha256-2Lm8u0M5Uf88TKjdlZrDhEI5uY5tUiGIM+FIWpH2c0c="},"tinymce/plugins/emoticons/img/smiley-wink-2af75ad7b1c08488505513503e34b15f40005e04a2a9568f698f0945d2d8ba1f.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-wink.gif","mtime":"2018-11-08T20:34:41+01:00","size":350,"digest":"2af75ad7b1c08488505513503e34b15f40005e04a2a9568f698f0945d2d8ba1f","integrity":"sha256-Kvda17HAhIhQVRNQPjSxX0AAXgSiqVaPaY8JRdLYuh8="},"tinymce/plugins/emoticons/img/smiley-yell-bba903fbcb46fce8c68b9e01863fd095b3b1d0e6aa72161f3a88d762a5f90a79.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-yell.gif","mtime":"2018-11-08T20:34:41+01:00","size":336,"digest":"bba903fbcb46fce8c68b9e01863fd095b3b1d0e6aa72161f3a88d762a5f90a79","integrity":"sha256-u6kD+8tG/OjGi54Bhj/QlbOx0OaqchYfOojXYqX5Cnk="},"tinymce/plugins/emoticons/plugin-287cc5d2f0fba168841d0d0dab3c6f8f958fb0e80adada67cc1e64d88a69704e.js":{"logical_path":"tinymce/plugins/emoticons/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":1072,"digest":"287cc5d2f0fba168841d0d0dab3c6f8f958fb0e80adada67cc1e64d88a69704e","integrity":"sha256-KHzF0vD7oWiEHQ0Nqzxvj5WPsOgK2tpnzB5k2IppcE4="},"tinymce/plugins/fullpage/plugin-0bd712ddf83de5ad37a6822dc4c5832d82a5e2cd1da918d5b0e41bd09f65e1f6.js":{"logical_path":"tinymce/plugins/fullpage/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":7169,"digest":"0bd712ddf83de5ad37a6822dc4c5832d82a5e2cd1da918d5b0e41bd09f65e1f6","integrity":"sha256-C9cS3fg95a03poItxMWDLYKl4s0dqRjVsOQb0J9l4fY="},"tinymce/plugins/fullscreen/plugin-4c0cb2c23d32be9833cac1551c8eb30c26bf06196698ce463fe0bfb842395bac.js":{"logical_path":"tinymce/plugins/fullscreen/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":2162,"digest":"4c0cb2c23d32be9833cac1551c8eb30c26bf06196698ce463fe0bfb842395bac","integrity":"sha256-TAyywj0yvpgzysFVHI6zDCa/BhlmmM5GP+C/uEI5W6w="},"tinymce/plugins/help/img/logo-95b06f8538b11c4c30170075a09f93cf5871f74dd2541e95ad3d9da31976fcac.png":{"logical_path":"tinymce/plugins/help/img/logo.png","mtime":"2018-11-08T20:34:41+01:00","size":13208,"digest":"95b06f8538b11c4c30170075a09f93cf5871f74dd2541e95ad3d9da31976fcac","integrity":"sha256-lbBvhTixHEwwFwB1oJ+Tz1hx903SVB6VrT2doxl2/Kw="},"tinymce/plugins/help/plugin-acf3b62b34b2d4d71c030c623a051a3e5f324e20beda44caed096c70970b642c.js":{"logical_path":"tinymce/plugins/help/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":8529,"digest":"acf3b62b34b2d4d71c030c623a051a3e5f324e20beda44caed096c70970b642c","integrity":"sha256-rPO2KzSy1NccAwxiOgUaPl8yTiC+2kTK7QlscJcLZCw="},"tinymce/plugins/hr/plugin-7efaeee8fa1f71745d5726205bbb4fd8c0f4eba1edf2baf5a31a3b59bb677622.js":{"logical_path":"tinymce/plugins/hr/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":429,"digest":"7efaeee8fa1f71745d5726205bbb4fd8c0f4eba1edf2baf5a31a3b59bb677622","integrity":"sha256-fvru6PofcXRdVyYgW7tP2MD066Ht8rr1oxo7WbtndiI="},"tinymce/plugins/image/plugin-a6b45be0bc251bed54d2a26c1133801a06a054d3211c71d81b6271cec9de6d55.js":{"logical_path":"tinymce/plugins/image/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":15955,"digest":"a6b45be0bc251bed54d2a26c1133801a06a054d3211c71d81b6271cec9de6d55","integrity":"sha256-prRb4LwlG+1U0qJsETOAGgagVNMhHHHYG2JxzsnebVU="},"tinymce/plugins/imagetools/plugin-f4045863db3307fb1f558ef0d49f1f419043ce4819c07d0fb9a4a8c04dc1449d.js":{"logical_path":"tinymce/plugins/imagetools/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":43451,"digest":"f4045863db3307fb1f558ef0d49f1f419043ce4819c07d0fb9a4a8c04dc1449d","integrity":"sha256-9ARYY9szB/sfVY7w1J8fQZBDzkgZwH0PuaSowE3BRJ0="},"tinymce/plugins/importcss/plugin-381b078db51fcc021a6220cf9f57609ed35ee67dd932669abafa5e5837460bbc.js":{"logical_path":"tinymce/plugins/importcss/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":3132,"digest":"381b078db51fcc021a6220cf9f57609ed35ee67dd932669abafa5e5837460bbc","integrity":"sha256-OBsHjbUfzAIaYiDPn1dgntNe5n3ZMmaauvpeWDdGC7w="},"tinymce/plugins/insertdatetime/plugin-246b2dd91f69e2b7d268c35c6aaca0569b0366bc18e85c15eca000564683b71d.js":{"logical_path":"tinymce/plugins/insertdatetime/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":2634,"digest":"246b2dd91f69e2b7d268c35c6aaca0569b0366bc18e85c15eca000564683b71d","integrity":"sha256-JGst2R9p4rfSaMNcaqygVpsDZrwY6FwV7KAAVkaDtx0="},"tinymce/plugins/legacyoutput/plugin-e8c2876525a55671c4ee55a2c298d3ba0eff6a8307c057893e42558eba637652.js":{"logical_path":"tinymce/plugins/legacyoutput/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":3403,"digest":"e8c2876525a55671c4ee55a2c298d3ba0eff6a8307c057893e42558eba637652","integrity":"sha256-6MKHZSWlVnHE7lWiwpjTug7/aoMHwFeJPkJVjrpjdlI="},"tinymce/plugins/link/plugin-ad93098fd1f1a794a1de15625ca2262a413559ad85e8af408bfab31742beb605.js":{"logical_path":"tinymce/plugins/link/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":8920,"digest":"ad93098fd1f1a794a1de15625ca2262a413559ad85e8af408bfab31742beb605","integrity":"sha256-rZMJj9Hxp5Sh3hViXKImKkE1Wa2F6K9Ai/qzF0K+tgU="},"tinymce/plugins/lists/plugin-10590619cf33dc6929f3931d2c787c6ab835a3d63dedabe977d26e62298bb49a.js":{"logical_path":"tinymce/plugins/lists/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":14257,"digest":"10590619cf33dc6929f3931d2c787c6ab835a3d63dedabe977d26e62298bb49a","integrity":"sha256-EFkGGc8z3Gkp85MdLHh8arg1o9Y97avpd9JuYimLtJo="},"tinymce/plugins/media/plugin-570acbace4fda902012c1c0596a586b521dc75cc89a4742f1bb2ecb15680b809.js":{"logical_path":"tinymce/plugins/media/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":15065,"digest":"570acbace4fda902012c1c0596a586b521dc75cc89a4742f1bb2ecb15680b809","integrity":"sha256-VwrLrOT9qQIBLBwFlqWGtSHcdcyJpHQvG7LssVaAuAk="},"tinymce/plugins/nonbreaking/plugin-6438a2f260ffa4724f0d13e99fe8fb1a85c00f16df416468ccd0bf6f722aaee6.js":{"logical_path":"tinymce/plugins/nonbreaking/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":1013,"digest":"6438a2f260ffa4724f0d13e99fe8fb1a85c00f16df416468ccd0bf6f722aaee6","integrity":"sha256-ZDii8mD/pHJPDRPpn+j7GoXADxbfQWRozNC/b3IqruY="},"tinymce/plugins/noneditable/plugin-f3be489845e7a724465d7a2bcf8f033b8b91eda2c29193b354e634da697d2f27.js":{"logical_path":"tinymce/plugins/noneditable/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":1541,"digest":"f3be489845e7a724465d7a2bcf8f033b8b91eda2c29193b354e634da697d2f27","integrity":"sha256-875ImEXnpyRGXXorz48DO4uR7aLCkZOzVOY02ml9Lyc="},"tinymce/plugins/pagebreak/plugin-f4c2fa4074a982fc576ea586ee09e99091bc52d14597223c533e0967188d3a2d.js":{"logical_path":"tinymce/plugins/pagebreak/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":1437,"digest":"f4c2fa4074a982fc576ea586ee09e99091bc52d14597223c533e0967188d3a2d","integrity":"sha256-9ML6QHSpgvxXbqWG7gnpkJG8UtFFlyI8Uz4JZxiNOi0="},"tinymce/plugins/paste/plugin-3bd8d37d76c40a47cee410222e1dd742212370e2e8819ea7bc4b37e766296763.js":{"logical_path":"tinymce/plugins/paste/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":20995,"digest":"3bd8d37d76c40a47cee410222e1dd742212370e2e8819ea7bc4b37e766296763","integrity":"sha256-O9jTfXbECkfO5BAiLh3XQiEjcOLogZ6nvEs352YpZ2M="},"tinymce/plugins/preview/plugin-bdf1d10d1e637f00598d3f482895e276933c1e16b1b543d2120fb70c4fbf3d18.js":{"logical_path":"tinymce/plugins/preview/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":2045,"digest":"bdf1d10d1e637f00598d3f482895e276933c1e16b1b543d2120fb70c4fbf3d18","integrity":"sha256-vfHRDR5jfwBZjT9IKJXidpM8HhaxtUPSEg+3DE+/PRg="},"tinymce/plugins/print/plugin-1ba88c314fa4c0c47ab0af0aa908c03d7906a77fef6a319a302ffff44099fe26.js":{"logical_path":"tinymce/plugins/print/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":367,"digest":"1ba88c314fa4c0c47ab0af0aa908c03d7906a77fef6a319a302ffff44099fe26","integrity":"sha256-G6iMMU+kwMR6sK8KqQjAPXkGp3/vajGaMC//9ECZ/iY="},"tinymce/plugins/save/plugin-a944096bba3f8519c898163008a334509d0f4efdbcd9500d752170fdbef570b3.js":{"logical_path":"tinymce/plugins/save/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":1427,"digest":"a944096bba3f8519c898163008a334509d0f4efdbcd9500d752170fdbef570b3","integrity":"sha256-qUQJa7o/hRnImBYwCKM0UJ0PTv282VANdSFw/b71cLM="},"tinymce/plugins/searchreplace/plugin-92d2225c3568f9fab9d1f7b0959264a280bcf0e73def7cc09f2bfc9d3ebeac5f.js":{"logical_path":"tinymce/plugins/searchreplace/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":7368,"digest":"92d2225c3568f9fab9d1f7b0959264a280bcf0e73def7cc09f2bfc9d3ebeac5f","integrity":"sha256-ktIiXDVo+fq50fewlZJkooC88Oc973zAnyv8nT6+rF8="},"tinymce/plugins/spellchecker/plugin-d8f4c1d84319146901b41a1c7a9ad279b2424685c39c9272f988bdcb876aa258.js":{"logical_path":"tinymce/plugins/spellchecker/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":10185,"digest":"d8f4c1d84319146901b41a1c7a9ad279b2424685c39c9272f988bdcb876aa258","integrity":"sha256-2PTB2EMZFGkBtBoceprSebJCRoXDnJJy+Yi9y4dqolg="},"tinymce/plugins/tabfocus/plugin-9b8833faf32cbd41142e3cf393e4d4e97a80706a8b402fd18ea82787ee46eb92.js":{"logical_path":"tinymce/plugins/tabfocus/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":1606,"digest":"9b8833faf32cbd41142e3cf393e4d4e97a80706a8b402fd18ea82787ee46eb92","integrity":"sha256-m4gz+vMsvUEULjzzk+TU6XqAcGqLQC/Rjqgnh+5G65I="},"tinymce/plugins/table/plugin-93249526edce14539b15a93ffa7824017c2451162810c517028f618a7631cc86.js":{"logical_path":"tinymce/plugins/table/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":128270,"digest":"93249526edce14539b15a93ffa7824017c2451162810c517028f618a7631cc86","integrity":"sha256-kySVJu3OFFObFak/+ngkAXwkURYoEMUXAo9hinYxzIY="},"tinymce/plugins/template/plugin-fb8b66089ae39eb8b992b37630b5f7f6470ec726132d3cf4659c6722d0c0bf2e.js":{"logical_path":"tinymce/plugins/template/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":5354,"digest":"fb8b66089ae39eb8b992b37630b5f7f6470ec726132d3cf4659c6722d0c0bf2e","integrity":"sha256-+4tmCJrjnri5krN2MLX39kcOxyYTLTz0ZZxnItDAvy4="},"tinymce/plugins/textcolor/plugin-ebf778e6028f2d073e3ff9219c8d49ae5f066d4819cfe7fd72bcf6be84e0f014.js":{"logical_path":"tinymce/plugins/textcolor/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":4928,"digest":"ebf778e6028f2d073e3ff9219c8d49ae5f066d4819cfe7fd72bcf6be84e0f014","integrity":"sha256-6/d45gKPLQc+P/khnI1Jrl8GbUgZz+f9crz2voTg8BQ="},"tinymce/plugins/textpattern/plugin-4fea2e54b7ff9435fa238142c564e3bd7f0a321f19fea97d51c89b84eda5bb59.js":{"logical_path":"tinymce/plugins/textpattern/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":4272,"digest":"4fea2e54b7ff9435fa238142c564e3bd7f0a321f19fea97d51c89b84eda5bb59","integrity":"sha256-T+ouVLf/lDX6I4FCxWTjvX8KMh8Z/ql9UcibhO2lu1k="},"tinymce/plugins/toc/plugin-a73e6c327940360e18736b041e3345c9b678ecf553c9a1540f1c6f5275589b34.js":{"logical_path":"tinymce/plugins/toc/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":2942,"digest":"a73e6c327940360e18736b041e3345c9b678ecf553c9a1540f1c6f5275589b34","integrity":"sha256-pz5sMnlANg4Yc2sEHjNFybZ47PVTyaFUDxxvUnVYmzQ="},"tinymce/plugins/visualblocks/css/visualblocks-859e261c1d940c90994673ce593b60946710cc4f71371164db4ea695035ea593.css":{"logical_path":"tinymce/plugins/visualblocks/css/visualblocks.css","mtime":"2018-11-08T20:34:41+01:00","size":4995,"digest":"859e261c1d940c90994673ce593b60946710cc4f71371164db4ea695035ea593","integrity":"sha256-hZ4mHB2UDJCZRnPOWTtglGcQzE9xNxFk206mlQNepZM="},"tinymce/plugins/visualblocks/plugin-0b55625bb357cb6113a43de563efa3b6142f7502534ebc705315ef785d052c44.js":{"logical_path":"tinymce/plugins/visualblocks/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":1692,"digest":"0b55625bb357cb6113a43de563efa3b6142f7502534ebc705315ef785d052c44","integrity":"sha256-C1ViW7NXy2ETpD3lY++jthQvdQJTTrxwUxXveF0FLEQ="},"tinymce/plugins/visualchars/plugin-f560dbb9a7e21882ada1a2b59caba1ee767ed7da4067fda574edc26650f17572.js":{"logical_path":"tinymce/plugins/visualchars/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":5511,"digest":"f560dbb9a7e21882ada1a2b59caba1ee767ed7da4067fda574edc26650f17572","integrity":"sha256-9WDbuafiGIKtoaK1nKuh7nZ+19pAZ/2ldO3CZlDxdXI="},"tinymce/plugins/wordcount/plugin-e77fc4abe7aa0bb82adee1e29231cc3fbc2d21d8fabc12109f64e6bd61f7e13a.js":{"logical_path":"tinymce/plugins/wordcount/plugin.js","mtime":"2018-11-08T20:34:41+01:00","size":11317,"digest":"e77fc4abe7aa0bb82adee1e29231cc3fbc2d21d8fabc12109f64e6bd61f7e13a","integrity":"sha256-53/Eq+eqC7gq3uHikjHMP7wtIdj6vBIQn2TmvWH34To="},"tinymce/skins/lightgray/content.inline.min-b62ea4e65ad6c87cbfedf3897b59eb30ec3972c410070d8ee2c0f5bececc4cce.css":{"logical_path":"tinymce/skins/lightgray/content.inline.min.css","mtime":"2018-11-08T20:34:41+01:00","size":3527,"digest":"b62ea4e65ad6c87cbfedf3897b59eb30ec3972c410070d8ee2c0f5bececc4cce","integrity":"sha256-ti6k5lrWyHy/7fOJe1nrMOw5csQQBw2O4sD1vs7MTM4="},"tinymce/skins/lightgray/content.min-d72493ca5cc1caca93db665b284fd12fe396a245c3e82cc2d6cf4fca83702cb9.css":{"logical_path":"tinymce/skins/lightgray/content.min.css","mtime":"2018-11-08T20:34:41+01:00","size":3933,"digest":"d72493ca5cc1caca93db665b284fd12fe396a245c3e82cc2d6cf4fca83702cb9","integrity":"sha256-1ySTylzBysqT22ZbKE/RL+OWokXD6CzC1s9PyoNwLLk="},"tinymce/skins/lightgray/content.mobile.min-230c31f65356c7cb1799244a34f7a722c92a6d614e06e59d48db0ebccd7f2346.css":{"logical_path":"tinymce/skins/lightgray/content.mobile.min.css","mtime":"2018-11-08T20:34:41+01:00","size":235,"digest":"230c31f65356c7cb1799244a34f7a722c92a6d614e06e59d48db0ebccd7f2346","integrity":"sha256-Iwwx9lNWx8sXmSRKNPenIskqbWFOBuWdSNsOvM1/I0Y="},"tinymce/skins/lightgray/fonts/tinymce-mobile-e64bf156a432d63f5b34b4567b513dc0d351b49161c7f608fb82574bfdd9d213.woff":{"logical_path":"tinymce/skins/lightgray/fonts/tinymce-mobile.woff","mtime":"2018-11-08T20:34:41+01:00","size":4624,"digest":"e64bf156a432d63f5b34b4567b513dc0d351b49161c7f608fb82574bfdd9d213","integrity":"sha256-5kvxVqQy1j9bNLRWe1E9wNNRtJFhx/YI+4JXS/3Z0hM="},"tinymce/skins/lightgray/fonts/tinymce-small-a10fc4343d95b716c16d77463d475be5c079599ea67e1cd2bd3a94d5e7f508f9.eot":{"logical_path":"tinymce/skins/lightgray/fonts/tinymce-small.eot","mtime":"2018-11-08T20:34:41+01:00","size":9492,"digest":"a10fc4343d95b716c16d77463d475be5c079599ea67e1cd2bd3a94d5e7f508f9","integrity":"sha256-oQ/END2VtxbBbXdGPUdb5cB5WZ6mfhzSvTqU1ef1CPk="},"tinymce/skins/lightgray/fonts/tinymce-small-e7773001446ab937e1d8d4bd5e8dbd9b31d112037353a14b319e36dd010ed8ee.svg":{"logical_path":"tinymce/skins/lightgray/fonts/tinymce-small.svg","mtime":"2018-11-08T20:34:41+01:00","size":24727,"digest":"e7773001446ab937e1d8d4bd5e8dbd9b31d112037353a14b319e36dd010ed8ee","integrity":"sha256-53cwAURquTfh2NS9Xo29mzHREgNzU6FLMZ423QEO2O4="},"tinymce/skins/lightgray/fonts/tinymce-small-2f657502906d6f5c3fc8df3a82969114ebe030addfdc061c60c974b0f515fd09.ttf":{"logical_path":"tinymce/skins/lightgray/fonts/tinymce-small.ttf","mtime":"2018-11-08T20:34:41+01:00","size":9304,"digest":"2f657502906d6f5c3fc8df3a82969114ebe030addfdc061c60c974b0f515fd09","integrity":"sha256-L2V1ApBtb1w/yN86gpaRFOvgMK3f3AYcYMl0sPUV/Qk="},"tinymce/skins/lightgray/fonts/tinymce-small-d3efbb678ca6de5632902bd93772746ba2f8e4e2322b953936e12694a183aa31.woff":{"logical_path":"tinymce/skins/lightgray/fonts/tinymce-small.woff","mtime":"2018-11-08T20:34:41+01:00","size":9380,"digest":"d3efbb678ca6de5632902bd93772746ba2f8e4e2322b953936e12694a183aa31","integrity":"sha256-0++7Z4ym3lYykCvZN3J0a6L45OIyK5U5NuEmlKGDqjE="},"tinymce/skins/lightgray/fonts/tinymce-9f5f4d62ce9ad4bf25c73cb80920c490cc361bf35dd47dcb3ce2ed767be7404d.eot":{"logical_path":"tinymce/skins/lightgray/fonts/tinymce.eot","mtime":"2018-11-08T20:34:41+01:00","size":18808,"digest":"9f5f4d62ce9ad4bf25c73cb80920c490cc361bf35dd47dcb3ce2ed767be7404d","integrity":"sha256-n19NYs6a1L8lxzy4CSDEkMw2G/Nd1H3LPOLtdnvnQE0="},"tinymce/skins/lightgray/fonts/tinymce-9b9369e35660db34db422aafd93cd8a68e638c486c107130e75e36c98d2e9a1f.svg":{"logical_path":"tinymce/skins/lightgray/fonts/tinymce.svg","mtime":"2018-11-08T20:34:41+01:00","size":45989,"digest":"9b9369e35660db34db422aafd93cd8a68e638c486c107130e75e36c98d2e9a1f","integrity":"sha256-m5Np41Zg2zTbQiqv2TzYpo5jjEhsEHEw5142yY0umh8="},"tinymce/skins/lightgray/fonts/tinymce-aad8f3f45064995545e9efd9c4bf10cb4967469aec14a475f648db771d25b6f9.ttf":{"logical_path":"tinymce/skins/lightgray/fonts/tinymce.ttf","mtime":"2018-11-08T20:34:41+01:00","size":18644,"digest":"aad8f3f45064995545e9efd9c4bf10cb4967469aec14a475f648db771d25b6f9","integrity":"sha256-qtjz9FBkmVVF6e/ZxL8Qy0lnRprsFKR19kjbdx0ltvk="},"tinymce/skins/lightgray/fonts/tinymce-e378406db7a120c29069a998f7fdd2d4d1867185b360c36767137dbbab5cf83e.woff":{"logical_path":"tinymce/skins/lightgray/fonts/tinymce.woff","mtime":"2018-11-08T20:34:41+01:00","size":18720,"digest":"e378406db7a120c29069a998f7fdd2d4d1867185b360c36767137dbbab5cf83e","integrity":"sha256-43hAbbehIMKQaamY9/3S1NGGcYWzYMNnZxN9u6tc+D4="},"tinymce/skins/lightgray/img/anchor-2861666fd107d278d4449970615136d06d7f746be9bb19072cf9c8f30e565e1e.gif":{"logical_path":"tinymce/skins/lightgray/img/anchor.gif","mtime":"2018-11-08T20:34:41+01:00","size":53,"digest":"2861666fd107d278d4449970615136d06d7f746be9bb19072cf9c8f30e565e1e","integrity":"sha256-KGFmb9EH0njURJlwYVE20G1/dGvpuxkHLPnI8w5WXh4="},"tinymce/skins/lightgray/img/loader-eb7cfd3d959b2e09c170f532e29f8b825f9bc770b2279fde58e595617753e244.gif":{"logical_path":"tinymce/skins/lightgray/img/loader.gif","mtime":"2018-11-08T20:34:41+01:00","size":2608,"digest":"eb7cfd3d959b2e09c170f532e29f8b825f9bc770b2279fde58e595617753e244","integrity":"sha256-63z9PZWbLgnBcPUy4p+Lgl+bx3CyJ5/eWOWVYXdT4kQ="},"tinymce/skins/lightgray/img/object-e6a15e52bc4a17b085073ba8debd4708ead6ae3d4cbeb3880c65cb7afc489777.gif":{"logical_path":"tinymce/skins/lightgray/img/object.gif","mtime":"2018-11-08T20:34:41+01:00","size":152,"digest":"e6a15e52bc4a17b085073ba8debd4708ead6ae3d4cbeb3880c65cb7afc489777","integrity":"sha256-5qFeUrxKF7CFBzuo3r1HCOrWrj1MvrOIDGXLevxIl3c="},"tinymce/skins/lightgray/img/trans-9cf020d7c3bba7f5ab10cda54aabef934f906d4f9a3acf99e9e7dc6c98579635.gif":{"logical_path":"tinymce/skins/lightgray/img/trans.gif","mtime":"2018-11-08T20:34:41+01:00","size":43,"digest":"9cf020d7c3bba7f5ab10cda54aabef934f906d4f9a3acf99e9e7dc6c98579635","integrity":"sha256-nPAg18O7p/WrEM2lSqvvk0+QbU+aOs+Z6efcbJhXljU="},"tinymce/skins/lightgray/skin.min-0a8317e0f4d4edc3efe3db92d0922332b01c7e3a4101f56f8e31368cdbc12e90.css":{"logical_path":"tinymce/skins/lightgray/skin.min.css","mtime":"2018-11-08T20:34:41+01:00","size":43910,"digest":"0a8317e0f4d4edc3efe3db92d0922332b01c7e3a4101f56f8e31368cdbc12e90","integrity":"sha256-CoMX4PTU7cPv49uS0JIjMrAcfjpBAfVvjjE2jNvBLpA="},"tinymce/skins/lightgray/skin.mobile.min-9c8e5d31db4d29209970e56b8a492922c3e2dd2e0265912a9c1acf58e5a8bd41.css":{"logical_path":"tinymce/skins/lightgray/skin.mobile.min.css","mtime":"2018-11-08T20:34:41+01:00","size":27854,"digest":"9c8e5d31db4d29209970e56b8a492922c3e2dd2e0265912a9c1acf58e5a8bd41","integrity":"sha256-nI5dMdtNKSCZcOVrikkpIsPi3S4CZZEqnBrPWOWovUE="},"tinymce/themes/inlite/theme-f03666288dc2af6a86b25c01f85c9085d48620cecb2e3a2b4e82a03efaba5c25.js":{"logical_path":"tinymce/themes/inlite/theme.js","mtime":"2018-11-08T20:34:41+01:00","size":132786,"digest":"f03666288dc2af6a86b25c01f85c9085d48620cecb2e3a2b4e82a03efaba5c25","integrity":"sha256-8DZmKI3Cr2qGslwB+FyQhdSGIM7LLjorToKgPvq6XCU="},"tinymce/themes/mobile/theme-b6c700a5ea0f122d7f0d860d4a7b814836e505231e5c029aece27fe6873d815e.js":{"logical_path":"tinymce/themes/mobile/theme.js","mtime":"2018-11-08T20:34:41+01:00","size":166931,"digest":"b6c700a5ea0f122d7f0d860d4a7b814836e505231e5c029aece27fe6873d815e","integrity":"sha256-tscApeoPEi1/DYYNSnuBSDblBSMeXAKa7OJ/5oc9gV4="},"tinymce/themes/modern/theme-5cc969a29b5a13fd548061371e12843a7027ab8cc6b35f95e2df52ea1b221a5e.js":{"logical_path":"tinymce/themes/modern/theme.js","mtime":"2018-11-08T20:34:41+01:00","size":131573,"digest":"5cc969a29b5a13fd548061371e12843a7027ab8cc6b35f95e2df52ea1b221a5e","integrity":"sha256-XMlpoptaE/1UgGE3HhKEOnAnq4zGs1+V4t9S6hsiGl4="}},"assets":{"active_admin.css":"active_admin-36292b8422a4426cc0094944f9ebc5bf4765c10d523799d63b941faa6a163601.css","active_admin/nested_menu_arrow.gif":"active_admin/nested_menu_arrow-15084d93c65c1964d7077700ea748bd2d70cfa2d4c19707c58a9c64e232dd442.gif","active_admin/nested_menu_arrow_dark.gif":"active_admin/nested_menu_arrow_dark-7c43b8e0a5f8823875f49a093c9d7a6b374f885b6f9cc248ae9cd7e6e9b29034.gif","active_admin/orderable.png":"active_admin/orderable-29374dbb55b0012d78a37c614d573bb3474f0779849b478a147d0f1845ca6617.png","active_admin/print.css":"active_admin/print-cf99cbf27fb92065a9eacd28e6fad48fa72cadaf6e0918790e8d35b11d8f99f6.css","active_admin.js":"active_admin-b259ca6ce02dc92d306a1a3c5a085c78dded2dcf996d65ce2a20738dbf436520.js","tinymce.js":"tinymce-de566058f98da4ed02d1875c43d69609716c234fc0449ae2b9fdd9b5d22c2862.js","modernizr.js":"modernizr-654222debe8018b12f1993ceddff30dc163a7d5008d79869c399d6d167321f97.js","font-awesome/fa-brands-400.eot":"font-awesome/fa-brands-400-9158ee2ef88ea648444ba1c9fcea310baa1e5e4e5fe86e338dcd29fcb081cfc7.eot","font-awesome/fa-regular-400.eot":"font-awesome/fa-regular-400-169416887c9d3c310bf02a12eaf82269d4cf77b16af2e91745b1c152bba0061d.eot","font-awesome/fa-solid-900.eot":"font-awesome/fa-solid-900-690be61fe58020511558ce4b04375178872629f6c737ed1b332aec65855fd937.eot","font-awesome/fa-brands-400.svg":"font-awesome/fa-brands-400-7aadbc4ac7f80413de00052694c1a44e0b0dbf0e2d7f739c628b88b28bb72bfa.svg","font-awesome/fa-regular-400.svg":"font-awesome/fa-regular-400-59dc408283c57a47d27b2a2852726f43db3285cab7e3d6297e8da7c901857f7b.svg","font-awesome/fa-solid-900.svg":"font-awesome/fa-solid-900-22f6af77ffeeb267c5270fa1e50681ae01a9a19f8e9ef976798e0196c941ade6.svg","font-awesome/fa-brands-400.ttf":"font-awesome/fa-brands-400-dbd08d025602b79ce71910b2a68577959cbf2ef02fc664e243bf50277754fdfc.ttf","font-awesome/fa-regular-400.ttf":"font-awesome/fa-regular-400-ecb5719eb6408359d91fd2530646064a3f251aed691fd48277289cc8d6d53dfa.ttf","font-awesome/fa-solid-900.ttf":"font-awesome/fa-solid-900-b97adad7ece9792af4122ae88103cad8fab54558a529c4ba79b5224c2b02ebe9.ttf","font-awesome/fa-brands-400.woff":"font-awesome/fa-brands-400-ca441c07992a7160e4d2622e78f8970c9b92f176694c8dc07592326496a801d6.woff","font-awesome/fa-regular-400.woff":"font-awesome/fa-regular-400-f101b8f70e36be2e9004222875e9fd45b263f72769c68e25e3c7525d3871728b.woff","font-awesome/fa-solid-900.woff":"font-awesome/fa-solid-900-8fb19633f125ca466a45da9e4cf291d8b9519dd74c214f99dde835ef83f3ab96.woff","font-awesome/fa-brands-400.woff2":"font-awesome/fa-brands-400-05dbc51654b96590d176c27efbcef2cf4ac0497499a9f28b731b73eea399070c.woff2","font-awesome/fa-regular-400.woff2":"font-awesome/fa-regular-400-92ba7bfaa43a35c94353e96860d99376313ee9b5fce6124d4e64067280f9a841.woff2","font-awesome/fa-solid-900.woff2":"font-awesome/fa-solid-900-7798165ee5a3c6809310d8261dcbe7c8d0c12d795b7b09a71af3eb86ec8f33f2.woff2","agendadescommuns.png":"agendadescommuns-0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33.png","alert.png":"alert-762ace9479328243a44061346b64c4d6b997e963c68dfc6bddd9e4d241192906.png","baby_gnu_adl.png":"baby_gnu_adl-463a81820aa2d4ffd8e7210dbce1a19ffcac67ef362aa7b092280c6f95c903fc.png","baby_gnu_adl.svg":"baby_gnu_adl-97251005d3225cf1d58b8c497d6b7905dbc9560cc8acd50118fcce60d0a2679e.svg","communs.png":"communs-0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33.png","lef-small.png":"lef-small-93285d531af463f877951d63fe844a6e9600b782c2c81f78723b730072fa942e.png","lef.png":"lef-15f93c1dccd4849a5e30613a3303013292a76cc4997877e626f123fe9afc2f75.png","priorite-logiciel-libre-je-soutiens-april_2_m.png":"priorite-logiciel-libre-je-soutiens-april_2_m-6442e454e96ed45cc1ebc40673a6c50bd286b9c28ea6a8b58572e94f7d6459fc.png","regions/CA-QC.png":"regions/CA-QC-70699e6a6e25c69040a3f1548b0afd829c4903ccca2760b6c10f49cc87d5d174.png","team.png":"team-65c86021cf8a1154493664094aeafcbe3e5aa13dc675bb8ef34b220481db98fa.png","application.js":"application-5605ff641c9b98cb2f64836cdef985707cf326fd9b11541ef1ef2daad21c4c08.js","application.css":"application-3f59179b0c2a06bb661d73a1de82e1f5c30bdb9d70ad1ec1ee9f383e4b4d373f.css","flags/4x3/ad.svg":"flags/4x3/ad-f67c4e5a3f709ead53c04d9ff35614e6c67517c3d3289170f7a317390f661497.svg","flags/1x1/ad.svg":"flags/1x1/ad-a315836ec2c9dcc11ef9bfd8b18aa7ccfc2d31435cbf46a2c31930836076e09c.svg","flags/4x3/ae.svg":"flags/4x3/ae-7a3b3dc0f50b5310014cfbcc8200a5f1ce568127bf43452e40e8158e0cff2d2e.svg","flags/1x1/ae.svg":"flags/1x1/ae-bcdd9a4da09598785f3e31db4ff431e22687b2ead18209a3e615600655068cd5.svg","flags/4x3/af.svg":"flags/4x3/af-01601b521fa86582e32c39eed8c88480afec1f801b6de929b52ed7e49da47260.svg","flags/1x1/af.svg":"flags/1x1/af-6332cf754a5e2866db631923e1f7cfc52a0a554d32b97bcf19f8263819e4ca7d.svg","flags/4x3/ag.svg":"flags/4x3/ag-cb6952d821bac7855231c2cb4d1c44f7c730f6b3621518ab20f30d2b9afe604b.svg","flags/1x1/ag.svg":"flags/1x1/ag-14f7d9978487aaf4446b55167e85a711c48a13ff07edac175c172969a38650c4.svg","flags/4x3/ai.svg":"flags/4x3/ai-f07c6cc0646fdfa441b9a506e1d46e8dce0d97b37222292e9c6733c995dc89bc.svg","flags/1x1/ai.svg":"flags/1x1/ai-95099e544de29bcea3ba735de535823f2e19aeb4043e82dbc1d9862f9262b810.svg","flags/4x3/al.svg":"flags/4x3/al-9b997f2720de861e1b0ccec8ddf42a2890795ebf50817f9223e1ceba712c9b03.svg","flags/1x1/al.svg":"flags/1x1/al-94852d2711fc23abf3423534b9edb950a0c6aabf1d2d98bf2643f3c7dadfac09.svg","flags/4x3/am.svg":"flags/4x3/am-85a199ec21d1af74a256335ead0c1e38592bb603d8da81feda4678945e9e00e6.svg","flags/1x1/am.svg":"flags/1x1/am-869391b014ac299924d30777d72a4aba430752177290a90a1fc3255a7ad79ee7.svg","flags/4x3/ao.svg":"flags/4x3/ao-29224a61bf632826d530cda55d87c2615884bd2c2c3a322036ed468e34d85c75.svg","flags/1x1/ao.svg":"flags/1x1/ao-048eacbc862fe1868cf0ec73457b70a8b49a598c80dea049856f0e1fd6fec83e.svg","flags/4x3/aq.svg":"flags/4x3/aq-b401a776d2f1a7944170114f0aeeceab5e1d962df3de7ed1eff47d96824b73fd.svg","flags/1x1/aq.svg":"flags/1x1/aq-a8d7ce9bfb860b6e2b58608b50bf2cafc5220c77f6d049ab7770891f64334531.svg","flags/4x3/ar.svg":"flags/4x3/ar-bf73475bb707100874dec538ce4b7e1b5afc4ed67dc50a8a800ee519e51cc826.svg","flags/1x1/ar.svg":"flags/1x1/ar-fc6582cc6d3ef0782805d8497ee77ab2d836c53422e91007e48f81a4a9fa2e60.svg","flags/4x3/as.svg":"flags/4x3/as-79d395190345206ea03475b67b44638e1111562411504b60646483c9c0b0f7d1.svg","flags/1x1/as.svg":"flags/1x1/as-04f0db77c5d8610a55c69508b226a7c338924f8cf7d6577d5d6590e85ee57183.svg","flags/4x3/at.svg":"flags/4x3/at-3d197de8f1f0096a2b0d440b6fc7d80821585a6637e646c05487a87718bf6b5f.svg","flags/1x1/at.svg":"flags/1x1/at-ec4db9aeac793827ac7c8e40c072a76f7675010058cc8c8dfd3a86bb5acfa6b8.svg","flags/4x3/au.svg":"flags/4x3/au-126fa2500a315287a5f847f4d958bb929f11da9b39f35912cc440c0fcffb8b12.svg","flags/1x1/au.svg":"flags/1x1/au-bf990dcc957c9f74eb908e8ffa733f1731277bf6ec8b7301a6ea1ed92b59cc4b.svg","flags/4x3/aw.svg":"flags/4x3/aw-4524643452423e95f3b0dbe6216b059a9e52126b34c73ae4b3c17b682f893aa6.svg","flags/1x1/aw.svg":"flags/1x1/aw-f7002bceef55486a442bf6bf433be0c60d0b15b2aa548b81c524c67ccf0565a8.svg","flags/4x3/ax.svg":"flags/4x3/ax-c297e0eb654ca62e58f5eb3abb70df9f245e4919490f29bd0f1d49c4fe052d90.svg","flags/1x1/ax.svg":"flags/1x1/ax-a1245689ecbf321c0a9e556bba17f3c9f2aeb8b1f63d14fcb591d76a87f12880.svg","flags/4x3/az.svg":"flags/4x3/az-132e68d5e0386d3b9fa05b4288a0fd66f1414e2bc7af6b9d437b6935a7dfa00c.svg","flags/1x1/az.svg":"flags/1x1/az-3990c0526b933bd650285d821f2b93e432a73ba709869549b8ef75b051d3bd2d.svg","flags/4x3/ba.svg":"flags/4x3/ba-89dd0c1600d94741de7d667a487310193a0c48c4cf1a5159c3bf9dd37d65d2b5.svg","flags/1x1/ba.svg":"flags/1x1/ba-2dbe90eb12b937f4a9ae8db95760930a3e318f4ce5829ac05e292ead698bae5a.svg","flags/4x3/bb.svg":"flags/4x3/bb-16f8249ff958bfbc18fb1f23a5282000347bffdb5769ac620966185b1dcb57f6.svg","flags/1x1/bb.svg":"flags/1x1/bb-fae92d8426196ae24ffa561aca72613fae651a5e9c0bcda63ecc877add05b060.svg","flags/4x3/bd.svg":"flags/4x3/bd-8dac0547e73ee25a04148a3f0fd026a90e56c23b7e92921565d4263050ba77a6.svg","flags/1x1/bd.svg":"flags/1x1/bd-ecc3c3e87d4cc59c8350f2b4d7dca8f5cf46bdb26319db0ee80b744482af50c1.svg","flags/4x3/be.svg":"flags/4x3/be-a180ca68521188017bb5367f19e503d9599d6cbecd61bf054e59a57f58e648ae.svg","flags/1x1/be.svg":"flags/1x1/be-c8d4194137bd01955285b329dfdf996490d16c3116a92ce2f322e354b6d7494e.svg","flags/4x3/bf.svg":"flags/4x3/bf-6b214936ef89f19133d4a84e99cdf0cfdb99d6409f2f373f6d18694423013313.svg","flags/1x1/bf.svg":"flags/1x1/bf-04c7d61aa314adab5a41bd79d77aa780c10136bb6b8f4c62423e61e23e3851ee.svg","flags/4x3/bg.svg":"flags/4x3/bg-dd3985ba746942b0e65bc52a280cc4d28fb24fd2c7d9e22ac9afd2d75ee7bfc4.svg","flags/1x1/bg.svg":"flags/1x1/bg-f59294a736d5bdc0f102b58d70dbe45d02bd92df822820bf95336840f75a0746.svg","flags/4x3/bh.svg":"flags/4x3/bh-7c82c4a6ba963172c6c1b4423f39a0ebe9c999449cc7dd87018917943db4735c.svg","flags/1x1/bh.svg":"flags/1x1/bh-6893aac3e55c6480e9dac0c023ec2179f6c12a0da82a0bc2717134384c097e88.svg","flags/4x3/bi.svg":"flags/4x3/bi-4fcd0116f7f93c0564c6955806f3c3563d0ea7334ae406f29a897255845c923c.svg","flags/1x1/bi.svg":"flags/1x1/bi-91c34eb431b26be67852782a0b93e1d7d577a925454d6c8cea00a0d872d2de8a.svg","flags/4x3/bj.svg":"flags/4x3/bj-63bddb4268f5f8c2ed867041bcf058fb18fcd9d1e0799e01286fca2d5e961c7f.svg","flags/1x1/bj.svg":"flags/1x1/bj-e2606c5a8498c474a6b6708626b88108fcb73840344766566dc56f804279cdfc.svg","flags/4x3/bl.svg":"flags/4x3/bl-824a7265f48789d5e1ad5c5b0042a13a7d2d4357210e5bd8124fca19931e8c74.svg","flags/1x1/bl.svg":"flags/1x1/bl-ba6a7881b0ca72ac57aee4d823ae611ab4ad24a938ee9e01a7a4d5ae04cfccf6.svg","flags/4x3/bm.svg":"flags/4x3/bm-2e2f09e5a4edf4b18afff581656f50b0b4c37783db29591ff00ca768f7f755bc.svg","flags/1x1/bm.svg":"flags/1x1/bm-f553f953f8784ea4d67a5197f5d808a67747eb8a1cb56990d6838e690090d2d6.svg","flags/4x3/bn.svg":"flags/4x3/bn-bcf9967c12eb6397346cb5b960ae92efa41f314f780d09a3d7c81f5dacac4180.svg","flags/1x1/bn.svg":"flags/1x1/bn-1d1aad3fe9fd33ce922eba33c9ae6047a5646349239c20d1bc7307ec6d19a043.svg","flags/4x3/bo.svg":"flags/4x3/bo-fa423f2bb4ab6e8e9dd399ad73781ea8d9cbafd30f1b7ee0bcecfb9e7b75581e.svg","flags/1x1/bo.svg":"flags/1x1/bo-f5faa29e40191e0c76070ac1a1d2a1f2b18e9cd358b8a77cefaed8efc49a265e.svg","flags/4x3/bq.svg":"flags/4x3/bq-493c92ab19204c3ad319e6caba021df050132b99bd57a8f9b74131b78229c29e.svg","flags/1x1/bq.svg":"flags/1x1/bq-6e30bbeabc2aa097f657a411984b3c23278a8fcce2fc016b1cd6d2262f672d33.svg","flags/4x3/br.svg":"flags/4x3/br-cf3ba80ec2c9fd4d3c845c3a3c43a2b9d81cf90707a2918789e8b1f596833e01.svg","flags/1x1/br.svg":"flags/1x1/br-7bf4e4b31650ac25f0bc6c86eb87491a7e5a8eac13acccfcbde44346c88728f6.svg","flags/4x3/bs.svg":"flags/4x3/bs-69f60b5fea96b67dd939e597099994921bb3dc3bcf31b8dee7cc45be2885c836.svg","flags/1x1/bs.svg":"flags/1x1/bs-f5d6acf7ef7a240dc09ac88710fd77fd3494501104392db74d5c540d482f2262.svg","flags/4x3/bt.svg":"flags/4x3/bt-6c20b0c00e12d5898be0239a0c66ce775debd0bd536de56a271859a0285a039e.svg","flags/1x1/bt.svg":"flags/1x1/bt-58de3ca9438811ef1920e2f84c4ba4ce32d01069f4d197ab5d577de6acbe0c85.svg","flags/4x3/bv.svg":"flags/4x3/bv-ff173190fc339b3cb8b6e8235bc5e373853d7127fd94cbc32ac737e839aeb586.svg","flags/1x1/bv.svg":"flags/1x1/bv-59616ff1a722959064c83927ca2e49c1fce42a9b18e91b9ecbb74f62527aff43.svg","flags/4x3/bw.svg":"flags/4x3/bw-4bb1d3131b88c65b5decc67f7b44903e931bca2fcac841942591c599f0cbb850.svg","flags/1x1/bw.svg":"flags/1x1/bw-e08f50c0836ca5858aed7b0526aed6fb630da8dc6b6b96bd9a476af599dc89d6.svg","flags/4x3/by.svg":"flags/4x3/by-324ac96bfbe075781c664be3b9e2ac6b4d2a46dd2b418ca0920284f64394c7d4.svg","flags/1x1/by.svg":"flags/1x1/by-37b80e8bf7e51fef99a8307d6dffb04ee164790ceeafef606d516ca333e9488a.svg","flags/4x3/bz.svg":"flags/4x3/bz-156fdc45f8c15c9520a1ea9fc0f395f294f02077408ea1938c222a37cfbb7f1d.svg","flags/1x1/bz.svg":"flags/1x1/bz-24577d4e7b29b33ab3b1d37914c8479889baa7e8c8399c6d1c99faed31ab053a.svg","flags/4x3/ca.svg":"flags/4x3/ca-0d57cab46d5dbb0012a5e4ae0a9efee3baee90d5d157950a6c5d67edf2daa58f.svg","flags/1x1/ca.svg":"flags/1x1/ca-192a6fb0544e5a6f33a32149d62f1e7ac0a1d61c5c5afa57f3a42346ca8e8c90.svg","flags/4x3/cc.svg":"flags/4x3/cc-a35f2a9e10a28d6918ced65e0623b03bb2fbf1f20670b581bc0a409d33b4e843.svg","flags/1x1/cc.svg":"flags/1x1/cc-d2025eefc9d30f724f3fcd95c0fd9f7938930ecb01af7e0cd6ee6553d7358eb6.svg","flags/4x3/cd.svg":"flags/4x3/cd-5d2127c991b30522ae0a29d05facbc88728c050d7e333a60d614af1545459c5c.svg","flags/1x1/cd.svg":"flags/1x1/cd-59dacf424d1c8c779db66c5b7f2a93a3c8f14976c2975ccfb07639676a1602e3.svg","flags/4x3/cf.svg":"flags/4x3/cf-ac0aaffba354d848eba2501a402ee81dc96a56ad0acd3741ec9905e76c372e1e.svg","flags/1x1/cf.svg":"flags/1x1/cf-e637674faf7edcdad37182192d038448c157421ab0c69377d9b8e56ab2c0249d.svg","flags/4x3/cg.svg":"flags/4x3/cg-3729f717c83c9df7d0543a1a5d4a506efe184bdfeb39f9260b4b63edf19d2538.svg","flags/1x1/cg.svg":"flags/1x1/cg-8353ff1f251714b1b8905eec1722378426719955d0637d206d35d1dcfa68ddcf.svg","flags/4x3/ch.svg":"flags/4x3/ch-6739edee6d1ef72c4ed97cfe723d3bb7f17e4df5390f3a4ae234f1ffdeece0cf.svg","flags/1x1/ch.svg":"flags/1x1/ch-7c3dec465228981c57a90a3a7b3a6c42dd3e699230663e770b55008ce6d14208.svg","flags/4x3/ci.svg":"flags/4x3/ci-3e076d13c9524149508c442f8f727424660124e3591280d8ae9bddf9d8272a1e.svg","flags/1x1/ci.svg":"flags/1x1/ci-691a0a8577b7d555fc90dc7170adc9ec7571191cb3507c46c0e8516fd1778a91.svg","flags/4x3/ck.svg":"flags/4x3/ck-9cff098e505afde9bf5166cb7b0c409178575633b913ce08c1c700d08c477db6.svg","flags/1x1/ck.svg":"flags/1x1/ck-9c8dffa3bd5953d8a121780831f25b58738e67f3be71961894c56dfd25848c88.svg","flags/4x3/cl.svg":"flags/4x3/cl-a4c57ec2bb9adcb67e1850256e5165227b764187d6941a38d95d0def5144699b.svg","flags/1x1/cl.svg":"flags/1x1/cl-5a3e95cf63358e3911c97404818c2cddfd46414d8445e47d6976ee166c48926c.svg","flags/4x3/cm.svg":"flags/4x3/cm-5dce9f36d92a61bdc0c482141bdb4f55bfcec0a2ecc745db643a7953e2e5a722.svg","flags/1x1/cm.svg":"flags/1x1/cm-d8d21f54c44df5df9edef227691384a4ad37c15ff57c8aa0dead684d19eac8cd.svg","flags/4x3/cn.svg":"flags/4x3/cn-48ce1c2837bb806a6aaf8b7a9878b6d040c0d069a0ffca9a8a49e7a31aa30e7f.svg","flags/1x1/cn.svg":"flags/1x1/cn-e6be64c6c4a976e64d39bfe8a6ae4a5b1d38a6aa1b138ddcacf34a942dff50bc.svg","flags/4x3/co.svg":"flags/4x3/co-648d3ff596a0ecf3e85ac17c53abe1d7ca4759688e10a7a3a8b56f096ba6b6f7.svg","flags/1x1/co.svg":"flags/1x1/co-d3c16180c6bce630f762aff789104d10e9dbc949e740535a61396cd0ec34c1a1.svg","flags/4x3/cr.svg":"flags/4x3/cr-84aec60f19bd33e1ac1a209155fec8d372e17cb59dc1346bb9124e5cc867375d.svg","flags/1x1/cr.svg":"flags/1x1/cr-5371cf8bc5ad1a805155c1b3065e420a0a418c8d63b472bc545890289a365b35.svg","flags/4x3/cu.svg":"flags/4x3/cu-bb3f857e02aeab606120d9f164283f07a44b227f12aad7d6d344c7579f7b3ff0.svg","flags/1x1/cu.svg":"flags/1x1/cu-02c0054169b874a8d231de1f45b2d0884de48848157734e0ddcd0f684c05c18d.svg","flags/4x3/cv.svg":"flags/4x3/cv-90ee90ab59713454a218d8c300c71139e62655de80bfbea81df93142a529b81f.svg","flags/1x1/cv.svg":"flags/1x1/cv-2cf3eede97a468d28459ccc2271c28bb5b6029af2388b0301f6203be55e49308.svg","flags/4x3/cw.svg":"flags/4x3/cw-d46beb7b10b40fa82cfd40eb86a3b3879f59f5da2a2f5ef91d121ab9b16c0aad.svg","flags/1x1/cw.svg":"flags/1x1/cw-ba78c834e61b24a8a2b6bc7c80ab9f14e42c3c69415941ddb7c8c1f652ccd8b5.svg","flags/4x3/cx.svg":"flags/4x3/cx-28187fb9d91bedc6f239b107d26eb6ec1cc2a0c7730810306c5a6b313c14f2b2.svg","flags/1x1/cx.svg":"flags/1x1/cx-8ebe073d997f93d092a493300ea1d234c91aef80c6e8f431e88aa7f8e724f9a6.svg","flags/4x3/cy.svg":"flags/4x3/cy-8d633ecabc7968bb8a869c62545f122aacbbc3e108c25ceb421bb8bc8734b9be.svg","flags/1x1/cy.svg":"flags/1x1/cy-6ef37fdd7518f18727bec1ed9741bb4d1f854dde7ef1a7e9fd2f4ba6291a7790.svg","flags/4x3/cz.svg":"flags/4x3/cz-6c94e3d53fc1ae5982d8eb058b76d86f07d3fb4cd325698fea3291fa35504c56.svg","flags/1x1/cz.svg":"flags/1x1/cz-af9898ebd32559cdbea2fd17b351e5eedafccada6fbc6a2b7952cad78369817e.svg","flags/4x3/de.svg":"flags/4x3/de-e7323083675d25107c85f0cea6534bd21d21e77e6d524d92e1b2d0a4e21117a1.svg","flags/1x1/de.svg":"flags/1x1/de-fdb60146952d3b2d104310b28882a0ecde44d808240c3bab2cd6c302a538b266.svg","flags/4x3/dj.svg":"flags/4x3/dj-546da4a0dae9b1ab74dc6ac6076d0c706f37ef2a0d799342dd0345e11f770f03.svg","flags/1x1/dj.svg":"flags/1x1/dj-c0481b667f003d9d5a3c93861023a97a98224227ac19aa7e07b5b6edd35fe900.svg","flags/4x3/dk.svg":"flags/4x3/dk-a13735c0337ab4679cd8679508bf5e8067637ab611ca5c54172c621d740420e5.svg","flags/1x1/dk.svg":"flags/1x1/dk-822a3b8b6948f49aa81fe7620bd173453d9a45406a9680f24bad7e714e58cb7c.svg","flags/4x3/dm.svg":"flags/4x3/dm-7713fabd3cf341694b4c1ef5d1379820773722b61c190234ac7416f2872e3940.svg","flags/1x1/dm.svg":"flags/1x1/dm-33d984fc9897bb2a3bd16c6672b876effc1a8adc0c57ad122a16db54061e4e46.svg","flags/4x3/do.svg":"flags/4x3/do-714b6f307ea3a9c3d30348684b8574e8b7f5078f51649dfa97ae2a69a7108b4a.svg","flags/1x1/do.svg":"flags/1x1/do-d37306c4b346f89ea14739144374caad69652be31e8ce8e2504c9a0d422a4857.svg","flags/4x3/dz.svg":"flags/4x3/dz-a96e943c830558fe9823044aac2bfb3f6a4caf3bd3c57943352280a7f6b68cb1.svg","flags/1x1/dz.svg":"flags/1x1/dz-09400d3b2c58e641a1641a687b81476761d05f9d0ff65861aeaa33c7f508cda4.svg","flags/4x3/ec.svg":"flags/4x3/ec-6762ba85ea0f7bb289b0aa6219c797e5243103d281b1462c61b61030fa329d5e.svg","flags/1x1/ec.svg":"flags/1x1/ec-7410a75a013738fbb8cbd756d967380e02ae54ca74e9ef9a41c4b583c2c2794f.svg","flags/4x3/ee.svg":"flags/4x3/ee-ce3b622214bd9eefb43373cae2811ea8cf6ef6a16bb6afbaa5bcaaea34024da0.svg","flags/1x1/ee.svg":"flags/1x1/ee-a207a8363b4dde44f59951501c2cb539419e92b0814b25d6448710ced52226f8.svg","flags/4x3/eg.svg":"flags/4x3/eg-16a11fa93856ddc5fd46f8811adfc93660175724b20eaab55ff046855a352d2c.svg","flags/1x1/eg.svg":"flags/1x1/eg-9f4d098c604326bbc3692f9e2f335dbc9b34bdf2706565bf448380f0a889d1e2.svg","flags/4x3/eh.svg":"flags/4x3/eh-9cf4a74d29c1a1afc4137deeb5b678d55c8fbdf8d181217267f3a5cce6a76a97.svg","flags/1x1/eh.svg":"flags/1x1/eh-16c3327dbcf3483e634b3536b056324b5478212dae6d060f2ffb2ec961cd382f.svg","flags/4x3/er.svg":"flags/4x3/er-69a1e1e45289d1282df4b1e5ce5e712d69fbe314abd0c922353fce90814c543e.svg","flags/1x1/er.svg":"flags/1x1/er-90d49408e58955cf1cf3185b0193e03c4a107042d47ef5e975dbbe10c6ef7f4a.svg","flags/4x3/es.svg":"flags/4x3/es-50e59681c6b6412498bd9cbfc473abedc713db75c54c538b839db3c394d64499.svg","flags/1x1/es.svg":"flags/1x1/es-29c68fa3c9c8c2adacdc2eb0162e9c2fa998faa408836900ec6285000476800d.svg","flags/4x3/et.svg":"flags/4x3/et-14263ba7ea890fd0a4d89a2791343ecb7acc89aab1fc2593e00a6093b22251df.svg","flags/1x1/et.svg":"flags/1x1/et-086eefb70e9adad537cc1c640a72cc0fa843ec7a9b06b2778aa98b2db055bfe6.svg","flags/4x3/fi.svg":"flags/4x3/fi-a4c41caa02a4f6803ea0d6c36de4beebf20d150e3df742b1369a4099c2ff648e.svg","flags/1x1/fi.svg":"flags/1x1/fi-c5fdf318fac5fdfc94fe54268618e58a2bc5933617ead09992900f90cc25de9a.svg","flags/4x3/fj.svg":"flags/4x3/fj-cb0cc4b3b5c202f07487ee519f48b3eadb47035f5f2d5d3f99d20f81e48d6b79.svg","flags/1x1/fj.svg":"flags/1x1/fj-c2c7fd536841925e7647b2d510d6a0c58700e2a8ded0e42008fb93ffacde101f.svg","flags/4x3/fk.svg":"flags/4x3/fk-cb61eaa0d7221823f7d17de59ea88ed16b506f9585ab0c7291cf839449d82968.svg","flags/1x1/fk.svg":"flags/1x1/fk-a871742380ae157d1211a63cc35cd3621b1bf6de6d67e4a8e3565ad200b1d8cf.svg","flags/4x3/fm.svg":"flags/4x3/fm-079b937562a9a412aae8fb762b571ddb49bf23627943c97247b6a9bbdb768153.svg","flags/1x1/fm.svg":"flags/1x1/fm-dbec73633ecd8a6c50f56d54df36bbe6a2f8fb534ac7658477c82cad14a806a8.svg","flags/4x3/fo.svg":"flags/4x3/fo-27279c2481bb1cb3e44850a948987d6a8411acffa770c3aecd1b76d4c5853413.svg","flags/1x1/fo.svg":"flags/1x1/fo-7cb4fdbba1c7223702d843cb0709ddc799f89f909dfe101e3e36d6bf36c3e67f.svg","flags/4x3/fr.svg":"flags/4x3/fr-30ed2f68dc9a17927643640f48f3d2a858bd041770547035349c6e79713cd84e.svg","flags/1x1/fr.svg":"flags/1x1/fr-6b849151204c66fa661c30b34e62919a13b9e66b7cd37a4fc8962e8e0baf9bdc.svg","flags/4x3/ga.svg":"flags/4x3/ga-e3840f9d5bd6ee08db748d37a534500b837bee0f8ce65987b2f099a6afd2cc63.svg","flags/1x1/ga.svg":"flags/1x1/ga-9eafd5388042b3d2258ac6223075b726426210136b9851b637973105721b64d9.svg","flags/4x3/gb.svg":"flags/4x3/gb-ce93c8a6b974d63998e263f6d25f898fc20580a28464457f2f4463b687e4fe8d.svg","flags/1x1/gb.svg":"flags/1x1/gb-1d93e1ce2e2e10c1709e4dc50ac956c007b2c1a63a4bc22ddfd64354f79ad457.svg","flags/4x3/gd.svg":"flags/4x3/gd-7c3a6b6068bbd9a6abc98c2297dd4acd5e31022e5a4210fc0e1205ec28498fa2.svg","flags/1x1/gd.svg":"flags/1x1/gd-2310bc03d9e8ddc8599b40891bfb10b812b07023881599a7e02e3028d1bc9ca8.svg","flags/4x3/ge.svg":"flags/4x3/ge-501c0135fb8c377dbd2859ff6290b47ef4907a8e2ab2ae1e39116b716db6795f.svg","flags/1x1/ge.svg":"flags/1x1/ge-ca9ee36883ec12048fbb7fbbfaf231c0d4848ae0b07dab74a46d53b7b34d8114.svg","flags/4x3/gf.svg":"flags/4x3/gf-7c165f90bfe6ac3674903632182221a992f017ff706354b1761002382e89c2c2.svg","flags/1x1/gf.svg":"flags/1x1/gf-8838337b15cdcf143fac16c714e8dbf2d893d2ea8f1c8ef06dadcb652dfec41c.svg","flags/4x3/gg.svg":"flags/4x3/gg-2c7bfc50d5bcd374b5f6107974d06af24e70edba31ad71a225e0c2ecc2d6e778.svg","flags/1x1/gg.svg":"flags/1x1/gg-509489b1792831bb27d6975c76aa0a2ac2fa2c3906bcf844f616de5e0fbbc359.svg","flags/4x3/gh.svg":"flags/4x3/gh-79c187756e93df22fae571ad9419629c5247c016e32a74471e0d461048fdf5cf.svg","flags/1x1/gh.svg":"flags/1x1/gh-e7bf18e6337982ee31e3673ab93e722b3410b7a4c202656a4bc3887d8656286b.svg","flags/4x3/gi.svg":"flags/4x3/gi-ed99b369c8c77e64abd59fab1f28155d71b4378b49625c66ab0ab6dff4f88087.svg","flags/1x1/gi.svg":"flags/1x1/gi-2e563e96e766e13c0a9c5a3a372059a44739bb696e853d71a6f6b08c491dfb9a.svg","flags/4x3/gl.svg":"flags/4x3/gl-612e560dbad68d540be672b80e22c54db43d6e2070523e81c156ccd6b3fc4260.svg","flags/1x1/gl.svg":"flags/1x1/gl-a9bb35d2b9ff27638658d9ad6b9e2c4f452072b9a80b508d32e76d37bf62cf6e.svg","flags/4x3/gm.svg":"flags/4x3/gm-4a6f9670a41548cceaced2b728e4bc56acbc4a3ba5544e7a097f7dae7a8bb045.svg","flags/1x1/gm.svg":"flags/1x1/gm-b67f9f6bce2f8c8700c198de8bfafac72d01b8a1e55b77f71e8cafdc58f8af5c.svg","flags/4x3/gn.svg":"flags/4x3/gn-873b4eb52f34c7558bef93cfd1b82117b5c32c9fbc0610f8821ccd22f28abe28.svg","flags/1x1/gn.svg":"flags/1x1/gn-72f51dc30cf0ed5459ad0f239cf3043eac05ece75945bcaf4ea6653af868c504.svg","flags/4x3/gp.svg":"flags/4x3/gp-4559cad3eb2d173214161d16b0237c68f5c817749a39c862fa7b23dfb4aee923.svg","flags/1x1/gp.svg":"flags/1x1/gp-d6669532054db5b7e441f4858c28920246a65ca3e8a15518c64c7bbb4f9c6416.svg","flags/4x3/gq.svg":"flags/4x3/gq-0c8dfe7f9543307056bbe6d6e44a16c17201228e5344d5afec1ccf1b9a5eb2f9.svg","flags/1x1/gq.svg":"flags/1x1/gq-ecb761e6db59b9bf8ba37533eaf0c60b7fcc7c0dfa2fcf281ee84c970dcb10f8.svg","flags/4x3/gr.svg":"flags/4x3/gr-4a4086310397bffa682d439be8650a9e28d94e32963b6411b61435292ac4cf80.svg","flags/1x1/gr.svg":"flags/1x1/gr-0cbd171892c0568b055d3b6585d58ac13dd60dfbcfad16eda1f4f9ead11dd16f.svg","flags/4x3/gs.svg":"flags/4x3/gs-e45169a93a9e94c15f5cb765a6c863319171fb9b4dce56094411829cd688d486.svg","flags/1x1/gs.svg":"flags/1x1/gs-3efc9e1b32961f9aa9d7faa2626e596282b63d049f6717c2378b28e3f508e79a.svg","flags/4x3/gt.svg":"flags/4x3/gt-64a7345cf66facf7f323d2142aebb4172191108a78ac7493b1a6077b78ac8ec5.svg","flags/1x1/gt.svg":"flags/1x1/gt-436a2af3d95cf3cb13ded897f319cfd6e2c087d678ad0e971c198b0d2c029911.svg","flags/4x3/gu.svg":"flags/4x3/gu-f560822ee237e5277829e63613a615a2ee3d8cc6196dffffe0f0d56a49b11c53.svg","flags/1x1/gu.svg":"flags/1x1/gu-a71c9d290c66c1a0929b05436dc6a8229b1147d7cc62336e04c9adf697030450.svg","flags/4x3/gw.svg":"flags/4x3/gw-0dc9ec17735ed605b68672947ce55c49a4ec1551491ccd121f482c1875cdf219.svg","flags/1x1/gw.svg":"flags/1x1/gw-7868c305e4a64b0d8ebfd3f7cb8c881841d71a7e0c3ead2683fe503c80de0674.svg","flags/4x3/gy.svg":"flags/4x3/gy-c9126e544c62508abfb898f0af0bd79c46f4c767c9ed6f928418a24b0f246d85.svg","flags/1x1/gy.svg":"flags/1x1/gy-0e3b849ce460f8ab1ec7cf66a25be1ba91e89b72d8b0aa679a0553464f37a972.svg","flags/4x3/hk.svg":"flags/4x3/hk-cece9126ccbf9151feadfed75791ebf32d4a16beab12f182404519d0cc24eec7.svg","flags/1x1/hk.svg":"flags/1x1/hk-9fad00e06f9034877149394914baa2bc3292223b0e32df2b1f9399d4de6e167d.svg","flags/4x3/hm.svg":"flags/4x3/hm-4b4923b81da24d62ebf31a9bc0addf76beef84593374b1cbd03ba19f3b12e3e9.svg","flags/1x1/hm.svg":"flags/1x1/hm-776c822113a22e83581234d05f40bfc0ed38b60648d87f513f3da3fff96ffb61.svg","flags/4x3/hn.svg":"flags/4x3/hn-855c830786283862a5f399e0d69dffe52b6223b91b32e31b55d55c82f2fa32c9.svg","flags/1x1/hn.svg":"flags/1x1/hn-64c38bac9403417c4e276bf5536d284fc5410fc04b80acd39a961d298f430dbd.svg","flags/4x3/hr.svg":"flags/4x3/hr-c8cad861f7398a22b9d27ea682d2778df0dde8e146d30142b5294daf988854af.svg","flags/1x1/hr.svg":"flags/1x1/hr-60c093df6760e4cc6abe26c37a52be3b51458f02712f18e11f08b07dc623b489.svg","flags/4x3/ht.svg":"flags/4x3/ht-fe81da06228fa36e7f211bec0d9f0c020f5b9c7f81534b4cb2251848aa276b16.svg","flags/1x1/ht.svg":"flags/1x1/ht-dd0197c078859c5a66ff3a51d3a3f92809768e36bfabdec0fc0ab60d068afcd9.svg","flags/4x3/hu.svg":"flags/4x3/hu-9aa998e636687aede491e307f3d068dbe58f2d90bfdfaec0e7ad03baa5b36344.svg","flags/1x1/hu.svg":"flags/1x1/hu-06858d0fbd4320496e849010e35c8fe82eb618188cf6ec329aef93f5e7af1c23.svg","flags/4x3/id.svg":"flags/4x3/id-775dbfedd6533afdf5bd017ccc1ad4f8f4238cbe87393d9c837a669196f17293.svg","flags/1x1/id.svg":"flags/1x1/id-3920ce662a7ea937b2c11707d8e1f53db52611dd004edf753b0389ed490d9d29.svg","flags/4x3/ie.svg":"flags/4x3/ie-6368a1c92440fcf80d3c35607543bcaa2d4662d6e0bc7acf6749ddbc418a72c0.svg","flags/1x1/ie.svg":"flags/1x1/ie-1997e9de640fa764677aa8f5d52f7888bb24a029160e8f67b06dbd043b4f11b3.svg","flags/4x3/il.svg":"flags/4x3/il-d76883a2330f9a05a4a64990ba955fc1be90bb46bcb19ae548c21816e7e74178.svg","flags/1x1/il.svg":"flags/1x1/il-f5e643d0e10169a438119dc441ea3100b52a2ff569bbb3a3ad6d1131b47602d8.svg","flags/4x3/im.svg":"flags/4x3/im-bbae8aa9dd129f8446556afe4904194ad43377d882f9a705fcf1da2bdbfabccf.svg","flags/1x1/im.svg":"flags/1x1/im-767d72c2e72d732d65c9b016adad983778dfbbb2b5b52e71830f4e41297728d3.svg","flags/4x3/in.svg":"flags/4x3/in-519e33321b8b2ba70a0b7557d66c62d7efdc9723896c49f82528b107028ffe29.svg","flags/1x1/in.svg":"flags/1x1/in-27831f76dc6a218a529b6e5d0eafc4c19c999461327b7c013f59226c0601a361.svg","flags/4x3/io.svg":"flags/4x3/io-8d25a8e98f682199b413adfbcb6898c37058c9bae085e427fbab03d56e8c0de6.svg","flags/1x1/io.svg":"flags/1x1/io-627f3b0cef72fd91ff426d74a007dc32d74c9fe677cf2c8355cba84359e16fde.svg","flags/4x3/iq.svg":"flags/4x3/iq-96b24d1439184d0a4c35ca7cea65e5f20469a0e8c8438963aad016e59c399cc6.svg","flags/1x1/iq.svg":"flags/1x1/iq-af04db139f8c44cfe0c612e2c05e848ccfad88fbbfcb58e88cdb7c80db365669.svg","flags/4x3/ir.svg":"flags/4x3/ir-db2c230d355ade2b1ac235ec647bb1535e4703c639a44f9ce112473272ee1019.svg","flags/1x1/ir.svg":"flags/1x1/ir-c648cbf56fc8f324fda477ea816783c9df8a7d398f45f5f94acc1c16c8877b63.svg","flags/4x3/is.svg":"flags/4x3/is-29508693138977229758b0f322ba34e90dbcd7a8a74e8820729933d24051d9a7.svg","flags/1x1/is.svg":"flags/1x1/is-b1c5db1d4b4853b8144f1d88ababbf14fc88752340457ba3e2c94ab5d54c9c01.svg","flags/4x3/it.svg":"flags/4x3/it-d2c168050fc509adac1163b097b0ed409217560735b27802ae9259587c146562.svg","flags/1x1/it.svg":"flags/1x1/it-592d34fb666430fa00f98d333623d5efa3c8e0e65ac4eee06bbc4c1de7ce4bea.svg","flags/4x3/je.svg":"flags/4x3/je-b363a4e3a21630f10791c2ebeb7f918320816ef87c155d4fd29ce37982f4df35.svg","flags/1x1/je.svg":"flags/1x1/je-6d43f74e30e099bc056da925ec34c0200708f0a6e90da34db1e59d54ce10cfd9.svg","flags/4x3/jm.svg":"flags/4x3/jm-3d133fbc2564f29e036855e8be224d1579fe66fe49e0f5a2ba0bdcf3cb272823.svg","flags/1x1/jm.svg":"flags/1x1/jm-1aea8ea5d8cbc717fa3ef331d8caa9a1421c88a7bd076e40f8276a5b6f8d0467.svg","flags/4x3/jo.svg":"flags/4x3/jo-eee432339f8ea6750987e1121187eb4b53ec537dd7ccb240c018de63f7a92db6.svg","flags/1x1/jo.svg":"flags/1x1/jo-7969b2083c535c85b7e714b755459a6606940e0b5ddb1b71e24daf0a180d14aa.svg","flags/4x3/jp.svg":"flags/4x3/jp-2eadcfc67ba8cd50c1da86e08e6778e0102c3072865dab8c312cc88006da0abe.svg","flags/1x1/jp.svg":"flags/1x1/jp-551281a75e6c6fd64eb65b39f56102b52c182f6c38ee045c9422f6592f0f65c5.svg","flags/4x3/ke.svg":"flags/4x3/ke-45790bc3ec1ed8ed0124777a7c9e09163353b5af4ff70ae6604a61b53712df4b.svg","flags/1x1/ke.svg":"flags/1x1/ke-2cca24ecf024b801543c0572efc9969ffdaf25cec313e2149c64961839bc301b.svg","flags/4x3/kg.svg":"flags/4x3/kg-3879f8931d74cc9c5927261f4095b2bb786f3d62c803b2a96ec550a23fae9f49.svg","flags/1x1/kg.svg":"flags/1x1/kg-74318932808f85b72df308358f2f2699ab0cb7ab4f7ad3c84c4be4024f0fb140.svg","flags/4x3/kh.svg":"flags/4x3/kh-7409fab4ba4e676db7b5c61020b97893b1735fe0b8e39e9b4f96108400be704e.svg","flags/1x1/kh.svg":"flags/1x1/kh-2603f6a61b400cb12b87397eeba60ae1707511467d5e0c430c05809bf89e5042.svg","flags/4x3/ki.svg":"flags/4x3/ki-617c1b52f3d9aee99d094edbd1775cae77aade266a1318eb4671b2bb1620ded5.svg","flags/1x1/ki.svg":"flags/1x1/ki-74615266b440a24f09abdeae3853d7e1111f0eba77df71ccd176d83fbd1fd9ad.svg","flags/4x3/km.svg":"flags/4x3/km-0c9bcbf7e677a541fc8dff6f848c9d92b6982ac2934ae75faa56a2b846bb5698.svg","flags/1x1/km.svg":"flags/1x1/km-81b0fbe53d09194270e8ed4cbe9be8eb1ae727e77957005369ad8bdc651dd1c8.svg","flags/4x3/kn.svg":"flags/4x3/kn-0442f55f81cd3b1057c609301f0af2b503d89a895a954af8c970df997e92bd03.svg","flags/1x1/kn.svg":"flags/1x1/kn-897c34ef54bee486f0d24d2191e2400f49a19d98efb19f8c3f1a27fb0b97131a.svg","flags/4x3/kp.svg":"flags/4x3/kp-a54f7201982b29530381b71a5e2a11c1153860f22c04c0a2d91bb0d20fedf78e.svg","flags/1x1/kp.svg":"flags/1x1/kp-758eccd89ef3707808fb68d931f086e49333904f4cc67c88468f3c96fb43b7b6.svg","flags/4x3/kr.svg":"flags/4x3/kr-c0b9b2c854133410c0ad9cadbc10b1e0bacf0305519883126d55bfa3214f9d06.svg","flags/1x1/kr.svg":"flags/1x1/kr-7c0457ac5d284b28b742ea2e061a1aa2a35f63171e464b3a7eb501a48756ce7b.svg","flags/4x3/kw.svg":"flags/4x3/kw-81c3d5d25c7b840ef14783b51d18c6b7cfc61f94932c664bbc9e5879fef020eb.svg","flags/1x1/kw.svg":"flags/1x1/kw-66670211a67a4e61d4652a19d821dc5195f01a28a3a9b28b7e4c6048cd86b19c.svg","flags/4x3/ky.svg":"flags/4x3/ky-0f4ab66d951ae33f800d680aaa5704804ba9c8844d4d80e5bee2e3fa0e100af3.svg","flags/1x1/ky.svg":"flags/1x1/ky-fb5f57bb58b74d23377bad9954a75ab88d1587af68546ce137a6ae7a88a7701e.svg","flags/4x3/kz.svg":"flags/4x3/kz-39edc952c598c71be2c9510944a8faf708d8e4b367b5ad78a688d1cd37f522eb.svg","flags/1x1/kz.svg":"flags/1x1/kz-924c04dc19267b049f35213af0e2b0c540933c06389433cb4aacd8dda33b286c.svg","flags/4x3/la.svg":"flags/4x3/la-e3a36a3bd0003442c3a21d3a192995fa6fb3b3c08a2daadc8f38f62736b5b1e3.svg","flags/1x1/la.svg":"flags/1x1/la-c9d4223a897e5e2938a4892bbc593d3828093b9439fc3f6de21520e4013ddbc5.svg","flags/4x3/lb.svg":"flags/4x3/lb-508c2a5a9b50d604895675b9f1c1e5914c394a7f468f5d823eb0476acaacbc7f.svg","flags/1x1/lb.svg":"flags/1x1/lb-10c9ba8ea7aa3189f16a7273c837982a887fc4ddfc9d514d8f5a660d72356f7f.svg","flags/4x3/lc.svg":"flags/4x3/lc-04ccd92fb1578654181febaea30ebd6b6620f56115730b2a2d673c712307bf5c.svg","flags/1x1/lc.svg":"flags/1x1/lc-4ffb53afb8bd296d526ac26fd8007afc74855e92833a893d3c934a5d12eb152a.svg","flags/4x3/li.svg":"flags/4x3/li-3058dc4aeaf2bd2da8cb910892137d732b56e5e9d342e565a4059de1a8e40e40.svg","flags/1x1/li.svg":"flags/1x1/li-0780a4f218b9ee466e33d14274b8a01575a86b3787b347e3269a3b301c220d5f.svg","flags/4x3/lk.svg":"flags/4x3/lk-a13d6ab1da51be3b1d2c5b80f4d866c923d42b017e197469e1bfc0dd021c4bfe.svg","flags/1x1/lk.svg":"flags/1x1/lk-99759363f0df6b868fd1398bf05666c680bafe1eeec8b859b64d450930213e02.svg","flags/4x3/lr.svg":"flags/4x3/lr-b06a1d70899826b305ce387fa31e1fa0bdb3bcb17c1392f15f995ce1dba723cf.svg","flags/1x1/lr.svg":"flags/1x1/lr-820a9d023e5b1e68ed640bfaba8f84ad4379c42a6c5c982cb76b0390dd2bcbdd.svg","flags/4x3/ls.svg":"flags/4x3/ls-d02bcefe7c298c153665f35c33eedb08e2e2b345350e4bf1714a87abf86b2d0e.svg","flags/1x1/ls.svg":"flags/1x1/ls-85c731c313a46db12bdb27fe229e9f7d052b447c624663b73ffa1dbab97f03fb.svg","flags/4x3/lt.svg":"flags/4x3/lt-c08eb18a15d2003cb544432b11c5081d3d5741370669b4df306d1c6bce14cb51.svg","flags/1x1/lt.svg":"flags/1x1/lt-c1bd7e3d289ac9b0df06d47237780eaf4d30f01281ed50a7df9a22bc3a2489c5.svg","flags/4x3/lu.svg":"flags/4x3/lu-99e7b6adb3a9e0f867b17eb3b1f0f33db92fd27cfd7b651f62453f359bace22f.svg","flags/1x1/lu.svg":"flags/1x1/lu-ab544445f16afa450549288ac86c2cc9a458a9d7747b3a89d5ecef7db9c83ce7.svg","flags/4x3/lv.svg":"flags/4x3/lv-f8844d50b89f0369f73d580d3676553e7e55dd8ab2460e592a29a530d9bed886.svg","flags/1x1/lv.svg":"flags/1x1/lv-baeced49dd4249e36a25b0f23a5c601a69e9dee3137627cd4450194b85a99dd4.svg","flags/4x3/ly.svg":"flags/4x3/ly-03209121483967f9d74849fb9261de23e9ff2e02c4e40b29f1cda0631b8a5fae.svg","flags/1x1/ly.svg":"flags/1x1/ly-1e6e070aaa4bfc97a5a446a39bf746ab3c4c81d9f62c975cab164e16de3a3ffe.svg","flags/4x3/ma.svg":"flags/4x3/ma-9a25cc7c2868fa45b251dd1b99a0be3b583df69732146142020fe9c6c0c95b63.svg","flags/1x1/ma.svg":"flags/1x1/ma-4f18b9c355b8b8bf0db69badb235a183dbd558deb6439bf03b4f18e56837a7f3.svg","flags/4x3/mc.svg":"flags/4x3/mc-b0c50599ea2a550680a6a867579930e0b47d3e05193a7294a26b7849a7ad35e2.svg","flags/1x1/mc.svg":"flags/1x1/mc-8f1fe6210338399d8791d91f39234b1a09acf2aa5e0387696048dc7068534a28.svg","flags/4x3/md.svg":"flags/4x3/md-8849eef7bdf916e962f7bb31af87c8d47aef33f9f4a2017b2ce55c4166e79643.svg","flags/1x1/md.svg":"flags/1x1/md-43f1bb4157545abe6e79215459efb548d913bbe7922078cd40cb722a4e19d9b4.svg","flags/4x3/me.svg":"flags/4x3/me-983d452d43cfb8d628bfc5c0cf4991c2ba3cf0e39e70aa5353cfd4e9ec3da62d.svg","flags/1x1/me.svg":"flags/1x1/me-104d6a96038ef06d3d8b89c9221996f3649b5b821139b11b2e07695b0f6fda2f.svg","flags/4x3/mf.svg":"flags/4x3/mf-31fb851bfcc2340d2fa43e86a099cc7becfc8e7f996a4d2ca56bd050e6537086.svg","flags/1x1/mf.svg":"flags/1x1/mf-fe20ce9bf911631d6e79edf21c8cff0716f2dc1ffded39515735444d9a66fa55.svg","flags/4x3/mg.svg":"flags/4x3/mg-5effe963e29f804a26f95dbbc9519add454a0fd9eb918ddfeb55e1e99a1a2701.svg","flags/1x1/mg.svg":"flags/1x1/mg-9e546cfb78810d9b25c814a84aadd6907880b8e0cdd2e4e30738b519e7c1ac91.svg","flags/4x3/mh.svg":"flags/4x3/mh-d8cfd123007dbb99aa700c335957926a6d5e877ab49680c79629a32716d7a782.svg","flags/1x1/mh.svg":"flags/1x1/mh-3fe03d4d063a4729fc8b68fd5e9d7d2eef6e65c4e82954c83f76b138cea2eb45.svg","flags/4x3/mk.svg":"flags/4x3/mk-6e8071d15f2ff125d30bf89d000dcb47db9545cf9b7ff04f1474650ec2f4d25c.svg","flags/1x1/mk.svg":"flags/1x1/mk-fdc9212f9f311cbface56b6587468a2e845111b697edc11b7edda9fcf100c1d5.svg","flags/4x3/ml.svg":"flags/4x3/ml-a730102e0c6f6362de9c10ef8da6cf7b123465d01a297e7a89808b01fa4771cd.svg","flags/1x1/ml.svg":"flags/1x1/ml-a661355da206b0cb7ac4c84b6cdf7e411fbca8fcb271ae999fa60d5c67578192.svg","flags/4x3/mm.svg":"flags/4x3/mm-6d0d207d662477110f2b863488088818d8400386358dcbc669a2d8c54d1bae16.svg","flags/1x1/mm.svg":"flags/1x1/mm-de7d46b6543343af61ba997045cb41a707bd0db1e7a5879971ca8fddcbdf9e99.svg","flags/4x3/mn.svg":"flags/4x3/mn-656eb51e88bfce82401e4080eb791ddf16d571cbba102cdd4316c5de4711ac65.svg","flags/1x1/mn.svg":"flags/1x1/mn-ad22cb2c195a7d8ca8e4174db011d5f58238ee25039b5b2da2649d8ca8b00123.svg","flags/4x3/mo.svg":"flags/4x3/mo-37a1088aa687af13951bc93886e3e51cb246eccfde1b56528f189327ea291792.svg","flags/1x1/mo.svg":"flags/1x1/mo-b463a1c37b69131d662e3fb2ae937583458824a09bcf68fc7ed2d7fd729138d1.svg","flags/4x3/mp.svg":"flags/4x3/mp-ecd12cadc358fdf293e856c0a3ffc09409123cabd3c7201225b2d21b59551e14.svg","flags/1x1/mp.svg":"flags/1x1/mp-d1f4ba10c1409e713253f1fbb107eeccbd4ec1a8f9036663f1ac1991aee53835.svg","flags/4x3/mq.svg":"flags/4x3/mq-b4e1b08a93c1364c79e6d61f95b16fca5b884da6e77835bc0e0adfff8ecc2d7f.svg","flags/1x1/mq.svg":"flags/1x1/mq-19cb6f7cb7354c3fd40e987c93a2d76329d34b2ed3873c3f25fe56802f251ea8.svg","flags/4x3/mr.svg":"flags/4x3/mr-9f64af3ed5c6d8d1f68b5cb09fd1aa9d28c3c95107e063f64a0ef95f0cb9429a.svg","flags/1x1/mr.svg":"flags/1x1/mr-0e79b7bcc669bb871d94021db2b78b162b9867c7eaf934d8f7a3025fd5903576.svg","flags/4x3/ms.svg":"flags/4x3/ms-32620dd70353777b2ee62951556976f398cd38ae359b5a8c97311a1dc61eb8bc.svg","flags/1x1/ms.svg":"flags/1x1/ms-4104d4f36cb5cf1c6de78e52e90bc3c5b8bfa262617b16a737673feb8c30a00c.svg","flags/4x3/mt.svg":"flags/4x3/mt-0c9819aa69b34b84c1ee43620922737122eb38f107be9864a0690ac66ef8aa64.svg","flags/1x1/mt.svg":"flags/1x1/mt-3c3fe71f2a2bf0d961fd145ad7e48ca1e9d3a05cce514354714ba4568503d106.svg","flags/4x3/mu.svg":"flags/4x3/mu-c78c23f1499756b9db762ae434ca354d1481447fa94c66bc10aca9443b399059.svg","flags/1x1/mu.svg":"flags/1x1/mu-91ebc79d0fa306127ea8b7a33f77d5b28f35c516ea91ff0468c7344dc838db69.svg","flags/4x3/mv.svg":"flags/4x3/mv-a17c947e17adae6aacef01a3e131c4150aa094911b53fbaead41783683e008eb.svg","flags/1x1/mv.svg":"flags/1x1/mv-d138e94d9d2ed093ef1425c1164493b780202f9a7f7937241a7b081b79ff8b01.svg","flags/4x3/mw.svg":"flags/4x3/mw-21f116afdf71df80e3c59084c6ba640814fa5389430328ff55c9403b5c239632.svg","flags/1x1/mw.svg":"flags/1x1/mw-5c2228d3f1cf1f9cf8cb158e813202981828c11e8caf117836fc57fa6bc1c788.svg","flags/4x3/mx.svg":"flags/4x3/mx-a235f9b16921590b7e78caa6f76339361356946eaf0046badd10732b4647c0b6.svg","flags/1x1/mx.svg":"flags/1x1/mx-cdab01ebcdccc020ca16e1355ef1fd18ca0043b501f399ca8edc48adfa8c7292.svg","flags/4x3/my.svg":"flags/4x3/my-0ed63574cf5f20c0663ab8cd1f700e150fb641fd0b93602ba013abbfaae5ee59.svg","flags/1x1/my.svg":"flags/1x1/my-5e8d31ef06ffc8af33a5616d760592ecd022c52afc8ba33c721f1e4989da0628.svg","flags/4x3/mz.svg":"flags/4x3/mz-752e2293917b1d2ece3f097104caeadf6a679054a779e9d3be8e49dc324bb88a.svg","flags/1x1/mz.svg":"flags/1x1/mz-300cba975ad43c962ceca0d266ded1fe3d21d6b4d701d657fb42b27268ea2964.svg","flags/4x3/na.svg":"flags/4x3/na-a0655a2e70751278e6a60d31e818f672864a6e68e8b3d3361b2fbb70fa9bfef8.svg","flags/1x1/na.svg":"flags/1x1/na-1ce089a189db5be15eb05df8155f9bd017b61fc1a497e5b3021ff2ca664e122d.svg","flags/4x3/nc.svg":"flags/4x3/nc-0c7171d91c44414ed69808611db588f1283ee7e34ea8a74a9a5101ba4b1cb305.svg","flags/1x1/nc.svg":"flags/1x1/nc-d3a1629f06dc3200af7669f2d895fce1908d2c1ca02d71e530bdfa6646a9516c.svg","flags/4x3/ne.svg":"flags/4x3/ne-2b61d30a6cb4554535538e3b753926853e8c629a494a347286b9731c803548e4.svg","flags/1x1/ne.svg":"flags/1x1/ne-9c5f798ccd7d3dd3771ae628b4a39dfb2a4578fefd2e006f3ce89c3e494d0cb1.svg","flags/4x3/nf.svg":"flags/4x3/nf-4e615baa83a8b4db3e39fe1d251ab913943d64e0cd320f251d619ab54e7512d3.svg","flags/1x1/nf.svg":"flags/1x1/nf-45403247c90050484813acf23c50f543779528e346317274373c3c24fd830103.svg","flags/4x3/ng.svg":"flags/4x3/ng-d52fd188be973f31dd34e5a0b3fed0de68fe736c8a41c6028d9c248c038c8641.svg","flags/1x1/ng.svg":"flags/1x1/ng-f22edcc5867554d69ecbe15add0fbbb1389631f3ced07a4f820065c7770c65f5.svg","flags/4x3/ni.svg":"flags/4x3/ni-2fbb883e46fbe3b2ecfed9dac004ceb546f25c77a84a5966eea224674aebc610.svg","flags/1x1/ni.svg":"flags/1x1/ni-214aed148b615c4846f842b47f99cf178ac62a96cf18c5dd6b23467184b56680.svg","flags/4x3/nl.svg":"flags/4x3/nl-4f0ecea529dd4c0099dd41a7801fa5ac44aa04cd872ca31e11efd58b5a813774.svg","flags/1x1/nl.svg":"flags/1x1/nl-9c8f60e638879d642487818975e58c61cd3102f0e68c360708243c076436ff68.svg","flags/4x3/no.svg":"flags/4x3/no-270f7ee9d1d2efa6abf16f693faba8586adae842d79d8aad9e3f37e96c27cbce.svg","flags/1x1/no.svg":"flags/1x1/no-7d377325e8c5ec4de0376e9f4c13463f183af637e6c443716f22020c7a313979.svg","flags/4x3/np.svg":"flags/4x3/np-69637ddb3a173c4522a71598278aa32462e1762e34dd99c9dc99a515433a6cf8.svg","flags/1x1/np.svg":"flags/1x1/np-44ead118cce3a1fcbb720cc8d6eab6ecb6b62292315f61ae5963a40262ee11d2.svg","flags/4x3/nr.svg":"flags/4x3/nr-0bd3c0ba7bbac4bd5985b838096eeebd67711d39065619ef092fa4bb55b22a6d.svg","flags/1x1/nr.svg":"flags/1x1/nr-63b9c44e5dd66a59895f52707dc24db5bd1eab6e535298d24e414c0f2dafcb3c.svg","flags/4x3/nu.svg":"flags/4x3/nu-259989e1eea0cbf6b41a33176a4c9c1eaa2e7ae6571ad80a324c6309bd5aa5fc.svg","flags/1x1/nu.svg":"flags/1x1/nu-1cb535708f64ed8b386a245e571e677e935009af92f2b214760a2832c1ee1b53.svg","flags/4x3/nz.svg":"flags/4x3/nz-90ceca2a683fbec395a91b77b0880cea99c3b2cbdb24caa5474925cbdcc3675e.svg","flags/1x1/nz.svg":"flags/1x1/nz-b0d78f165a72edd46599222a2ea5f6a91a8252975cb03e33c4ca08e389859aac.svg","flags/4x3/om.svg":"flags/4x3/om-aadcca7bc7ad318400097b84849dd64c4744306cd9b4f152fba34f2e84116965.svg","flags/1x1/om.svg":"flags/1x1/om-705e2bd2b2fc7d13c152aa06bfb9e6ee4ad8b299f8c06ca16adad0b18b2b18ed.svg","flags/4x3/pa.svg":"flags/4x3/pa-027e679bd65dcaa2c53145a14669c1e674a467a889ef702cbe2a260f7ca8ad38.svg","flags/1x1/pa.svg":"flags/1x1/pa-edeb4faeadaa286de7fdc667e25d38ad0cdbccaec5023182fed6a3c74e8b09eb.svg","flags/4x3/pe.svg":"flags/4x3/pe-7ec59842737c90d6ff543f1831fd69b51e1e7ee1b068c3ac6259cbf2c214d611.svg","flags/1x1/pe.svg":"flags/1x1/pe-97d1b8ed1d4ed5e5f0348a731ca4a3a4b9abc7d440447dc87a521f229f375ed3.svg","flags/4x3/pf.svg":"flags/4x3/pf-27955c73c5be4043c5b7ddf64c8f46d11c6648e3b1fc0efe028b8afea21a40e1.svg","flags/1x1/pf.svg":"flags/1x1/pf-83e3e1d36fba45e015c62f938e6d182029edc05ebfdc50bcb33860f36f96d73a.svg","flags/4x3/pg.svg":"flags/4x3/pg-c2fdd2551f9044c461eccfae2d7ba0a347a99143f6002b71a429942af0217897.svg","flags/1x1/pg.svg":"flags/1x1/pg-cf60257fa85f9270b1e9980e703435186110167f76c153bc460c10ee8b2d4b09.svg","flags/4x3/ph.svg":"flags/4x3/ph-bf3394850a6cec6a535420eabce263e7f8193413e4af1fb317c76da025388c1b.svg","flags/1x1/ph.svg":"flags/1x1/ph-006c3218effe4269252cb9638de82ea339eb2894951705c630533ceffa842169.svg","flags/4x3/pk.svg":"flags/4x3/pk-b64f6a32e5bb598f57cfe49c4899c2021f2d153653f3d92101e6e11b2158e500.svg","flags/1x1/pk.svg":"flags/1x1/pk-d2d58def913c9081c5eeeda5f0b6895068ec13c955694e359531e23422145e60.svg","flags/4x3/pl.svg":"flags/4x3/pl-f55a710991a94c2e6c2f9f1a7a4a36ebb84b24b7c9d9df4e1ffe86d61321fa6f.svg","flags/1x1/pl.svg":"flags/1x1/pl-fafb539259385f2b99df910cff085710a9b4d9706b74e4e0f8a6ef627615c4e7.svg","flags/4x3/pm.svg":"flags/4x3/pm-8f6338d2ae3e0e42adc9754720ca21ad4979095cf6d7467a8db5a5a1c3e0b2a5.svg","flags/1x1/pm.svg":"flags/1x1/pm-63029c6198dc42c404ec39807a99528b1d198eeeea6f9a1e309548242480140b.svg","flags/4x3/pn.svg":"flags/4x3/pn-4006c11ca83011c0dd60a13ac30b27da0578b9f1368bd8c6de5aab423f6662d8.svg","flags/1x1/pn.svg":"flags/1x1/pn-6c433f7f9cb79c6d5ed7bbeade8a495e3b26ca2604f4fd3995096109684ac5dd.svg","flags/4x3/pr.svg":"flags/4x3/pr-6287e1515fa80e2d05133ed93f14ca03a1be6909a9ef6c736fd60f9c9fe73132.svg","flags/1x1/pr.svg":"flags/1x1/pr-526985b3a6d2d6de577ed0ed92d0b49ce854667e3ff630304813fd5af15527cd.svg","flags/4x3/ps.svg":"flags/4x3/ps-31f50e1fcb44b9aa6e9ce4473c3085f744e70ea0fa1fd8d85787f4e7b0c4a69b.svg","flags/1x1/ps.svg":"flags/1x1/ps-c43918bc71bef71b24dd46e8cacc53e0df53e02dcce6199d06d11a4637f08a04.svg","flags/4x3/pt.svg":"flags/4x3/pt-9aab20caed714ee47fc408f017037aea94a649b3ba4d87e2da37870ee31e4f92.svg","flags/1x1/pt.svg":"flags/1x1/pt-a309869e5018c9690a65ebdf8a2d69d61f82772068a7920f9680ed0581ae5966.svg","flags/4x3/pw.svg":"flags/4x3/pw-9262037d114d0f61571c74f9a5455809709b43e6565443ae2667981eecb5f12a.svg","flags/1x1/pw.svg":"flags/1x1/pw-a6f42019653ae26d43c6e9b7bef83fc98cff8ec5e8d0c50ad7cb0a17d5e565a6.svg","flags/4x3/py.svg":"flags/4x3/py-5bc9e9f0dee94ae3d9bd80ae6fb1aac297dc81a1c592d0a73bc3383bce73af74.svg","flags/1x1/py.svg":"flags/1x1/py-182eff300f4507fd9399fb6310d1cd3b45adadd7924ad2814003c7111ec5c0de.svg","flags/4x3/qa.svg":"flags/4x3/qa-32c93970f8e521850eddfaf2a89dfff987f0ae3b0b73a253c301b61cf547cf9e.svg","flags/1x1/qa.svg":"flags/1x1/qa-182e4d8ace2607d0c02d3c29d65eb084af71092357006bc41cd601981ec3b81c.svg","flags/4x3/re.svg":"flags/4x3/re-8b2ea1f2727c266a2b80cb12a9b7195f6b656f521552b67893b6761a07f9bc92.svg","flags/1x1/re.svg":"flags/1x1/re-07eb7d855022bc678b47b0ce5fd05da5044d6dde86ad3697d4ae55c68ff447c1.svg","flags/4x3/ro.svg":"flags/4x3/ro-4ab797571e1d9eb326486f75654a4590fd33f20444f85b77ba0997eb6138c21f.svg","flags/1x1/ro.svg":"flags/1x1/ro-ddfcbaec04d11bf7f95abebd1d3a42b2862b1af8fca9b02764a6ed0e409a1d75.svg","flags/4x3/rs.svg":"flags/4x3/rs-dd8a52473ea40e23b393b5f4a30d1edd91865aab167f0c1835ae84b15dcce585.svg","flags/1x1/rs.svg":"flags/1x1/rs-42bf40209c92e4e7169daf29fbcb7253b2804eee7a463051529327f38851f865.svg","flags/4x3/ru.svg":"flags/4x3/ru-13f4525a4caad6e31afa523d2bc4a0c1e6377c0bef1bfd872682130d3f199d1d.svg","flags/1x1/ru.svg":"flags/1x1/ru-b9792a963faf667447e0456dba5be80a3b37c197a4284d1539a3433721d9e2fe.svg","flags/4x3/rw.svg":"flags/4x3/rw-bc38bcd6e19d2941839b253af6e863b13338cde1174874f9674471026c15e422.svg","flags/1x1/rw.svg":"flags/1x1/rw-456698123775b83d2b0fa1b9fe073f9ccdba0b6bf39a703b8979dcce158eb32c.svg","flags/4x3/sa.svg":"flags/4x3/sa-2b2fd6abb48415d5407c576c24a24fbd80af5877ef06cf2d026452f6c67f5f4d.svg","flags/1x1/sa.svg":"flags/1x1/sa-d9ebc73e7957f86604164dd5054fb32601ad14d7dfd4bfe73da5bdd10bb2f8ae.svg","flags/4x3/sb.svg":"flags/4x3/sb-37761927039d0a37ba0995c59fd31bbe36c8a0ca161e5b72b8131e3659f8dddf.svg","flags/1x1/sb.svg":"flags/1x1/sb-bedbf8464cd82f391bfe6178c63055b650d0cf3aee60c37fa79a586f95783b79.svg","flags/4x3/sc.svg":"flags/4x3/sc-f6a2f8f37be93f07600b491b52cb58d80d74b92d8ace0af313f4ce081b0d1345.svg","flags/1x1/sc.svg":"flags/1x1/sc-5dcd01b98c34460c9624280fb5047811fbae7d976620cd0a70ad4263a9085b60.svg","flags/4x3/sd.svg":"flags/4x3/sd-cc9cf97e8a37622b9e1bad28811d46c4471595afa448dc055e0e3aae7687fe4b.svg","flags/1x1/sd.svg":"flags/1x1/sd-1f5d13f9780085acbaad13d959b1918c796ba7b0450954b15d145e87cebe045c.svg","flags/4x3/se.svg":"flags/4x3/se-84b06bcd5bd90ea8dd6d1c3c8d2799a843c47b0256ce098aef75414964618286.svg","flags/1x1/se.svg":"flags/1x1/se-39f128686652cf914f8601110fcc9ac879bca204407013b93aff4ca4fb2ed9bc.svg","flags/4x3/sg.svg":"flags/4x3/sg-a82acd90077e76318ddb0be96999d9695b9a9f4627e8a0f341d3987a62747dcc.svg","flags/1x1/sg.svg":"flags/1x1/sg-c22e093634568aae249bf35f9ddcaa6796b5f27d76c39ff5336abf7f1b8a47d4.svg","flags/4x3/sh.svg":"flags/4x3/sh-57470d9a75955f0fac605a94e853bab524c7461a4c025e809fb09db762ebe46f.svg","flags/1x1/sh.svg":"flags/1x1/sh-8d06a0fff61e51eb65357d138e00736545835b8649aa2694152f4cdc9f941c16.svg","flags/4x3/si.svg":"flags/4x3/si-289d6417f154323e7922df09ffc0f49ded31548c7ee8020c39cb85724ffbcea8.svg","flags/1x1/si.svg":"flags/1x1/si-ca40a5f4f38119d6f52ffd3ddb36af95951a2aa1fadcd897f5bc1641bb2e0051.svg","flags/4x3/sj.svg":"flags/4x3/sj-67d4cdd268d0c0cd93fc561b506cb5646cb508385c93ed350d11f94aa1c83833.svg","flags/1x1/sj.svg":"flags/1x1/sj-f7c489607033138039612d6abe7f4b0b4b6dada5cac75d78204f404a0d292b1c.svg","flags/4x3/sk.svg":"flags/4x3/sk-a0bdbb7f5d6998ffe9fcbc80bbdf0e6cff3629740d2ce1b8d61025e0a8b322b5.svg","flags/1x1/sk.svg":"flags/1x1/sk-a82a813b2d81af9be1aa775f22b2c2457d11e870e072d7e23957a11d0878faed.svg","flags/4x3/sl.svg":"flags/4x3/sl-be265bed24cfe0b25778201f251e52e4e721e3d319795875913805d1aea84ebb.svg","flags/1x1/sl.svg":"flags/1x1/sl-cb8bccbaa21957f006ed4ae0144da81c999e93bd8014023b16b500fdcdc397d3.svg","flags/4x3/sm.svg":"flags/4x3/sm-d7818df3f8f2d5dbed27dc5a0a80b1e41cdcd6130eeff221da58f0321e925f27.svg","flags/1x1/sm.svg":"flags/1x1/sm-6f87660dcac925bbdb036c79a0e20d3b208215d327be4c4764ae1069d6464efd.svg","flags/4x3/sn.svg":"flags/4x3/sn-b131b17a374bcfbd00d442d282fa52f0e4e0e448cda1cdfaac25a95ff56443c0.svg","flags/1x1/sn.svg":"flags/1x1/sn-d180d3ce9846966dee6a3d9433ede7d24801dc4311636aabd470ec5b8765d772.svg","flags/4x3/so.svg":"flags/4x3/so-3b5b77b371299478144a94b60c99524fb6b99bfedb3dcc976ab70185e07f399e.svg","flags/1x1/so.svg":"flags/1x1/so-50aa941f2d2954285ef9e5ac260cdd264a73cf2e4b0c627677f04141fff2afd3.svg","flags/4x3/sr.svg":"flags/4x3/sr-94d0f0aefcbdea8d7ba35648eda5037e99bf4126723ce36416582ea43b08d3e2.svg","flags/1x1/sr.svg":"flags/1x1/sr-3944d683068d437471725d22fd71ccbe6a63ae307ff9775690417d3bf262cf82.svg","flags/4x3/ss.svg":"flags/4x3/ss-f391e5002cbce83f97f7d1a11c284fa2e36a7d6dc734757d733656801ab17d0a.svg","flags/1x1/ss.svg":"flags/1x1/ss-853bd9f713d2f6b1fe540a82e8bf4754912da21575b3fe756b8741767f318f7a.svg","flags/4x3/st.svg":"flags/4x3/st-b52bb48a2c0800f5cb4b07bdd93c3908f77bcb6800be883ebf943bbd3d99d42c.svg","flags/1x1/st.svg":"flags/1x1/st-d8b5b1c8b9fe947086a4d277d2ac5d6b9cff188dfd37bda66c8bf5e02c5facc8.svg","flags/4x3/sv.svg":"flags/4x3/sv-6d02d63c7f04c9388e98f892cc43d8daa2110fc84242758d5627fcd247bfd09b.svg","flags/1x1/sv.svg":"flags/1x1/sv-fb4c8d7eb98396a93c5b9c37195d70e809e0d71d8b8f9316e842121f95bb82ea.svg","flags/4x3/sx.svg":"flags/4x3/sx-fb6a7b1cbc5b29eeeb39a5aec64ef7aad432c37bbe848d29955a3786b9763224.svg","flags/1x1/sx.svg":"flags/1x1/sx-a37b124212f8530b921aef7657cfb35c2895a731c7a06f333faee4c93f32806a.svg","flags/4x3/sy.svg":"flags/4x3/sy-e35f8d88c864ed4f38edb2f9f96d5bd69f6df078b50515b8c5467bf6b1689f50.svg","flags/1x1/sy.svg":"flags/1x1/sy-5d537bd5b42b58f6e8a7e33fbe5942a16126abb639edf9cb58b88938c57ebaa9.svg","flags/4x3/sz.svg":"flags/4x3/sz-c65ae592e943217787848364bdb4c57335869f4626ce705adabdc2620669c1c6.svg","flags/1x1/sz.svg":"flags/1x1/sz-dd3d1c65bdf09317553f205e588e3dc7336acec1cb9315bfbe0f5bd8ca5bba3f.svg","flags/4x3/tc.svg":"flags/4x3/tc-594b6cc87040836c6d6777afb5833d565d3e5e75f404350a51443ec4588a1ccb.svg","flags/1x1/tc.svg":"flags/1x1/tc-34a37006252eea340488220585c31d047b57e3e7934c77180d930972aaceadc3.svg","flags/4x3/td.svg":"flags/4x3/td-b67a1978e3badb895ff640c80bb6c0e33eac354220c08cf3fc93d62bf5d685a3.svg","flags/1x1/td.svg":"flags/1x1/td-556b3a7991c17010cb7e1ff23c4edcc2dcdb8c406a128d407fd165ea8a19d311.svg","flags/4x3/tf.svg":"flags/4x3/tf-35cd83351521f3022a43e01f0c40f34663a66ac1e92045979f31d3fd65c16d02.svg","flags/1x1/tf.svg":"flags/1x1/tf-485e71f61ff577735dbc4ba1025515c22a83c48ee7f3a2ed49804766c35f6ea5.svg","flags/4x3/tg.svg":"flags/4x3/tg-24b25f4c2213fe35e5f5586d7ab23abf0c25ad2049708cd52ba72e1ec7b754ff.svg","flags/1x1/tg.svg":"flags/1x1/tg-05f3d98392a5ec3e4aecf8f629d3d03f05ac55abb7d9d84187d599acfe271374.svg","flags/4x3/th.svg":"flags/4x3/th-cc936bacd84dddd15454ef06bc64e357f83854af34692fc37363272d61f637d4.svg","flags/1x1/th.svg":"flags/1x1/th-de82cbd770db2be53a8e3d59d86e2b748a5d3f96eb8584f7b9364cefbd06a172.svg","flags/4x3/tj.svg":"flags/4x3/tj-b90bf3e2dd63265d55b67962b160df65f021c42b6ea304e2943c10b9e2a8749d.svg","flags/1x1/tj.svg":"flags/1x1/tj-5f6571e74b1f8720f9ecc2d3aa2098ca45d2e7ad6602b2a57c206384719b9f36.svg","flags/4x3/tk.svg":"flags/4x3/tk-602520b29b909c96baea17a38eb654d6c6fbc7088f46a0cb8d8fe34ff92e3cb8.svg","flags/1x1/tk.svg":"flags/1x1/tk-fe1dc8aaa0643a45a74ecec8aec09f0fe2207d104bb3c28c0b84405f1275aeba.svg","flags/4x3/tl.svg":"flags/4x3/tl-ebdb862aa5ae5de1a72242571deaa70bfb222f488a93b70e304f2075b474d54b.svg","flags/1x1/tl.svg":"flags/1x1/tl-485f02183bdb192ba3ce6e5f076e184112739f883ae0a8fde33c454377b848d6.svg","flags/4x3/tm.svg":"flags/4x3/tm-5ddb4128bf0becd7c60413d5418027f5f01ca4bc72561d54b94febfee7a5a24b.svg","flags/1x1/tm.svg":"flags/1x1/tm-3521ad569a4095aa8d4166d5d9094fccfdbb3ea411207ad685b6dd5814ef3392.svg","flags/4x3/tn.svg":"flags/4x3/tn-ca27eb50d88b11d20b5b09e2bbecb7753267222489920c526608e5d2acd22d79.svg","flags/1x1/tn.svg":"flags/1x1/tn-222c6cd4742c558f48ebcacb47ea334057642fffa3456a1c75e0fad9e728d09b.svg","flags/4x3/to.svg":"flags/4x3/to-c9c509fc24f591fbe52bbf732c44291384c787796e1fc9c703a973587c3f8ad1.svg","flags/1x1/to.svg":"flags/1x1/to-cf26dfb44b56b915b2f11896355cb778b938ed54423311d69d7cda9626887dda.svg","flags/4x3/tr.svg":"flags/4x3/tr-c40f697070cf8d8358785b9203d1c8f438976e3cd644a87d9ee16fa9960deaa4.svg","flags/1x1/tr.svg":"flags/1x1/tr-627dcf91a1e5153c045e33a3459b5d56002530fddd3fc53927f4d0fb7ea004a5.svg","flags/4x3/tt.svg":"flags/4x3/tt-04786ffedbde2c96a30ad1cbf4db000848f14bd700324651fc88364e5f3c2fd0.svg","flags/1x1/tt.svg":"flags/1x1/tt-6a3c73bfa7782366d95e673d847ef8f84c0475b364d359def1efd264297bac30.svg","flags/4x3/tv.svg":"flags/4x3/tv-20b56e7c0a2fbaa2a0b7b1bd87afc6368440f175fb3a0589de5e34e99d163fd7.svg","flags/1x1/tv.svg":"flags/1x1/tv-8bce1d7bde2e20dcc473ed3a33c66e4bedcf1acf2d2fff6d54353a480b8cafbc.svg","flags/4x3/tw.svg":"flags/4x3/tw-36070ac0a15ab1f4811478da62e7678756a9aa266b141ed0549aba1c0e04333a.svg","flags/1x1/tw.svg":"flags/1x1/tw-fd7a0db2f3808842ca99176f097356fe9e6f3c120d6aa9e8c4a9c2dd4c3943ba.svg","flags/4x3/tz.svg":"flags/4x3/tz-51ad7d69f059075df61b9226468af0d78642af4ad34a7540f64c5bea82e803d7.svg","flags/1x1/tz.svg":"flags/1x1/tz-0703f29a7ae02a9a1753cb1726dd2934d75ed3a12e8d63faa9fa866e1fe61440.svg","flags/4x3/ua.svg":"flags/4x3/ua-7f7db03c3b492aaacd11b0abac70d543a7c0ec5265a36d529bbb80a7c432d81a.svg","flags/1x1/ua.svg":"flags/1x1/ua-25192fa80f120edb1dd1c4757fd7b79ef38f5e1729238f4135003e6a1501bf28.svg","flags/4x3/ug.svg":"flags/4x3/ug-7635df53eafdf411be0809df835bfbcffd61badd6c4df3db0909c8b3188015a0.svg","flags/1x1/ug.svg":"flags/1x1/ug-537f34f64e723fbe7cb7902ea0e61303f1ada79214197efc39ebe2c52ce24186.svg","flags/4x3/um.svg":"flags/4x3/um-a0ae80e34bbf94677dd6052ea87cc0090aba747dab5440e5ca6e231f7f07c96d.svg","flags/1x1/um.svg":"flags/1x1/um-3f1bc09babe7fdcf32518bb49d1aac3a66d0204f955eacca291c58d4f4ef895a.svg","flags/4x3/us.svg":"flags/4x3/us-aefd8f7e57d11f7b0416d01d9c665ab3848b10af849f35a4d772d58d24d83329.svg","flags/1x1/us.svg":"flags/1x1/us-87af45be9346e8c820312976abe332ee11f8931e29fa361328d28660a711b1e2.svg","flags/4x3/uy.svg":"flags/4x3/uy-9f636c8283abf56cc930746fd427c1d1644dcf8736c537629df13f760da96ebc.svg","flags/1x1/uy.svg":"flags/1x1/uy-e216b762a93ec55bf9b4ae3d35b7febe0b192a12246fd66c45139ce77fb2095e.svg","flags/4x3/uz.svg":"flags/4x3/uz-697d596705372323beddccb3626d1ce405b36249315c6b006ff1529e24909ceb.svg","flags/1x1/uz.svg":"flags/1x1/uz-aa34cbe4f6f0e4b5d890975578d28cc9b1e88ebd503d3bdca693748eb29b3353.svg","flags/4x3/va.svg":"flags/4x3/va-d24d3c5bee108c396997c3d5b2bd2273433752d8c222eb531650e51551a4afd0.svg","flags/1x1/va.svg":"flags/1x1/va-01160c1bffda12f0b94554ba0c50162a88da807943617334bd4c57a030985e95.svg","flags/4x3/vc.svg":"flags/4x3/vc-ddf979bee2889414e5a05ac55f39a9c93f34e0aff0d35f007605049a2d8b5afb.svg","flags/1x1/vc.svg":"flags/1x1/vc-ac776e16dec19ff2e2d9238f541dae5d977282b451a83ab3d4122efed2392be9.svg","flags/4x3/ve.svg":"flags/4x3/ve-e23abd006cc75a8c4f9ec1cb122b46f9b52e26c5606532d2c868277d4ccd523b.svg","flags/1x1/ve.svg":"flags/1x1/ve-1480713f28719e0a83da2c5f1333407dbfa5bcc0de8c9ba718fcf47273ee95ef.svg","flags/4x3/vg.svg":"flags/4x3/vg-7f8f24a4d6995e4dd39e3d9098dad5e14649821fa12ffc200edf0a586285ee15.svg","flags/1x1/vg.svg":"flags/1x1/vg-b464b6a78e46c29df9e4bdadc2646208f11c59168706456075f970552a24efa8.svg","flags/4x3/vi.svg":"flags/4x3/vi-58311325a293b046044976d899f288ce0fbe9bfd705a23947a9b38d7991983d7.svg","flags/1x1/vi.svg":"flags/1x1/vi-1c132d2cff66cdbdb7b6acf504bb0cd9d7579595d80c3fa6604ff24ca7a0184d.svg","flags/4x3/vn.svg":"flags/4x3/vn-a918d3c9cdc368b1d2ff9614d58cbcd1d43b725889b0ba18f5d4e693071e389a.svg","flags/1x1/vn.svg":"flags/1x1/vn-895e428ae3d98c99dbb02088cf8ef040bfb031df6f16c3c8fc3678505d869791.svg","flags/4x3/vu.svg":"flags/4x3/vu-2c286c778a7bed03cb603ab24b68dc91868f4f054cf4f851bdd17aa16731571c.svg","flags/1x1/vu.svg":"flags/1x1/vu-51ef23121e2641ebeeac50d31c4e52b7d00d3ab1bc9fc0ad95ea86fd3631975a.svg","flags/4x3/wf.svg":"flags/4x3/wf-f7e9ac5edac196ac32d7bafa04b5c0d924b89e9d7e4f3535a6a26c6c1523639c.svg","flags/1x1/wf.svg":"flags/1x1/wf-95a920a79aa32d92f8a362321aae4230e17025ac04d976593f4423d0c37c1aee.svg","flags/4x3/ws.svg":"flags/4x3/ws-efc6505a802a3fa2018bc102fc2e11db8c738464c619381b6edc32d0a89341a3.svg","flags/1x1/ws.svg":"flags/1x1/ws-e3afb81c037c814620027bf61ac5e266683cab7ba5796ecf10b64c110cfcb932.svg","flags/4x3/ye.svg":"flags/4x3/ye-fd88856e70d66b01b4f0f608936a61cf3b1d9dad40a2932fc5da4d01f72a447b.svg","flags/1x1/ye.svg":"flags/1x1/ye-0c0e32330871e6d83af54affb7dadbbe736f9799068508211fbae54db9bbdcc6.svg","flags/4x3/yt.svg":"flags/4x3/yt-2eef17b543424082d9f9b42a67e84c20b52e7f7eae8c4326d60711158da51d5b.svg","flags/1x1/yt.svg":"flags/1x1/yt-911da8075337fd8f75ecc8a338c294cb771c6b9a08576f96c9de1437888cd2a7.svg","flags/4x3/za.svg":"flags/4x3/za-45991a2aee307198510e56bf92523070aac4241cafe6c3ddb8f89b20a61d6371.svg","flags/1x1/za.svg":"flags/1x1/za-bc09a89b29311ea7e582ef60bf4e18aff7c29de6fbefe309463ca765723a0ce8.svg","flags/4x3/zm.svg":"flags/4x3/zm-07c0f30d86e66d0cad9d66cd9c9384d9cce1844f159d245deff6717101fe49c2.svg","flags/1x1/zm.svg":"flags/1x1/zm-fc5bce3834c71fe36617ea5f57f0bd1dcf3880a7c6aa515dcf92ae067f796241.svg","flags/4x3/zw.svg":"flags/4x3/zw-5217c74f14d9fdda244b69c5982bbabee052ac0f1cc0704926e8b1e621e50f9a.svg","flags/1x1/zw.svg":"flags/1x1/zw-a33b191c631709b9e1d85e06f5b15535fb544d4668c8bef865ede2a0b6a88ed9.svg","flags/4x3/es-ct.svg":"flags/4x3/es-ct-bcbb454a50c9a647efd43dcf041445f15e8dd70654bde530bf62401d4fb7738d.svg","flags/1x1/es-ct.svg":"flags/1x1/es-ct-7f13eb2b2f5c11dccd7043286bed7540d4dad4b1a8367b0aca1b8405a351b2ef.svg","flags/4x3/eu.svg":"flags/4x3/eu-5f129db64306353251b78f998d531d2f1019404cfa890ae63ed70dc316c7f240.svg","flags/1x1/eu.svg":"flags/1x1/eu-ec59ac8daf2a63ea8e299ad63a208445d68a96affe6a10a7328acb6799d44127.svg","flags/4x3/gb-eng.svg":"flags/4x3/gb-eng-1895f4e35ae299f5d869da2462ffcf98df4b08dcddc531c8f175e49720001a14.svg","flags/1x1/gb-eng.svg":"flags/1x1/gb-eng-d11afb87f40f35acda435a886ea044bd5e0b6f363ba0c7319f1d0181551fecf3.svg","flags/4x3/gb-nir.svg":"flags/4x3/gb-nir-b280f09c787f495c1074376cd67537b40216f672917e7d204bb12b8e7c72afaf.svg","flags/1x1/gb-nir.svg":"flags/1x1/gb-nir-2e516e72e0e8e244ef430e6608322f8c4fb276807ab033279b2a6570dd68fd41.svg","flags/4x3/gb-sct.svg":"flags/4x3/gb-sct-1b9e407802ae901cf8da740c382ec2b19821837d76271a73346e0c63c2244506.svg","flags/1x1/gb-sct.svg":"flags/1x1/gb-sct-d01e8a06a340e30ce52e8a3aba7ca6207afb96fdb238a815cc6cb92df8fa5df3.svg","flags/4x3/gb-wls.svg":"flags/4x3/gb-wls-5232b3e376a19866cddec8225cba242783b2a48063811957f1ce5a2c347c5bc9.svg","flags/1x1/gb-wls.svg":"flags/1x1/gb-wls-126615bc3597fda1ca4ee931ef24f6c2cf2547998c06db9c1ded69fe66c479e9.svg","flags/4x3/un.svg":"flags/4x3/un-31dece22ae18c3e01e86648ef3ef45f2f5b3d9d28a1e2bbbcdb1d87c37af55af.svg","flags/1x1/un.svg":"flags/1x1/un-455b5f3173ca9ac64f2135fac4ead7217d7fbe07551d0d2cc60216f83208f798.svg","leaflet/dist/images/layers.png":"leaflet/dist/images/layers-1dbbe9d028e292f36fcba8f8b3a28d5e8932754fc2215b9ac69e4cdecf5107c6.png","leaflet/dist/images/layers-2x.png":"leaflet/dist/images/layers-2x-066daca850d8ffbef007af00b06eac0015728dee279c51f3cb6c716df7c42edf.png","leaflet/dist/images/marker-icon.png":"leaflet/dist/images/marker-icon-574c3a5cca85f4114085b6841596d62f00d7c892c7b03f28cbfa301deb1dc437.png","markers-soft.png":"markers-soft-e78784e4ed70aaffddd73c315fab590233cc4e7b72388d7dd47a14796fc7c739.png","markers-shadow.png":"markers-shadow-8703a2262710f5e3d29e65d2acdf90d6512e159e119d27b8234731d8a6208a20.png","markers-soft@2x.png":"markers-soft@2x-c1e77253a8bfbe30cec24885d7046f443b76ebb66f4c961f77083b03f4a5cbaf.png","markers-shadow@2x.png":"markers-shadow@2x-b21a536be27313fb504f69f5899ff0b1245b276571769ac08d6c32c35676e47a.png","markers-matte.png":"markers-matte-497826545a90e09a240504d14530eba45823b19fd44175e09e27c47cd822ddb9.png","markers-matte@2x.png":"markers-matte@2x-948fc8c4426f04f60964ed20394247f45b0b60e575d02398b9b6810e7a29a823.png","markers-plain.png":"markers-plain-cf233423aa44e75ac0031e77b8ba571cd3331010517e1197e63fb7b06856c1ff.png","leaflet/dist/images/marker-icon-2x.png":"leaflet/dist/images/marker-icon-2x-00179c4c1ee830d3a108412ae0d294f55776cfeb085c60129a39aa6fc4ae2528.png","leaflet/dist/images/marker-shadow.png":"leaflet/dist/images/marker-shadow-264f5c640339f042dd729062cfc04c17f8ea0f29882b538e3848ed8f10edb4da.png","jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-ae65a7ae22c4c23115948fdeb5c05c9137dbd13ca2d426b3c4c3c4183451e410.png","jquery-ui/ui-icons_444444_256x240.png":"jquery-ui/ui-icons_444444_256x240-31d988765b4e6f56553c29588c500381dc3e6f0aa2980c8212202e5644aefd5d.png","jquery-ui/ui-icons_555555_256x240.png":"jquery-ui/ui-icons_555555_256x240-32175261daee76c82bb0edf0eea16a56421866fbc31e94f3c1d570aa114502f5.png","jquery-ui/ui-icons_777620_256x240.png":"jquery-ui/ui-icons_777620_256x240-0b020fc6e696d88d296e7bb1f61f1eb2ad827848e2c7382a4c3e0999e702dd9b.png","jquery-ui/ui-icons_777777_256x240.png":"jquery-ui/ui-icons_777777_256x240-faf32007ae120c302213557626e660dd10e711c5dd4f1113d35f26dc05b78d2f.png","jquery-ui/ui-icons_cc0000_256x240.png":"jquery-ui/ui-icons_cc0000_256x240-40985a64b4d5dd213fba27fcd862a1bd1b337a97674f6ff0b9ec20abcee4bc69.png","jquery-ui/ui-icons_ffffff_256x240.png":"jquery-ui/ui-icons_ffffff_256x240-350df1b7131037de20e83c5c0f3a41a770d2ac48b5762ea772b3f4a8a7b9d47a.png","tinymce/langs/af_ZA.js":"tinymce/langs/af_ZA-6d5614830d9cc3d504d9922bf5373665246936adc337530a7a672e9bf5fc21ea.js","tinymce/langs/ar.js":"tinymce/langs/ar-5a0ab86d268d50c7c9462e0645b96e6c09d928976c0b27007f85f7c5638cbbf8.js","tinymce/langs/ar_SA.js":"tinymce/langs/ar_SA-24b62c76e99e114ae44480a67edbacf74f9fed0ff7afbeacce4966f1bc80333b.js","tinymce/langs/az.js":"tinymce/langs/az-d40cecd6eb423f910f528ae98dcdaba4c2449802621759437174cf8c8c0d5b25.js","tinymce/langs/be.js":"tinymce/langs/be-2d601b695076754977002cf73d6809919ca8c0758850a45e34a692af7b08fb1d.js","tinymce/langs/bg_BG.js":"tinymce/langs/bg_BG-0272f963807ba8672db0d5f6b8919d2f3aa2f8bb172a17c5f8c2934760ba0dce.js","tinymce/langs/bn_BD.js":"tinymce/langs/bn_BD-ef48a9094445dfa624af0c35902f60b7949b30585b5e9bc760a225fe2c07cbd3.js","tinymce/langs/bs.js":"tinymce/langs/bs-eb66c6d6910a30b950d7a0e784027ed288e6e5a2c6db7741da3359f2067e2e0e.js","tinymce/langs/ca.js":"tinymce/langs/ca-e4765b96adf2232248998c6b703730652cd4302035ee39733cd6e5df8d79ee22.js","tinymce/langs/cs.js":"tinymce/langs/cs-77418e2f6150bfb0391227eeff79499f8654a9fcc5314f30ec88e4684e8e5fa6.js","tinymce/langs/cs_CZ.js":"tinymce/langs/cs_CZ-4b0778d233e200dea350f8361129da2844e23d1c0f2d524aeffa6d34e581368d.js","tinymce/langs/cy.js":"tinymce/langs/cy-d337e01ca993cd9fb80ce3fccc39dff7f1dc47021264bf9ec14ac9af2b3d74b5.js","tinymce/langs/da.js":"tinymce/langs/da-4a040df5d2a225dcd10aa1c7d05ff7f36a854d4834919497812c3ba5aa5b06f4.js","tinymce/langs/de.js":"tinymce/langs/de-f9a88202d526e76875d22053cc659e4aabb43fa88411296ba122b8cf4d468eef.js","tinymce/langs/de_AT.js":"tinymce/langs/de_AT-2c6a1926c1cddd2079d27e844db153d797505e21bab6bdab018c2e5d1f0532fb.js","tinymce/langs/dv.js":"tinymce/langs/dv-3b3e040a7e24fd18903d4833a8da09f2e2b65fbd1c3ac325a3cd373775f9bd23.js","tinymce/langs/el.js":"tinymce/langs/el-0d51a187db018442cb94826f66155adb3fd805ac792c1110a04a548bc7d5d6c2.js","tinymce/langs/en_CA.js":"tinymce/langs/en_CA-2c64a16614c895022cc2b6aa4f134f4917ec8dd045c2184672653f3fae158db4.js","tinymce/langs/en_GB.js":"tinymce/langs/en_GB-4eb69d31cb70a3d3c53185883d58027a70524b0f5db82200bfa45b6a8ea22224.js","tinymce/langs/eo.js":"tinymce/langs/eo-cbac4d7ebcb0679845b852d9354e74586e78cf13eef82de1400cf6b465e203cd.js","tinymce/langs/es.js":"tinymce/langs/es-4fd5fd5b991c2c1e3032a297ae4605088bcd6835a467e64f9568de1b554e559c.js","tinymce/langs/es_MX.js":"tinymce/langs/es_MX-bc4f779c4782ed7bc7e7c4b7cd9293d7803256660cc529307dca05a40c49b94d.js","tinymce/langs/et.js":"tinymce/langs/et-26b7ced79b21dc8a21fda1dd95247e93c35096461238c8579dea16e48d12b4ef.js","tinymce/langs/eu.js":"tinymce/langs/eu-8698ae4de236fcd490d0f45d485dbd33d8e9de6eb3db51191e1b4f8ea96a4d06.js","tinymce/langs/fa.js":"tinymce/langs/fa-7eff96595e93d4b0df484dd90c14b7b412966157ed8293f54429e9418882bdb2.js","tinymce/langs/fa_IR.js":"tinymce/langs/fa_IR-4103bdacd3e4b53f30b27019dc9cdbc6402e3345331a93a5768900d591633201.js","tinymce/langs/fi.js":"tinymce/langs/fi-6ca2a93d045067a86e8ea973d0b89368054b15eb9b9625bf1ca871608a5cb77c.js","tinymce/langs/fo.js":"tinymce/langs/fo-340609cecd5571e4eacb8fe7bd1343c8553d96d12610fb77d9a812dc6d3635fd.js","tinymce/langs/fr_CH.js":"tinymce/langs/fr_CH-e0f43c0f20727368ff0767f3bf099bc23eed9fe3e81f8bbe514381e786526928.js","tinymce/langs/fr_FR.js":"tinymce/langs/fr_FR-c7b4bea9c3f186767ffee3f06d12830574620a5f58c4f76dede76d311be2a9c6.js","tinymce/langs/ga.js":"tinymce/langs/ga-7c1e918737301e611973d91e10c27930873e97dd690f7d10862d0cd40e639055.js","tinymce/langs/gd.js":"tinymce/langs/gd-0453e8b97bf3b6cca4065712ec59f20343ad6131735b38547e865177a1c1c490.js","tinymce/langs/gl.js":"tinymce/langs/gl-f6ec1cbe13f00683a8fceb6e73a353dfced77ab3f63d99fa2ae7c40bd6b3a64c.js","tinymce/langs/he_IL.js":"tinymce/langs/he_IL-74b957588e5998649fde6c6f3686bb74790d7173d0f31c90a4272a4596b16b32.js","tinymce/langs/hi_IN.js":"tinymce/langs/hi_IN-695e0cdc22974fe45e0f35289f0249ddab87245165c9df765ec1b885ec55f0be.js","tinymce/langs/hr.js":"tinymce/langs/hr-1dda1c40a40645a936a214478697c44137c805bf8b9c9e4485a0fb142e4ffe18.js","tinymce/langs/hu_HU.js":"tinymce/langs/hu_HU-9e74f5ada14970f167ee2ec1f46c8fd41d8bb98f9f5f5df9b4ad041cdaa81fd7.js","tinymce/langs/hy.js":"tinymce/langs/hy-0d384f3f82cd76793d3e7428a2140ea97f40a943f25ef99a2e3709a3e02b0930.js","tinymce/langs/id.js":"tinymce/langs/id-e9fd018be745b5f14f4af47887420f98c590c607e01d57aca77ef5affe188523.js","tinymce/langs/is_IS.js":"tinymce/langs/is_IS-c6e8c3e7b0e6b447faec3d8d258928f97c84558b29882c056513fb71cf237bfa.js","tinymce/langs/it.js":"tinymce/langs/it-c4549598b4e13df2201efb7f5b971e5bc55a731b25dd9ac7adb5f75780fe5f34.js","tinymce/langs/ja.js":"tinymce/langs/ja-da6414959d66a9b0cb46078592bd018bc8dc6707588d5ab911ebd09e589f92f6.js","tinymce/langs/ka_GE.js":"tinymce/langs/ka_GE-480559d4cffe96c5cae5e41f9ffd06f979785b3ce93e547462fbabc5cc1a88fb.js","tinymce/langs/kab.js":"tinymce/langs/kab-dc638a064c01cae2218d445beec60da010ee8dee8524f245ae3b99c8c5b3567c.js","tinymce/langs/kk.js":"tinymce/langs/kk-282b790d721dcaf6b44d930f70825e06969602572e477b7ef73766360eefdbaf.js","tinymce/langs/km_KH.js":"tinymce/langs/km_KH-dddeacc3c7112c6f230c4746d0fc9e9de1a3f53e419524ce03f483a35a49aaad.js","tinymce/langs/ko.js":"tinymce/langs/ko-ca535bfa388701fb020d24bdfb3f1e3aab127005b54e943cb1bd60b723c8194d.js","tinymce/langs/ko_KR.js":"tinymce/langs/ko_KR-90aae14954461fa073104c36c0f2d7d2c95bbbf0e41be4ef4f04ac402ab8d0a8.js","tinymce/langs/ku.js":"tinymce/langs/ku-95e2ffe4f0112df658f10327c26f2cdddedc2e2ed769767366ae22a465c14725.js","tinymce/langs/ku_IQ.js":"tinymce/langs/ku_IQ-a212e8d41695989e56834facf72474e1934ef166c3fcaf7e255ef573a3c6e76c.js","tinymce/langs/lb.js":"tinymce/langs/lb-94992279091f1a0be927d5d858d3724037d8d81ee6b63cc9ddde84af6124cc04.js","tinymce/langs/lt.js":"tinymce/langs/lt-ae7cefbe2cb5420770b31eabf92605728135ab5d6a2d2cfca2d19809be67e6a8.js","tinymce/langs/lv.js":"tinymce/langs/lv-6c706e8dbf25774d07fea54cc1cbfaaf60c205c95392eee90ae55ac9cae74768.js","tinymce/langs/mk_MK.js":"tinymce/langs/mk_MK-55aadb5d7c82c940cfcf42f24423ef0471294c9b02994a6b22e1b4173baa7ec6.js","tinymce/langs/ml.js":"tinymce/langs/ml-685de0808683c02274dcbe9f8de023a4d72a49b040e7526a99e3d5c786ff71ae.js","tinymce/langs/ml_IN.js":"tinymce/langs/ml_IN-1ab433621d6257c7632718048bacc5ed98a302d33cf0438bbbb4200914e01aac.js","tinymce/langs/mn_MN.js":"tinymce/langs/mn_MN-b89f88cb9b0dd7c879e27532b2979c421c1e69648f65a4108a56060f1e1cb009.js","tinymce/langs/nb_NO.js":"tinymce/langs/nb_NO-8bd2c254b03046ae60710293e7485d4c5cf9fdc3cbce52f97f0bf682ee44e1f8.js","tinymce/langs/nl.js":"tinymce/langs/nl-0436131db0f369f1d07ce9a27f61cd351d8b2a441d352f8261cde3990f7b59d8.js","tinymce/langs/pl.js":"tinymce/langs/pl-eaf96c2c80d9268c2477628c1d23f947391de01553ef43bb488ee88d7bb3b8e6.js","tinymce/langs/pt_BR.js":"tinymce/langs/pt_BR-32ccbdf38597b6d0239e8ba70d73ab75de0661bb06c86fc9a90d1c0a890bc31e.js","tinymce/langs/pt_PT.js":"tinymce/langs/pt_PT-a364a3ca02a98259f33046338ab1bdd32dd4ebf24fa56e88d2578066bc7f0597.js","tinymce/langs/ro.js":"tinymce/langs/ro-83fd95a929d491cbfbfac83f132bdc41c956a7f4b0459c243fd92613c9c841ef.js","tinymce/langs/ru.js":"tinymce/langs/ru-2566ddc510b999f19c499a9838d7b987d5a8332b5802f2211beb4274ae2cd563.js","tinymce/langs/ru_RU.js":"tinymce/langs/ru_RU-9f18ef14f3493cc586cc0b4827fd9e1c2ed3d5790ce536d94f87e2d6aac2a688.js","tinymce/langs/si_LK.js":"tinymce/langs/si_LK-5bfefe9b2fe82574d8ed839df18fd8ff65f1e1cd458b0a843cf1aadd1be704ea.js","tinymce/langs/sk.js":"tinymce/langs/sk-01d012310139d40e606a633db845a03fe285c32cb47043d6d9d761afa0cc3530.js","tinymce/langs/sl_SI.js":"tinymce/langs/sl_SI-ea499e07b7f4c9430bb15f34f6278f7248334c2553a544e240a21a84195d9582.js","tinymce/langs/sr.js":"tinymce/langs/sr-e0b97453a0c1000b19f7ce37fcf86bcacbf9125d81076f60a77686820c7925c6.js","tinymce/langs/sv_SE.js":"tinymce/langs/sv_SE-7af54d4c82419671562478bf4a66d185be79406f3287628df0d2ad8ac044a485.js","tinymce/langs/ta.js":"tinymce/langs/ta-3b428d97786e6eded1c4973fef3fb487786a79f1eee59f15483bd02b96c76239.js","tinymce/langs/ta_IN.js":"tinymce/langs/ta_IN-44bf4b6c5e4de01a2c7f2ccc69b6dd561b8afce86397229a9ff27efaf0600812.js","tinymce/langs/tg.js":"tinymce/langs/tg-1618248bf0aeda614a37ced9fd28b6623ae24f8453368bfb8c483ce820a3cb34.js","tinymce/langs/th_TH.js":"tinymce/langs/th_TH-5869e7cc393913371f3314057c1691e6e0fa296b496cf2d5c465276c31645479.js","tinymce/langs/tr.js":"tinymce/langs/tr-6a58fb650e940025d957945ae4850f6fbb8446c5f092a661063af9606afc1db8.js","tinymce/langs/tr_TR.js":"tinymce/langs/tr_TR-d97de581e91c05fc4f3d9fe1419ad201e227bcd0ff3f036f7b59519395f4dcc2.js","tinymce/langs/tt.js":"tinymce/langs/tt-22e302672df0a77de14688f58dbedf82de7a26e9089c9535a2a3cd1c0ccd7903.js","tinymce/langs/ug.js":"tinymce/langs/ug-50232038bf7262c90be4f2919c74ff93792cdb82e6064d0f5c86f885b93271c5.js","tinymce/langs/uk.js":"tinymce/langs/uk-00866ab0fe7746d258b215475089740306b790d572d081b7f53ce65ec313f413.js","tinymce/langs/uk_UA.js":"tinymce/langs/uk_UA-52b101eeb7079c629edbe4615e64018757791541930fd2733957810a37197356.js","tinymce/langs/uz.js":"tinymce/langs/uz-d6923a3190a76dc149ccb2893574e981250344a6c4f6dcaf458df1cce2ea3b30.js","tinymce/langs/vi.js":"tinymce/langs/vi-6aa451047e4df911c92e10178e6a70147534e438c64df7a88eee37b4a440726e.js","tinymce/langs/vi_VN.js":"tinymce/langs/vi_VN-54d1da8a0ca8d0242457ddab5e0230c2cca140d3e480bfd55b9dfbaec7868baa.js","tinymce/langs/zh_CN.js":"tinymce/langs/zh_CN-07499e6b0821cb49c5e16efbe4a68a4d843b4d6939a45866aabe6f9ad7fc805d.js","tinymce/langs/zh_TW.js":"tinymce/langs/zh_TW-c00c3a6539c0e1696436182c935a0a5929ab09ae7bdc43ca9c4ad21098079d53.js","tinymce/preinit.js":"tinymce/preinit-84328a53e798df12f891eb49871773fd9f925439c8630e9e22423a82ef9e6f89.js","tinymce/rails.js":"tinymce/rails-bf7fd5c952f25481010758dde6a2681498074f9509230f601b317356a6a54fca.js","tinymce/tinymce.js":"tinymce/tinymce-1098dd3a232d42146ff7bf2cdffed0f7358ac2cf1798aa209abc7ab367ff59f4.js","tinymce/jquery.tinymce.js":"tinymce/jquery.tinymce-db2bc0a724d3123cc432dc4d9d8029736b4afc8c8502967e359dce2ed3170c16.js","tinymce/langs/readme.md":"tinymce/langs/readme-5a8b6a04d57b5c88e3fb7f2a870b8e2d3a48ec03ce6474206c41df78c155b2de.md","tinymce/license.txt":"tinymce/license-47a9dcd2574891a5a465112fd9dfcebcc7e61844edec27fa936a64642008fe66.txt","tinymce/plugins/advlist/plugin.js":"tinymce/plugins/advlist/plugin-7b5bed8c5b41dbabee490dca68a3fc215c6c2d08ad1174d20fd4ebc27feb9b18.js","tinymce/plugins/anchor/plugin.js":"tinymce/plugins/anchor/plugin-8fc6aac86dcfda2df29f3e402541e9f5ed45743f0dce76b80bc4e3c6a16be585.js","tinymce/plugins/autolink/plugin.js":"tinymce/plugins/autolink/plugin-aacef7388395131adb8a2d04e3d130c13150b04a39ba15bfebdd8b5673e74b56.js","tinymce/plugins/autoresize/plugin.js":"tinymce/plugins/autoresize/plugin-79ff6671020ca454d50be43a8cd68e51bbbab80f6f11d3ef1afc29df593a9cc0.js","tinymce/plugins/autosave/plugin.js":"tinymce/plugins/autosave/plugin-cf03af11d02898b971ee99e69c481e0829a9ec4d0879acff5ff9f8cde1670089.js","tinymce/plugins/bbcode/plugin.js":"tinymce/plugins/bbcode/plugin-8acda51f6565daa44af5423768602b2296eff9cbc3b2355f82a1ae4490428833.js","tinymce/plugins/charmap/plugin.js":"tinymce/plugins/charmap/plugin-f0d451ae7fcfa1f30f73c2d9185c58173e1a8e44d893d752778b226b665f020b.js","tinymce/plugins/code/plugin.js":"tinymce/plugins/code/plugin-46957c79ea5f5757444d628fdb90bac81f078d87bc9601df76cc087d4976564b.js","tinymce/plugins/codesample/css/prism.css":"tinymce/plugins/codesample/css/prism-1988b66704b4d23e78c6c20c38a6856cbc1f0be96d6d60a3a0b12f4408f1057e.css","tinymce/plugins/codesample/plugin.js":"tinymce/plugins/codesample/plugin-850e9f396e000d41d915c20867bcb78d3e6ae394ac5a28f069b3d90edc0138f8.js","tinymce/plugins/colorpicker/plugin.js":"tinymce/plugins/colorpicker/plugin-48d6719fa10b7bc1b3982d9d9f952d320ebba056102701e49e3945ce3bf8911d.js","tinymce/plugins/contextmenu/plugin.js":"tinymce/plugins/contextmenu/plugin-1b3d07a3487dbbf4eb7f0ce2252bdfc13cb849d1e8749b75c3523b22ea8f4761.js","tinymce/plugins/directionality/plugin.js":"tinymce/plugins/directionality/plugin-0893c42f76c330cbae77ee849d287028e03574dcf50b6a0770d4b771f7324f1c.js","tinymce/plugins/emoticons/img/smiley-cool.gif":"tinymce/plugins/emoticons/img/smiley-cool-bb0e93a050a32df7913e4026b3c88a176998e0e3e073ba06e9b73f6c24227c9c.gif","tinymce/plugins/emoticons/img/smiley-cry.gif":"tinymce/plugins/emoticons/img/smiley-cry-a0c5f3e7a682449c973c9d9f7c46342081c46920686d2353f57aff91ab907f68.gif","tinymce/plugins/emoticons/img/smiley-embarassed.gif":"tinymce/plugins/emoticons/img/smiley-embarassed-d3cafcb50b335672cb5e9f4600ea9ea261dac7828dd28844d4927c393a25618f.gif","tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif":"tinymce/plugins/emoticons/img/smiley-foot-in-mouth-03fe04d3ed533423ac81f05146584b0c451be3d4a30e76687ceef283ed07071f.gif","tinymce/plugins/emoticons/img/smiley-frown.gif":"tinymce/plugins/emoticons/img/smiley-frown-1b984bf98931dd1debb54461eb9d83e985f2b2999fe14bcb556d6c0921bc83b0.gif","tinymce/plugins/emoticons/img/smiley-innocent.gif":"tinymce/plugins/emoticons/img/smiley-innocent-8db353ef102196f2c6ddf5c4666446de955d7b14fc0957c806c9dbfb48fb0c29.gif","tinymce/plugins/emoticons/img/smiley-kiss.gif":"tinymce/plugins/emoticons/img/smiley-kiss-3154c3665356c13ab10fefdbac1fe187fff978a0052037c99cdc4a97103413f2.gif","tinymce/plugins/emoticons/img/smiley-laughing.gif":"tinymce/plugins/emoticons/img/smiley-laughing-8f6adedcd091975ffead171867a6304d908bb6541a6ccb4919286ec6b7d4551e.gif","tinymce/plugins/emoticons/img/smiley-money-mouth.gif":"tinymce/plugins/emoticons/img/smiley-money-mouth-f0b9f4f22e237f5dbc851f900fed8d7eca4c954ae6fbc606c0cd8be431d0ac80.gif","tinymce/plugins/emoticons/img/smiley-sealed.gif":"tinymce/plugins/emoticons/img/smiley-sealed-9933b442636b6e537df7b564e2c3f7a2873526eea6b022a98eb1e468e5204c32.gif","tinymce/plugins/emoticons/img/smiley-smile.gif":"tinymce/plugins/emoticons/img/smiley-smile-fd89cd460ffcacb7e725e00c0275ef5b3924ce468248e5ff4fb43545571cfa65.gif","tinymce/plugins/emoticons/img/smiley-surprised.gif":"tinymce/plugins/emoticons/img/smiley-surprised-3871f356cb41976d7ae8a5f005e8739e4d014352a8adef9b33f773d81b6e6c01.gif","tinymce/plugins/emoticons/img/smiley-tongue-out.gif":"tinymce/plugins/emoticons/img/smiley-tongue-out-5843c85667a8226dc43be83749fd9fbbc5d20b1577de2b763915d99815d37d47.gif","tinymce/plugins/emoticons/img/smiley-undecided.gif":"tinymce/plugins/emoticons/img/smiley-undecided-d8b9bcbb433951ff3c4ca8dd959ac3844239b98e6d52218833e1485a91f67347.gif","tinymce/plugins/emoticons/img/smiley-wink.gif":"tinymce/plugins/emoticons/img/smiley-wink-2af75ad7b1c08488505513503e34b15f40005e04a2a9568f698f0945d2d8ba1f.gif","tinymce/plugins/emoticons/img/smiley-yell.gif":"tinymce/plugins/emoticons/img/smiley-yell-bba903fbcb46fce8c68b9e01863fd095b3b1d0e6aa72161f3a88d762a5f90a79.gif","tinymce/plugins/emoticons/plugin.js":"tinymce/plugins/emoticons/plugin-287cc5d2f0fba168841d0d0dab3c6f8f958fb0e80adada67cc1e64d88a69704e.js","tinymce/plugins/fullpage/plugin.js":"tinymce/plugins/fullpage/plugin-0bd712ddf83de5ad37a6822dc4c5832d82a5e2cd1da918d5b0e41bd09f65e1f6.js","tinymce/plugins/fullscreen/plugin.js":"tinymce/plugins/fullscreen/plugin-4c0cb2c23d32be9833cac1551c8eb30c26bf06196698ce463fe0bfb842395bac.js","tinymce/plugins/help/img/logo.png":"tinymce/plugins/help/img/logo-95b06f8538b11c4c30170075a09f93cf5871f74dd2541e95ad3d9da31976fcac.png","tinymce/plugins/help/plugin.js":"tinymce/plugins/help/plugin-acf3b62b34b2d4d71c030c623a051a3e5f324e20beda44caed096c70970b642c.js","tinymce/plugins/hr/plugin.js":"tinymce/plugins/hr/plugin-7efaeee8fa1f71745d5726205bbb4fd8c0f4eba1edf2baf5a31a3b59bb677622.js","tinymce/plugins/image/plugin.js":"tinymce/plugins/image/plugin-a6b45be0bc251bed54d2a26c1133801a06a054d3211c71d81b6271cec9de6d55.js","tinymce/plugins/imagetools/plugin.js":"tinymce/plugins/imagetools/plugin-f4045863db3307fb1f558ef0d49f1f419043ce4819c07d0fb9a4a8c04dc1449d.js","tinymce/plugins/importcss/plugin.js":"tinymce/plugins/importcss/plugin-381b078db51fcc021a6220cf9f57609ed35ee67dd932669abafa5e5837460bbc.js","tinymce/plugins/insertdatetime/plugin.js":"tinymce/plugins/insertdatetime/plugin-246b2dd91f69e2b7d268c35c6aaca0569b0366bc18e85c15eca000564683b71d.js","tinymce/plugins/legacyoutput/plugin.js":"tinymce/plugins/legacyoutput/plugin-e8c2876525a55671c4ee55a2c298d3ba0eff6a8307c057893e42558eba637652.js","tinymce/plugins/link/plugin.js":"tinymce/plugins/link/plugin-ad93098fd1f1a794a1de15625ca2262a413559ad85e8af408bfab31742beb605.js","tinymce/plugins/lists/plugin.js":"tinymce/plugins/lists/plugin-10590619cf33dc6929f3931d2c787c6ab835a3d63dedabe977d26e62298bb49a.js","tinymce/plugins/media/plugin.js":"tinymce/plugins/media/plugin-570acbace4fda902012c1c0596a586b521dc75cc89a4742f1bb2ecb15680b809.js","tinymce/plugins/nonbreaking/plugin.js":"tinymce/plugins/nonbreaking/plugin-6438a2f260ffa4724f0d13e99fe8fb1a85c00f16df416468ccd0bf6f722aaee6.js","tinymce/plugins/noneditable/plugin.js":"tinymce/plugins/noneditable/plugin-f3be489845e7a724465d7a2bcf8f033b8b91eda2c29193b354e634da697d2f27.js","tinymce/plugins/pagebreak/plugin.js":"tinymce/plugins/pagebreak/plugin-f4c2fa4074a982fc576ea586ee09e99091bc52d14597223c533e0967188d3a2d.js","tinymce/plugins/paste/plugin.js":"tinymce/plugins/paste/plugin-3bd8d37d76c40a47cee410222e1dd742212370e2e8819ea7bc4b37e766296763.js","tinymce/plugins/preview/plugin.js":"tinymce/plugins/preview/plugin-bdf1d10d1e637f00598d3f482895e276933c1e16b1b543d2120fb70c4fbf3d18.js","tinymce/plugins/print/plugin.js":"tinymce/plugins/print/plugin-1ba88c314fa4c0c47ab0af0aa908c03d7906a77fef6a319a302ffff44099fe26.js","tinymce/plugins/save/plugin.js":"tinymce/plugins/save/plugin-a944096bba3f8519c898163008a334509d0f4efdbcd9500d752170fdbef570b3.js","tinymce/plugins/searchreplace/plugin.js":"tinymce/plugins/searchreplace/plugin-92d2225c3568f9fab9d1f7b0959264a280bcf0e73def7cc09f2bfc9d3ebeac5f.js","tinymce/plugins/spellchecker/plugin.js":"tinymce/plugins/spellchecker/plugin-d8f4c1d84319146901b41a1c7a9ad279b2424685c39c9272f988bdcb876aa258.js","tinymce/plugins/tabfocus/plugin.js":"tinymce/plugins/tabfocus/plugin-9b8833faf32cbd41142e3cf393e4d4e97a80706a8b402fd18ea82787ee46eb92.js","tinymce/plugins/table/plugin.js":"tinymce/plugins/table/plugin-93249526edce14539b15a93ffa7824017c2451162810c517028f618a7631cc86.js","tinymce/plugins/template/plugin.js":"tinymce/plugins/template/plugin-fb8b66089ae39eb8b992b37630b5f7f6470ec726132d3cf4659c6722d0c0bf2e.js","tinymce/plugins/textcolor/plugin.js":"tinymce/plugins/textcolor/plugin-ebf778e6028f2d073e3ff9219c8d49ae5f066d4819cfe7fd72bcf6be84e0f014.js","tinymce/plugins/textpattern/plugin.js":"tinymce/plugins/textpattern/plugin-4fea2e54b7ff9435fa238142c564e3bd7f0a321f19fea97d51c89b84eda5bb59.js","tinymce/plugins/toc/plugin.js":"tinymce/plugins/toc/plugin-a73e6c327940360e18736b041e3345c9b678ecf553c9a1540f1c6f5275589b34.js","tinymce/plugins/visualblocks/css/visualblocks.css":"tinymce/plugins/visualblocks/css/visualblocks-859e261c1d940c90994673ce593b60946710cc4f71371164db4ea695035ea593.css","tinymce/plugins/visualblocks/plugin.js":"tinymce/plugins/visualblocks/plugin-0b55625bb357cb6113a43de563efa3b6142f7502534ebc705315ef785d052c44.js","tinymce/plugins/visualchars/plugin.js":"tinymce/plugins/visualchars/plugin-f560dbb9a7e21882ada1a2b59caba1ee767ed7da4067fda574edc26650f17572.js","tinymce/plugins/wordcount/plugin.js":"tinymce/plugins/wordcount/plugin-e77fc4abe7aa0bb82adee1e29231cc3fbc2d21d8fabc12109f64e6bd61f7e13a.js","tinymce/skins/lightgray/content.inline.min.css":"tinymce/skins/lightgray/content.inline.min-b62ea4e65ad6c87cbfedf3897b59eb30ec3972c410070d8ee2c0f5bececc4cce.css","tinymce/skins/lightgray/content.min.css":"tinymce/skins/lightgray/content.min-d72493ca5cc1caca93db665b284fd12fe396a245c3e82cc2d6cf4fca83702cb9.css","tinymce/skins/lightgray/content.mobile.min.css":"tinymce/skins/lightgray/content.mobile.min-230c31f65356c7cb1799244a34f7a722c92a6d614e06e59d48db0ebccd7f2346.css","tinymce/skins/lightgray/fonts/tinymce-mobile.woff":"tinymce/skins/lightgray/fonts/tinymce-mobile-e64bf156a432d63f5b34b4567b513dc0d351b49161c7f608fb82574bfdd9d213.woff","tinymce/skins/lightgray/fonts/tinymce-small.eot":"tinymce/skins/lightgray/fonts/tinymce-small-a10fc4343d95b716c16d77463d475be5c079599ea67e1cd2bd3a94d5e7f508f9.eot","tinymce/skins/lightgray/fonts/tinymce-small.svg":"tinymce/skins/lightgray/fonts/tinymce-small-e7773001446ab937e1d8d4bd5e8dbd9b31d112037353a14b319e36dd010ed8ee.svg","tinymce/skins/lightgray/fonts/tinymce-small.ttf":"tinymce/skins/lightgray/fonts/tinymce-small-2f657502906d6f5c3fc8df3a82969114ebe030addfdc061c60c974b0f515fd09.ttf","tinymce/skins/lightgray/fonts/tinymce-small.woff":"tinymce/skins/lightgray/fonts/tinymce-small-d3efbb678ca6de5632902bd93772746ba2f8e4e2322b953936e12694a183aa31.woff","tinymce/skins/lightgray/fonts/tinymce.eot":"tinymce/skins/lightgray/fonts/tinymce-9f5f4d62ce9ad4bf25c73cb80920c490cc361bf35dd47dcb3ce2ed767be7404d.eot","tinymce/skins/lightgray/fonts/tinymce.svg":"tinymce/skins/lightgray/fonts/tinymce-9b9369e35660db34db422aafd93cd8a68e638c486c107130e75e36c98d2e9a1f.svg","tinymce/skins/lightgray/fonts/tinymce.ttf":"tinymce/skins/lightgray/fonts/tinymce-aad8f3f45064995545e9efd9c4bf10cb4967469aec14a475f648db771d25b6f9.ttf","tinymce/skins/lightgray/fonts/tinymce.woff":"tinymce/skins/lightgray/fonts/tinymce-e378406db7a120c29069a998f7fdd2d4d1867185b360c36767137dbbab5cf83e.woff","tinymce/skins/lightgray/img/anchor.gif":"tinymce/skins/lightgray/img/anchor-2861666fd107d278d4449970615136d06d7f746be9bb19072cf9c8f30e565e1e.gif","tinymce/skins/lightgray/img/loader.gif":"tinymce/skins/lightgray/img/loader-eb7cfd3d959b2e09c170f532e29f8b825f9bc770b2279fde58e595617753e244.gif","tinymce/skins/lightgray/img/object.gif":"tinymce/skins/lightgray/img/object-e6a15e52bc4a17b085073ba8debd4708ead6ae3d4cbeb3880c65cb7afc489777.gif","tinymce/skins/lightgray/img/trans.gif":"tinymce/skins/lightgray/img/trans-9cf020d7c3bba7f5ab10cda54aabef934f906d4f9a3acf99e9e7dc6c98579635.gif","tinymce/skins/lightgray/skin.min.css":"tinymce/skins/lightgray/skin.min-0a8317e0f4d4edc3efe3db92d0922332b01c7e3a4101f56f8e31368cdbc12e90.css","tinymce/skins/lightgray/skin.mobile.min.css":"tinymce/skins/lightgray/skin.mobile.min-9c8e5d31db4d29209970e56b8a492922c3e2dd2e0265912a9c1acf58e5a8bd41.css","tinymce/themes/inlite/theme.js":"tinymce/themes/inlite/theme-f03666288dc2af6a86b25c01f85c9085d48620cecb2e3a2b4e82a03efaba5c25.js","tinymce/themes/mobile/theme.js":"tinymce/themes/mobile/theme-b6c700a5ea0f122d7f0d860d4a7b814836e505231e5c029aece27fe6873d815e.js","tinymce/themes/modern/theme.js":"tinymce/themes/modern/theme-5cc969a29b5a13fd548061371e12843a7027ab8cc6b35f95e2df52ea1b221a5e.js"}}
\ No newline at end of file
diff --git a/public/assets/.sprockets-manifest-56cf83726a7187b92af61622505e4158.json b/public/assets/.sprockets-manifest-56cf83726a7187b92af61622505e4158.json
new file mode 100644
index 00000000..5f5ce6b1
--- /dev/null
+++ b/public/assets/.sprockets-manifest-56cf83726a7187b92af61622505e4158.json
@@ -0,0 +1 @@
+{"files":{"active_admin-24bbef14af36d0015ef6fba11fadd481a1a630a191a27f360e2c40cf93182b37.css":{"logical_path":"active_admin.css","mtime":"2018-12-20T12:04:33+01:00","size":104952,"digest":"24bbef14af36d0015ef6fba11fadd481a1a630a191a27f360e2c40cf93182b37","integrity":"sha256-JLvvFK820AFe9vuhH63UgaGmMKGRon82DixAz5MYKzc="},"active_admin/nested_menu_arrow-15084d93c65c1964d7077700ea748bd2d70cfa2d4c19707c58a9c64e232dd442.gif":{"logical_path":"active_admin/nested_menu_arrow.gif","mtime":"2018-12-20T12:04:32+01:00","size":70,"digest":"15084d93c65c1964d7077700ea748bd2d70cfa2d4c19707c58a9c64e232dd442","integrity":"sha256-FQhNk8ZcGWTXB3cA6nSL0tcM+i1MGXB8WKnGTiMt1EI="},"active_admin/nested_menu_arrow_dark-7c43b8e0a5f8823875f49a093c9d7a6b374f885b6f9cc248ae9cd7e6e9b29034.gif":{"logical_path":"active_admin/nested_menu_arrow_dark.gif","mtime":"2018-12-20T12:04:32+01:00","size":70,"digest":"7c43b8e0a5f8823875f49a093c9d7a6b374f885b6f9cc248ae9cd7e6e9b29034","integrity":"sha256-fEO44KX4gjh19JoJPJ16azdPiFtvnMJIrpzX5umykDQ="},"active_admin/orderable-29374dbb55b0012d78a37c614d573bb3474f0779849b478a147d0f1845ca6617.png":{"logical_path":"active_admin/orderable.png","mtime":"2018-12-20T12:04:32+01:00","size":220,"digest":"29374dbb55b0012d78a37c614d573bb3474f0779849b478a147d0f1845ca6617","integrity":"sha256-KTdNu1WwAS14o3xhTVc7s0dPB3mEm0eKFH0PGEXKZhc="},"active_admin/print-cf99cbf27fb92065a9eacd28e6fad48fa72cadaf6e0918790e8d35b11d8f99f6.css":{"logical_path":"active_admin/print.css","mtime":"2018-12-20T12:04:32+01:00","size":7086,"digest":"cf99cbf27fb92065a9eacd28e6fad48fa72cadaf6e0918790e8d35b11d8f99f6","integrity":"sha256-z5nL8n+5IGWp6s0o5vrUj6csra9uCRh5Do01sR2PmfY="},"active_admin-b259ca6ce02dc92d306a1a3c5a085c78dded2dcf996d65ce2a20738dbf436520.js":{"logical_path":"active_admin.js","mtime":"2018-12-20T12:04:38+01:00","size":946671,"digest":"b259ca6ce02dc92d306a1a3c5a085c78dded2dcf996d65ce2a20738dbf436520","integrity":"sha256-slnKbOAtyS0waho8WghceN3tLc+ZbWXOKiBzjb9DZSA="},"tinymce-bd0d26944904afe3a35324b3f6a3b20da54175500d71f0a224873f64240bdee5.js":{"logical_path":"tinymce.js","mtime":"2018-12-20T12:04:38+01:00","size":951138,"digest":"bd0d26944904afe3a35324b3f6a3b20da54175500d71f0a224873f64240bdee5","integrity":"sha256-vQ0mlEkEr+OjUySz9qOyDaVBdVANcfCiJIc/ZCQL3uU="},"modernizr-654222debe8018b12f1993ceddff30dc163a7d5008d79869c399d6d167321f97.js":{"logical_path":"modernizr.js","mtime":"2018-03-12T11:54:27+01:00","size":51365,"digest":"654222debe8018b12f1993ceddff30dc163a7d5008d79869c399d6d167321f97","integrity":"sha256-ZUIi3r6AGLEvGZPO3f8w3BY6fVAI15hpw5nW0WcyH5c="},"font-awesome/fa-brands-400-c563adbadc5eafb6708b610268fbd393d59ae41e220aae5aac99ca2d45a6e151.eot":{"logical_path":"font-awesome/fa-brands-400.eot","mtime":"2018-12-20T12:04:33+01:00","size":134000,"digest":"c563adbadc5eafb6708b610268fbd393d59ae41e220aae5aac99ca2d45a6e151","integrity":"sha256-xWOtutxer7Zwi2ECaPvTk9Wa5B4iCq5arJnKLUWm4VE="},"font-awesome/fa-regular-400-6e70525bb429041c5ec84a81cf4733303cee90966809ed255741fa50e123ae47.eot":{"logical_path":"font-awesome/fa-regular-400.eot","mtime":"2018-12-20T12:04:33+01:00","size":40308,"digest":"6e70525bb429041c5ec84a81cf4733303cee90966809ed255741fa50e123ae47","integrity":"sha256-bnBSW7QpBBxeyEqBz0czMDzukJZoCe0lV0H6UOEjrkc="},"font-awesome/fa-solid-900-c141af323058f12f8b0bc760162f9928f6a415fa04940b486fdb4086284e6ecf.eot":{"logical_path":"font-awesome/fa-solid-900.eot","mtime":"2018-12-20T12:04:33+01:00","size":208828,"digest":"c141af323058f12f8b0bc760162f9928f6a415fa04940b486fdb4086284e6ecf","integrity":"sha256-wUGvMjBY8S+LC8dgFi+ZKPakFfoElAtIb9tAhihObs8="},"font-awesome/fa-brands-400-f6ae6226846422df4abf64b65814d3ccd3570af5e0350983fdb01fbc0dd055d6.svg":{"logical_path":"font-awesome/fa-brands-400.svg","mtime":"2018-12-20T12:04:33+01:00","size":746208,"digest":"f6ae6226846422df4abf64b65814d3ccd3570af5e0350983fdb01fbc0dd055d6","integrity":"sha256-9q5iJoRkIt9Kv2S2WBTTzNNXCvXgNQmD/bAfvA3QVdY="},"font-awesome/fa-regular-400-a849aa4ab8a20512c2e073ed66cf146c5615220c74da85c10909eb2c33d3317a.svg":{"logical_path":"font-awesome/fa-regular-400.svg","mtime":"2018-12-20T12:04:33+01:00","size":139825,"digest":"a849aa4ab8a20512c2e073ed66cf146c5615220c74da85c10909eb2c33d3317a","integrity":"sha256-qEmqSriiBRLC4HPtZs8UbFYVIgx02oXBCQnrLDPTMXo="},"font-awesome/fa-solid-900-7ad9caabf64ee35d113612f7bb10e531fb17ab431a51e0b088e93f89e1915549.svg":{"logical_path":"font-awesome/fa-solid-900.svg","mtime":"2018-12-20T12:04:33+01:00","size":793607,"digest":"7ad9caabf64ee35d113612f7bb10e531fb17ab431a51e0b088e93f89e1915549","integrity":"sha256-etnKq/ZO410RNhL3uxDlMfsXq0MaUeCwiOk/ieGRVUk="},"font-awesome/fa-brands-400-3b3fbc59f287f33a3870175b19eb94d7cbb546af2fdbab29df91ba834352d3ea.ttf":{"logical_path":"font-awesome/fa-brands-400.ttf","mtime":"2018-12-20T12:04:33+01:00","size":133764,"digest":"3b3fbc59f287f33a3870175b19eb94d7cbb546af2fdbab29df91ba834352d3ea","integrity":"sha256-Oz+8WfKH8zo4cBdbGeuU18u1Rq8v26sp35G6g0NS0+o="},"font-awesome/fa-regular-400-418571014c9250c6197fc3ac4e8e5d96d7a49711a5d6308ca0d36b6f3045c611.ttf":{"logical_path":"font-awesome/fa-regular-400.ttf","mtime":"2018-12-20T12:04:33+01:00","size":40080,"digest":"418571014c9250c6197fc3ac4e8e5d96d7a49711a5d6308ca0d36b6f3045c611","integrity":"sha256-QYVxAUySUMYZf8OsTo5dlteklxGl1jCMoNNrbzBFxhE="},"font-awesome/fa-solid-900-cef5dd667be89aa0b9d1bd0a2ceb7c017c7b183f81d0213f8f99bd380f042577.ttf":{"logical_path":"font-awesome/fa-solid-900.ttf","mtime":"2018-12-20T12:04:33+01:00","size":208608,"digest":"cef5dd667be89aa0b9d1bd0a2ceb7c017c7b183f81d0213f8f99bd380f042577","integrity":"sha256-zvXdZnvomqC50b0KLOt8AXx7GD+B0CE/j5m9OA8EJXc="},"font-awesome/fa-brands-400-ca734c792a24c20ff91ec878fd146b3354d4859f728f481c1089a3e2ffa2d30f.woff":{"logical_path":"font-awesome/fa-brands-400.woff","mtime":"2018-12-20T12:04:33+01:00","size":86736,"digest":"ca734c792a24c20ff91ec878fd146b3354d4859f728f481c1089a3e2ffa2d30f","integrity":"sha256-ynNMeSokwg/5Hsh4/RRrM1TUhZ9yj0gcEImj4v+i0w8="},"font-awesome/fa-regular-400-9064839b35308c034ecf20f0335ea37331328d962baff8e589e69d01f5a56ffe.woff":{"logical_path":"font-awesome/fa-regular-400.woff","mtime":"2018-12-20T12:04:33+01:00","size":18164,"digest":"9064839b35308c034ecf20f0335ea37331328d962baff8e589e69d01f5a56ffe","integrity":"sha256-kGSDmzUwjANOzyDwM16jczEyjZYrr/jlieadAfWlb/4="},"font-awesome/fa-solid-900-1675e164e5ec88e30fb8c912cf9343c06c18fe419663b40de0a3bf92371b1d07.woff":{"logical_path":"font-awesome/fa-solid-900.woff","mtime":"2018-12-20T12:04:33+01:00","size":102120,"digest":"1675e164e5ec88e30fb8c912cf9343c06c18fe419663b40de0a3bf92371b1d07","integrity":"sha256-FnXhZOXsiOMPuMkSz5NDwGwY/kGWY7QN4KO/kjcbHQc="},"font-awesome/fa-brands-400-c885e9f2017a2ed7075db9e876d40a04aa3208114443803bdb120a34afd3b1d6.woff2":{"logical_path":"font-awesome/fa-brands-400.woff2","mtime":"2018-12-20T12:04:33+01:00","size":73936,"digest":"c885e9f2017a2ed7075db9e876d40a04aa3208114443803bdb120a34afd3b1d6","integrity":"sha256-yIXp8gF6LtcHXbnodtQKBKoyCBFEQ4A72xIKNK/TsdY="},"font-awesome/fa-regular-400-e5c1d9e7bdeaf3372dee724d175d25aca879ed52ae9afd018f503e9d74e09b50.woff2":{"logical_path":"font-awesome/fa-regular-400.woff2","mtime":"2018-12-20T12:04:33+01:00","size":14868,"digest":"e5c1d9e7bdeaf3372dee724d175d25aca879ed52ae9afd018f503e9d74e09b50","integrity":"sha256-5cHZ573q8zct7nJNF10lrKh57VKumv0Bj1A+nXTgm1A="},"font-awesome/fa-solid-900-08aa3a5ee68a21d5771a70b20495b6da1c0f996c46982cd1b0447ad2db730d11.woff2":{"logical_path":"font-awesome/fa-solid-900.woff2","mtime":"2018-12-20T12:04:33+01:00","size":79072,"digest":"08aa3a5ee68a21d5771a70b20495b6da1c0f996c46982cd1b0447ad2db730d11","integrity":"sha256-CKo6XuaKIdV3GnCyBJW22hwPmWxGmCzRsER60ttzDRE="},"agendadescommuns-0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33.png":{"logical_path":"agendadescommuns.png","mtime":"2018-03-01T22:17:10+01:00","size":2760,"digest":"0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33","integrity":"sha256-ABe+9T9iYcs7+VLUt4DGQwc2lxSy4eLU659p39mGqzM="},"alert-762ace9479328243a44061346b64c4d6b997e963c68dfc6bddd9e4d241192906.png":{"logical_path":"alert.png","mtime":"2014-07-04T14:08:56+02:00","size":47876,"digest":"762ace9479328243a44061346b64c4d6b997e963c68dfc6bddd9e4d241192906","integrity":"sha256-dirOlHkygkOkQGE0a2TE1rmX6WPGjfxr3dnk0kEZKQY="},"baby_gnu_adl-463a81820aa2d4ffd8e7210dbce1a19ffcac67ef362aa7b092280c6f95c903fc.png":{"logical_path":"baby_gnu_adl.png","mtime":"2018-03-01T22:17:10+01:00","size":7411,"digest":"463a81820aa2d4ffd8e7210dbce1a19ffcac67ef362aa7b092280c6f95c903fc","integrity":"sha256-RjqBggqi1P/Y5yENvOGhn/ysZ+82KqewkigMb5XJA/w="},"baby_gnu_adl-97251005d3225cf1d58b8c497d6b7905dbc9560cc8acd50118fcce60d0a2679e.svg":{"logical_path":"baby_gnu_adl.svg","mtime":"2016-09-11T17:42:49+02:00","size":109635,"digest":"97251005d3225cf1d58b8c497d6b7905dbc9560cc8acd50118fcce60d0a2679e","integrity":"sha256-lyUQBdMiXPHVi4xJfWt5BdvJVgzIrNUBGPzOYNCiZ54="},"communs-0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33.png":{"logical_path":"communs.png","mtime":"2018-03-01T22:17:10+01:00","size":2760,"digest":"0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33","integrity":"sha256-ABe+9T9iYcs7+VLUt4DGQwc2lxSy4eLU659p39mGqzM="},"lef-small-93285d531af463f877951d63fe844a6e9600b782c2c81f78723b730072fa942e.png":{"logical_path":"lef-small.png","mtime":"2018-03-01T22:17:10+01:00","size":1059,"digest":"93285d531af463f877951d63fe844a6e9600b782c2c81f78723b730072fa942e","integrity":"sha256-kyhdUxr0Y/h3lR1j/oRKbpYAt4LCyB94cjtzAHL6lC4="},"lef-15f93c1dccd4849a5e30613a3303013292a76cc4997877e626f123fe9afc2f75.png":{"logical_path":"lef.png","mtime":"2018-03-01T22:17:10+01:00","size":7377,"digest":"15f93c1dccd4849a5e30613a3303013292a76cc4997877e626f123fe9afc2f75","integrity":"sha256-Ffk8HczUhJpeMGE6MwMBMpKnbMSZeHfmJvEj/pr8L3U="},"priorite-logiciel-libre-je-soutiens-april_2_m-6442e454e96ed45cc1ebc40673a6c50bd286b9c28ea6a8b58572e94f7d6459fc.png":{"logical_path":"priorite-logiciel-libre-je-soutiens-april_2_m.png","mtime":"2018-07-15T15:58:42+02:00","size":16952,"digest":"6442e454e96ed45cc1ebc40673a6c50bd286b9c28ea6a8b58572e94f7d6459fc","integrity":"sha256-ZELkVOlu1FzB68QGc6bFC9KGucKOpqi1hXLpT31kWfw="},"regions/CA-QC-70699e6a6e25c69040a3f1548b0afd829c4903ccca2760b6c10f49cc87d5d174.png":{"logical_path":"regions/CA-QC.png","mtime":"2018-03-01T22:18:39+01:00","size":469,"digest":"70699e6a6e25c69040a3f1548b0afd829c4903ccca2760b6c10f49cc87d5d174","integrity":"sha256-cGmeam4lxpBAo/FUiwr9gpxJA8zKJ2C2wQ9JzIfV0XQ="},"team-65c86021cf8a1154493664094aeafcbe3e5aa13dc675bb8ef34b220481db98fa.png":{"logical_path":"team.png","mtime":"2018-03-01T22:17:10+01:00","size":3586,"digest":"65c86021cf8a1154493664094aeafcbe3e5aa13dc675bb8ef34b220481db98fa","integrity":"sha256-ZchgIc+KEVRJNmQJSur8vj5aoT3GdbuO80siBIHbmPo="},"application-f586e2a35afa70504e05ea3a2dc1a9a508dadcb36c9365a3785696e4197a9348.js":{"logical_path":"application.js","mtime":"2018-12-20T12:04:38+01:00","size":2034963,"digest":"f586e2a35afa70504e05ea3a2dc1a9a508dadcb36c9365a3785696e4197a9348","integrity":"sha256-9Ybio1r6cFBOBeo6LcGppQja3LNsk2WjeFaW5Bl6k0g="},"application-5758a3be3fc4c726f3fa040065dd207d269a61ffaeef8e18cf7bae20669ce52d.css":{"logical_path":"application.css","mtime":"2018-12-20T12:04:33+01:00","size":168784,"digest":"5758a3be3fc4c726f3fa040065dd207d269a61ffaeef8e18cf7bae20669ce52d","integrity":"sha256-V1ijvj/Exybz+gQAZd0gfSaaYf+u744Yz3uuIGac5S0="},"flags/4x3/ad-f67c4e5a3f709ead53c04d9ff35614e6c67517c3d3289170f7a317390f661497.svg":{"logical_path":"flags/4x3/ad.svg","mtime":"2018-04-02T14:38:31+02:00","size":33972,"digest":"f67c4e5a3f709ead53c04d9ff35614e6c67517c3d3289170f7a317390f661497","integrity":"sha256-9nxOWj9wnq1TwE2f81YU5sZ1F8PTKJFw96MXOQ9mFJc="},"flags/1x1/ad-a315836ec2c9dcc11ef9bfd8b18aa7ccfc2d31435cbf46a2c31930836076e09c.svg":{"logical_path":"flags/1x1/ad.svg","mtime":"2018-04-02T14:38:31+02:00","size":32745,"digest":"a315836ec2c9dcc11ef9bfd8b18aa7ccfc2d31435cbf46a2c31930836076e09c","integrity":"sha256-oxWDbsLJ3MEe+b/YsYqnzPwtMUNcv0aiwxkwg2B24Jw="},"flags/4x3/ae-7a3b3dc0f50b5310014cfbcc8200a5f1ce568127bf43452e40e8158e0cff2d2e.svg":{"logical_path":"flags/4x3/ae.svg","mtime":"2018-04-02T14:38:31+02:00","size":257,"digest":"7a3b3dc0f50b5310014cfbcc8200a5f1ce568127bf43452e40e8158e0cff2d2e","integrity":"sha256-ejs9wPULUxABTPvMggCl8c5WgSe/Q0UuQOgVjgz/LS4="},"flags/1x1/ae-bcdd9a4da09598785f3e31db4ff431e22687b2ead18209a3e615600655068cd5.svg":{"logical_path":"flags/1x1/ae.svg","mtime":"2018-04-02T14:38:31+02:00","size":265,"digest":"bcdd9a4da09598785f3e31db4ff431e22687b2ead18209a3e615600655068cd5","integrity":"sha256-vN2aTaCVmHhfPjHbT/Qx4iaHsurRggmj5hVgBlUGjNU="},"flags/4x3/af-01601b521fa86582e32c39eed8c88480afec1f801b6de929b52ed7e49da47260.svg":{"logical_path":"flags/4x3/af.svg","mtime":"2018-04-02T14:38:31+02:00","size":21279,"digest":"01601b521fa86582e32c39eed8c88480afec1f801b6de929b52ed7e49da47260","integrity":"sha256-AWAbUh+oZYLjLDnu2MiEgK/sH4AbbekptS7X5J2kcmA="},"flags/1x1/af-6332cf754a5e2866db631923e1f7cfc52a0a554d32b97bcf19f8263819e4ca7d.svg":{"logical_path":"flags/1x1/af.svg","mtime":"2018-04-02T14:38:31+02:00","size":21145,"digest":"6332cf754a5e2866db631923e1f7cfc52a0a554d32b97bcf19f8263819e4ca7d","integrity":"sha256-YzLPdUpeKGbbYxkj4ffPxSoKVU0yuXvPGfgmOBnkyn0="},"flags/4x3/ag-cb6952d821bac7855231c2cb4d1c44f7c730f6b3621518ab20f30d2b9afe604b.svg":{"logical_path":"flags/4x3/ag.svg","mtime":"2018-04-02T14:38:31+02:00","size":748,"digest":"cb6952d821bac7855231c2cb4d1c44f7c730f6b3621518ab20f30d2b9afe604b","integrity":"sha256-y2lS2CG6x4VSMcLLTRxE98cw9rNiFRirIPMNK5r+YEs="},"flags/1x1/ag-14f7d9978487aaf4446b55167e85a711c48a13ff07edac175c172969a38650c4.svg":{"logical_path":"flags/1x1/ag.svg","mtime":"2018-04-02T14:38:31+02:00","size":764,"digest":"14f7d9978487aaf4446b55167e85a711c48a13ff07edac175c172969a38650c4","integrity":"sha256-FPfZl4SHqvREa1UWfoWnEcSKE/8H7awXXBcpaaOGUMQ="},"flags/4x3/ai-f07c6cc0646fdfa441b9a506e1d46e8dce0d97b37222292e9c6733c995dc89bc.svg":{"logical_path":"flags/4x3/ai.svg","mtime":"2018-04-02T14:38:31+02:00","size":42208,"digest":"f07c6cc0646fdfa441b9a506e1d46e8dce0d97b37222292e9c6733c995dc89bc","integrity":"sha256-8HxswGRv36RBuaUG4dRujc4Nl7NyIikunGczyZXcibw="},"flags/1x1/ai-95099e544de29bcea3ba735de535823f2e19aeb4043e82dbc1d9862f9262b810.svg":{"logical_path":"flags/1x1/ai.svg","mtime":"2018-04-02T14:38:31+02:00","size":47975,"digest":"95099e544de29bcea3ba735de535823f2e19aeb4043e82dbc1d9862f9262b810","integrity":"sha256-lQmeVE3im86junNd5TWCPy4ZrrQEPoLbwdmGL5JiuBA="},"flags/4x3/al-9b997f2720de861e1b0ccec8ddf42a2890795ebf50817f9223e1ceba712c9b03.svg":{"logical_path":"flags/4x3/al.svg","mtime":"2018-04-02T14:38:31+02:00","size":3221,"digest":"9b997f2720de861e1b0ccec8ddf42a2890795ebf50817f9223e1ceba712c9b03","integrity":"sha256-m5l/JyDehh4bDM7I3fQqKJB5Xr9QgX+SI+HOunEsmwM="},"flags/1x1/al-94852d2711fc23abf3423534b9edb950a0c6aabf1d2d98bf2643f3c7dadfac09.svg":{"logical_path":"flags/1x1/al.svg","mtime":"2018-04-02T14:38:31+02:00","size":3228,"digest":"94852d2711fc23abf3423534b9edb950a0c6aabf1d2d98bf2643f3c7dadfac09","integrity":"sha256-lIUtJxH8I6vzQjU0ue25UKDGqr8dLZi/JkPzx9rfrAk="},"flags/4x3/am-85a199ec21d1af74a256335ead0c1e38592bb603d8da81feda4678945e9e00e6.svg":{"logical_path":"flags/4x3/am.svg","mtime":"2018-04-02T14:38:31+02:00","size":226,"digest":"85a199ec21d1af74a256335ead0c1e38592bb603d8da81feda4678945e9e00e6","integrity":"sha256-haGZ7CHRr3SiVjNerQweOFkrtgPY2oH+2kZ4lF6eAOY="},"flags/1x1/am-869391b014ac299924d30777d72a4aba430752177290a90a1fc3255a7ad79ee7.svg":{"logical_path":"flags/1x1/am.svg","mtime":"2018-04-02T14:38:31+02:00","size":234,"digest":"869391b014ac299924d30777d72a4aba430752177290a90a1fc3255a7ad79ee7","integrity":"sha256-hpORsBSsKZkk0wd31ypKukMHUhdykKkKH8MlWnrXnuc="},"flags/4x3/ao-29224a61bf632826d530cda55d87c2615884bd2c2c3a322036ed468e34d85c75.svg":{"logical_path":"flags/4x3/ao.svg","mtime":"2018-04-02T14:38:31+02:00","size":1608,"digest":"29224a61bf632826d530cda55d87c2615884bd2c2c3a322036ed468e34d85c75","integrity":"sha256-KSJKYb9jKCbVMM2lXYfCYViEvSwsOjIgNu1GjjTYXHU="},"flags/1x1/ao-048eacbc862fe1868cf0ec73457b70a8b49a598c80dea049856f0e1fd6fec83e.svg":{"logical_path":"flags/1x1/ao.svg","mtime":"2018-04-02T14:38:31+02:00","size":1608,"digest":"048eacbc862fe1868cf0ec73457b70a8b49a598c80dea049856f0e1fd6fec83e","integrity":"sha256-BI6svIYv4YaM8OxzRXtwqLSaWYyA3qBJhW8OH9b+yD4="},"flags/4x3/aq-b401a776d2f1a7944170114f0aeeceab5e1d962df3de7ed1eff47d96824b73fd.svg":{"logical_path":"flags/4x3/aq.svg","mtime":"2018-04-02T14:38:31+02:00","size":2974,"digest":"b401a776d2f1a7944170114f0aeeceab5e1d962df3de7ed1eff47d96824b73fd","integrity":"sha256-tAGndtLxp5RBcBFPCu7Oq14dli3z3n7R7/R9loJLc/0="},"flags/1x1/aq-a8d7ce9bfb860b6e2b58608b50bf2cafc5220c77f6d049ab7770891f64334531.svg":{"logical_path":"flags/1x1/aq.svg","mtime":"2018-04-02T14:38:31+02:00","size":3183,"digest":"a8d7ce9bfb860b6e2b58608b50bf2cafc5220c77f6d049ab7770891f64334531","integrity":"sha256-qNfOm/uGC24rWGCLUL8sr8UiDHf20Emrd3CJH2QzRTE="},"flags/4x3/ar-bf73475bb707100874dec538ce4b7e1b5afc4ed67dc50a8a800ee519e51cc826.svg":{"logical_path":"flags/4x3/ar.svg","mtime":"2018-04-02T14:38:31+02:00","size":3430,"digest":"bf73475bb707100874dec538ce4b7e1b5afc4ed67dc50a8a800ee519e51cc826","integrity":"sha256-v3NHW7cHEAh03sU4zkt+G1r8TtZ9xQqKgA7lGeUcyCY="},"flags/1x1/ar-fc6582cc6d3ef0782805d8497ee77ab2d836c53422e91007e48f81a4a9fa2e60.svg":{"logical_path":"flags/1x1/ar.svg","mtime":"2018-04-02T14:38:31+02:00","size":3503,"digest":"fc6582cc6d3ef0782805d8497ee77ab2d836c53422e91007e48f81a4a9fa2e60","integrity":"sha256-/GWCzG0+8HgoBdhJfud6stg2xTQi6RAH5I+BpKn6LmA="},"flags/4x3/as-79d395190345206ea03475b67b44638e1111562411504b60646483c9c0b0f7d1.svg":{"logical_path":"flags/4x3/as.svg","mtime":"2018-04-02T14:38:31+02:00","size":8098,"digest":"79d395190345206ea03475b67b44638e1111562411504b60646483c9c0b0f7d1","integrity":"sha256-edOVGQNFIG6gNHW2e0RjjhERViQRUEtgZGSDycCw99E="},"flags/1x1/as-04f0db77c5d8610a55c69508b226a7c338924f8cf7d6577d5d6590e85ee57183.svg":{"logical_path":"flags/1x1/as.svg","mtime":"2018-04-02T14:38:31+02:00","size":7845,"digest":"04f0db77c5d8610a55c69508b226a7c338924f8cf7d6577d5d6590e85ee57183","integrity":"sha256-BPDbd8XYYQpVxpUIsianwziST4z31ld9XWWQ6F7lcYM="},"flags/4x3/at-3d197de8f1f0096a2b0d440b6fc7d80821585a6637e646c05487a87718bf6b5f.svg":{"logical_path":"flags/4x3/at.svg","mtime":"2018-04-02T14:38:31+02:00","size":243,"digest":"3d197de8f1f0096a2b0d440b6fc7d80821585a6637e646c05487a87718bf6b5f","integrity":"sha256-PRl96PHwCWorDUQLb8fYCCFYWmY35kbAVIeodxi/a18="},"flags/1x1/at-ec4db9aeac793827ac7c8e40c072a76f7675010058cc8c8dfd3a86bb5acfa6b8.svg":{"logical_path":"flags/1x1/at.svg","mtime":"2018-04-02T14:38:31+02:00","size":245,"digest":"ec4db9aeac793827ac7c8e40c072a76f7675010058cc8c8dfd3a86bb5acfa6b8","integrity":"sha256-7E25rqx5OCesfI5AwHKnb3Z1AQBYzIyN/TqGu1rPprg="},"flags/4x3/au-126fa2500a315287a5f847f4d958bb929f11da9b39f35912cc440c0fcffb8b12.svg":{"logical_path":"flags/4x3/au.svg","mtime":"2018-04-02T14:38:31+02:00","size":1335,"digest":"126fa2500a315287a5f847f4d958bb929f11da9b39f35912cc440c0fcffb8b12","integrity":"sha256-Em+iUAoxUoel+Ef02Vi7kp8R2ps581kSzEQMD8/7ixI="},"flags/1x1/au-bf990dcc957c9f74eb908e8ffa733f1731277bf6ec8b7301a6ea1ed92b59cc4b.svg":{"logical_path":"flags/1x1/au.svg","mtime":"2018-04-02T14:38:31+02:00","size":1320,"digest":"bf990dcc957c9f74eb908e8ffa733f1731277bf6ec8b7301a6ea1ed92b59cc4b","integrity":"sha256-v5kNzJV8n3TrkI6P+nM/FzEne/bsi3MBpuoe2StZzEs="},"flags/4x3/aw-4524643452423e95f3b0dbe6216b059a9e52126b34c73ae4b3c17b682f893aa6.svg":{"logical_path":"flags/4x3/aw.svg","mtime":"2018-04-02T14:38:31+02:00","size":9948,"digest":"4524643452423e95f3b0dbe6216b059a9e52126b34c73ae4b3c17b682f893aa6","integrity":"sha256-RSRkNFJCPpXzsNvmIWsFmp5SEms0xzrks8F7aC+JOqY="},"flags/1x1/aw-f7002bceef55486a442bf6bf433be0c60d0b15b2aa548b81c524c67ccf0565a8.svg":{"logical_path":"flags/1x1/aw.svg","mtime":"2018-04-02T14:38:31+02:00","size":12088,"digest":"f7002bceef55486a442bf6bf433be0c60d0b15b2aa548b81c524c67ccf0565a8","integrity":"sha256-9wArzu9VSGpEK/a/Qzvgxg0LFbKqVIuBxSTGfM8FZag="},"flags/4x3/ax-c297e0eb654ca62e58f5eb3abb70df9f245e4919490f29bd0f1d49c4fe052d90.svg":{"logical_path":"flags/4x3/ax.svg","mtime":"2018-04-02T14:38:31+02:00","size":556,"digest":"c297e0eb654ca62e58f5eb3abb70df9f245e4919490f29bd0f1d49c4fe052d90","integrity":"sha256-wpfg62VMpi5Y9es6u3DfnyReSRlJDym9Dx1JxP4FLZA="},"flags/1x1/ax-a1245689ecbf321c0a9e556bba17f3c9f2aeb8b1f63d14fcb591d76a87f12880.svg":{"logical_path":"flags/1x1/ax.svg","mtime":"2018-04-02T14:38:31+02:00","size":544,"digest":"a1245689ecbf321c0a9e556bba17f3c9f2aeb8b1f63d14fcb591d76a87f12880","integrity":"sha256-oSRWiey/MhwKnlVruhfzyfKuuLH2PRT8tZHXaofxKIA="},"flags/4x3/az-132e68d5e0386d3b9fa05b4288a0fd66f1414e2bc7af6b9d437b6935a7dfa00c.svg":{"logical_path":"flags/4x3/az.svg","mtime":"2018-04-02T14:38:31+02:00","size":515,"digest":"132e68d5e0386d3b9fa05b4288a0fd66f1414e2bc7af6b9d437b6935a7dfa00c","integrity":"sha256-Ey5o1eA4bTufoFtCiKD9ZvFBTivHr2udQ3tpNaffoAw="},"flags/1x1/az-3990c0526b933bd650285d821f2b93e432a73ba709869549b8ef75b051d3bd2d.svg":{"logical_path":"flags/1x1/az.svg","mtime":"2018-04-02T14:38:31+02:00","size":501,"digest":"3990c0526b933bd650285d821f2b93e432a73ba709869549b8ef75b051d3bd2d","integrity":"sha256-OZDAUmuTO9ZQKF2CHyuT5DKnO6cJhpVJuO91sFHTvS0="},"flags/4x3/ba-89dd0c1600d94741de7d667a487310193a0c48c4cf1a5159c3bf9dd37d65d2b5.svg":{"logical_path":"flags/4x3/ba.svg","mtime":"2018-04-02T14:38:31+02:00","size":1306,"digest":"89dd0c1600d94741de7d667a487310193a0c48c4cf1a5159c3bf9dd37d65d2b5","integrity":"sha256-id0MFgDZR0HefWZ6SHMQGToMSMTPGlFZw7+d031l0rU="},"flags/1x1/ba-2dbe90eb12b937f4a9ae8db95760930a3e318f4ce5829ac05e292ead698bae5a.svg":{"logical_path":"flags/1x1/ba.svg","mtime":"2018-04-02T14:38:31+02:00","size":1247,"digest":"2dbe90eb12b937f4a9ae8db95760930a3e318f4ce5829ac05e292ead698bae5a","integrity":"sha256-Lb6Q6xK5N/Spro25V2CTCj4xj0zlgprAXikurWmLrlo="},"flags/4x3/bb-16f8249ff958bfbc18fb1f23a5282000347bffdb5769ac620966185b1dcb57f6.svg":{"logical_path":"flags/4x3/bb.svg","mtime":"2018-04-02T14:38:31+02:00","size":613,"digest":"16f8249ff958bfbc18fb1f23a5282000347bffdb5769ac620966185b1dcb57f6","integrity":"sha256-Fvgkn/lYv7wY+x8jpSggADR7/9tXaaxiCWYYWx3LV/Y="},"flags/1x1/bb-fae92d8426196ae24ffa561aca72613fae651a5e9c0bcda63ecc877add05b060.svg":{"logical_path":"flags/1x1/bb.svg","mtime":"2018-04-02T14:38:31+02:00","size":616,"digest":"fae92d8426196ae24ffa561aca72613fae651a5e9c0bcda63ecc877add05b060","integrity":"sha256-+ukthCYZauJP+lYaynJhP65lGl6cC82mPsyHet0FsGA="},"flags/4x3/bd-8dac0547e73ee25a04148a3f0fd026a90e56c23b7e92921565d4263050ba77a6.svg":{"logical_path":"flags/4x3/bd.svg","mtime":"2018-04-02T14:38:31+02:00","size":193,"digest":"8dac0547e73ee25a04148a3f0fd026a90e56c23b7e92921565d4263050ba77a6","integrity":"sha256-jawFR+c+4loEFIo/D9AmqQ5Wwjt+kpIVZdQmMFC6d6Y="},"flags/1x1/bd-ecc3c3e87d4cc59c8350f2b4d7dca8f5cf46bdb26319db0ee80b744482af50c1.svg":{"logical_path":"flags/1x1/bd.svg","mtime":"2018-04-02T14:38:31+02:00","size":195,"digest":"ecc3c3e87d4cc59c8350f2b4d7dca8f5cf46bdb26319db0ee80b744482af50c1","integrity":"sha256-7MPD6H1MxZyDUPK019yo9c9GvbJjGdsO6At0RIKvUME="},"flags/4x3/be-a180ca68521188017bb5367f19e503d9599d6cbecd61bf054e59a57f58e648ae.svg":{"logical_path":"flags/4x3/be.svg","mtime":"2018-04-02T14:38:31+02:00","size":293,"digest":"a180ca68521188017bb5367f19e503d9599d6cbecd61bf054e59a57f58e648ae","integrity":"sha256-oYDKaFIRiAF7tTZ/GeUD2VmdbL7NYb8FTlmlf1jmSK4="},"flags/1x1/be-c8d4194137bd01955285b329dfdf996490d16c3116a92ce2f322e354b6d7494e.svg":{"logical_path":"flags/1x1/be.svg","mtime":"2018-04-02T14:38:31+02:00","size":293,"digest":"c8d4194137bd01955285b329dfdf996490d16c3116a92ce2f322e354b6d7494e","integrity":"sha256-yNQZQTe9AZVShbMp39+ZZJDRbDEWqSzi8yLjVLbXSU4="},"flags/4x3/bf-6b214936ef89f19133d4a84e99cdf0cfdb99d6409f2f373f6d18694423013313.svg":{"logical_path":"flags/4x3/bf.svg","mtime":"2018-04-02T14:38:31+02:00","size":360,"digest":"6b214936ef89f19133d4a84e99cdf0cfdb99d6409f2f373f6d18694423013313","integrity":"sha256-ayFJNu+J8ZEz1KhOmc3wz9uZ1kCfLzc/bRhpRCMBMxM="},"flags/1x1/bf-04c7d61aa314adab5a41bd79d77aa780c10136bb6b8f4c62423e61e23e3851ee.svg":{"logical_path":"flags/1x1/bf.svg","mtime":"2018-04-02T14:38:31+02:00","size":386,"digest":"04c7d61aa314adab5a41bd79d77aa780c10136bb6b8f4c62423e61e23e3851ee","integrity":"sha256-BMfWGqMUrataQb1513qngMEBNrtrj0xiQj5h4j44Ue4="},"flags/4x3/bg-dd3985ba746942b0e65bc52a280cc4d28fb24fd2c7d9e22ac9afd2d75ee7bfc4.svg":{"logical_path":"flags/4x3/bg.svg","mtime":"2018-04-02T14:38:31+02:00","size":289,"digest":"dd3985ba746942b0e65bc52a280cc4d28fb24fd2c7d9e22ac9afd2d75ee7bfc4","integrity":"sha256-3TmFunRpQrDmW8UqKAzE0o+yT9LH2eIqya/S117nv8Q="},"flags/1x1/bg-f59294a736d5bdc0f102b58d70dbe45d02bd92df822820bf95336840f75a0746.svg":{"logical_path":"flags/1x1/bg.svg","mtime":"2018-04-02T14:38:31+02:00","size":297,"digest":"f59294a736d5bdc0f102b58d70dbe45d02bd92df822820bf95336840f75a0746","integrity":"sha256-9ZKUpzbVvcDxArWNcNvkXQK9kt+CKCC/lTNoQPdaB0Y="},"flags/4x3/bh-7c82c4a6ba963172c6c1b4423f39a0ebe9c999449cc7dd87018917943db4735c.svg":{"logical_path":"flags/4x3/bh.svg","mtime":"2018-04-02T14:38:31+02:00","size":546,"digest":"7c82c4a6ba963172c6c1b4423f39a0ebe9c999449cc7dd87018917943db4735c","integrity":"sha256-fILEprqWMXLGwbRCPzmg6+nJmUScx92HAYkXlD20c1w="},"flags/1x1/bh-6893aac3e55c6480e9dac0c023ec2179f6c12a0da82a0bc2717134384c097e88.svg":{"logical_path":"flags/1x1/bh.svg","mtime":"2018-04-02T14:38:31+02:00","size":572,"digest":"6893aac3e55c6480e9dac0c023ec2179f6c12a0da82a0bc2717134384c097e88","integrity":"sha256-aJOqw+VcZIDp2sDAI+whefbBKg2oKgvCcXE0OEwJfog="},"flags/4x3/bi-4fcd0116f7f93c0564c6955806f3c3563d0ea7334ae406f29a897255845c923c.svg":{"logical_path":"flags/4x3/bi.svg","mtime":"2018-04-02T14:38:31+02:00","size":1074,"digest":"4fcd0116f7f93c0564c6955806f3c3563d0ea7334ae406f29a897255845c923c","integrity":"sha256-T80BFvf5PAVkxpVYBvPDVj0OpzNK5AbymolyVYRckjw="},"flags/1x1/bi-91c34eb431b26be67852782a0b93e1d7d577a925454d6c8cea00a0d872d2de8a.svg":{"logical_path":"flags/1x1/bi.svg","mtime":"2018-04-02T14:38:31+02:00","size":1048,"digest":"91c34eb431b26be67852782a0b93e1d7d577a925454d6c8cea00a0d872d2de8a","integrity":"sha256-kcNOtDGya+Z4UngqC5Ph19V3qSVFTWyM6gCg2HLS3oo="},"flags/4x3/bj-63bddb4268f5f8c2ed867041bcf058fb18fcd9d1e0799e01286fca2d5e961c7f.svg":{"logical_path":"flags/4x3/bj.svg","mtime":"2018-04-02T14:38:31+02:00","size":499,"digest":"63bddb4268f5f8c2ed867041bcf058fb18fcd9d1e0799e01286fca2d5e961c7f","integrity":"sha256-Y73bQmj1+MLthnBBvPBY+xj82dHgeZ4BKG/KLV6WHH8="},"flags/1x1/bj-e2606c5a8498c474a6b6708626b88108fcb73840344766566dc56f804279cdfc.svg":{"logical_path":"flags/1x1/bj.svg","mtime":"2018-04-02T14:38:31+02:00","size":502,"digest":"e2606c5a8498c474a6b6708626b88108fcb73840344766566dc56f804279cdfc","integrity":"sha256-4mBsWoSYxHSmtnCGJriBCPy3OEA0R2ZWbcVvgEJ5zfw="},"flags/4x3/bl-824a7265f48789d5e1ad5c5b0042a13a7d2d4357210e5bd8124fca19931e8c74.svg":{"logical_path":"flags/4x3/bl.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"824a7265f48789d5e1ad5c5b0042a13a7d2d4357210e5bd8124fca19931e8c74","integrity":"sha256-gkpyZfSHidXhrVxbAEKhOn0tQ1chDlvYEk/KGZMejHQ="},"flags/1x1/bl-ba6a7881b0ca72ac57aee4d823ae611ab4ad24a938ee9e01a7a4d5ae04cfccf6.svg":{"logical_path":"flags/1x1/bl.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"ba6a7881b0ca72ac57aee4d823ae611ab4ad24a938ee9e01a7a4d5ae04cfccf6","integrity":"sha256-ump4gbDKcqxXruTYI65hGrStJKk47p4Bp6TVrgTPzPY="},"flags/4x3/bm-2e2f09e5a4edf4b18afff581656f50b0b4c37783db29591ff00ca768f7f755bc.svg":{"logical_path":"flags/4x3/bm.svg","mtime":"2018-04-02T14:38:31+02:00","size":22650,"digest":"2e2f09e5a4edf4b18afff581656f50b0b4c37783db29591ff00ca768f7f755bc","integrity":"sha256-Li8J5aTt9LGK//WBZW9QsLTDd4PbKVkf8AynaPf3Vbw="},"flags/1x1/bm-f553f953f8784ea4d67a5197f5d808a67747eb8a1cb56990d6838e690090d2d6.svg":{"logical_path":"flags/1x1/bm.svg","mtime":"2018-04-02T14:38:31+02:00","size":22337,"digest":"f553f953f8784ea4d67a5197f5d808a67747eb8a1cb56990d6838e690090d2d6","integrity":"sha256-9VP5U/h4TqTWelGX9dgIpndH64octWmQ1oOOaQCQ0tY="},"flags/4x3/bn-bcf9967c12eb6397346cb5b960ae92efa41f314f780d09a3d7c81f5dacac4180.svg":{"logical_path":"flags/4x3/bn.svg","mtime":"2018-04-02T14:38:31+02:00","size":14387,"digest":"bcf9967c12eb6397346cb5b960ae92efa41f314f780d09a3d7c81f5dacac4180","integrity":"sha256-vPmWfBLrY5c0bLW5YK6S76QfMU94DQmj18gfXaysQYA="},"flags/1x1/bn-1d1aad3fe9fd33ce922eba33c9ae6047a5646349239c20d1bc7307ec6d19a043.svg":{"logical_path":"flags/1x1/bn.svg","mtime":"2018-04-02T14:38:31+02:00","size":14521,"digest":"1d1aad3fe9fd33ce922eba33c9ae6047a5646349239c20d1bc7307ec6d19a043","integrity":"sha256-HRqtP+n9M86SLrozya5gR6VkY0kjnCDRvHMH7G0ZoEM="},"flags/4x3/bo-fa423f2bb4ab6e8e9dd399ad73781ea8d9cbafd30f1b7ee0bcecfb9e7b75581e.svg":{"logical_path":"flags/4x3/bo.svg","mtime":"2018-04-02T14:38:31+02:00","size":118272,"digest":"fa423f2bb4ab6e8e9dd399ad73781ea8d9cbafd30f1b7ee0bcecfb9e7b75581e","integrity":"sha256-+kI/K7Srbo6d05mtc3geqNnLr9MPG37gvOz7nnt1WB4="},"flags/1x1/bo-f5faa29e40191e0c76070ac1a1d2a1f2b18e9cd358b8a77cefaed8efc49a265e.svg":{"logical_path":"flags/1x1/bo.svg","mtime":"2018-04-02T14:38:31+02:00","size":119850,"digest":"f5faa29e40191e0c76070ac1a1d2a1f2b18e9cd358b8a77cefaed8efc49a265e","integrity":"sha256-9fqinkAZHgx2BwrBodKh8rGOnNNYuKd8767Y78SaJl4="},"flags/4x3/bq-493c92ab19204c3ad319e6caba021df050132b99bd57a8f9b74131b78229c29e.svg":{"logical_path":"flags/4x3/bq.svg","mtime":"2018-04-02T14:38:31+02:00","size":227,"digest":"493c92ab19204c3ad319e6caba021df050132b99bd57a8f9b74131b78229c29e","integrity":"sha256-STySqxkgTDrTGebKugId8FATK5m9V6j5t0Ext4Ipwp4="},"flags/1x1/bq-6e30bbeabc2aa097f657a411984b3c23278a8fcce2fc016b1cd6d2262f672d33.svg":{"logical_path":"flags/1x1/bq.svg","mtime":"2018-04-02T14:38:31+02:00","size":231,"digest":"6e30bbeabc2aa097f657a411984b3c23278a8fcce2fc016b1cd6d2262f672d33","integrity":"sha256-bjC76rwqoJf2V6QRmEs8IyeKj8zi/AFrHNbSJi9nLTM="},"flags/4x3/br-cf3ba80ec2c9fd4d3c845c3a3c43a2b9d81cf90707a2918789e8b1f596833e01.svg":{"logical_path":"flags/4x3/br.svg","mtime":"2018-04-02T14:38:31+02:00","size":8244,"digest":"cf3ba80ec2c9fd4d3c845c3a3c43a2b9d81cf90707a2918789e8b1f596833e01","integrity":"sha256-zzuoDsLJ/U08hFw6PEOiudgc+QcHopGHieix9ZaDPgE="},"flags/1x1/br-7bf4e4b31650ac25f0bc6c86eb87491a7e5a8eac13acccfcbde44346c88728f6.svg":{"logical_path":"flags/1x1/br.svg","mtime":"2018-04-02T14:38:31+02:00","size":7852,"digest":"7bf4e4b31650ac25f0bc6c86eb87491a7e5a8eac13acccfcbde44346c88728f6","integrity":"sha256-e/TksxZQrCXwvGyG64dJGn5ajqwTrMz8veRDRsiHKPY="},"flags/4x3/bs-69f60b5fea96b67dd939e597099994921bb3dc3bcf31b8dee7cc45be2885c836.svg":{"logical_path":"flags/4x3/bs.svg","mtime":"2018-04-02T14:38:31+02:00","size":549,"digest":"69f60b5fea96b67dd939e597099994921bb3dc3bcf31b8dee7cc45be2885c836","integrity":"sha256-afYLX+qWtn3ZOeWXCZmUkhuz3DvPMbje58xFviiFyDY="},"flags/1x1/bs-f5d6acf7ef7a240dc09ac88710fd77fd3494501104392db74d5c540d482f2262.svg":{"logical_path":"flags/1x1/bs.svg","mtime":"2018-04-02T14:38:31+02:00","size":571,"digest":"f5d6acf7ef7a240dc09ac88710fd77fd3494501104392db74d5c540d482f2262","integrity":"sha256-9das9+96JA3AmsiHEP13/TSUUBEEOS23TVxUDUgvImI="},"flags/4x3/bt-6c20b0c00e12d5898be0239a0c66ce775debd0bd536de56a271859a0285a039e.svg":{"logical_path":"flags/4x3/bt.svg","mtime":"2018-04-02T14:38:31+02:00","size":25345,"digest":"6c20b0c00e12d5898be0239a0c66ce775debd0bd536de56a271859a0285a039e","integrity":"sha256-bCCwwA4S1YmL4COaDGbOd13r0L1TbeVqJxhZoChaA54="},"flags/1x1/bt-58de3ca9438811ef1920e2f84c4ba4ce32d01069f4d197ab5d577de6acbe0c85.svg":{"logical_path":"flags/1x1/bt.svg","mtime":"2018-04-02T14:38:31+02:00","size":25172,"digest":"58de3ca9438811ef1920e2f84c4ba4ce32d01069f4d197ab5d577de6acbe0c85","integrity":"sha256-WN48qUOIEe8ZIOL4TEukzjLQEGn00ZerXVd95qy+DIU="},"flags/4x3/bv-ff173190fc339b3cb8b6e8235bc5e373853d7127fd94cbc32ac737e839aeb586.svg":{"logical_path":"flags/4x3/bv.svg","mtime":"2018-04-02T14:38:31+02:00","size":582,"digest":"ff173190fc339b3cb8b6e8235bc5e373853d7127fd94cbc32ac737e839aeb586","integrity":"sha256-/xcxkPwzmzy4tugjW8Xjc4U9cSf9lMvDKsc36DmutYY="},"flags/1x1/bv-59616ff1a722959064c83927ca2e49c1fce42a9b18e91b9ecbb74f62527aff43.svg":{"logical_path":"flags/1x1/bv.svg","mtime":"2018-04-02T14:38:31+02:00","size":585,"digest":"59616ff1a722959064c83927ca2e49c1fce42a9b18e91b9ecbb74f62527aff43","integrity":"sha256-WWFv8acilZBkyDknyi5JwfzkKpsY6Ruey7dPYlJ6/0M="},"flags/4x3/bw-4bb1d3131b88c65b5decc67f7b44903e931bca2fcac841942591c599f0cbb850.svg":{"logical_path":"flags/4x3/bw.svg","mtime":"2018-04-02T14:38:31+02:00","size":255,"digest":"4bb1d3131b88c65b5decc67f7b44903e931bca2fcac841942591c599f0cbb850","integrity":"sha256-S7HTExuIxltd7MZ/e0SQPpMbyi/KyEGUJZHFmfDLuFA="},"flags/1x1/bw-e08f50c0836ca5858aed7b0526aed6fb630da8dc6b6b96bd9a476af599dc89d6.svg":{"logical_path":"flags/1x1/bw.svg","mtime":"2018-04-02T14:38:31+02:00","size":257,"digest":"e08f50c0836ca5858aed7b0526aed6fb630da8dc6b6b96bd9a476af599dc89d6","integrity":"sha256-4I9QwINspYWK7XsFJq7W+2MNqNxra5a9mkdq9ZncidY="},"flags/4x3/by-324ac96bfbe075781c664be3b9e2ac6b4d2a46dd2b418ca0920284f64394c7d4.svg":{"logical_path":"flags/4x3/by.svg","mtime":"2018-04-02T14:38:31+02:00","size":5998,"digest":"324ac96bfbe075781c664be3b9e2ac6b4d2a46dd2b418ca0920284f64394c7d4","integrity":"sha256-MkrJa/vgdXgcZkvjueKsa00qRt0rQYygkgKE9kOUx9Q="},"flags/1x1/by-37b80e8bf7e51fef99a8307d6dffb04ee164790ceeafef606d516ca333e9488a.svg":{"logical_path":"flags/1x1/by.svg","mtime":"2018-04-02T14:38:31+02:00","size":6105,"digest":"37b80e8bf7e51fef99a8307d6dffb04ee164790ceeafef606d516ca333e9488a","integrity":"sha256-N7gOi/flH++ZqDB9bf+wTuFkeQzur+9gbVFsozPpSIo="},"flags/4x3/bz-156fdc45f8c15c9520a1ea9fc0f395f294f02077408ea1938c222a37cfbb7f1d.svg":{"logical_path":"flags/4x3/bz.svg","mtime":"2018-04-02T14:38:31+02:00","size":46916,"digest":"156fdc45f8c15c9520a1ea9fc0f395f294f02077408ea1938c222a37cfbb7f1d","integrity":"sha256-FW/cRfjBXJUgoeqfwPOV8pTwIHdAjqGTjCIqN8+7fx0="},"flags/1x1/bz-24577d4e7b29b33ab3b1d37914c8479889baa7e8c8399c6d1c99faed31ab053a.svg":{"logical_path":"flags/1x1/bz.svg","mtime":"2018-04-02T14:38:31+02:00","size":47160,"digest":"24577d4e7b29b33ab3b1d37914c8479889baa7e8c8399c6d1c99faed31ab053a","integrity":"sha256-JFd9TnspszqzsdN5FMhHmIm6p+jIOZxtHJn67TGrBTo="},"flags/4x3/ca-0d57cab46d5dbb0012a5e4ae0a9efee3baee90d5d157950a6c5d67edf2daa58f.svg":{"logical_path":"flags/4x3/ca.svg","mtime":"2018-04-02T14:38:31+02:00","size":731,"digest":"0d57cab46d5dbb0012a5e4ae0a9efee3baee90d5d157950a6c5d67edf2daa58f","integrity":"sha256-DVfKtG1duwASpeSuCp7+47rukNXRV5UKbF1n7fLapY8="},"flags/1x1/ca-192a6fb0544e5a6f33a32149d62f1e7ac0a1d61c5c5afa57f3a42346ca8e8c90.svg":{"logical_path":"flags/1x1/ca.svg","mtime":"2018-04-02T14:38:31+02:00","size":712,"digest":"192a6fb0544e5a6f33a32149d62f1e7ac0a1d61c5c5afa57f3a42346ca8e8c90","integrity":"sha256-GSpvsFROWm8zoyFJ1i8eesCh1hxcWvpX86QjRsqOjJA="},"flags/4x3/cc-a35f2a9e10a28d6918ced65e0623b03bb2fbf1f20670b581bc0a409d33b4e843.svg":{"logical_path":"flags/4x3/cc.svg","mtime":"2018-04-02T14:38:31+02:00","size":3144,"digest":"a35f2a9e10a28d6918ced65e0623b03bb2fbf1f20670b581bc0a409d33b4e843","integrity":"sha256-o18qnhCijWkYztZeBiOwO7L78fIGcLWBvApAnTO06EM="},"flags/1x1/cc-d2025eefc9d30f724f3fcd95c0fd9f7938930ecb01af7e0cd6ee6553d7358eb6.svg":{"logical_path":"flags/1x1/cc.svg","mtime":"2018-04-02T14:38:31+02:00","size":3092,"digest":"d2025eefc9d30f724f3fcd95c0fd9f7938930ecb01af7e0cd6ee6553d7358eb6","integrity":"sha256-0gJe78nTD3JPP82VwP2feTiTDssBr34M1u5lU9c1jrY="},"flags/4x3/cd-5d2127c991b30522ae0a29d05facbc88728c050d7e333a60d614af1545459c5c.svg":{"logical_path":"flags/4x3/cd.svg","mtime":"2018-04-02T14:38:31+02:00","size":352,"digest":"5d2127c991b30522ae0a29d05facbc88728c050d7e333a60d614af1545459c5c","integrity":"sha256-XSEnyZGzBSKuCinQX6y8iHKMBQ1+Mzpg1hSvFUVFnFw="},"flags/1x1/cd-59dacf424d1c8c779db66c5b7f2a93a3c8f14976c2975ccfb07639676a1602e3.svg":{"logical_path":"flags/1x1/cd.svg","mtime":"2018-04-02T14:38:31+02:00","size":510,"digest":"59dacf424d1c8c779db66c5b7f2a93a3c8f14976c2975ccfb07639676a1602e3","integrity":"sha256-WdrPQk0cjHedtmxbfyqTo8jxSXbCl1zPsHY5Z2oWAuM="},"flags/4x3/cf-ac0aaffba354d848eba2501a402ee81dc96a56ad0acd3741ec9905e76c372e1e.svg":{"logical_path":"flags/4x3/cf.svg","mtime":"2018-04-02T14:38:31+02:00","size":689,"digest":"ac0aaffba354d848eba2501a402ee81dc96a56ad0acd3741ec9905e76c372e1e","integrity":"sha256-rAqv+6NU2EjrolAaQC7oHclqVq0KzTdB7JkF52w3Lh4="},"flags/1x1/cf-e637674faf7edcdad37182192d038448c157421ab0c69377d9b8e56ab2c0249d.svg":{"logical_path":"flags/1x1/cf.svg","mtime":"2018-04-02T14:38:31+02:00","size":635,"digest":"e637674faf7edcdad37182192d038448c157421ab0c69377d9b8e56ab2c0249d","integrity":"sha256-5jdnT69+3NrTcYIZLQOESMFXQhqwxpN32bjlarLAJJ0="},"flags/4x3/cg-3729f717c83c9df7d0543a1a5d4a506efe184bdfeb39f9260b4b63edf19d2538.svg":{"logical_path":"flags/4x3/cg.svg","mtime":"2018-04-02T14:38:31+02:00","size":484,"digest":"3729f717c83c9df7d0543a1a5d4a506efe184bdfeb39f9260b4b63edf19d2538","integrity":"sha256-Nyn3F8g8nffQVDoaXUpQbv4YS9/rOfkmC0tj7fGdJTg="},"flags/1x1/cg-8353ff1f251714b1b8905eec1722378426719955d0637d206d35d1dcfa68ddcf.svg":{"logical_path":"flags/1x1/cg.svg","mtime":"2018-04-02T14:38:31+02:00","size":472,"digest":"8353ff1f251714b1b8905eec1722378426719955d0637d206d35d1dcfa68ddcf","integrity":"sha256-g1P/HyUXFLG4kF7sFyI3hCZxmVXQY30gbTXR3Ppo3c8="},"flags/4x3/ch-6739edee6d1ef72c4ed97cfe723d3bb7f17e4df5390f3a4ae234f1ffdeece0cf.svg":{"logical_path":"flags/4x3/ch.svg","mtime":"2018-04-02T14:38:31+02:00","size":300,"digest":"6739edee6d1ef72c4ed97cfe723d3bb7f17e4df5390f3a4ae234f1ffdeece0cf","integrity":"sha256-Zznt7m0e9yxO2Xz+cj07t/F+TfU5DzpK4jTx/97s4M8="},"flags/1x1/ch-7c3dec465228981c57a90a3a7b3a6c42dd3e699230663e770b55008ce6d14208.svg":{"logical_path":"flags/1x1/ch.svg","mtime":"2018-04-02T14:38:31+02:00","size":298,"digest":"7c3dec465228981c57a90a3a7b3a6c42dd3e699230663e770b55008ce6d14208","integrity":"sha256-fD3sRlIomBxXqQo6ezpsQt0+aZIwZj53C1UAjObRQgg="},"flags/4x3/ci-3e076d13c9524149508c442f8f727424660124e3591280d8ae9bddf9d8272a1e.svg":{"logical_path":"flags/4x3/ci.svg","mtime":"2018-04-02T14:38:31+02:00","size":283,"digest":"3e076d13c9524149508c442f8f727424660124e3591280d8ae9bddf9d8272a1e","integrity":"sha256-PgdtE8lSQUlQjEQvj3J0JGYBJONZEoDYrpvd+dgnKh4="},"flags/1x1/ci-691a0a8577b7d555fc90dc7170adc9ec7571191cb3507c46c0e8516fd1778a91.svg":{"logical_path":"flags/1x1/ci.svg","mtime":"2018-04-02T14:38:31+02:00","size":286,"digest":"691a0a8577b7d555fc90dc7170adc9ec7571191cb3507c46c0e8516fd1778a91","integrity":"sha256-aRoKhXe31VX8kNxxcK3J7HVxGRyzUHxGwOhRb9F3ipE="},"flags/4x3/ck-9cff098e505afde9bf5166cb7b0c409178575633b913ce08c1c700d08c477db6.svg":{"logical_path":"flags/4x3/ck.svg","mtime":"2018-04-02T14:38:31+02:00","size":1887,"digest":"9cff098e505afde9bf5166cb7b0c409178575633b913ce08c1c700d08c477db6","integrity":"sha256-nP8JjlBa/em/UWbLewxAkXhXVjO5E84IwccA0IxHfbY="},"flags/1x1/ck-9c8dffa3bd5953d8a121780831f25b58738e67f3be71961894c56dfd25848c88.svg":{"logical_path":"flags/1x1/ck.svg","mtime":"2018-04-02T14:38:31+02:00","size":1846,"digest":"9c8dffa3bd5953d8a121780831f25b58738e67f3be71961894c56dfd25848c88","integrity":"sha256-nI3/o71ZU9ihIXgIMfJbWHOOZ/O+cZYYlMVt/SWEjIg="},"flags/4x3/cl-a4c57ec2bb9adcb67e1850256e5165227b764187d6941a38d95d0def5144699b.svg":{"logical_path":"flags/4x3/cl.svg","mtime":"2018-04-02T14:38:31+02:00","size":560,"digest":"a4c57ec2bb9adcb67e1850256e5165227b764187d6941a38d95d0def5144699b","integrity":"sha256-pMV+wrua3LZ+GFAlblFlInt2QYfWlBo42V0N71FEaZs="},"flags/1x1/cl-5a3e95cf63358e3911c97404818c2cddfd46414d8445e47d6976ee166c48926c.svg":{"logical_path":"flags/1x1/cl.svg","mtime":"2018-04-02T14:38:31+02:00","size":577,"digest":"5a3e95cf63358e3911c97404818c2cddfd46414d8445e47d6976ee166c48926c","integrity":"sha256-Wj6Vz2M1jjkRyXQEgYws3f1GQU2EReR9aXbuFmxIkmw="},"flags/4x3/cm-5dce9f36d92a61bdc0c482141bdb4f55bfcec0a2ecc745db643a7953e2e5a722.svg":{"logical_path":"flags/4x3/cm.svg","mtime":"2018-04-02T14:38:31+02:00","size":827,"digest":"5dce9f36d92a61bdc0c482141bdb4f55bfcec0a2ecc745db643a7953e2e5a722","integrity":"sha256-Xc6fNtkqYb3AxIIUG9tPVb/OwKLsx0XbZDp5U+LlpyI="},"flags/1x1/cm-d8d21f54c44df5df9edef227691384a4ad37c15ff57c8aa0dead684d19eac8cd.svg":{"logical_path":"flags/1x1/cm.svg","mtime":"2018-04-02T14:38:31+02:00","size":827,"digest":"d8d21f54c44df5df9edef227691384a4ad37c15ff57c8aa0dead684d19eac8cd","integrity":"sha256-2NIfVMRN9d+e3vInaROEpK03wV/1fIqg3q1oTRnqyM0="},"flags/4x3/cn-48ce1c2837bb806a6aaf8b7a9878b6d040c0d069a0ffca9a8a49e7a31aa30e7f.svg":{"logical_path":"flags/4x3/cn.svg","mtime":"2018-04-02T14:38:31+02:00","size":804,"digest":"48ce1c2837bb806a6aaf8b7a9878b6d040c0d069a0ffca9a8a49e7a31aa30e7f","integrity":"sha256-SM4cKDe7gGpqr4t6mHi20EDA0Gmg/8qaiknnoxqjDn8="},"flags/1x1/cn-e6be64c6c4a976e64d39bfe8a6ae4a5b1d38a6aa1b138ddcacf34a942dff50bc.svg":{"logical_path":"flags/1x1/cn.svg","mtime":"2018-04-02T14:38:31+02:00","size":746,"digest":"e6be64c6c4a976e64d39bfe8a6ae4a5b1d38a6aa1b138ddcacf34a942dff50bc","integrity":"sha256-5r5kxsSpduZNOb/opq5KWx04pqobE43crPNKlC3/ULw="},"flags/4x3/co-648d3ff596a0ecf3e85ac17c53abe1d7ca4759688e10a7a3a8b56f096ba6b6f7.svg":{"logical_path":"flags/4x3/co.svg","mtime":"2018-04-02T14:38:31+02:00","size":292,"digest":"648d3ff596a0ecf3e85ac17c53abe1d7ca4759688e10a7a3a8b56f096ba6b6f7","integrity":"sha256-ZI0/9Zag7PPoWsF8U6vh18pHWWiOEKejqLVvCWumtvc="},"flags/1x1/co-d3c16180c6bce630f762aff789104d10e9dbc949e740535a61396cd0ec34c1a1.svg":{"logical_path":"flags/1x1/co.svg","mtime":"2018-04-02T14:38:31+02:00","size":292,"digest":"d3c16180c6bce630f762aff789104d10e9dbc949e740535a61396cd0ec34c1a1","integrity":"sha256-08FhgMa85jD3Yq/3iRBNEOnbyUnnQFNaYTls0Ow0waE="},"flags/4x3/cr-84aec60f19bd33e1ac1a209155fec8d372e17cb59dc1346bb9124e5cc867375d.svg":{"logical_path":"flags/4x3/cr.svg","mtime":"2018-04-02T14:38:31+02:00","size":296,"digest":"84aec60f19bd33e1ac1a209155fec8d372e17cb59dc1346bb9124e5cc867375d","integrity":"sha256-hK7GDxm9M+GsGiCRVf7I03LhfLWdwTRruRJOXMhnN10="},"flags/1x1/cr-5371cf8bc5ad1a805155c1b3065e420a0a418c8d63b472bc545890289a365b35.svg":{"logical_path":"flags/1x1/cr.svg","mtime":"2018-04-02T14:38:31+02:00","size":296,"digest":"5371cf8bc5ad1a805155c1b3065e420a0a418c8d63b472bc545890289a365b35","integrity":"sha256-U3HPi8WtGoBRVcGzBl5CCgpBjI1jtHK8VFiQKJo2WzU="},"flags/4x3/cu-bb3f857e02aeab606120d9f164283f07a44b227f12aad7d6d344c7579f7b3ff0.svg":{"logical_path":"flags/4x3/cu.svg","mtime":"2018-04-02T14:38:31+02:00","size":619,"digest":"bb3f857e02aeab606120d9f164283f07a44b227f12aad7d6d344c7579f7b3ff0","integrity":"sha256-uz+FfgKuq2BhINnxZCg/B6RLIn8SqtfW00THV597P/A="},"flags/1x1/cu-02c0054169b874a8d231de1f45b2d0884de48848157734e0ddcd0f684c05c18d.svg":{"logical_path":"flags/1x1/cu.svg","mtime":"2018-04-02T14:38:31+02:00","size":576,"digest":"02c0054169b874a8d231de1f45b2d0884de48848157734e0ddcd0f684c05c18d","integrity":"sha256-AsAFQWm4dKjSMd4fRbLQiE3kiEgVdzTg3c0PaEwFwY0="},"flags/4x3/cv-90ee90ab59713454a218d8c300c71139e62655de80bfbea81df93142a529b81f.svg":{"logical_path":"flags/4x3/cv.svg","mtime":"2018-04-02T14:38:31+02:00","size":1414,"digest":"90ee90ab59713454a218d8c300c71139e62655de80bfbea81df93142a529b81f","integrity":"sha256-kO6Qq1lxNFSiGNjDAMcROeYmVd6Av76oHfkxQqUpuB8="},"flags/1x1/cv-2cf3eede97a468d28459ccc2271c28bb5b6029af2388b0301f6203be55e49308.svg":{"logical_path":"flags/1x1/cv.svg","mtime":"2018-04-02T14:38:31+02:00","size":1362,"digest":"2cf3eede97a468d28459ccc2271c28bb5b6029af2388b0301f6203be55e49308","integrity":"sha256-LPPu3pekaNKEWczCJxwou1tgKa8jiLAwH2IDvlXkkwg="},"flags/4x3/cw-d46beb7b10b40fa82cfd40eb86a3b3879f59f5da2a2f5ef91d121ab9b16c0aad.svg":{"logical_path":"flags/4x3/cw.svg","mtime":"2018-04-02T14:38:31+02:00","size":678,"digest":"d46beb7b10b40fa82cfd40eb86a3b3879f59f5da2a2f5ef91d121ab9b16c0aad","integrity":"sha256-1GvrexC0D6gs/UDrhqOzh59Z9doqL175HRIaubFsCq0="},"flags/1x1/cw-ba78c834e61b24a8a2b6bc7c80ab9f14e42c3c69415941ddb7c8c1f652ccd8b5.svg":{"logical_path":"flags/1x1/cw.svg","mtime":"2018-04-02T14:38:31+02:00","size":685,"digest":"ba78c834e61b24a8a2b6bc7c80ab9f14e42c3c69415941ddb7c8c1f652ccd8b5","integrity":"sha256-unjINOYbJKiitrx8gKufFOQsPGlBWUHdt8jB9lLM2LU="},"flags/4x3/cx-28187fb9d91bedc6f239b107d26eb6ec1cc2a0c7730810306c5a6b313c14f2b2.svg":{"logical_path":"flags/4x3/cx.svg","mtime":"2018-04-02T14:38:31+02:00","size":2469,"digest":"28187fb9d91bedc6f239b107d26eb6ec1cc2a0c7730810306c5a6b313c14f2b2","integrity":"sha256-KBh/udkb7cbyObEH0m627BzCoMdzCBAwbFprMTwU8rI="},"flags/1x1/cx-8ebe073d997f93d092a493300ea1d234c91aef80c6e8f431e88aa7f8e724f9a6.svg":{"logical_path":"flags/1x1/cx.svg","mtime":"2018-04-02T14:38:31+02:00","size":2508,"digest":"8ebe073d997f93d092a493300ea1d234c91aef80c6e8f431e88aa7f8e724f9a6","integrity":"sha256-jr4HPZl/k9CSpJMwDqHSNMka74DG6PQx6Iqn+Ock+aY="},"flags/4x3/cy-8d633ecabc7968bb8a869c62545f122aacbbc3e108c25ceb421bb8bc8734b9be.svg":{"logical_path":"flags/4x3/cy.svg","mtime":"2018-04-02T14:38:31+02:00","size":5949,"digest":"8d633ecabc7968bb8a869c62545f122aacbbc3e108c25ceb421bb8bc8734b9be","integrity":"sha256-jWM+yrx5aLuKhpxiVF8SKqy7w+EIwlzrQhu4vIc0ub4="},"flags/1x1/cy-6ef37fdd7518f18727bec1ed9741bb4d1f854dde7ef1a7e9fd2f4ba6291a7790.svg":{"logical_path":"flags/1x1/cy.svg","mtime":"2018-04-02T14:38:31+02:00","size":6053,"digest":"6ef37fdd7518f18727bec1ed9741bb4d1f854dde7ef1a7e9fd2f4ba6291a7790","integrity":"sha256-bvN/3XUY8YcnvsHtl0G7TR+FTd5+8afp/S9Lpikad5A="},"flags/4x3/cz-6c94e3d53fc1ae5982d8eb058b76d86f07d3fb4cd325698fea3291fa35504c56.svg":{"logical_path":"flags/4x3/cz.svg","mtime":"2018-04-02T14:38:31+02:00","size":481,"digest":"6c94e3d53fc1ae5982d8eb058b76d86f07d3fb4cd325698fea3291fa35504c56","integrity":"sha256-bJTj1T/BrlmC2OsFi3bYbwfT+0zTJWmP6jKR+jVQTFY="},"flags/1x1/cz-af9898ebd32559cdbea2fd17b351e5eedafccada6fbc6a2b7952cad78369817e.svg":{"logical_path":"flags/1x1/cz.svg","mtime":"2018-04-02T14:38:31+02:00","size":483,"digest":"af9898ebd32559cdbea2fd17b351e5eedafccada6fbc6a2b7952cad78369817e","integrity":"sha256-r5iY69MlWc2+ov0Xs1Hl7tr8ytpvvGoreVLK14NpgX4="},"flags/4x3/de-e7323083675d25107c85f0cea6534bd21d21e77e6d524d92e1b2d0a4e21117a1.svg":{"logical_path":"flags/4x3/de.svg","mtime":"2018-04-02T14:38:31+02:00","size":216,"digest":"e7323083675d25107c85f0cea6534bd21d21e77e6d524d92e1b2d0a4e21117a1","integrity":"sha256-5zIwg2ddJRB8hfDOplNL0h0h535tUk2S4bLQpOIRF6E="},"flags/1x1/de-fdb60146952d3b2d104310b28882a0ecde44d808240c3bab2cd6c302a538b266.svg":{"logical_path":"flags/1x1/de.svg","mtime":"2018-04-02T14:38:31+02:00","size":224,"digest":"fdb60146952d3b2d104310b28882a0ecde44d808240c3bab2cd6c302a538b266","integrity":"sha256-/bYBRpUtOy0QQxCyiIKg7N5E2AgkDDurLNbDAqU4smY="},"flags/4x3/dj-546da4a0dae9b1ab74dc6ac6076d0c706f37ef2a0d799342dd0345e11f770f03.svg":{"logical_path":"flags/4x3/dj.svg","mtime":"2018-04-02T14:38:31+02:00","size":588,"digest":"546da4a0dae9b1ab74dc6ac6076d0c706f37ef2a0d799342dd0345e11f770f03","integrity":"sha256-VG2koNrpsat03GrGB20McG837yoNeZNC3QNF4R93DwM="},"flags/1x1/dj-c0481b667f003d9d5a3c93861023a97a98224227ac19aa7e07b5b6edd35fe900.svg":{"logical_path":"flags/1x1/dj.svg","mtime":"2018-04-02T14:38:31+02:00","size":588,"digest":"c0481b667f003d9d5a3c93861023a97a98224227ac19aa7e07b5b6edd35fe900","integrity":"sha256-wEgbZn8APZ1aPJOGECOpepgiQiesGap+B7W27dNf6QA="},"flags/4x3/dk-a13735c0337ab4679cd8679508bf5e8067637ab611ca5c54172c621d740420e5.svg":{"logical_path":"flags/4x3/dk.svg","mtime":"2018-04-02T14:38:31+02:00","size":242,"digest":"a13735c0337ab4679cd8679508bf5e8067637ab611ca5c54172c621d740420e5","integrity":"sha256-oTc1wDN6tGec2GeVCL9egGdjerYRylxUFyxiHXQEIOU="},"flags/1x1/dk-822a3b8b6948f49aa81fe7620bd173453d9a45406a9680f24bad7e714e58cb7c.svg":{"logical_path":"flags/1x1/dk.svg","mtime":"2018-04-02T14:38:31+02:00","size":238,"digest":"822a3b8b6948f49aa81fe7620bd173453d9a45406a9680f24bad7e714e58cb7c","integrity":"sha256-gio7i2lI9JqoH+diC9FzRT2aRUBqloDyS61+cU5Yy3w="},"flags/4x3/dm-7713fabd3cf341694b4c1ef5d1379820773722b61c190234ac7416f2872e3940.svg":{"logical_path":"flags/4x3/dm.svg","mtime":"2018-04-02T14:38:31+02:00","size":16026,"digest":"7713fabd3cf341694b4c1ef5d1379820773722b61c190234ac7416f2872e3940","integrity":"sha256-dxP6vTzzQWlLTB710TeYIHc3IrYcGQI0rHQW8ocuOUA="},"flags/1x1/dm-33d984fc9897bb2a3bd16c6672b876effc1a8adc0c57ad122a16db54061e4e46.svg":{"logical_path":"flags/1x1/dm.svg","mtime":"2018-04-02T14:38:31+02:00","size":16514,"digest":"33d984fc9897bb2a3bd16c6672b876effc1a8adc0c57ad122a16db54061e4e46","integrity":"sha256-M9mE/JiXuyo70Wxmcrh27/waitwMV60SKhbbVAYeTkY="},"flags/4x3/do-714b6f307ea3a9c3d30348684b8574e8b7f5078f51649dfa97ae2a69a7108b4a.svg":{"logical_path":"flags/4x3/do.svg","mtime":"2018-04-02T14:38:31+02:00","size":394146,"digest":"714b6f307ea3a9c3d30348684b8574e8b7f5078f51649dfa97ae2a69a7108b4a","integrity":"sha256-cUtvMH6jqcPTA0hoS4V06Lf1B49RZJ36l64qaacQi0o="},"flags/1x1/do-d37306c4b346f89ea14739144374caad69652be31e8ce8e2504c9a0d422a4857.svg":{"logical_path":"flags/1x1/do.svg","mtime":"2018-04-02T14:38:31+02:00","size":391714,"digest":"d37306c4b346f89ea14739144374caad69652be31e8ce8e2504c9a0d422a4857","integrity":"sha256-03MGxLNG+J6hRzkUQ3TKrWllK+MejOjiUEyaDUIqSFc="},"flags/4x3/dz-a96e943c830558fe9823044aac2bfb3f6a4caf3bd3c57943352280a7f6b68cb1.svg":{"logical_path":"flags/4x3/dz.svg","mtime":"2018-04-02T14:38:31+02:00","size":301,"digest":"a96e943c830558fe9823044aac2bfb3f6a4caf3bd3c57943352280a7f6b68cb1","integrity":"sha256-qW6UPIMFWP6YIwRKrCv7P2pMrzvTxXlDNSKAp/a2jLE="},"flags/1x1/dz-09400d3b2c58e641a1641a687b81476761d05f9d0ff65861aeaa33c7f508cda4.svg":{"logical_path":"flags/1x1/dz.svg","mtime":"2018-04-02T14:38:31+02:00","size":312,"digest":"09400d3b2c58e641a1641a687b81476761d05f9d0ff65861aeaa33c7f508cda4","integrity":"sha256-CUANOyxY5kGhZBpoe4FHZ2HQX50P9lhhrqozx/UIzaQ="},"flags/4x3/ec-6762ba85ea0f7bb289b0aa6219c797e5243103d281b1462c61b61030fa329d5e.svg":{"logical_path":"flags/4x3/ec.svg","mtime":"2018-04-02T14:38:31+02:00","size":29417,"digest":"6762ba85ea0f7bb289b0aa6219c797e5243103d281b1462c61b61030fa329d5e","integrity":"sha256-Z2K6heoPe7KJsKpiGceX5SQxA9KBsUYsYbYQMPoynV4="},"flags/1x1/ec-7410a75a013738fbb8cbd756d967380e02ae54ca74e9ef9a41c4b583c2c2794f.svg":{"logical_path":"flags/1x1/ec.svg","mtime":"2018-04-02T14:38:31+02:00","size":29972,"digest":"7410a75a013738fbb8cbd756d967380e02ae54ca74e9ef9a41c4b583c2c2794f","integrity":"sha256-dBCnWgE3OPu4y9dW2Wc4DgKuVMp06e+aQcS1g8LCeU8="},"flags/4x3/ee-ce3b622214bd9eefb43373cae2811ea8cf6ef6a16bb6afbaa5bcaaea34024da0.svg":{"logical_path":"flags/4x3/ee.svg","mtime":"2018-04-02T14:38:31+02:00","size":324,"digest":"ce3b622214bd9eefb43373cae2811ea8cf6ef6a16bb6afbaa5bcaaea34024da0","integrity":"sha256-zjtiIhS9nu+0M3PK4oEeqM9u9qFrtq+6pbyq6jQCTaA="},"flags/1x1/ee-a207a8363b4dde44f59951501c2cb539419e92b0814b25d6448710ced52226f8.svg":{"logical_path":"flags/1x1/ee.svg","mtime":"2018-04-02T14:38:31+02:00","size":355,"digest":"a207a8363b4dde44f59951501c2cb539419e92b0814b25d6448710ced52226f8","integrity":"sha256-ogeoNjtN3kT1mVFQHCy1OUGekrCBSyXWRIcQztUiJvg="},"flags/4x3/eg-16a11fa93856ddc5fd46f8811adfc93660175724b20eaab55ff046855a352d2c.svg":{"logical_path":"flags/4x3/eg.svg","mtime":"2018-04-02T14:38:31+02:00","size":9978,"digest":"16a11fa93856ddc5fd46f8811adfc93660175724b20eaab55ff046855a352d2c","integrity":"sha256-FqEfqThW3cX9RviBGt/JNmAXVySyDqq1X/BGhVo1LSw="},"flags/1x1/eg-9f4d098c604326bbc3692f9e2f335dbc9b34bdf2706565bf448380f0a889d1e2.svg":{"logical_path":"flags/1x1/eg.svg","mtime":"2018-04-02T14:38:31+02:00","size":9992,"digest":"9f4d098c604326bbc3692f9e2f335dbc9b34bdf2706565bf448380f0a889d1e2","integrity":"sha256-n00JjGBDJrvDaS+eLzNdvJs0vfJwZWW/RIOA8KiJ0eI="},"flags/4x3/eh-9cf4a74d29c1a1afc4137deeb5b678d55c8fbdf8d181217267f3a5cce6a76a97.svg":{"logical_path":"flags/4x3/eh.svg","mtime":"2018-04-02T14:38:31+02:00","size":878,"digest":"9cf4a74d29c1a1afc4137deeb5b678d55c8fbdf8d181217267f3a5cce6a76a97","integrity":"sha256-nPSnTSnBoa/EE33utbZ41VyPvfjRgSFyZ/OlzOanapc="},"flags/1x1/eh-16c3327dbcf3483e634b3536b056324b5478212dae6d060f2ffb2ec961cd382f.svg":{"logical_path":"flags/1x1/eh.svg","mtime":"2018-04-02T14:38:31+02:00","size":828,"digest":"16c3327dbcf3483e634b3536b056324b5478212dae6d060f2ffb2ec961cd382f","integrity":"sha256-FsMyfbzzSD5jSzU2sFYyS1R4IS2ubQYPL/suyWHNOC8="},"flags/4x3/er-69a1e1e45289d1282df4b1e5ce5e712d69fbe314abd0c922353fce90814c543e.svg":{"logical_path":"flags/4x3/er.svg","mtime":"2018-04-02T14:38:31+02:00","size":3207,"digest":"69a1e1e45289d1282df4b1e5ce5e712d69fbe314abd0c922353fce90814c543e","integrity":"sha256-aaHh5FKJ0Sgt9LHlzl5xLWn74xSr0MkiNT/OkIFMVD4="},"flags/1x1/er-90d49408e58955cf1cf3185b0193e03c4a107042d47ef5e975dbbe10c6ef7f4a.svg":{"logical_path":"flags/1x1/er.svg","mtime":"2018-04-02T14:38:31+02:00","size":3395,"digest":"90d49408e58955cf1cf3185b0193e03c4a107042d47ef5e975dbbe10c6ef7f4a","integrity":"sha256-kNSUCOWJVc8c8xhbAZPgPEoQcELUfvXpddu+EMbvf0o="},"flags/4x3/es-50e59681c6b6412498bd9cbfc473abedc713db75c54c538b839db3c394d64499.svg":{"logical_path":"flags/4x3/es.svg","mtime":"2018-04-02T14:38:31+02:00","size":92574,"digest":"50e59681c6b6412498bd9cbfc473abedc713db75c54c538b839db3c394d64499","integrity":"sha256-UOWWgca2QSSYvZy/xHOr7ccT23XFTFOLg52zw5TWRJk="},"flags/1x1/es-29c68fa3c9c8c2adacdc2eb0162e9c2fa998faa408836900ec6285000476800d.svg":{"logical_path":"flags/1x1/es.svg","mtime":"2018-04-02T14:38:31+02:00","size":94269,"digest":"29c68fa3c9c8c2adacdc2eb0162e9c2fa998faa408836900ec6285000476800d","integrity":"sha256-KcaPo8nIwq2s3C6wFi6cL6mY+qQIg2kA7GKFAAR2gA0="},"flags/4x3/et-14263ba7ea890fd0a4d89a2791343ecb7acc89aab1fc2593e00a6093b22251df.svg":{"logical_path":"flags/4x3/et.svg","mtime":"2018-04-02T14:38:31+02:00","size":1243,"digest":"14263ba7ea890fd0a4d89a2791343ecb7acc89aab1fc2593e00a6093b22251df","integrity":"sha256-FCY7p+qJD9Ck2JonkTQ+y3rMiaqx/CWT4Apgk7IiUd8="},"flags/1x1/et-086eefb70e9adad537cc1c640a72cc0fa843ec7a9b06b2778aa98b2db055bfe6.svg":{"logical_path":"flags/1x1/et.svg","mtime":"2018-04-02T14:38:31+02:00","size":1242,"digest":"086eefb70e9adad537cc1c640a72cc0fa843ec7a9b06b2778aa98b2db055bfe6","integrity":"sha256-CG7vtw6a2tU3zBxkCnLMD6hD7HqbBrJ3iqmLLbBVv+Y="},"flags/4x3/fi-a4c41caa02a4f6803ea0d6c36de4beebf20d150e3df742b1369a4099c2ff648e.svg":{"logical_path":"flags/4x3/fi.svg","mtime":"2018-04-02T14:38:31+02:00","size":240,"digest":"a4c41caa02a4f6803ea0d6c36de4beebf20d150e3df742b1369a4099c2ff648e","integrity":"sha256-pMQcqgKk9oA+oNbDbeS+6/INFQ4990KxNppAmcL/ZI4="},"flags/1x1/fi-c5fdf318fac5fdfc94fe54268618e58a2bc5933617ead09992900f90cc25de9a.svg":{"logical_path":"flags/1x1/fi.svg","mtime":"2018-04-02T14:38:31+02:00","size":243,"digest":"c5fdf318fac5fdfc94fe54268618e58a2bc5933617ead09992900f90cc25de9a","integrity":"sha256-xf3zGPrF/fyU/lQmhhjliivFkzYX6tCZkpAPkMwl3po="},"flags/4x3/fj-cb0cc4b3b5c202f07487ee519f48b3eadb47035f5f2d5d3f99d20f81e48d6b79.svg":{"logical_path":"flags/4x3/fj.svg","mtime":"2018-04-02T14:38:31+02:00","size":27388,"digest":"cb0cc4b3b5c202f07487ee519f48b3eadb47035f5f2d5d3f99d20f81e48d6b79","integrity":"sha256-ywzEs7XCAvB0h+5Rn0iz6ttHA19fLV0/mdIPgeSNa3k="},"flags/1x1/fj-c2c7fd536841925e7647b2d510d6a0c58700e2a8ded0e42008fb93ffacde101f.svg":{"logical_path":"flags/1x1/fj.svg","mtime":"2018-04-02T14:38:31+02:00","size":27519,"digest":"c2c7fd536841925e7647b2d510d6a0c58700e2a8ded0e42008fb93ffacde101f","integrity":"sha256-wsf9U2hBkl52R7LVENagxYcA4qje0OQgCPuT/6zeEB8="},"flags/4x3/fk-cb61eaa0d7221823f7d17de59ea88ed16b506f9585ab0c7291cf839449d82968.svg":{"logical_path":"flags/4x3/fk.svg","mtime":"2018-04-02T14:38:31+02:00","size":30453,"digest":"cb61eaa0d7221823f7d17de59ea88ed16b506f9585ab0c7291cf839449d82968","integrity":"sha256-y2HqoNciGCP30X3lnqiO0WtQb5WFqwxykc+DlEnYKWg="},"flags/1x1/fk-a871742380ae157d1211a63cc35cd3621b1bf6de6d67e4a8e3565ad200b1d8cf.svg":{"logical_path":"flags/1x1/fk.svg","mtime":"2018-04-02T14:38:31+02:00","size":30648,"digest":"a871742380ae157d1211a63cc35cd3621b1bf6de6d67e4a8e3565ad200b1d8cf","integrity":"sha256-qHF0I4CuFX0SEaY8w1zTYhsb9t5tZ+So41Za0gCx2M8="},"flags/4x3/fm-079b937562a9a412aae8fb762b571ddb49bf23627943c97247b6a9bbdb768153.svg":{"logical_path":"flags/4x3/fm.svg","mtime":"2018-04-02T14:38:31+02:00","size":773,"digest":"079b937562a9a412aae8fb762b571ddb49bf23627943c97247b6a9bbdb768153","integrity":"sha256-B5uTdWKppBKq6Pt2K1cd20m/I2J5Q8lyR7apu9t2gVM="},"flags/1x1/fm-dbec73633ecd8a6c50f56d54df36bbe6a2f8fb534ac7658477c82cad14a806a8.svg":{"logical_path":"flags/1x1/fm.svg","mtime":"2018-04-02T14:38:31+02:00","size":763,"digest":"dbec73633ecd8a6c50f56d54df36bbe6a2f8fb534ac7658477c82cad14a806a8","integrity":"sha256-2+xzYz7NimxQ9W1U3za75qL4+1NKx2WEd8gsrRSoBqg="},"flags/4x3/fo-27279c2481bb1cb3e44850a948987d6a8411acffa770c3aecd1b76d4c5853413.svg":{"logical_path":"flags/4x3/fo.svg","mtime":"2018-04-02T14:38:31+02:00","size":567,"digest":"27279c2481bb1cb3e44850a948987d6a8411acffa770c3aecd1b76d4c5853413","integrity":"sha256-JyecJIG7HLPkSFCpSJh9aoQRrP+ncMOuzRt21MWFNBM="},"flags/1x1/fo-7cb4fdbba1c7223702d843cb0709ddc799f89f909dfe101e3e36d6bf36c3e67f.svg":{"logical_path":"flags/1x1/fo.svg","mtime":"2018-04-02T14:38:31+02:00","size":537,"digest":"7cb4fdbba1c7223702d843cb0709ddc799f89f909dfe101e3e36d6bf36c3e67f","integrity":"sha256-fLT9u6HHIjcC2EPLBwndx5n4n5Cd/hAePjbWvzbD5n8="},"flags/4x3/fr-30ed2f68dc9a17927643640f48f3d2a858bd041770547035349c6e79713cd84e.svg":{"logical_path":"flags/4x3/fr.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"30ed2f68dc9a17927643640f48f3d2a858bd041770547035349c6e79713cd84e","integrity":"sha256-MO0vaNyaF5J2Q2QPSPPSqFi9BBdwVHA1NJxueXE82E4="},"flags/1x1/fr-6b849151204c66fa661c30b34e62919a13b9e66b7cd37a4fc8962e8e0baf9bdc.svg":{"logical_path":"flags/1x1/fr.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"6b849151204c66fa661c30b34e62919a13b9e66b7cd37a4fc8962e8e0baf9bdc","integrity":"sha256-a4SRUSBMZvpmHDCzTmKRmhO55mt803pPyJYujguvm9w="},"flags/4x3/ga-e3840f9d5bd6ee08db748d37a534500b837bee0f8ce65987b2f099a6afd2cc63.svg":{"logical_path":"flags/4x3/ga.svg","mtime":"2018-04-02T14:38:31+02:00","size":277,"digest":"e3840f9d5bd6ee08db748d37a534500b837bee0f8ce65987b2f099a6afd2cc63","integrity":"sha256-44QPnVvW7gjbdI03pTRQC4N77g+M5lmHsvCZpq/SzGM="},"flags/1x1/ga-9eafd5388042b3d2258ac6223075b726426210136b9851b637973105721b64d9.svg":{"logical_path":"flags/1x1/ga.svg","mtime":"2018-04-02T14:38:31+02:00","size":281,"digest":"9eafd5388042b3d2258ac6223075b726426210136b9851b637973105721b64d9","integrity":"sha256-nq/VOIBCs9IlisYiMHW3JkJiEBNrmFG2N5cxBXIbZNk="},"flags/4x3/gb-ce93c8a6b974d63998e263f6d25f898fc20580a28464457f2f4463b687e4fe8d.svg":{"logical_path":"flags/4x3/gb.svg","mtime":"2018-04-02T14:38:31+02:00","size":834,"digest":"ce93c8a6b974d63998e263f6d25f898fc20580a28464457f2f4463b687e4fe8d","integrity":"sha256-zpPIprl01jmY4mP20l+Jj8IFgKKEZEV/L0Rjtofk/o0="},"flags/1x1/gb-1d93e1ce2e2e10c1709e4dc50ac956c007b2c1a63a4bc22ddfd64354f79ad457.svg":{"logical_path":"flags/1x1/gb.svg","mtime":"2018-04-02T14:38:31+02:00","size":792,"digest":"1d93e1ce2e2e10c1709e4dc50ac956c007b2c1a63a4bc22ddfd64354f79ad457","integrity":"sha256-HZPhzi4uEMFwnk3FCslWwAeywaY6S8It39ZDVPea1Fc="},"flags/4x3/gd-7c3a6b6068bbd9a6abc98c2297dd4acd5e31022e5a4210fc0e1205ec28498fa2.svg":{"logical_path":"flags/4x3/gd.svg","mtime":"2018-04-02T14:38:31+02:00","size":1694,"digest":"7c3a6b6068bbd9a6abc98c2297dd4acd5e31022e5a4210fc0e1205ec28498fa2","integrity":"sha256-fDprYGi72aaryYwil91KzV4xAi5aQhD8DhIF7ChJj6I="},"flags/1x1/gd-2310bc03d9e8ddc8599b40891bfb10b812b07023881599a7e02e3028d1bc9ca8.svg":{"logical_path":"flags/1x1/gd.svg","mtime":"2018-04-02T14:38:31+02:00","size":1834,"digest":"2310bc03d9e8ddc8599b40891bfb10b812b07023881599a7e02e3028d1bc9ca8","integrity":"sha256-IxC8A9no3chZm0CJG/sQuBKwcCOIFZmn4C4wKNG8nKg="},"flags/4x3/ge-501c0135fb8c377dbd2859ff6290b47ef4907a8e2ab2ae1e39116b716db6795f.svg":{"logical_path":"flags/4x3/ge.svg","mtime":"2018-04-02T14:38:31+02:00","size":1400,"digest":"501c0135fb8c377dbd2859ff6290b47ef4907a8e2ab2ae1e39116b716db6795f","integrity":"sha256-UBwBNfuMN329KFn/YpC0fvSQeo4qsq4eORFrcW22eV8="},"flags/1x1/ge-ca9ee36883ec12048fbb7fbbfaf231c0d4848ae0b07dab74a46d53b7b34d8114.svg":{"logical_path":"flags/1x1/ge.svg","mtime":"2018-04-02T14:38:31+02:00","size":1544,"digest":"ca9ee36883ec12048fbb7fbbfaf231c0d4848ae0b07dab74a46d53b7b34d8114","integrity":"sha256-yp7jaIPsEgSPu3+7+vIxwNSEiuCwfat0pG1Tt7NNgRQ="},"flags/4x3/gf-7c165f90bfe6ac3674903632182221a992f017ff706354b1761002382e89c2c2.svg":{"logical_path":"flags/4x3/gf.svg","mtime":"2018-04-02T14:38:31+02:00","size":261,"digest":"7c165f90bfe6ac3674903632182221a992f017ff706354b1761002382e89c2c2","integrity":"sha256-fBZfkL/mrDZ0kDYyGCIhqZLwF/9wY1SxdhACOC6JwsI="},"flags/1x1/gf-8838337b15cdcf143fac16c714e8dbf2d893d2ea8f1c8ef06dadcb652dfec41c.svg":{"logical_path":"flags/1x1/gf.svg","mtime":"2018-04-02T14:38:31+02:00","size":264,"digest":"8838337b15cdcf143fac16c714e8dbf2d893d2ea8f1c8ef06dadcb652dfec41c","integrity":"sha256-iDgzexXNzxQ/rBbHFOjb8tiT0uqPHI7wba3LZS3+xBw="},"flags/4x3/gg-2c7bfc50d5bcd374b5f6107974d06af24e70edba31ad71a225e0c2ecc2d6e778.svg":{"logical_path":"flags/4x3/gg.svg","mtime":"2018-04-02T14:38:31+02:00","size":598,"digest":"2c7bfc50d5bcd374b5f6107974d06af24e70edba31ad71a225e0c2ecc2d6e778","integrity":"sha256-LHv8UNW803S19hB5dNBq8k5w7boxrXGiJeDC7MLW53g="},"flags/1x1/gg-509489b1792831bb27d6975c76aa0a2ac2fa2c3906bcf844f616de5e0fbbc359.svg":{"logical_path":"flags/1x1/gg.svg","mtime":"2018-04-02T14:38:31+02:00","size":628,"digest":"509489b1792831bb27d6975c76aa0a2ac2fa2c3906bcf844f616de5e0fbbc359","integrity":"sha256-UJSJsXkoMbsn1pdcdqoKKsL6LDkGvPhE9hbeXg+7w1k="},"flags/4x3/gh-79c187756e93df22fae571ad9419629c5247c016e32a74471e0d461048fdf5cf.svg":{"logical_path":"flags/4x3/gh.svg","mtime":"2018-04-02T14:38:31+02:00","size":286,"digest":"79c187756e93df22fae571ad9419629c5247c016e32a74471e0d461048fdf5cf","integrity":"sha256-ecGHdW6T3yL65XGtlBlinFJHwBbjKnRHHg1GEEj99c8="},"flags/1x1/gh-e7bf18e6337982ee31e3673ab93e722b3410b7a4c202656a4bc3887d8656286b.svg":{"logical_path":"flags/1x1/gh.svg","mtime":"2018-04-02T14:38:31+02:00","size":299,"digest":"e7bf18e6337982ee31e3673ab93e722b3410b7a4c202656a4bc3887d8656286b","integrity":"sha256-578Y5jN5gu4x42c6uT5yKzQQt6TCAmVqS8OIfYZWKGs="},"flags/4x3/gi-ed99b369c8c77e64abd59fab1f28155d71b4378b49625c66ab0ab6dff4f88087.svg":{"logical_path":"flags/4x3/gi.svg","mtime":"2018-04-02T14:38:31+02:00","size":2972,"digest":"ed99b369c8c77e64abd59fab1f28155d71b4378b49625c66ab0ab6dff4f88087","integrity":"sha256-7ZmzacjHfmSr1Z+rHygVXXG0N4tJYlxmqwq23/T4gIc="},"flags/1x1/gi-2e563e96e766e13c0a9c5a3a372059a44739bb696e853d71a6f6b08c491dfb9a.svg":{"logical_path":"flags/1x1/gi.svg","mtime":"2018-04-02T14:38:31+02:00","size":2964,"digest":"2e563e96e766e13c0a9c5a3a372059a44739bb696e853d71a6f6b08c491dfb9a","integrity":"sha256-LlY+ludm4TwKnFo6NyBZpEc5u2luhT1xpvawjEkd+5o="},"flags/4x3/gl-612e560dbad68d540be672b80e22c54db43d6e2070523e81c156ccd6b3fc4260.svg":{"logical_path":"flags/4x3/gl.svg","mtime":"2018-04-02T14:38:31+02:00","size":229,"digest":"612e560dbad68d540be672b80e22c54db43d6e2070523e81c156ccd6b3fc4260","integrity":"sha256-YS5WDbrWjVQL5nK4DiLFTbQ9biBwUj6BwVbM1rP8QmA="},"flags/1x1/gl-a9bb35d2b9ff27638658d9ad6b9e2c4f452072b9a80b508d32e76d37bf62cf6e.svg":{"logical_path":"flags/1x1/gl.svg","mtime":"2018-04-02T14:38:31+02:00","size":243,"digest":"a9bb35d2b9ff27638658d9ad6b9e2c4f452072b9a80b508d32e76d37bf62cf6e","integrity":"sha256-qbs10rn/J2OGWNmta54sT0UgcrmoC1CNMudtN79iz24="},"flags/4x3/gm-4a6f9670a41548cceaced2b728e4bc56acbc4a3ba5544e7a097f7dae7a8bb045.svg":{"logical_path":"flags/4x3/gm.svg","mtime":"2018-04-02T14:38:31+02:00","size":543,"digest":"4a6f9670a41548cceaced2b728e4bc56acbc4a3ba5544e7a097f7dae7a8bb045","integrity":"sha256-Sm+WcKQVSMzqztK3KOS8Vqy8SjulVE56CX99rnqLsEU="},"flags/1x1/gm-b67f9f6bce2f8c8700c198de8bfafac72d01b8a1e55b77f71e8cafdc58f8af5c.svg":{"logical_path":"flags/1x1/gm.svg","mtime":"2018-04-02T14:38:31+02:00","size":385,"digest":"b67f9f6bce2f8c8700c198de8bfafac72d01b8a1e55b77f71e8cafdc58f8af5c","integrity":"sha256-tn+fa84vjIcAwZjei/r6xy0BuKHlW3f3Hoyv3Fj4r1w="},"flags/4x3/gn-873b4eb52f34c7558bef93cfd1b82117b5c32c9fbc0610f8821ccd22f28abe28.svg":{"logical_path":"flags/4x3/gn.svg","mtime":"2018-04-02T14:38:31+02:00","size":298,"digest":"873b4eb52f34c7558bef93cfd1b82117b5c32c9fbc0610f8821ccd22f28abe28","integrity":"sha256-hztOtS80x1WL75PP0bghF7XDLJ+8BhD4ghzNIvKKvig="},"flags/1x1/gn-72f51dc30cf0ed5459ad0f239cf3043eac05ece75945bcaf4ea6653af868c504.svg":{"logical_path":"flags/1x1/gn.svg","mtime":"2018-04-02T14:38:31+02:00","size":298,"digest":"72f51dc30cf0ed5459ad0f239cf3043eac05ece75945bcaf4ea6653af868c504","integrity":"sha256-cvUdwwzw7VRZrQ8jnPMEPqwF7OdZRbyvTqZlOvhoxQQ="},"flags/4x3/gp-4559cad3eb2d173214161d16b0237c68f5c817749a39c862fa7b23dfb4aee923.svg":{"logical_path":"flags/4x3/gp.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"4559cad3eb2d173214161d16b0237c68f5c817749a39c862fa7b23dfb4aee923","integrity":"sha256-RVnK0+stFzIUFh0WsCN8aPXIF3SaOchi+nsj37Su6SM="},"flags/1x1/gp-d6669532054db5b7e441f4858c28920246a65ca3e8a15518c64c7bbb4f9c6416.svg":{"logical_path":"flags/1x1/gp.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"d6669532054db5b7e441f4858c28920246a65ca3e8a15518c64c7bbb4f9c6416","integrity":"sha256-1maVMgVNtbfkQfSFjCiSAkamXKPooVUYxkx7u0+cZBY="},"flags/4x3/gq-0c8dfe7f9543307056bbe6d6e44a16c17201228e5344d5afec1ccf1b9a5eb2f9.svg":{"logical_path":"flags/4x3/gq.svg","mtime":"2018-04-02T14:38:31+02:00","size":5188,"digest":"0c8dfe7f9543307056bbe6d6e44a16c17201228e5344d5afec1ccf1b9a5eb2f9","integrity":"sha256-DI3+f5VDMHBWu+bW5EoWwXIBIo5TRNWv7BzPG5pesvk="},"flags/1x1/gq-ecb761e6db59b9bf8ba37533eaf0c60b7fcc7c0dfa2fcf281ee84c970dcb10f8.svg":{"logical_path":"flags/1x1/gq.svg","mtime":"2018-04-02T14:38:31+02:00","size":5280,"digest":"ecb761e6db59b9bf8ba37533eaf0c60b7fcc7c0dfa2fcf281ee84c970dcb10f8","integrity":"sha256-7Ldh5ttZub+Lo3Uz6vDGC3/MfA36L88oHuhMlw3LEPg="},"flags/4x3/gr-4a4086310397bffa682d439be8650a9e28d94e32963b6411b61435292ac4cf80.svg":{"logical_path":"flags/4x3/gr.svg","mtime":"2018-04-02T14:38:31+02:00","size":818,"digest":"4a4086310397bffa682d439be8650a9e28d94e32963b6411b61435292ac4cf80","integrity":"sha256-SkCGMQOXv/poLUOb6GUKnijZTjKWO2QRthQ1KSrEz4A="},"flags/1x1/gr-0cbd171892c0568b055d3b6585d58ac13dd60dfbcfad16eda1f4f9ead11dd16f.svg":{"logical_path":"flags/1x1/gr.svg","mtime":"2018-04-02T14:38:31+02:00","size":875,"digest":"0cbd171892c0568b055d3b6585d58ac13dd60dfbcfad16eda1f4f9ead11dd16f","integrity":"sha256-DL0XGJLAVosFXTtlhdWKwT3WDfvPrRbtofT56tEd0W8="},"flags/4x3/gs-e45169a93a9e94c15f5cb765a6c863319171fb9b4dce56094411829cd688d486.svg":{"logical_path":"flags/4x3/gs.svg","mtime":"2018-04-02T14:38:31+02:00","size":34658,"digest":"e45169a93a9e94c15f5cb765a6c863319171fb9b4dce56094411829cd688d486","integrity":"sha256-5FFpqTqelMFfXLdlpshjMZFx+5tNzlYJRBGCnNaI1IY="},"flags/1x1/gs-3efc9e1b32961f9aa9d7faa2626e596282b63d049f6717c2378b28e3f508e79a.svg":{"logical_path":"flags/1x1/gs.svg","mtime":"2018-04-02T14:38:31+02:00","size":35151,"digest":"3efc9e1b32961f9aa9d7faa2626e596282b63d049f6717c2378b28e3f508e79a","integrity":"sha256-PvyeGzKWH5qp1/qiYm5ZYoK2PQSfZxfCN4so4/UI55o="},"flags/4x3/gt-64a7345cf66facf7f323d2142aebb4172191108a78ac7493b1a6077b78ac8ec5.svg":{"logical_path":"flags/4x3/gt.svg","mtime":"2018-04-02T14:38:31+02:00","size":37857,"digest":"64a7345cf66facf7f323d2142aebb4172191108a78ac7493b1a6077b78ac8ec5","integrity":"sha256-ZKc0XPZvrPfzI9IUKuu0FyGREIp4rHSTsaYHe3isjsU="},"flags/1x1/gt-436a2af3d95cf3cb13ded897f319cfd6e2c087d678ad0e971c198b0d2c029911.svg":{"logical_path":"flags/1x1/gt.svg","mtime":"2018-04-02T14:38:31+02:00","size":37857,"digest":"436a2af3d95cf3cb13ded897f319cfd6e2c087d678ad0e971c198b0d2c029911","integrity":"sha256-Q2oq89lc88sT3tiX8xnP1uLAh9Z4rQ6XHBmLDSwCmRE="},"flags/4x3/gu-f560822ee237e5277829e63613a615a2ee3d8cc6196dffffe0f0d56a49b11c53.svg":{"logical_path":"flags/4x3/gu.svg","mtime":"2018-04-02T14:38:31+02:00","size":4859,"digest":"f560822ee237e5277829e63613a615a2ee3d8cc6196dffffe0f0d56a49b11c53","integrity":"sha256-9WCCLuI35Sd4KeY2E6YVou49jMYZbf//4PDVakmxHFM="},"flags/1x1/gu-a71c9d290c66c1a0929b05436dc6a8229b1147d7cc62336e04c9adf697030450.svg":{"logical_path":"flags/1x1/gu.svg","mtime":"2018-04-02T14:38:31+02:00","size":4644,"digest":"a71c9d290c66c1a0929b05436dc6a8229b1147d7cc62336e04c9adf697030450","integrity":"sha256-pxydKQxmwaCSmwVDbcaoIpsRR9fMYjNuBMmt9pcDBFA="},"flags/4x3/gw-0dc9ec17735ed605b68672947ce55c49a4ec1551491ccd121f482c1875cdf219.svg":{"logical_path":"flags/4x3/gw.svg","mtime":"2018-04-02T14:38:31+02:00","size":816,"digest":"0dc9ec17735ed605b68672947ce55c49a4ec1551491ccd121f482c1875cdf219","integrity":"sha256-DcnsF3Ne1gW2hnKUfOVcSaTsFVFJHM0SH0gsGHXN8hk="},"flags/1x1/gw-7868c305e4a64b0d8ebfd3f7cb8c881841d71a7e0c3ead2683fe503c80de0674.svg":{"logical_path":"flags/1x1/gw.svg","mtime":"2018-04-02T14:38:31+02:00","size":892,"digest":"7868c305e4a64b0d8ebfd3f7cb8c881841d71a7e0c3ead2683fe503c80de0674","integrity":"sha256-eGjDBeSmSw2Ov9P3y4yIGEHXGn4MPq0mg/5QPIDeBnQ="},"flags/4x3/gy-c9126e544c62508abfb898f0af0bd79c46f4c767c9ed6f928418a24b0f246d85.svg":{"logical_path":"flags/4x3/gy.svg","mtime":"2018-04-02T14:38:31+02:00","size":491,"digest":"c9126e544c62508abfb898f0af0bd79c46f4c767c9ed6f928418a24b0f246d85","integrity":"sha256-yRJuVExiUIq/uJjwrwvXnEb0x2fJ7W+ShBiiSw8kbYU="},"flags/1x1/gy-0e3b849ce460f8ab1ec7cf66a25be1ba91e89b72d8b0aa679a0553464f37a972.svg":{"logical_path":"flags/1x1/gy.svg","mtime":"2018-04-02T14:38:31+02:00","size":484,"digest":"0e3b849ce460f8ab1ec7cf66a25be1ba91e89b72d8b0aa679a0553464f37a972","integrity":"sha256-DjuEnORg+Ksex89molvhupHom3LYsKpnmgVTRk83qXI="},"flags/4x3/hk-cece9126ccbf9151feadfed75791ebf32d4a16beab12f182404519d0cc24eec7.svg":{"logical_path":"flags/4x3/hk.svg","mtime":"2018-04-02T14:38:31+02:00","size":3511,"digest":"cece9126ccbf9151feadfed75791ebf32d4a16beab12f182404519d0cc24eec7","integrity":"sha256-zs6RJsy/kVH+rf7XV5Hr8y1KFr6rEvGCQEUZ0Mwk7sc="},"flags/1x1/hk-9fad00e06f9034877149394914baa2bc3292223b0e32df2b1f9399d4de6e167d.svg":{"logical_path":"flags/1x1/hk.svg","mtime":"2018-04-02T14:38:31+02:00","size":3561,"digest":"9fad00e06f9034877149394914baa2bc3292223b0e32df2b1f9399d4de6e167d","integrity":"sha256-n60A4G+QNIdxSTlJFLqivDKSIjsOMt8rH5OZ1N5uFn0="},"flags/4x3/hm-4b4923b81da24d62ebf31a9bc0addf76beef84593374b1cbd03ba19f3b12e3e9.svg":{"logical_path":"flags/4x3/hm.svg","mtime":"2018-04-02T14:38:31+02:00","size":1328,"digest":"4b4923b81da24d62ebf31a9bc0addf76beef84593374b1cbd03ba19f3b12e3e9","integrity":"sha256-S0kjuB2iTWLr8xqbwK3fdr7vhFkzdLHL0DuhnzsS4+k="},"flags/1x1/hm-776c822113a22e83581234d05f40bfc0ed38b60648d87f513f3da3fff96ffb61.svg":{"logical_path":"flags/1x1/hm.svg","mtime":"2018-04-02T14:38:31+02:00","size":1312,"digest":"776c822113a22e83581234d05f40bfc0ed38b60648d87f513f3da3fff96ffb61","integrity":"sha256-d2yCIROiLoNYEjTQX0C/wO04tgZI2H9RPz2j//lv+2E="},"flags/4x3/hn-855c830786283862a5f399e0d69dffe52b6223b91b32e31b55d55c82f2fa32c9.svg":{"logical_path":"flags/4x3/hn.svg","mtime":"2018-04-02T14:38:31+02:00","size":1115,"digest":"855c830786283862a5f399e0d69dffe52b6223b91b32e31b55d55c82f2fa32c9","integrity":"sha256-hVyDB4YoOGKl85ng1p3/5StiI7kbMuMbVdVcgvL6Msk="},"flags/1x1/hn-64c38bac9403417c4e276bf5536d284fc5410fc04b80acd39a961d298f430dbd.svg":{"logical_path":"flags/1x1/hn.svg","mtime":"2018-04-02T14:38:31+02:00","size":1119,"digest":"64c38bac9403417c4e276bf5536d284fc5410fc04b80acd39a961d298f430dbd","integrity":"sha256-ZMOLrJQDQXxOJ2v1U20oT8VBD8BLgKzTmpYdKY9DDb0="},"flags/4x3/hr-c8cad861f7398a22b9d27ea682d2778df0dde8e146d30142b5294daf988854af.svg":{"logical_path":"flags/4x3/hr.svg","mtime":"2018-04-02T14:38:31+02:00","size":41617,"digest":"c8cad861f7398a22b9d27ea682d2778df0dde8e146d30142b5294daf988854af","integrity":"sha256-yMrYYfc5iiK50n6mgtJ3jfDd6OFG0wFCtSlNr5iIVK8="},"flags/1x1/hr-60c093df6760e4cc6abe26c37a52be3b51458f02712f18e11f08b07dc623b489.svg":{"logical_path":"flags/1x1/hr.svg","mtime":"2018-04-02T14:38:31+02:00","size":41808,"digest":"60c093df6760e4cc6abe26c37a52be3b51458f02712f18e11f08b07dc623b489","integrity":"sha256-YMCT32dg5MxqvibDelK+O1FFjwJxLxjhHwiwfcYjtIk="},"flags/4x3/ht-fe81da06228fa36e7f211bec0d9f0c020f5b9c7f81534b4cb2251848aa276b16.svg":{"logical_path":"flags/4x3/ht.svg","mtime":"2018-04-02T14:38:31+02:00","size":15231,"digest":"fe81da06228fa36e7f211bec0d9f0c020f5b9c7f81534b4cb2251848aa276b16","integrity":"sha256-/oHaBiKPo25/IRvsDZ8MAg9bnH+BU0tMsiUYSKonaxY="},"flags/1x1/ht-dd0197c078859c5a66ff3a51d3a3f92809768e36bfabdec0fc0ab60d068afcd9.svg":{"logical_path":"flags/1x1/ht.svg","mtime":"2018-04-02T14:38:31+02:00","size":15317,"digest":"dd0197c078859c5a66ff3a51d3a3f92809768e36bfabdec0fc0ab60d068afcd9","integrity":"sha256-3QGXwHiFnFpm/zpR06P5KAl2jja/q97A/Aq2DQaK/Nk="},"flags/4x3/hu-9aa998e636687aede491e307f3d068dbe58f2d90bfdfaec0e7ad03baa5b36344.svg":{"logical_path":"flags/4x3/hu.svg","mtime":"2018-04-02T14:38:31+02:00","size":277,"digest":"9aa998e636687aede491e307f3d068dbe58f2d90bfdfaec0e7ad03baa5b36344","integrity":"sha256-mqmY5jZoeu3kkeMH89Bo2+WPLZC/367A560DuqWzY0Q="},"flags/1x1/hu-06858d0fbd4320496e849010e35c8fe82eb618188cf6ec329aef93f5e7af1c23.svg":{"logical_path":"flags/1x1/hu.svg","mtime":"2018-04-02T14:38:31+02:00","size":279,"digest":"06858d0fbd4320496e849010e35c8fe82eb618188cf6ec329aef93f5e7af1c23","integrity":"sha256-BoWND71DIEluhJAQ41yP6C62GBiM9uwymu+T9eevHCM="},"flags/4x3/id-775dbfedd6533afdf5bd017ccc1ad4f8f4238cbe87393d9c837a669196f17293.svg":{"logical_path":"flags/4x3/id.svg","mtime":"2018-04-02T14:38:31+02:00","size":240,"digest":"775dbfedd6533afdf5bd017ccc1ad4f8f4238cbe87393d9c837a669196f17293","integrity":"sha256-d12/7dZTOv31vQF8zBrU+PQjjL6HOT2cg3pmkZbxcpM="},"flags/1x1/id-3920ce662a7ea937b2c11707d8e1f53db52611dd004edf753b0389ed490d9d29.svg":{"logical_path":"flags/1x1/id.svg","mtime":"2018-04-02T14:38:31+02:00","size":242,"digest":"3920ce662a7ea937b2c11707d8e1f53db52611dd004edf753b0389ed490d9d29","integrity":"sha256-OSDOZip+qTeywRcH2OH1PbUmEd0ATt91OwOJ7UkNnSk="},"flags/4x3/ie-6368a1c92440fcf80d3c35607543bcaa2d4662d6e0bc7acf6749ddbc418a72c0.svg":{"logical_path":"flags/4x3/ie.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"6368a1c92440fcf80d3c35607543bcaa2d4662d6e0bc7acf6749ddbc418a72c0","integrity":"sha256-Y2ihySRA/PgNPDVgdUO8qi1GYtbgvHrPZ0ndvEGKcsA="},"flags/1x1/ie-1997e9de640fa764677aa8f5d52f7888bb24a029160e8f67b06dbd043b4f11b3.svg":{"logical_path":"flags/1x1/ie.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"1997e9de640fa764677aa8f5d52f7888bb24a029160e8f67b06dbd043b4f11b3","integrity":"sha256-GZfp3mQPp2Rneqj11S94iLskoCkWDo9nsG29BDtPEbM="},"flags/4x3/il-d76883a2330f9a05a4a64990ba955fc1be90bb46bcb19ae548c21816e7e74178.svg":{"logical_path":"flags/4x3/il.svg","mtime":"2018-04-02T14:38:31+02:00","size":898,"digest":"d76883a2330f9a05a4a64990ba955fc1be90bb46bcb19ae548c21816e7e74178","integrity":"sha256-12iDojMPmgWkpkmQupVfwb6Qu0a8sZrlSMIYFufnQXg="},"flags/1x1/il-f5e643d0e10169a438119dc441ea3100b52a2ff569bbb3a3ad6d1131b47602d8.svg":{"logical_path":"flags/1x1/il.svg","mtime":"2018-04-02T14:38:31+02:00","size":851,"digest":"f5e643d0e10169a438119dc441ea3100b52a2ff569bbb3a3ad6d1131b47602d8","integrity":"sha256-9eZD0OEBaaQ4EZ3EQeoxALUqL/Vpu7OjrW0RMbR2Atg="},"flags/4x3/im-bbae8aa9dd129f8446556afe4904194ad43377d882f9a705fcf1da2bdbfabccf.svg":{"logical_path":"flags/4x3/im.svg","mtime":"2018-04-02T14:38:31+02:00","size":9948,"digest":"bbae8aa9dd129f8446556afe4904194ad43377d882f9a705fcf1da2bdbfabccf","integrity":"sha256-u66Kqd0Sn4RGVWr+SQQZStQzd9iC+acF/PHaK9v6vM8="},"flags/1x1/im-767d72c2e72d732d65c9b016adad983778dfbbb2b5b52e71830f4e41297728d3.svg":{"logical_path":"flags/1x1/im.svg","mtime":"2018-04-02T14:38:31+02:00","size":10295,"digest":"767d72c2e72d732d65c9b016adad983778dfbbb2b5b52e71830f4e41297728d3","integrity":"sha256-dn1ywuctcy1lybAWra2YN3jfu7K1tS5xgw9OQSl3KNM="},"flags/4x3/in-519e33321b8b2ba70a0b7557d66c62d7efdc9723896c49f82528b107028ffe29.svg":{"logical_path":"flags/4x3/in.svg","mtime":"2018-04-02T14:38:31+02:00","size":1077,"digest":"519e33321b8b2ba70a0b7557d66c62d7efdc9723896c49f82528b107028ffe29","integrity":"sha256-UZ4zMhuLK6cKC3VX1mxi1+/clyOJbEn4JSixBwKP/ik="},"flags/1x1/in-27831f76dc6a218a529b6e5d0eafc4c19c999461327b7c013f59226c0601a361.svg":{"logical_path":"flags/1x1/in.svg","mtime":"2018-04-02T14:38:31+02:00","size":1091,"digest":"27831f76dc6a218a529b6e5d0eafc4c19c999461327b7c013f59226c0601a361","integrity":"sha256-J4MfdtxqIYpSm25dDq/EwZyZlGEye3wBP1kibAYBo2E="},"flags/4x3/io-8d25a8e98f682199b413adfbcb6898c37058c9bae085e427fbab03d56e8c0de6.svg":{"logical_path":"flags/4x3/io.svg","mtime":"2018-04-02T14:38:31+02:00","size":27446,"digest":"8d25a8e98f682199b413adfbcb6898c37058c9bae085e427fbab03d56e8c0de6","integrity":"sha256-jSWo6Y9oIZm0E637y2iYw3BYybrgheQn+6sD1W6MDeY="},"flags/1x1/io-627f3b0cef72fd91ff426d74a007dc32d74c9fe677cf2c8355cba84359e16fde.svg":{"logical_path":"flags/1x1/io.svg","mtime":"2018-04-02T14:38:31+02:00","size":27497,"digest":"627f3b0cef72fd91ff426d74a007dc32d74c9fe677cf2c8355cba84359e16fde","integrity":"sha256-Yn87DO9y/ZH/Qm10oAfcMtdMn+Z3zyyDVcuoQ1nhb94="},"flags/4x3/iq-96b24d1439184d0a4c35ca7cea65e5f20469a0e8c8438963aad016e59c399cc6.svg":{"logical_path":"flags/4x3/iq.svg","mtime":"2018-04-02T14:38:31+02:00","size":1479,"digest":"96b24d1439184d0a4c35ca7cea65e5f20469a0e8c8438963aad016e59c399cc6","integrity":"sha256-lrJNFDkYTQpMNcp86mXl8gRpoOjIQ4ljqtAW5Zw5nMY="},"flags/1x1/iq-af04db139f8c44cfe0c612e2c05e848ccfad88fbbfcb58e88cdb7c80db365669.svg":{"logical_path":"flags/1x1/iq.svg","mtime":"2018-04-02T14:38:31+02:00","size":1484,"digest":"af04db139f8c44cfe0c612e2c05e848ccfad88fbbfcb58e88cdb7c80db365669","integrity":"sha256-rwTbE5+MRM/gxhLiwF6EjM+tiPu/y1jojNt8gNs2Vmk="},"flags/4x3/ir-db2c230d355ade2b1ac235ec647bb1535e4703c639a44f9ce112473272ee1019.svg":{"logical_path":"flags/4x3/ir.svg","mtime":"2018-04-02T14:38:31+02:00","size":15484,"digest":"db2c230d355ade2b1ac235ec647bb1535e4703c639a44f9ce112473272ee1019","integrity":"sha256-2ywjDTVa3isawjXsZHuxU15HA8Y5pE+c4RJHMnLuEBk="},"flags/1x1/ir-c648cbf56fc8f324fda477ea816783c9df8a7d398f45f5f94acc1c16c8877b63.svg":{"logical_path":"flags/1x1/ir.svg","mtime":"2018-04-02T14:38:31+02:00","size":15387,"digest":"c648cbf56fc8f324fda477ea816783c9df8a7d398f45f5f94acc1c16c8877b63","integrity":"sha256-xkjL9W/I8yT9pHfqgWeDyd+KfTmPRfX5SswcFsiHe2M="},"flags/4x3/is-29508693138977229758b0f322ba34e90dbcd7a8a74e8820729933d24051d9a7.svg":{"logical_path":"flags/4x3/is.svg","mtime":"2018-04-02T14:38:31+02:00","size":521,"digest":"29508693138977229758b0f322ba34e90dbcd7a8a74e8820729933d24051d9a7","integrity":"sha256-KVCGkxOJdyKXWLDzIro06Q2816inToggcpkz0kBR2ac="},"flags/1x1/is-b1c5db1d4b4853b8144f1d88ababbf14fc88752340457ba3e2c94ab5d54c9c01.svg":{"logical_path":"flags/1x1/is.svg","mtime":"2018-04-02T14:38:31+02:00","size":529,"digest":"b1c5db1d4b4853b8144f1d88ababbf14fc88752340457ba3e2c94ab5d54c9c01","integrity":"sha256-scXbHUtIU7gUTx2Iq6u/FPyIdSNARXuj4slKtdVMnAE="},"flags/4x3/it-d2c168050fc509adac1163b097b0ed409217560735b27802ae9259587c146562.svg":{"logical_path":"flags/4x3/it.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"d2c168050fc509adac1163b097b0ed409217560735b27802ae9259587c146562","integrity":"sha256-0sFoBQ/FCa2sEWOwl7DtQJIXVgc1sngCrpJZWHwUZWI="},"flags/1x1/it-592d34fb666430fa00f98d333623d5efa3c8e0e65ac4eee06bbc4c1de7ce4bea.svg":{"logical_path":"flags/1x1/it.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"592d34fb666430fa00f98d333623d5efa3c8e0e65ac4eee06bbc4c1de7ce4bea","integrity":"sha256-WS00+2ZkMPoA+Y0zNiPV76PI4OZaxO7ga7xMHefOS+o="},"flags/4x3/je-b363a4e3a21630f10791c2ebeb7f918320816ef87c155d4fd29ce37982f4df35.svg":{"logical_path":"flags/4x3/je.svg","mtime":"2018-04-02T14:38:31+02:00","size":4776,"digest":"b363a4e3a21630f10791c2ebeb7f918320816ef87c155d4fd29ce37982f4df35","integrity":"sha256-s2Ok46IWMPEHkcLr63+RgyCBbvh8FV1P0pzjeYL03zU="},"flags/1x1/je-6d43f74e30e099bc056da925ec34c0200708f0a6e90da34db1e59d54ce10cfd9.svg":{"logical_path":"flags/1x1/je.svg","mtime":"2018-04-02T14:38:31+02:00","size":4757,"digest":"6d43f74e30e099bc056da925ec34c0200708f0a6e90da34db1e59d54ce10cfd9","integrity":"sha256-bUP3TjDgmbwFbakl7DTAIAcI8KbpDaNNseWdVM4Qz9k="},"flags/4x3/jm-3d133fbc2564f29e036855e8be224d1579fe66fe49e0f5a2ba0bdcf3cb272823.svg":{"logical_path":"flags/4x3/jm.svg","mtime":"2018-04-02T14:38:31+02:00","size":392,"digest":"3d133fbc2564f29e036855e8be224d1579fe66fe49e0f5a2ba0bdcf3cb272823","integrity":"sha256-PRM/vCVk8p4DaFXoviJNFXn+Zv5J4PWiugvc88snKCM="},"flags/1x1/jm-1aea8ea5d8cbc717fa3ef331d8caa9a1421c88a7bd076e40f8276a5b6f8d0467.svg":{"logical_path":"flags/1x1/jm.svg","mtime":"2018-04-02T14:38:31+02:00","size":392,"digest":"1aea8ea5d8cbc717fa3ef331d8caa9a1421c88a7bd076e40f8276a5b6f8d0467","integrity":"sha256-GuqOpdjLxxf6PvMx2MqpoUIciKe9B25A+CdqW2+NBGc="},"flags/4x3/jo-eee432339f8ea6750987e1121187eb4b53ec537dd7ccb240c018de63f7a92db6.svg":{"logical_path":"flags/4x3/jo.svg","mtime":"2018-04-02T14:38:31+02:00","size":717,"digest":"eee432339f8ea6750987e1121187eb4b53ec537dd7ccb240c018de63f7a92db6","integrity":"sha256-7uQyM5+OpnUJh+ESEYfrS1PsU33XzLJAwBjeY/epLbY="},"flags/1x1/jo-7969b2083c535c85b7e714b755459a6606940e0b5ddb1b71e24daf0a180d14aa.svg":{"logical_path":"flags/1x1/jo.svg","mtime":"2018-04-02T14:38:31+02:00","size":694,"digest":"7969b2083c535c85b7e714b755459a6606940e0b5ddb1b71e24daf0a180d14aa","integrity":"sha256-eWmyCDxTXIW35xS3VUWaZgaUDgtd2xtx4k2vChgNFKo="},"flags/4x3/jp-2eadcfc67ba8cd50c1da86e08e6778e0102c3072865dab8c312cc88006da0abe.svg":{"logical_path":"flags/4x3/jp.svg","mtime":"2018-04-02T14:38:31+02:00","size":484,"digest":"2eadcfc67ba8cd50c1da86e08e6778e0102c3072865dab8c312cc88006da0abe","integrity":"sha256-Lq3PxnuozVDB2obgjmd44BAsMHKGXauMMSzIgAbaCr4="},"flags/1x1/jp-551281a75e6c6fd64eb65b39f56102b52c182f6c38ee045c9422f6592f0f65c5.svg":{"logical_path":"flags/1x1/jp.svg","mtime":"2018-04-02T14:38:31+02:00","size":500,"digest":"551281a75e6c6fd64eb65b39f56102b52c182f6c38ee045c9422f6592f0f65c5","integrity":"sha256-VRKBp15sb9ZOtls59WECtSwYL2w47gRclCL2WS8PZcU="},"flags/4x3/ke-45790bc3ec1ed8ed0124777a7c9e09163353b5af4ff70ae6604a61b53712df4b.svg":{"logical_path":"flags/4x3/ke.svg","mtime":"2018-04-02T14:38:31+02:00","size":1383,"digest":"45790bc3ec1ed8ed0124777a7c9e09163353b5af4ff70ae6604a61b53712df4b","integrity":"sha256-RXkLw+we2O0BJHd6fJ4JFjNTta9P9wrmYEphtTcS30s="},"flags/1x1/ke-2cca24ecf024b801543c0572efc9969ffdaf25cec313e2149c64961839bc301b.svg":{"logical_path":"flags/1x1/ke.svg","mtime":"2018-04-02T14:38:31+02:00","size":1495,"digest":"2cca24ecf024b801543c0572efc9969ffdaf25cec313e2149c64961839bc301b","integrity":"sha256-LMok7PAkuAFUPAVy78mWn/2vJc7DE+IUnGSWGDm8MBs="},"flags/4x3/kg-3879f8931d74cc9c5927261f4095b2bb786f3d62c803b2a96ec550a23fae9f49.svg":{"logical_path":"flags/4x3/kg.svg","mtime":"2018-04-02T14:38:31+02:00","size":3387,"digest":"3879f8931d74cc9c5927261f4095b2bb786f3d62c803b2a96ec550a23fae9f49","integrity":"sha256-OHn4kx10zJxZJyYfQJWyu3hvPWLIA7KpbsVQoj+un0k="},"flags/1x1/kg-74318932808f85b72df308358f2f2699ab0cb7ab4f7ad3c84c4be4024f0fb140.svg":{"logical_path":"flags/1x1/kg.svg","mtime":"2018-04-02T14:38:31+02:00","size":3337,"digest":"74318932808f85b72df308358f2f2699ab0cb7ab4f7ad3c84c4be4024f0fb140","integrity":"sha256-dDGJMoCPhbct8wg1jy8mmasMt6tPetPITEvkAk8PsUA="},"flags/4x3/kh-7409fab4ba4e676db7b5c61020b97893b1735fe0b8e39e9b4f96108400be704e.svg":{"logical_path":"flags/4x3/kh.svg","mtime":"2018-04-02T14:38:31+02:00","size":7295,"digest":"7409fab4ba4e676db7b5c61020b97893b1735fe0b8e39e9b4f96108400be704e","integrity":"sha256-dAn6tLpOZ223tcYQILl4k7FzX+C4456bT5YQhAC+cE4="},"flags/1x1/kh-2603f6a61b400cb12b87397eeba60ae1707511467d5e0c430c05809bf89e5042.svg":{"logical_path":"flags/1x1/kh.svg","mtime":"2018-04-02T14:38:31+02:00","size":7296,"digest":"2603f6a61b400cb12b87397eeba60ae1707511467d5e0c430c05809bf89e5042","integrity":"sha256-JgP2phtADLErhzl+66YK4XB1EUZ9XgxDDAWAm/ieUEI="},"flags/4x3/ki-617c1b52f3d9aee99d094edbd1775cae77aade266a1318eb4671b2bb1620ded5.svg":{"logical_path":"flags/4x3/ki.svg","mtime":"2018-04-02T14:38:31+02:00","size":5818,"digest":"617c1b52f3d9aee99d094edbd1775cae77aade266a1318eb4671b2bb1620ded5","integrity":"sha256-YXwbUvPZrumdCU7b0Xdcrneq3iZqExjrRnGyuxYg3tU="},"flags/1x1/ki-74615266b440a24f09abdeae3853d7e1111f0eba77df71ccd176d83fbd1fd9ad.svg":{"logical_path":"flags/1x1/ki.svg","mtime":"2018-04-02T14:38:31+02:00","size":5955,"digest":"74615266b440a24f09abdeae3853d7e1111f0eba77df71ccd176d83fbd1fd9ad","integrity":"sha256-dGFSZrRAok8Jq96uOFPX4REfDrp333HM0XbYP70f2a0="},"flags/4x3/km-0c9bcbf7e677a541fc8dff6f848c9d92b6982ac2934ae75faa56a2b846bb5698.svg":{"logical_path":"flags/4x3/km.svg","mtime":"2018-04-02T14:38:31+02:00","size":1061,"digest":"0c9bcbf7e677a541fc8dff6f848c9d92b6982ac2934ae75faa56a2b846bb5698","integrity":"sha256-DJvL9+Z3pUH8jf9vhIydkraYKsKTSudfqlaiuEa7Vpg="},"flags/1x1/km-81b0fbe53d09194270e8ed4cbe9be8eb1ae727e77957005369ad8bdc651dd1c8.svg":{"logical_path":"flags/1x1/km.svg","mtime":"2018-04-02T14:38:31+02:00","size":1044,"digest":"81b0fbe53d09194270e8ed4cbe9be8eb1ae727e77957005369ad8bdc651dd1c8","integrity":"sha256-gbD75T0JGUJw6O1Mvpvo6xrnJ+d5VwBTaa2L3GUd0cg="},"flags/4x3/kn-0442f55f81cd3b1057c609301f0af2b503d89a895a954af8c970df997e92bd03.svg":{"logical_path":"flags/4x3/kn.svg","mtime":"2018-04-02T14:38:31+02:00","size":816,"digest":"0442f55f81cd3b1057c609301f0af2b503d89a895a954af8c970df997e92bd03","integrity":"sha256-BEL1X4HNOxBXxgkwHwrytQPYmolalUr4yXDfmX6SvQM="},"flags/1x1/kn-897c34ef54bee486f0d24d2191e2400f49a19d98efb19f8c3f1a27fb0b97131a.svg":{"logical_path":"flags/1x1/kn.svg","mtime":"2018-04-02T14:38:31+02:00","size":820,"digest":"897c34ef54bee486f0d24d2191e2400f49a19d98efb19f8c3f1a27fb0b97131a","integrity":"sha256-iXw071S+5Ibw0k0hkeJAD0mhnZjvsZ+MPxon+wuXExo="},"flags/4x3/kp-a54f7201982b29530381b71a5e2a11c1153860f22c04c0a2d91bb0d20fedf78e.svg":{"logical_path":"flags/4x3/kp.svg","mtime":"2018-04-02T14:38:31+02:00","size":792,"digest":"a54f7201982b29530381b71a5e2a11c1153860f22c04c0a2d91bb0d20fedf78e","integrity":"sha256-pU9yAZgrKVMDgbcaXioRwRU4YPIsBMCi2Ruw0g/t944="},"flags/1x1/kp-758eccd89ef3707808fb68d931f086e49333904f4cc67c88468f3c96fb43b7b6.svg":{"logical_path":"flags/1x1/kp.svg","mtime":"2018-04-02T14:38:31+02:00","size":855,"digest":"758eccd89ef3707808fb68d931f086e49333904f4cc67c88468f3c96fb43b7b6","integrity":"sha256-dY7M2J7zcHgI+2jZMfCG5JMzkE9MxnyIRo88lvtDt7Y="},"flags/4x3/kr-c0b9b2c854133410c0ad9cadbc10b1e0bacf0305519883126d55bfa3214f9d06.svg":{"logical_path":"flags/4x3/kr.svg","mtime":"2018-04-02T14:38:31+02:00","size":1827,"digest":"c0b9b2c854133410c0ad9cadbc10b1e0bacf0305519883126d55bfa3214f9d06","integrity":"sha256-wLmyyFQTNBDArZytvBCx4LrPAwVRmIMSbVW/oyFPnQY="},"flags/1x1/kr-7c0457ac5d284b28b742ea2e061a1aa2a35f63171e464b3a7eb501a48756ce7b.svg":{"logical_path":"flags/1x1/kr.svg","mtime":"2018-04-02T14:38:31+02:00","size":1733,"digest":"7c0457ac5d284b28b742ea2e061a1aa2a35f63171e464b3a7eb501a48756ce7b","integrity":"sha256-fARXrF0oSyi3QuouBhoaoqNfYxceRks6frUBpIdWzns="},"flags/4x3/kw-81c3d5d25c7b840ef14783b51d18c6b7cfc61f94932c664bbc9e5879fef020eb.svg":{"logical_path":"flags/4x3/kw.svg","mtime":"2018-04-02T14:38:31+02:00","size":506,"digest":"81c3d5d25c7b840ef14783b51d18c6b7cfc61f94932c664bbc9e5879fef020eb","integrity":"sha256-gcPV0lx7hA7xR4O1HRjGt8/GH5STLGZLvJ5Yef7wIOs="},"flags/1x1/kw-66670211a67a4e61d4652a19d821dc5195f01a28a3a9b28b7e4c6048cd86b19c.svg":{"logical_path":"flags/1x1/kw.svg","mtime":"2018-04-02T14:38:31+02:00","size":510,"digest":"66670211a67a4e61d4652a19d821dc5195f01a28a3a9b28b7e4c6048cd86b19c","integrity":"sha256-ZmcCEaZ6TmHUZSoZ2CHcUZXwGiijqbKLfkxgSM2GsZw="},"flags/4x3/ky-0f4ab66d951ae33f800d680aaa5704804ba9c8844d4d80e5bee2e3fa0e100af3.svg":{"logical_path":"flags/4x3/ky.svg","mtime":"2018-04-02T14:38:31+02:00","size":21886,"digest":"0f4ab66d951ae33f800d680aaa5704804ba9c8844d4d80e5bee2e3fa0e100af3","integrity":"sha256-D0q2bZUa4z+ADWgKqlcEgEupyIRNTYDlvuLj+g4QCvM="},"flags/1x1/ky-fb5f57bb58b74d23377bad9954a75ab88d1587af68546ce137a6ae7a88a7701e.svg":{"logical_path":"flags/1x1/ky.svg","mtime":"2018-04-02T14:38:31+02:00","size":22495,"digest":"fb5f57bb58b74d23377bad9954a75ab88d1587af68546ce137a6ae7a88a7701e","integrity":"sha256-+19Xu1i3TSM3e62ZVKdauI0Vh69oVGzhN6aueoincB4="},"flags/4x3/kz-39edc952c598c71be2c9510944a8faf708d8e4b367b5ad78a688d1cd37f522eb.svg":{"logical_path":"flags/4x3/kz.svg","mtime":"2018-04-02T14:38:31+02:00","size":11339,"digest":"39edc952c598c71be2c9510944a8faf708d8e4b367b5ad78a688d1cd37f522eb","integrity":"sha256-Oe3JUsWYxxviyVEJRKj69wjY5LNnta14pojRzTf1Ius="},"flags/1x1/kz-924c04dc19267b049f35213af0e2b0c540933c06389433cb4aacd8dda33b286c.svg":{"logical_path":"flags/1x1/kz.svg","mtime":"2018-04-02T14:38:31+02:00","size":11433,"digest":"924c04dc19267b049f35213af0e2b0c540933c06389433cb4aacd8dda33b286c","integrity":"sha256-kkwE3BkmewSfNSE68OKwxUCTPAY4lDPLSqzY3aM7KGw="},"flags/4x3/la-e3a36a3bd0003442c3a21d3a192995fa6fb3b3c08a2daadc8f38f62736b5b1e3.svg":{"logical_path":"flags/4x3/la.svg","mtime":"2018-04-02T14:38:31+02:00","size":457,"digest":"e3a36a3bd0003442c3a21d3a192995fa6fb3b3c08a2daadc8f38f62736b5b1e3","integrity":"sha256-46NqO9AANELDoh06GSmV+m+zs8CKLarcjzj2Jza1seM="},"flags/1x1/la-c9d4223a897e5e2938a4892bbc593d3828093b9439fc3f6de21520e4013ddbc5.svg":{"logical_path":"flags/1x1/la.svg","mtime":"2018-04-02T14:38:31+02:00","size":507,"digest":"c9d4223a897e5e2938a4892bbc593d3828093b9439fc3f6de21520e4013ddbc5","integrity":"sha256-ydQiOol+Xik4pIkrvFk9OCgJO5Q5/D9t4hUg5AE928U="},"flags/4x3/lb-508c2a5a9b50d604895675b9f1c1e5914c394a7f468f5d823eb0476acaacbc7f.svg":{"logical_path":"flags/4x3/lb.svg","mtime":"2018-04-02T14:38:31+02:00","size":2814,"digest":"508c2a5a9b50d604895675b9f1c1e5914c394a7f468f5d823eb0476acaacbc7f","integrity":"sha256-UIwqWptQ1gSJVnW58cHlkUw5Sn9Gj12CPrBHasqsvH8="},"flags/1x1/lb-10c9ba8ea7aa3189f16a7273c837982a887fc4ddfc9d514d8f5a660d72356f7f.svg":{"logical_path":"flags/1x1/lb.svg","mtime":"2018-04-02T14:38:31+02:00","size":2754,"digest":"10c9ba8ea7aa3189f16a7273c837982a887fc4ddfc9d514d8f5a660d72356f7f","integrity":"sha256-EMm6jqeqMYnxanJzyDeYKoh/xN38nVFNj1pmDXI1b38="},"flags/4x3/lc-04ccd92fb1578654181febaea30ebd6b6620f56115730b2a2d673c712307bf5c.svg":{"logical_path":"flags/4x3/lc.svg","mtime":"2018-04-02T14:38:31+02:00","size":373,"digest":"04ccd92fb1578654181febaea30ebd6b6620f56115730b2a2d673c712307bf5c","integrity":"sha256-BMzZL7FXhlQYH+uuow69a2Yg9WEVcwsqLWc8cSMHv1w="},"flags/1x1/lc-4ffb53afb8bd296d526ac26fd8007afc74855e92833a893d3c934a5d12eb152a.svg":{"logical_path":"flags/1x1/lc.svg","mtime":"2018-04-02T14:38:31+02:00","size":373,"digest":"4ffb53afb8bd296d526ac26fd8007afc74855e92833a893d3c934a5d12eb152a","integrity":"sha256-T/tTr7i9KW1SasJv2AB6/HSFXpKDOok9PJNKXRLrFSo="},"flags/4x3/li-3058dc4aeaf2bd2da8cb910892137d732b56e5e9d342e565a4059de1a8e40e40.svg":{"logical_path":"flags/4x3/li.svg","mtime":"2018-04-02T14:38:31+02:00","size":8327,"digest":"3058dc4aeaf2bd2da8cb910892137d732b56e5e9d342e565a4059de1a8e40e40","integrity":"sha256-MFjcSuryvS2oy5EIkhN9cytW5enTQuVlpAWd4ajkDkA="},"flags/1x1/li-0780a4f218b9ee466e33d14274b8a01575a86b3787b347e3269a3b301c220d5f.svg":{"logical_path":"flags/1x1/li.svg","mtime":"2018-04-02T14:38:31+02:00","size":8350,"digest":"0780a4f218b9ee466e33d14274b8a01575a86b3787b347e3269a3b301c220d5f","integrity":"sha256-B4Ck8hi57kZuM9FCdLigFXWoazeHs0fjJpo7MBwiDV8="},"flags/4x3/lk-a13d6ab1da51be3b1d2c5b80f4d866c923d42b017e197469e1bfc0dd021c4bfe.svg":{"logical_path":"flags/4x3/lk.svg","mtime":"2018-04-02T14:38:31+02:00","size":11333,"digest":"a13d6ab1da51be3b1d2c5b80f4d866c923d42b017e197469e1bfc0dd021c4bfe","integrity":"sha256-oT1qsdpRvjsdLFuA9NhmySPUKwF+GXRp4b/A3QIcS/4="},"flags/1x1/lk-99759363f0df6b868fd1398bf05666c680bafe1eeec8b859b64d450930213e02.svg":{"logical_path":"flags/1x1/lk.svg","mtime":"2018-04-02T14:38:31+02:00","size":11345,"digest":"99759363f0df6b868fd1398bf05666c680bafe1eeec8b859b64d450930213e02","integrity":"sha256-mXWTY/Dfa4aP0TmL8FZmxoC6/h7uyLhZtk1FCTAhPgI="},"flags/4x3/lr-b06a1d70899826b305ce387fa31e1fa0bdb3bcb17c1392f15f995ce1dba723cf.svg":{"logical_path":"flags/4x3/lr.svg","mtime":"2018-04-02T14:38:31+02:00","size":724,"digest":"b06a1d70899826b305ce387fa31e1fa0bdb3bcb17c1392f15f995ce1dba723cf","integrity":"sha256-sGodcImYJrMFzjh/ox4foL2zvLF8E5LxX5lc4dunI88="},"flags/1x1/lr-820a9d023e5b1e68ed640bfaba8f84ad4379c42a6c5c982cb76b0390dd2bcbdd.svg":{"logical_path":"flags/1x1/lr.svg","mtime":"2018-04-02T14:38:31+02:00","size":697,"digest":"820a9d023e5b1e68ed640bfaba8f84ad4379c42a6c5c982cb76b0390dd2bcbdd","integrity":"sha256-ggqdAj5bHmjtZAv6uo+ErUN5xCpsXJgst2sDkN0ry90="},"flags/4x3/ls-d02bcefe7c298c153665f35c33eedb08e2e2b345350e4bf1714a87abf86b2d0e.svg":{"logical_path":"flags/4x3/ls.svg","mtime":"2018-04-02T14:38:31+02:00","size":1222,"digest":"d02bcefe7c298c153665f35c33eedb08e2e2b345350e4bf1714a87abf86b2d0e","integrity":"sha256-0CvO/nwpjBU2ZfNcM+7bCOLis0U1DkvxcUqHq/hrLQ4="},"flags/1x1/ls-85c731c313a46db12bdb27fe229e9f7d052b447c624663b73ffa1dbab97f03fb.svg":{"logical_path":"flags/1x1/ls.svg","mtime":"2018-04-02T14:38:31+02:00","size":1245,"digest":"85c731c313a46db12bdb27fe229e9f7d052b447c624663b73ffa1dbab97f03fb","integrity":"sha256-hccxwxOkbbEr2yf+Ip6ffQUrRHxiRmO3P/odurl/A/s="},"flags/4x3/lt-c08eb18a15d2003cb544432b11c5081d3d5741370669b4df306d1c6bce14cb51.svg":{"logical_path":"flags/4x3/lt.svg","mtime":"2018-04-02T14:38:31+02:00","size":445,"digest":"c08eb18a15d2003cb544432b11c5081d3d5741370669b4df306d1c6bce14cb51","integrity":"sha256-wI6xihXSADy1REMrEcUIHT1XQTcGabTfMG0ca84Uy1E="},"flags/1x1/lt-c1bd7e3d289ac9b0df06d47237780eaf4d30f01281ed50a7df9a22bc3a2489c5.svg":{"logical_path":"flags/1x1/lt.svg","mtime":"2018-04-02T14:38:31+02:00","size":445,"digest":"c1bd7e3d289ac9b0df06d47237780eaf4d30f01281ed50a7df9a22bc3a2489c5","integrity":"sha256-wb1+PSiaybDfBtRyN3gOr00w8BKB7VCn35oivDokicU="},"flags/4x3/lu-99e7b6adb3a9e0f867b17eb3b1f0f33db92fd27cfd7b651f62453f359bace22f.svg":{"logical_path":"flags/4x3/lu.svg","mtime":"2018-04-02T14:38:31+02:00","size":231,"digest":"99e7b6adb3a9e0f867b17eb3b1f0f33db92fd27cfd7b651f62453f359bace22f","integrity":"sha256-mee2rbOp4PhnsX6zsfDzPbkv0nz9e2UfYkU/NZus4i8="},"flags/1x1/lu-ab544445f16afa450549288ac86c2cc9a458a9d7747b3a89d5ecef7db9c83ce7.svg":{"logical_path":"flags/1x1/lu.svg","mtime":"2018-04-02T14:38:31+02:00","size":235,"digest":"ab544445f16afa450549288ac86c2cc9a458a9d7747b3a89d5ecef7db9c83ce7","integrity":"sha256-q1RERfFq+kUFSSiKyGwsyaRYqdd0ezqJ1ezvfbnIPOc="},"flags/4x3/lv-f8844d50b89f0369f73d580d3676553e7e55dd8ab2460e592a29a530d9bed886.svg":{"logical_path":"flags/4x3/lv.svg","mtime":"2018-04-02T14:38:31+02:00","size":236,"digest":"f8844d50b89f0369f73d580d3676553e7e55dd8ab2460e592a29a530d9bed886","integrity":"sha256-+IRNULifA2n3PVgNNnZVPn5V3YqyRg5ZKimlMNm+2IY="},"flags/1x1/lv-baeced49dd4249e36a25b0f23a5c601a69e9dee3137627cd4450194b85a99dd4.svg":{"logical_path":"flags/1x1/lv.svg","mtime":"2018-04-02T14:38:31+02:00","size":240,"digest":"baeced49dd4249e36a25b0f23a5c601a69e9dee3137627cd4450194b85a99dd4","integrity":"sha256-uuztSd1CSeNqJbDyOlxgGmnp3uMTdifNRFAZS4WpndQ="},"flags/4x3/ly-03209121483967f9d74849fb9261de23e9ff2e02c4e40b29f1cda0631b8a5fae.svg":{"logical_path":"flags/4x3/ly.svg","mtime":"2018-04-02T14:38:31+02:00","size":534,"digest":"03209121483967f9d74849fb9261de23e9ff2e02c4e40b29f1cda0631b8a5fae","integrity":"sha256-AyCRIUg5Z/nXSEn7kmHeI+n/LgLE5Asp8c2gYxuKX64="},"flags/1x1/ly-1e6e070aaa4bfc97a5a446a39bf746ab3c4c81d9f62c975cab164e16de3a3ffe.svg":{"logical_path":"flags/1x1/ly.svg","mtime":"2018-04-02T14:38:31+02:00","size":533,"digest":"1e6e070aaa4bfc97a5a446a39bf746ab3c4c81d9f62c975cab164e16de3a3ffe","integrity":"sha256-Hm4HCqpL/JelpEajm/dGqzxMgdn2LJdcqxZOFt46P/4="},"flags/4x3/ma-9a25cc7c2868fa45b251dd1b99a0be3b583df69732146142020fe9c6c0c95b63.svg":{"logical_path":"flags/4x3/ma.svg","mtime":"2018-04-02T14:38:31+02:00","size":253,"digest":"9a25cc7c2868fa45b251dd1b99a0be3b583df69732146142020fe9c6c0c95b63","integrity":"sha256-miXMfCho+kWyUd0bmaC+O1g99pcyFGFCAg/pxsDJW2M="},"flags/1x1/ma-4f18b9c355b8b8bf0db69badb235a183dbd558deb6439bf03b4f18e56837a7f3.svg":{"logical_path":"flags/1x1/ma.svg","mtime":"2018-04-02T14:38:31+02:00","size":253,"digest":"4f18b9c355b8b8bf0db69badb235a183dbd558deb6439bf03b4f18e56837a7f3","integrity":"sha256-Txi5w1W4uL8NtputsjWhg9vVWN62Q5vwO08Y5Wg3p/M="},"flags/4x3/mc-b0c50599ea2a550680a6a867579930e0b47d3e05193a7294a26b7849a7ad35e2.svg":{"logical_path":"flags/4x3/mc.svg","mtime":"2018-04-02T14:38:31+02:00","size":240,"digest":"b0c50599ea2a550680a6a867579930e0b47d3e05193a7294a26b7849a7ad35e2","integrity":"sha256-sMUFmeoqVQaApqhnV5kw4LR9PgUZOnKUomt4SaetNeI="},"flags/1x1/mc-8f1fe6210338399d8791d91f39234b1a09acf2aa5e0387696048dc7068534a28.svg":{"logical_path":"flags/1x1/mc.svg","mtime":"2018-04-02T14:38:31+02:00","size":240,"digest":"8f1fe6210338399d8791d91f39234b1a09acf2aa5e0387696048dc7068534a28","integrity":"sha256-jx/mIQM4OZ2HkdkfOSNLGgms8qpeA4dpYEjccGhTSig="},"flags/4x3/md-8849eef7bdf916e962f7bb31af87c8d47aef33f9f4a2017b2ce55c4166e79643.svg":{"logical_path":"flags/4x3/md.svg","mtime":"2018-04-02T14:38:31+02:00","size":11283,"digest":"8849eef7bdf916e962f7bb31af87c8d47aef33f9f4a2017b2ce55c4166e79643","integrity":"sha256-iEnu9735Fuli97sxr4fI1HrvM/n0ogF7LOVcQWbnlkM="},"flags/1x1/md-43f1bb4157545abe6e79215459efb548d913bbe7922078cd40cb722a4e19d9b4.svg":{"logical_path":"flags/1x1/md.svg","mtime":"2018-04-02T14:38:31+02:00","size":11387,"digest":"43f1bb4157545abe6e79215459efb548d913bbe7922078cd40cb722a4e19d9b4","integrity":"sha256-Q/G7QVdUWr5ueSFUWe+1SNkTu+eSIHjNQMtyKk4Z2bQ="},"flags/4x3/me-983d452d43cfb8d628bfc5c0cf4991c2ba3cf0e39e70aa5353cfd4e9ec3da62d.svg":{"logical_path":"flags/4x3/me.svg","mtime":"2018-04-02T14:38:31+02:00","size":63177,"digest":"983d452d43cfb8d628bfc5c0cf4991c2ba3cf0e39e70aa5353cfd4e9ec3da62d","integrity":"sha256-mD1FLUPPuNYov8XAz0mRwro88OOecKpTU8/U6ew9pi0="},"flags/1x1/me-104d6a96038ef06d3d8b89c9221996f3649b5b821139b11b2e07695b0f6fda2f.svg":{"logical_path":"flags/1x1/me.svg","mtime":"2018-04-02T14:38:31+02:00","size":64191,"digest":"104d6a96038ef06d3d8b89c9221996f3649b5b821139b11b2e07695b0f6fda2f","integrity":"sha256-EE1qlgOO8G09i4nJIhmW82SbW4IRObEbLgdpWw9v2i8="},"flags/4x3/mf-31fb851bfcc2340d2fa43e86a099cc7becfc8e7f996a4d2ca56bd050e6537086.svg":{"logical_path":"flags/4x3/mf.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"31fb851bfcc2340d2fa43e86a099cc7becfc8e7f996a4d2ca56bd050e6537086","integrity":"sha256-MfuFG/zCNA0vpD6GoJnMe+z8jn+Zak0spWvQUOZTcIY="},"flags/1x1/mf-fe20ce9bf911631d6e79edf21c8cff0716f2dc1ffded39515735444d9a66fa55.svg":{"logical_path":"flags/1x1/mf.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"fe20ce9bf911631d6e79edf21c8cff0716f2dc1ffded39515735444d9a66fa55","integrity":"sha256-/iDOm/kRYx1uee3yHIz/Bxby3B/97TlRVzVETZpm+lU="},"flags/4x3/mg-5effe963e29f804a26f95dbbc9519add454a0fd9eb918ddfeb55e1e99a1a2701.svg":{"logical_path":"flags/4x3/mg.svg","mtime":"2018-04-02T14:38:31+02:00","size":305,"digest":"5effe963e29f804a26f95dbbc9519add454a0fd9eb918ddfeb55e1e99a1a2701","integrity":"sha256-Xv/pY+KfgEom+V27yVGa3UVKD9nrkY3f61Xh6ZoaJwE="},"flags/1x1/mg-9e546cfb78810d9b25c814a84aadd6907880b8e0cdd2e4e30738b519e7c1ac91.svg":{"logical_path":"flags/1x1/mg.svg","mtime":"2018-04-02T14:38:31+02:00","size":305,"digest":"9e546cfb78810d9b25c814a84aadd6907880b8e0cdd2e4e30738b519e7c1ac91","integrity":"sha256-nlRs+3iBDZslyBSoSq3WkHiAuODN0uTjBzi1GefBrJE="},"flags/4x3/mh-d8cfd123007dbb99aa700c335957926a6d5e877ab49680c79629a32716d7a782.svg":{"logical_path":"flags/4x3/mh.svg","mtime":"2018-04-02T14:38:31+02:00","size":744,"digest":"d8cfd123007dbb99aa700c335957926a6d5e877ab49680c79629a32716d7a782","integrity":"sha256-2M/RIwB9u5mqcAwzWVeSam1eh3q0loDHlimjJxbXp4I="},"flags/1x1/mh-3fe03d4d063a4729fc8b68fd5e9d7d2eef6e65c4e82954c83f76b138cea2eb45.svg":{"logical_path":"flags/1x1/mh.svg","mtime":"2018-04-02T14:38:31+02:00","size":767,"digest":"3fe03d4d063a4729fc8b68fd5e9d7d2eef6e65c4e82954c83f76b138cea2eb45","integrity":"sha256-P+A9TQY6Ryn8i2j9Xp19Lu9uZcToKVTIP3axOM6i60U="},"flags/4x3/mk-6e8071d15f2ff125d30bf89d000dcb47db9545cf9b7ff04f1474650ec2f4d25c.svg":{"logical_path":"flags/4x3/mk.svg","mtime":"2018-04-02T14:38:31+02:00","size":385,"digest":"6e8071d15f2ff125d30bf89d000dcb47db9545cf9b7ff04f1474650ec2f4d25c","integrity":"sha256-boBx0V8v8SXTC/idAA3LR9uVRc+bf/BPFHRlDsL00lw="},"flags/1x1/mk-fdc9212f9f311cbface56b6587468a2e845111b697edc11b7edda9fcf100c1d5.svg":{"logical_path":"flags/1x1/mk.svg","mtime":"2018-04-02T14:38:31+02:00","size":413,"digest":"fdc9212f9f311cbface56b6587468a2e845111b697edc11b7edda9fcf100c1d5","integrity":"sha256-/ckhL58xHL+s5Wtlh0aKLoRREbaX7cEbft2p/PEAwdU="},"flags/4x3/ml-a730102e0c6f6362de9c10ef8da6cf7b123465d01a297e7a89808b01fa4771cd.svg":{"logical_path":"flags/4x3/ml.svg","mtime":"2018-04-02T14:38:31+02:00","size":279,"digest":"a730102e0c6f6362de9c10ef8da6cf7b123465d01a297e7a89808b01fa4771cd","integrity":"sha256-pzAQLgxvY2LenBDvjabPexI0ZdAaKX56iYCLAfpHcc0="},"flags/1x1/ml-a661355da206b0cb7ac4c84b6cdf7e411fbca8fcb271ae999fa60d5c67578192.svg":{"logical_path":"flags/1x1/ml.svg","mtime":"2018-04-02T14:38:31+02:00","size":282,"digest":"a661355da206b0cb7ac4c84b6cdf7e411fbca8fcb271ae999fa60d5c67578192","integrity":"sha256-pmE1XaIGsMt6xMhLbN9+QR+8qPyyca6Zn6YNXGdXgZI="},"flags/4x3/mm-6d0d207d662477110f2b863488088818d8400386358dcbc669a2d8c54d1bae16.svg":{"logical_path":"flags/4x3/mm.svg","mtime":"2018-04-02T14:38:31+02:00","size":851,"digest":"6d0d207d662477110f2b863488088818d8400386358dcbc669a2d8c54d1bae16","integrity":"sha256-bQ0gfWYkdxEPK4Y0iAiIGNhAA4Y1jcvGaaLYxU0brhY="},"flags/1x1/mm-de7d46b6543343af61ba997045cb41a707bd0db1e7a5879971ca8fddcbdf9e99.svg":{"logical_path":"flags/1x1/mm.svg","mtime":"2018-04-02T14:38:31+02:00","size":868,"digest":"de7d46b6543343af61ba997045cb41a707bd0db1e7a5879971ca8fddcbdf9e99","integrity":"sha256-3n1GtlQzQ69huplwRctBpwe9DbHnpYeZccqP3cvfnpk="},"flags/4x3/mn-656eb51e88bfce82401e4080eb791ddf16d571cbba102cdd4316c5de4711ac65.svg":{"logical_path":"flags/4x3/mn.svg","mtime":"2018-04-02T14:38:31+02:00","size":1256,"digest":"656eb51e88bfce82401e4080eb791ddf16d571cbba102cdd4316c5de4711ac65","integrity":"sha256-ZW61Hoi/zoJAHkCA63kd3xbVccu6ECzdQxbF3kcRrGU="},"flags/1x1/mn-ad22cb2c195a7d8ca8e4174db011d5f58238ee25039b5b2da2649d8ca8b00123.svg":{"logical_path":"flags/1x1/mn.svg","mtime":"2018-04-02T14:38:31+02:00","size":1263,"digest":"ad22cb2c195a7d8ca8e4174db011d5f58238ee25039b5b2da2649d8ca8b00123","integrity":"sha256-rSLLLBlafYyo5BdNsBHV9YI47iUDm1stomSdjKiwASM="},"flags/4x3/mo-37a1088aa687af13951bc93886e3e51cb246eccfde1b56528f189327ea291792.svg":{"logical_path":"flags/4x3/mo.svg","mtime":"2018-04-02T14:38:31+02:00","size":1516,"digest":"37a1088aa687af13951bc93886e3e51cb246eccfde1b56528f189327ea291792","integrity":"sha256-N6EIiqaHrxOVG8k4huPlHLJG7M/eG1ZSjxiTJ+opF5I="},"flags/1x1/mo-b463a1c37b69131d662e3fb2ae937583458824a09bcf68fc7ed2d7fd729138d1.svg":{"logical_path":"flags/1x1/mo.svg","mtime":"2018-04-02T14:38:31+02:00","size":1550,"digest":"b463a1c37b69131d662e3fb2ae937583458824a09bcf68fc7ed2d7fd729138d1","integrity":"sha256-tGOhw3tpEx1mLj+yrpN1g0WIJKCbz2j8ftLX/XKRONE="},"flags/4x3/mp-ecd12cadc358fdf293e856c0a3ffc09409123cabd3c7201225b2d21b59551e14.svg":{"logical_path":"flags/4x3/mp.svg","mtime":"2018-04-02T14:38:31+02:00","size":23425,"digest":"ecd12cadc358fdf293e856c0a3ffc09409123cabd3c7201225b2d21b59551e14","integrity":"sha256-7NEsrcNY/fKT6FbAo//AlAkSPKvTxyASJbLSG1lVHhQ="},"flags/1x1/mp-d1f4ba10c1409e713253f1fbb107eeccbd4ec1a8f9036663f1ac1991aee53835.svg":{"logical_path":"flags/1x1/mp.svg","mtime":"2018-04-02T14:38:31+02:00","size":23663,"digest":"d1f4ba10c1409e713253f1fbb107eeccbd4ec1a8f9036663f1ac1991aee53835","integrity":"sha256-0fS6EMFAnnEyU/H7sQfuzL1Owaj5A2Zj8awZka7lODU="},"flags/4x3/mq-b4e1b08a93c1364c79e6d61f95b16fca5b884da6e77835bc0e0adfff8ecc2d7f.svg":{"logical_path":"flags/4x3/mq.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"b4e1b08a93c1364c79e6d61f95b16fca5b884da6e77835bc0e0adfff8ecc2d7f","integrity":"sha256-tOGwipPBNkx55tYflbFvyluITabneDW8Dgrf/47MLX8="},"flags/1x1/mq-19cb6f7cb7354c3fd40e987c93a2d76329d34b2ed3873c3f25fe56802f251ea8.svg":{"logical_path":"flags/1x1/mq.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"19cb6f7cb7354c3fd40e987c93a2d76329d34b2ed3873c3f25fe56802f251ea8","integrity":"sha256-GctvfLc1TD/UDph8k6LXYynTSy7Thzw/Jf5WgC8lHqg="},"flags/4x3/mr-9f64af3ed5c6d8d1f68b5cb09fd1aa9d28c3c95107e063f64a0ef95f0cb9429a.svg":{"logical_path":"flags/4x3/mr.svg","mtime":"2018-04-02T14:38:31+02:00","size":450,"digest":"9f64af3ed5c6d8d1f68b5cb09fd1aa9d28c3c95107e063f64a0ef95f0cb9429a","integrity":"sha256-n2SvPtXG2NH2i1ywn9GqnSjDyVEH4GP2Sg75Xwy5Qpo="},"flags/1x1/mr-0e79b7bcc669bb871d94021db2b78b162b9867c7eaf934d8f7a3025fd5903576.svg":{"logical_path":"flags/1x1/mr.svg","mtime":"2018-04-02T14:38:31+02:00","size":438,"digest":"0e79b7bcc669bb871d94021db2b78b162b9867c7eaf934d8f7a3025fd5903576","integrity":"sha256-Dnm3vMZpu4cdlAIdsreLFiuYZ8fq+TTY96MCX9WQNXY="},"flags/4x3/ms-32620dd70353777b2ee62951556976f398cd38ae359b5a8c97311a1dc61eb8bc.svg":{"logical_path":"flags/4x3/ms.svg","mtime":"2018-04-02T14:38:31+02:00","size":6792,"digest":"32620dd70353777b2ee62951556976f398cd38ae359b5a8c97311a1dc61eb8bc","integrity":"sha256-MmIN1wNTd3su5ilRVWl285jNOK41m1qMlzEaHcYeuLw="},"flags/1x1/ms-4104d4f36cb5cf1c6de78e52e90bc3c5b8bfa262617b16a737673feb8c30a00c.svg":{"logical_path":"flags/1x1/ms.svg","mtime":"2018-04-02T14:38:31+02:00","size":6700,"digest":"4104d4f36cb5cf1c6de78e52e90bc3c5b8bfa262617b16a737673feb8c30a00c","integrity":"sha256-QQTU82y1zxxt545S6QvDxbi/omJhexanN2c/64wwoAw="},"flags/4x3/mt-0c9819aa69b34b84c1ee43620922737122eb38f107be9864a0690ac66ef8aa64.svg":{"logical_path":"flags/4x3/mt.svg","mtime":"2018-04-02T14:38:31+02:00","size":8807,"digest":"0c9819aa69b34b84c1ee43620922737122eb38f107be9864a0690ac66ef8aa64","integrity":"sha256-DJgZqmmzS4TB7kNiCSJzcSLrOPEHvphkoGkKxm74qmQ="},"flags/1x1/mt-3c3fe71f2a2bf0d961fd145ad7e48ca1e9d3a05cce514354714ba4568503d106.svg":{"logical_path":"flags/1x1/mt.svg","mtime":"2018-04-02T14:38:31+02:00","size":10519,"digest":"3c3fe71f2a2bf0d961fd145ad7e48ca1e9d3a05cce514354714ba4568503d106","integrity":"sha256-PD/nHyor8Nlh/RRa1+SMoenToFzOUUNUcUukVoUD0QY="},"flags/4x3/mu-c78c23f1499756b9db762ae434ca354d1481447fa94c66bc10aca9443b399059.svg":{"logical_path":"flags/4x3/mu.svg","mtime":"2018-04-02T14:38:31+02:00","size":322,"digest":"c78c23f1499756b9db762ae434ca354d1481447fa94c66bc10aca9443b399059","integrity":"sha256-x4wj8UmXVrnbdirkNMo1TRSBRH+pTGa8EKypRDs5kFk="},"flags/1x1/mu-91ebc79d0fa306127ea8b7a33f77d5b28f35c516ea91ff0468c7344dc838db69.svg":{"logical_path":"flags/1x1/mu.svg","mtime":"2018-04-02T14:38:31+02:00","size":322,"digest":"91ebc79d0fa306127ea8b7a33f77d5b28f35c516ea91ff0468c7344dc838db69","integrity":"sha256-kevHnQ+jBhJ+qLejP3fVso81xRbqkf8EaMc0Tcg422k="},"flags/4x3/mv-a17c947e17adae6aacef01a3e131c4150aa094911b53fbaead41783683e008eb.svg":{"logical_path":"flags/4x3/mv.svg","mtime":"2018-04-02T14:38:31+02:00","size":292,"digest":"a17c947e17adae6aacef01a3e131c4150aa094911b53fbaead41783683e008eb","integrity":"sha256-oXyUfhetrmqs7wGj4THEFQqglJEbU/uurUF4NoPgCOs="},"flags/1x1/mv-d138e94d9d2ed093ef1425c1164493b780202f9a7f7937241a7b081b79ff8b01.svg":{"logical_path":"flags/1x1/mv.svg","mtime":"2018-04-02T14:38:31+02:00","size":310,"digest":"d138e94d9d2ed093ef1425c1164493b780202f9a7f7937241a7b081b79ff8b01","integrity":"sha256-0TjpTZ0u0JPvFCXBFkSTt4AgL5p/eTckGnsIG3n/iwE="},"flags/4x3/mw-21f116afdf71df80e3c59084c6ba640814fa5389430328ff55c9403b5c239632.svg":{"logical_path":"flags/4x3/mw.svg","mtime":"2018-04-02T14:38:31+02:00","size":3721,"digest":"21f116afdf71df80e3c59084c6ba640814fa5389430328ff55c9403b5c239632","integrity":"sha256-IfEWr99x34DjxZCExrpkCBT6U4lDAyj/VclAO1wjljI="},"flags/1x1/mw-5c2228d3f1cf1f9cf8cb158e813202981828c11e8caf117836fc57fa6bc1c788.svg":{"logical_path":"flags/1x1/mw.svg","mtime":"2018-04-02T14:38:31+02:00","size":3930,"digest":"5c2228d3f1cf1f9cf8cb158e813202981828c11e8caf117836fc57fa6bc1c788","integrity":"sha256-XCIo0/HPH5z4yxWOgTICmBgowR6MrxF4NvxX+mvBx4g="},"flags/4x3/mx-a235f9b16921590b7e78caa6f76339361356946eaf0046badd10732b4647c0b6.svg":{"logical_path":"flags/4x3/mx.svg","mtime":"2018-04-02T14:38:31+02:00","size":95864,"digest":"a235f9b16921590b7e78caa6f76339361356946eaf0046badd10732b4647c0b6","integrity":"sha256-ojX5sWkhWQt+eMqm92M5NhNWlG6vAEa63RBzK0ZHwLY="},"flags/1x1/mx-cdab01ebcdccc020ca16e1355ef1fd18ca0043b501f399ca8edc48adfa8c7292.svg":{"logical_path":"flags/1x1/mx.svg","mtime":"2018-04-02T14:38:31+02:00","size":91341,"digest":"cdab01ebcdccc020ca16e1355ef1fd18ca0043b501f399ca8edc48adfa8c7292","integrity":"sha256-zasB683MwCDKFuE1XvH9GMoAQ7UB85nKjtxIrfqMcpI="},"flags/4x3/my-0ed63574cf5f20c0663ab8cd1f700e150fb641fd0b93602ba013abbfaae5ee59.svg":{"logical_path":"flags/4x3/my.svg","mtime":"2018-04-02T14:38:31+02:00","size":1284,"digest":"0ed63574cf5f20c0663ab8cd1f700e150fb641fd0b93602ba013abbfaae5ee59","integrity":"sha256-DtY1dM9fIMBmOrjNH3AOFQ+2Qf0Lk2AroBOrv6rl7lk="},"flags/1x1/my-5e8d31ef06ffc8af33a5616d760592ecd022c52afc8ba33c721f1e4989da0628.svg":{"logical_path":"flags/1x1/my.svg","mtime":"2018-04-02T14:38:31+02:00","size":1275,"digest":"5e8d31ef06ffc8af33a5616d760592ecd022c52afc8ba33c721f1e4989da0628","integrity":"sha256-Xo0x7wb/yK8zpWFtdgWS7NAixSr8i6M8ch8eSYnaBig="},"flags/4x3/mz-752e2293917b1d2ece3f097104caeadf6a679054a779e9d3be8e49dc324bb88a.svg":{"logical_path":"flags/4x3/mz.svg","mtime":"2018-04-02T14:38:31+02:00","size":2623,"digest":"752e2293917b1d2ece3f097104caeadf6a679054a779e9d3be8e49dc324bb88a","integrity":"sha256-dS4ik5F7HS7OPwlxBMrq32pnkFSneenTvo5J3DJLuIo="},"flags/1x1/mz-300cba975ad43c962ceca0d266ded1fe3d21d6b4d701d657fb42b27268ea2964.svg":{"logical_path":"flags/1x1/mz.svg","mtime":"2018-04-02T14:38:31+02:00","size":2604,"digest":"300cba975ad43c962ceca0d266ded1fe3d21d6b4d701d657fb42b27268ea2964","integrity":"sha256-MAy6l1rUPJYs7KDSZt7R/j0h1rTXAdZX+0KycmjqKWQ="},"flags/4x3/na-a0655a2e70751278e6a60d31e818f672864a6e68e8b3d3361b2fbb70fa9bfef8.svg":{"logical_path":"flags/4x3/na.svg","mtime":"2018-04-02T14:38:31+02:00","size":1005,"digest":"a0655a2e70751278e6a60d31e818f672864a6e68e8b3d3361b2fbb70fa9bfef8","integrity":"sha256-oGVaLnB1Enjmpg0x6Bj2coZKbmjos9M2Gy+7cPqb/vg="},"flags/1x1/na-1ce089a189db5be15eb05df8155f9bd017b61fc1a497e5b3021ff2ca664e122d.svg":{"logical_path":"flags/1x1/na.svg","mtime":"2018-04-02T14:38:31+02:00","size":983,"digest":"1ce089a189db5be15eb05df8155f9bd017b61fc1a497e5b3021ff2ca664e122d","integrity":"sha256-HOCJoYnbW+FesF34FV+b0Be2H8Gkl+WzAh/yymZOEi0="},"flags/4x3/nc-0c7171d91c44414ed69808611db588f1283ee7e34ea8a74a9a5101ba4b1cb305.svg":{"logical_path":"flags/4x3/nc.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"0c7171d91c44414ed69808611db588f1283ee7e34ea8a74a9a5101ba4b1cb305","integrity":"sha256-DHFx2RxEQU7WmAhhHbWI8Sg+5+NOqKdKmlEBukscswU="},"flags/1x1/nc-d3a1629f06dc3200af7669f2d895fce1908d2c1ca02d71e530bdfa6646a9516c.svg":{"logical_path":"flags/1x1/nc.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"d3a1629f06dc3200af7669f2d895fce1908d2c1ca02d71e530bdfa6646a9516c","integrity":"sha256-06FinwbcMgCvdmny2JX84ZCNLBygLXHlML36ZkapUWw="},"flags/4x3/ne-2b61d30a6cb4554535538e3b753926853e8c629a494a347286b9731c803548e4.svg":{"logical_path":"flags/4x3/ne.svg","mtime":"2018-04-02T14:38:31+02:00","size":279,"digest":"2b61d30a6cb4554535538e3b753926853e8c629a494a347286b9731c803548e4","integrity":"sha256-K2HTCmy0VUU1U447dTkmhT6MYppJSjRyhrlzHIA1SOQ="},"flags/1x1/ne-9c5f798ccd7d3dd3771ae628b4a39dfb2a4578fefd2e006f3ce89c3e494d0cb1.svg":{"logical_path":"flags/1x1/ne.svg","mtime":"2018-04-02T14:38:31+02:00","size":285,"digest":"9c5f798ccd7d3dd3771ae628b4a39dfb2a4578fefd2e006f3ce89c3e494d0cb1","integrity":"sha256-nF95jM19PdN3GuYotKOd+ypFeP79LgBvPOicPklNDLE="},"flags/4x3/nf-4e615baa83a8b4db3e39fe1d251ab913943d64e0cd320f251d619ab54e7512d3.svg":{"logical_path":"flags/4x3/nf.svg","mtime":"2018-04-02T14:38:31+02:00","size":5845,"digest":"4e615baa83a8b4db3e39fe1d251ab913943d64e0cd320f251d619ab54e7512d3","integrity":"sha256-TmFbqoOotNs+Of4dJRq5E5Q9ZODNMg8lHWGatU51EtM="},"flags/1x1/nf-45403247c90050484813acf23c50f543779528e346317274373c3c24fd830103.svg":{"logical_path":"flags/1x1/nf.svg","mtime":"2018-04-02T14:38:31+02:00","size":5598,"digest":"45403247c90050484813acf23c50f543779528e346317274373c3c24fd830103","integrity":"sha256-RUAyR8kAUEhIE6zyPFD1Q3eVKONGMXJ0Nzw8JP2DAQM="},"flags/4x3/ng-d52fd188be973f31dd34e5a0b3fed0de68fe736c8a41c6028d9c248c038c8641.svg":{"logical_path":"flags/4x3/ng.svg","mtime":"2018-04-02T14:38:31+02:00","size":263,"digest":"d52fd188be973f31dd34e5a0b3fed0de68fe736c8a41c6028d9c248c038c8641","integrity":"sha256-1S/RiL6XPzHdNOWgs/7Q3mj+c2yKQcYCjZwkjAOMhkE="},"flags/1x1/ng-f22edcc5867554d69ecbe15add0fbbb1389631f3ced07a4f820065c7770c65f5.svg":{"logical_path":"flags/1x1/ng.svg","mtime":"2018-04-02T14:38:31+02:00","size":263,"digest":"f22edcc5867554d69ecbe15add0fbbb1389631f3ced07a4f820065c7770c65f5","integrity":"sha256-8i7cxYZ1VNaey+Fa3Q+7sTiWMfPO0HpPggBlx3cMZfU="},"flags/4x3/ni-2fbb883e46fbe3b2ecfed9dac004ceb546f25c77a84a5966eea224674aebc610.svg":{"logical_path":"flags/4x3/ni.svg","mtime":"2018-04-02T14:38:31+02:00","size":18584,"digest":"2fbb883e46fbe3b2ecfed9dac004ceb546f25c77a84a5966eea224674aebc610","integrity":"sha256-L7uIPkb747Ls/tnawATOtUbyXHeoSllm7qIkZ0rrxhA="},"flags/1x1/ni-214aed148b615c4846f842b47f99cf178ac62a96cf18c5dd6b23467184b56680.svg":{"logical_path":"flags/1x1/ni.svg","mtime":"2018-04-02T14:38:31+02:00","size":18664,"digest":"214aed148b615c4846f842b47f99cf178ac62a96cf18c5dd6b23467184b56680","integrity":"sha256-IUrtFIthXEhG+EK0f5nPF4rGKpbPGMXdayNGcYS1ZoA="},"flags/4x3/nl-4f0ecea529dd4c0099dd41a7801fa5ac44aa04cd872ca31e11efd58b5a813774.svg":{"logical_path":"flags/4x3/nl.svg","mtime":"2018-04-02T14:38:31+02:00","size":367,"digest":"4f0ecea529dd4c0099dd41a7801fa5ac44aa04cd872ca31e11efd58b5a813774","integrity":"sha256-Tw7OpSndTACZ3UGngB+lrESqBM2HLKMeEe/Vi1qBN3Q="},"flags/1x1/nl-9c8f60e638879d642487818975e58c61cd3102f0e68c360708243c076436ff68.svg":{"logical_path":"flags/1x1/nl.svg","mtime":"2018-04-02T14:38:31+02:00","size":375,"digest":"9c8f60e638879d642487818975e58c61cd3102f0e68c360708243c076436ff68","integrity":"sha256-nI9g5jiHnWQkh4GJdeWMYc0xAvDmjDYHCCQ8B2Q2/2g="},"flags/4x3/no-270f7ee9d1d2efa6abf16f693faba8586adae842d79d8aad9e3f37e96c27cbce.svg":{"logical_path":"flags/4x3/no.svg","mtime":"2018-04-02T14:38:31+02:00","size":324,"digest":"270f7ee9d1d2efa6abf16f693faba8586adae842d79d8aad9e3f37e96c27cbce","integrity":"sha256-Jw9+6dHS76ar8W9pP6uoWGra6ELXnYqtnj836Wwny84="},"flags/1x1/no-7d377325e8c5ec4de0376e9f4c13463f183af637e6c443716f22020c7a313979.svg":{"logical_path":"flags/1x1/no.svg","mtime":"2018-04-02T14:38:31+02:00","size":324,"digest":"7d377325e8c5ec4de0376e9f4c13463f183af637e6c443716f22020c7a313979","integrity":"sha256-fTdzJejF7E3gN26fTBNGPxg69jfmxENxbyICDHoxOXk="},"flags/4x3/np-69637ddb3a173c4522a71598278aa32462e1762e34dd99c9dc99a515433a6cf8.svg":{"logical_path":"flags/4x3/np.svg","mtime":"2018-04-02T14:38:31+02:00","size":1061,"digest":"69637ddb3a173c4522a71598278aa32462e1762e34dd99c9dc99a515433a6cf8","integrity":"sha256-aWN92zoXPEUipxWYJ4qjJGLhdi403ZnJ3JmlFUM6bPg="},"flags/1x1/np-44ead118cce3a1fcbb720cc8d6eab6ecb6b62292315f61ae5963a40262ee11d2.svg":{"logical_path":"flags/1x1/np.svg","mtime":"2018-04-02T14:38:31+02:00","size":1199,"digest":"44ead118cce3a1fcbb720cc8d6eab6ecb6b62292315f61ae5963a40262ee11d2","integrity":"sha256-ROrRGMzjofy7cgzI1uq27La2IpIxX2GuWWOkAmLuEdI="},"flags/4x3/nr-0bd3c0ba7bbac4bd5985b838096eeebd67711d39065619ef092fa4bb55b22a6d.svg":{"logical_path":"flags/4x3/nr.svg","mtime":"2018-04-02T14:38:31+02:00","size":648,"digest":"0bd3c0ba7bbac4bd5985b838096eeebd67711d39065619ef092fa4bb55b22a6d","integrity":"sha256-C9PAunu6xL1Zhbg4CW7uvWdxHTkGVhnvCS+ku1WyKm0="},"flags/1x1/nr-63b9c44e5dd66a59895f52707dc24db5bd1eab6e535298d24e414c0f2dafcb3c.svg":{"logical_path":"flags/1x1/nr.svg","mtime":"2018-04-02T14:38:31+02:00","size":671,"digest":"63b9c44e5dd66a59895f52707dc24db5bd1eab6e535298d24e414c0f2dafcb3c","integrity":"sha256-Y7nETl3WalmJX1JwfcJNtb0eq25TUpjSTkFMDy2vyzw="},"flags/4x3/nu-259989e1eea0cbf6b41a33176a4c9c1eaa2e7ae6571ad80a324c6309bd5aa5fc.svg":{"logical_path":"flags/4x3/nu.svg","mtime":"2018-04-02T14:38:31+02:00","size":1748,"digest":"259989e1eea0cbf6b41a33176a4c9c1eaa2e7ae6571ad80a324c6309bd5aa5fc","integrity":"sha256-JZmJ4e6gy/a0GjMXakycHqoueuZXGtgKMkxjCb1apfw="},"flags/1x1/nu-1cb535708f64ed8b386a245e571e677e935009af92f2b214760a2832c1ee1b53.svg":{"logical_path":"flags/1x1/nu.svg","mtime":"2018-04-02T14:38:31+02:00","size":1736,"digest":"1cb535708f64ed8b386a245e571e677e935009af92f2b214760a2832c1ee1b53","integrity":"sha256-HLU1cI9k7Ys4aiReVx5nfpNQCa+S8rIUdgooMsHuG1M="},"flags/4x3/nz-90ceca2a683fbec395a91b77b0880cea99c3b2cbdb24caa5474925cbdcc3675e.svg":{"logical_path":"flags/4x3/nz.svg","mtime":"2018-04-02T14:38:31+02:00","size":3019,"digest":"90ceca2a683fbec395a91b77b0880cea99c3b2cbdb24caa5474925cbdcc3675e","integrity":"sha256-kM7KKmg/vsOVqRt3sIgM6pnDssvbJMqlR0kly9zDZ14="},"flags/1x1/nz-b0d78f165a72edd46599222a2ea5f6a91a8252975cb03e33c4ca08e389859aac.svg":{"logical_path":"flags/1x1/nz.svg","mtime":"2018-04-02T14:38:31+02:00","size":3045,"digest":"b0d78f165a72edd46599222a2ea5f6a91a8252975cb03e33c4ca08e389859aac","integrity":"sha256-sNePFlpy7dRlmSIqLqX2qRqCUpdcsD4zxMoI44mFmqw="},"flags/4x3/om-aadcca7bc7ad318400097b84849dd64c4744306cd9b4f152fba34f2e84116965.svg":{"logical_path":"flags/4x3/om.svg","mtime":"2018-04-02T14:38:31+02:00","size":22891,"digest":"aadcca7bc7ad318400097b84849dd64c4744306cd9b4f152fba34f2e84116965","integrity":"sha256-qtzKe8etMYQACXuEhJ3WTEdEMGzZtPFS+6NPLoQRaWU="},"flags/1x1/om-705e2bd2b2fc7d13c152aa06bfb9e6ee4ad8b299f8c06ca16adad0b18b2b18ed.svg":{"logical_path":"flags/1x1/om.svg","mtime":"2018-04-02T14:38:31+02:00","size":22875,"digest":"705e2bd2b2fc7d13c152aa06bfb9e6ee4ad8b299f8c06ca16adad0b18b2b18ed","integrity":"sha256-cF4r0rL8fRPBUqoGv7nm7krYspn4wGyhatrQsYsrGO0="},"flags/4x3/pa-027e679bd65dcaa2c53145a14669c1e674a467a889ef702cbe2a260f7ca8ad38.svg":{"logical_path":"flags/4x3/pa.svg","mtime":"2018-04-02T14:38:31+02:00","size":746,"digest":"027e679bd65dcaa2c53145a14669c1e674a467a889ef702cbe2a260f7ca8ad38","integrity":"sha256-An5nm9ZdyqLFMUWhRmnB5nSkZ6iJ73AsviomD3yorTg="},"flags/1x1/pa-edeb4faeadaa286de7fdc667e25d38ad0cdbccaec5023182fed6a3c74e8b09eb.svg":{"logical_path":"flags/1x1/pa.svg","mtime":"2018-04-02T14:38:31+02:00","size":662,"digest":"edeb4faeadaa286de7fdc667e25d38ad0cdbccaec5023182fed6a3c74e8b09eb","integrity":"sha256-7etPrq2qKG3n/cZn4l04rQzbzK7FAjGC/tajx06LCes="},"flags/4x3/pe-7ec59842737c90d6ff543f1831fd69b51e1e7ee1b068c3ac6259cbf2c214d611.svg":{"logical_path":"flags/4x3/pe.svg","mtime":"2018-04-02T14:38:31+02:00","size":74343,"digest":"7ec59842737c90d6ff543f1831fd69b51e1e7ee1b068c3ac6259cbf2c214d611","integrity":"sha256-fsWYQnN8kNb/VD8YMf1ptR4efuGwaMOsYlnL8sIU1hE="},"flags/1x1/pe-97d1b8ed1d4ed5e5f0348a731ca4a3a4b9abc7d440447dc87a521f229f375ed3.svg":{"logical_path":"flags/1x1/pe.svg","mtime":"2018-04-02T14:38:31+02:00","size":73629,"digest":"97d1b8ed1d4ed5e5f0348a731ca4a3a4b9abc7d440447dc87a521f229f375ed3","integrity":"sha256-l9G47R1O1eXwNIpzHKSjpLmrx9RARH3IelIfIp83XtM="},"flags/4x3/pf-27955c73c5be4043c5b7ddf64c8f46d11c6648e3b1fc0efe028b8afea21a40e1.svg":{"logical_path":"flags/4x3/pf.svg","mtime":"2018-04-02T14:38:31+02:00","size":4292,"digest":"27955c73c5be4043c5b7ddf64c8f46d11c6648e3b1fc0efe028b8afea21a40e1","integrity":"sha256-J5Vcc8W+QEPFt932TI9G0RxmSOOx/A7+AouK/qIaQOE="},"flags/1x1/pf-83e3e1d36fba45e015c62f938e6d182029edc05ebfdc50bcb33860f36f96d73a.svg":{"logical_path":"flags/1x1/pf.svg","mtime":"2018-04-02T14:38:31+02:00","size":4235,"digest":"83e3e1d36fba45e015c62f938e6d182029edc05ebfdc50bcb33860f36f96d73a","integrity":"sha256-g+Ph02+6ReAVxi+Tjm0YICntwF6/3FC8szhg82+W1zo="},"flags/4x3/pg-c2fdd2551f9044c461eccfae2d7ba0a347a99143f6002b71a429942af0217897.svg":{"logical_path":"flags/4x3/pg.svg","mtime":"2018-04-02T14:38:31+02:00","size":1671,"digest":"c2fdd2551f9044c461eccfae2d7ba0a347a99143f6002b71a429942af0217897","integrity":"sha256-wv3SVR+QRMRh7M+uLXugo0epkUP2ACtxpCmUKvAheJc="},"flags/1x1/pg-cf60257fa85f9270b1e9980e703435186110167f76c153bc460c10ee8b2d4b09.svg":{"logical_path":"flags/1x1/pg.svg","mtime":"2018-04-02T14:38:31+02:00","size":2111,"digest":"cf60257fa85f9270b1e9980e703435186110167f76c153bc460c10ee8b2d4b09","integrity":"sha256-z2Alf6hfknCx6ZgOcDQ1GGEQFn92wVO8RgwQ7ostSwk="},"flags/4x3/ph-bf3394850a6cec6a535420eabce263e7f8193413e4af1fb317c76da025388c1b.svg":{"logical_path":"flags/4x3/ph.svg","mtime":"2018-04-02T14:38:31+02:00","size":1303,"digest":"bf3394850a6cec6a535420eabce263e7f8193413e4af1fb317c76da025388c1b","integrity":"sha256-vzOUhQps7GpTVCDqvOJj5/gZNBPkrx+zF8dtoCU4jBs="},"flags/1x1/ph-006c3218effe4269252cb9638de82ea339eb2894951705c630533ceffa842169.svg":{"logical_path":"flags/1x1/ph.svg","mtime":"2018-04-02T14:38:31+02:00","size":1303,"digest":"006c3218effe4269252cb9638de82ea339eb2894951705c630533ceffa842169","integrity":"sha256-AGwyGO/+QmklLLljjeguoznrKJSVFwXGMFM87/qEIWk="},"flags/4x3/pk-b64f6a32e5bb598f57cfe49c4899c2021f2d153653f3d92101e6e11b2158e500.svg":{"logical_path":"flags/4x3/pk.svg","mtime":"2018-04-02T14:38:31+02:00","size":743,"digest":"b64f6a32e5bb598f57cfe49c4899c2021f2d153653f3d92101e6e11b2158e500","integrity":"sha256-tk9qMuW7WY9Xz+ScSJnCAh8tFTZT89khAebhGyFY5QA="},"flags/1x1/pk-d2d58def913c9081c5eeeda5f0b6895068ec13c955694e359531e23422145e60.svg":{"logical_path":"flags/1x1/pk.svg","mtime":"2018-04-02T14:38:31+02:00","size":694,"digest":"d2d58def913c9081c5eeeda5f0b6895068ec13c955694e359531e23422145e60","integrity":"sha256-0tWN75E8kIHF7u2l8LaJUGjsE8lVaU41lTHiNCIUXmA="},"flags/4x3/pl-f55a710991a94c2e6c2f9f1a7a4a36ebb84b24b7c9d9df4e1ffe86d61321fa6f.svg":{"logical_path":"flags/4x3/pl.svg","mtime":"2018-04-02T14:38:31+02:00","size":228,"digest":"f55a710991a94c2e6c2f9f1a7a4a36ebb84b24b7c9d9df4e1ffe86d61321fa6f","integrity":"sha256-9VpxCZGpTC5sL58aeko267hLJLfJ2d9OH/6G1hMh+m8="},"flags/1x1/pl-fafb539259385f2b99df910cff085710a9b4d9706b74e4e0f8a6ef627615c4e7.svg":{"logical_path":"flags/1x1/pl.svg","mtime":"2018-04-02T14:38:31+02:00","size":228,"digest":"fafb539259385f2b99df910cff085710a9b4d9706b74e4e0f8a6ef627615c4e7","integrity":"sha256-+vtTklk4XyuZ35EM/whXEKm02XBrdOTg+KbvYnYVxOc="},"flags/4x3/pm-8f6338d2ae3e0e42adc9754720ca21ad4979095cf6d7467a8db5a5a1c3e0b2a5.svg":{"logical_path":"flags/4x3/pm.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"8f6338d2ae3e0e42adc9754720ca21ad4979095cf6d7467a8db5a5a1c3e0b2a5","integrity":"sha256-j2M40q4+DkKtyXVHIMohrUl5CVz210Z6jbWlocPgsqU="},"flags/1x1/pm-63029c6198dc42c404ec39807a99528b1d198eeeea6f9a1e309548242480140b.svg":{"logical_path":"flags/1x1/pm.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"63029c6198dc42c404ec39807a99528b1d198eeeea6f9a1e309548242480140b","integrity":"sha256-YwKcYZjcQsQE7DmAeplSix0Zju7qb5oeMJVIJCSAFAs="},"flags/4x3/pn-4006c11ca83011c0dd60a13ac30b27da0578b9f1368bd8c6de5aab423f6662d8.svg":{"logical_path":"flags/4x3/pn.svg","mtime":"2018-04-02T14:38:31+02:00","size":10953,"digest":"4006c11ca83011c0dd60a13ac30b27da0578b9f1368bd8c6de5aab423f6662d8","integrity":"sha256-QAbBHKgwEcDdYKE6wwsn2gV4ufE2i9jG3lqrQj9mYtg="},"flags/1x1/pn-6c433f7f9cb79c6d5ed7bbeade8a495e3b26ca2604f4fd3995096109684ac5dd.svg":{"logical_path":"flags/1x1/pn.svg","mtime":"2018-04-02T14:38:31+02:00","size":8624,"digest":"6c433f7f9cb79c6d5ed7bbeade8a495e3b26ca2604f4fd3995096109684ac5dd","integrity":"sha256-bEM/f5y3nG1e17vq3opJXjsmyiYE9P05lQlhCWhKxd0="},"flags/4x3/pr-6287e1515fa80e2d05133ed93f14ca03a1be6909a9ef6c736fd60f9c9fe73132.svg":{"logical_path":"flags/4x3/pr.svg","mtime":"2018-04-02T14:38:31+02:00","size":634,"digest":"6287e1515fa80e2d05133ed93f14ca03a1be6909a9ef6c736fd60f9c9fe73132","integrity":"sha256-YofhUV+oDi0FEz7ZPxTKA6G+aQmp72xzb9YPnJ/nMTI="},"flags/1x1/pr-526985b3a6d2d6de577ed0ed92d0b49ce854667e3ff630304813fd5af15527cd.svg":{"logical_path":"flags/1x1/pr.svg","mtime":"2018-04-02T14:38:31+02:00","size":622,"digest":"526985b3a6d2d6de577ed0ed92d0b49ce854667e3ff630304813fd5af15527cd","integrity":"sha256-UmmFs6bS1t5XftDtktC0nOhUZn4/9jAwSBP9WvFVJ80="},"flags/4x3/ps-31f50e1fcb44b9aa6e9ce4473c3085f744e70ea0fa1fd8d85787f4e7b0c4a69b.svg":{"logical_path":"flags/4x3/ps.svg","mtime":"2018-04-02T14:38:31+02:00","size":558,"digest":"31f50e1fcb44b9aa6e9ce4473c3085f744e70ea0fa1fd8d85787f4e7b0c4a69b","integrity":"sha256-MfUOH8tEuapunORHPDCF90TnDqD6H9jYV4f057DEpps="},"flags/1x1/ps-c43918bc71bef71b24dd46e8cacc53e0df53e02dcce6199d06d11a4637f08a04.svg":{"logical_path":"flags/1x1/ps.svg","mtime":"2018-04-02T14:38:31+02:00","size":544,"digest":"c43918bc71bef71b24dd46e8cacc53e0df53e02dcce6199d06d11a4637f08a04","integrity":"sha256-xDkYvHG+9xsk3UboysxT4N9T4C3M5hmdBtEaRjfwigQ="},"flags/4x3/pt-9aab20caed714ee47fc408f017037aea94a649b3ba4d87e2da37870ee31e4f92.svg":{"logical_path":"flags/4x3/pt.svg","mtime":"2018-04-02T14:38:31+02:00","size":8393,"digest":"9aab20caed714ee47fc408f017037aea94a649b3ba4d87e2da37870ee31e4f92","integrity":"sha256-mqsgyu1xTuR/xAjwFwN66pSmSbO6TYfi2jeHDuMeT5I="},"flags/1x1/pt-a309869e5018c9690a65ebdf8a2d69d61f82772068a7920f9680ed0581ae5966.svg":{"logical_path":"flags/1x1/pt.svg","mtime":"2018-04-02T14:38:31+02:00","size":8775,"digest":"a309869e5018c9690a65ebdf8a2d69d61f82772068a7920f9680ed0581ae5966","integrity":"sha256-owmGnlAYyWkKZevfii1p1h+CdyBop5IPloDtBYGuWWY="},"flags/4x3/pw-9262037d114d0f61571c74f9a5455809709b43e6565443ae2667981eecb5f12a.svg":{"logical_path":"flags/4x3/pw.svg","mtime":"2018-04-02T14:38:31+02:00","size":467,"digest":"9262037d114d0f61571c74f9a5455809709b43e6565443ae2667981eecb5f12a","integrity":"sha256-kmIDfRFND2FXHHT5pUVYCXCbQ+ZWVEOuJmeYHuy18So="},"flags/1x1/pw-a6f42019653ae26d43c6e9b7bef83fc98cff8ec5e8d0c50ad7cb0a17d5e565a6.svg":{"logical_path":"flags/1x1/pw.svg","mtime":"2018-04-02T14:38:31+02:00","size":511,"digest":"a6f42019653ae26d43c6e9b7bef83fc98cff8ec5e8d0c50ad7cb0a17d5e565a6","integrity":"sha256-pvQgGWU64m1Dxum3vvg/yYz/jsXo0MUK18sKF9XlZaY="},"flags/4x3/py-5bc9e9f0dee94ae3d9bd80ae6fb1aac297dc81a1c592d0a73bc3383bce73af74.svg":{"logical_path":"flags/4x3/py.svg","mtime":"2018-04-02T14:38:31+02:00","size":17312,"digest":"5bc9e9f0dee94ae3d9bd80ae6fb1aac297dc81a1c592d0a73bc3383bce73af74","integrity":"sha256-W8np8N7pSuPZvYCub7GqwpfcgaHFktCnO8M4O85zr3Q="},"flags/1x1/py-182eff300f4507fd9399fb6310d1cd3b45adadd7924ad2814003c7111ec5c0de.svg":{"logical_path":"flags/1x1/py.svg","mtime":"2018-04-02T14:38:31+02:00","size":17478,"digest":"182eff300f4507fd9399fb6310d1cd3b45adadd7924ad2814003c7111ec5c0de","integrity":"sha256-GC7/MA9FB/2TmftjENHNO0WtrdeSStKBQAPHER7FwN4="},"flags/4x3/qa-32c93970f8e521850eddfaf2a89dfff987f0ae3b0b73a253c301b61cf547cf9e.svg":{"logical_path":"flags/4x3/qa.svg","mtime":"2018-04-02T14:38:31+02:00","size":362,"digest":"32c93970f8e521850eddfaf2a89dfff987f0ae3b0b73a253c301b61cf547cf9e","integrity":"sha256-Msk5cPjlIYUO3fryqJ3/+YfwrjsLc6JTwwG2HPVHz54="},"flags/1x1/qa-182e4d8ace2607d0c02d3c29d65eb084af71092357006bc41cd601981ec3b81c.svg":{"logical_path":"flags/1x1/qa.svg","mtime":"2018-04-02T14:38:31+02:00","size":359,"digest":"182e4d8ace2607d0c02d3c29d65eb084af71092357006bc41cd601981ec3b81c","integrity":"sha256-GC5Nis4mB9DALTwp1l6whK9xCSNXAGvEHNYBmB7DuBw="},"flags/4x3/re-8b2ea1f2727c266a2b80cb12a9b7195f6b656f521552b67893b6761a07f9bc92.svg":{"logical_path":"flags/4x3/re.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"8b2ea1f2727c266a2b80cb12a9b7195f6b656f521552b67893b6761a07f9bc92","integrity":"sha256-iy6h8nJ8JmorgMsSqbcZX2tlb1IVUrZ4k7Z2Ggf5vJI="},"flags/1x1/re-07eb7d855022bc678b47b0ce5fd05da5044d6dde86ad3697d4ae55c68ff447c1.svg":{"logical_path":"flags/1x1/re.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"07eb7d855022bc678b47b0ce5fd05da5044d6dde86ad3697d4ae55c68ff447c1","integrity":"sha256-B+t9hVAivGeLR7DOX9BdpQRNbd6GrTaX1K5Vxo/0R8E="},"flags/4x3/ro-4ab797571e1d9eb326486f75654a4590fd33f20444f85b77ba0997eb6138c21f.svg":{"logical_path":"flags/4x3/ro.svg","mtime":"2018-04-02T14:38:31+02:00","size":308,"digest":"4ab797571e1d9eb326486f75654a4590fd33f20444f85b77ba0997eb6138c21f","integrity":"sha256-SreXVx4dnrMmSG91ZUpFkP0z8gRE+Ft3ugmX62E4wh8="},"flags/1x1/ro-ddfcbaec04d11bf7f95abebd1d3a42b2862b1af8fca9b02764a6ed0e409a1d75.svg":{"logical_path":"flags/1x1/ro.svg","mtime":"2018-04-02T14:38:31+02:00","size":308,"digest":"ddfcbaec04d11bf7f95abebd1d3a42b2862b1af8fca9b02764a6ed0e409a1d75","integrity":"sha256-3fy67ATRG/f5Wr69HTpCsoYrGvj8qbAnZKbtDkCaHXU="},"flags/4x3/rs-dd8a52473ea40e23b393b5f4a30d1edd91865aab167f0c1835ae84b15dcce585.svg":{"logical_path":"flags/4x3/rs.svg","mtime":"2018-04-02T14:38:31+02:00","size":187640,"digest":"dd8a52473ea40e23b393b5f4a30d1edd91865aab167f0c1835ae84b15dcce585","integrity":"sha256-3YpSRz6kDiOzk7X0ow0e3ZGGWqsWfwwYNa6EsV3M5YU="},"flags/1x1/rs-42bf40209c92e4e7169daf29fbcb7253b2804eee7a463051529327f38851f865.svg":{"logical_path":"flags/1x1/rs.svg","mtime":"2018-04-02T14:38:31+02:00","size":187503,"digest":"42bf40209c92e4e7169daf29fbcb7253b2804eee7a463051529327f38851f865","integrity":"sha256-Qr9AIJyS5OcWna8p+8tyU7KATu56RjBRUpMn84hR+GU="},"flags/4x3/ru-13f4525a4caad6e31afa523d2bc4a0c1e6377c0bef1bfd872682130d3f199d1d.svg":{"logical_path":"flags/4x3/ru.svg","mtime":"2018-04-02T14:38:31+02:00","size":289,"digest":"13f4525a4caad6e31afa523d2bc4a0c1e6377c0bef1bfd872682130d3f199d1d","integrity":"sha256-E/RSWkyq1uMa+lI9K8SgweY3fAvvG/2HJoITDT8ZnR0="},"flags/1x1/ru-b9792a963faf667447e0456dba5be80a3b37c197a4284d1539a3433721d9e2fe.svg":{"logical_path":"flags/1x1/ru.svg","mtime":"2018-04-02T14:38:31+02:00","size":293,"digest":"b9792a963faf667447e0456dba5be80a3b37c197a4284d1539a3433721d9e2fe","integrity":"sha256-uXkqlj+vZnRH4EVtulvoCjs3wZekKE0VOaNDNyHZ4v4="},"flags/4x3/rw-bc38bcd6e19d2941839b253af6e863b13338cde1174874f9674471026c15e422.svg":{"logical_path":"flags/4x3/rw.svg","mtime":"2018-04-02T14:38:31+02:00","size":750,"digest":"bc38bcd6e19d2941839b253af6e863b13338cde1174874f9674471026c15e422","integrity":"sha256-vDi81uGdKUGDmyU69uhjsTM4zeEXSHT5Z0RxAmwV5CI="},"flags/1x1/rw-456698123775b83d2b0fa1b9fe073f9ccdba0b6bf39a703b8979dcce158eb32c.svg":{"logical_path":"flags/1x1/rw.svg","mtime":"2018-04-02T14:38:31+02:00","size":751,"digest":"456698123775b83d2b0fa1b9fe073f9ccdba0b6bf39a703b8979dcce158eb32c","integrity":"sha256-RWaYEjd1uD0rD6G5/gc/nM26C2vzmnA7iXnczhWOsyw="},"flags/4x3/sa-2b2fd6abb48415d5407c576c24a24fbd80af5877ef06cf2d026452f6c67f5f4d.svg":{"logical_path":"flags/4x3/sa.svg","mtime":"2018-04-02T14:38:31+02:00","size":10303,"digest":"2b2fd6abb48415d5407c576c24a24fbd80af5877ef06cf2d026452f6c67f5f4d","integrity":"sha256-Ky/Wq7SEFdVAfFdsJKJPvYCvWHfvBs8tAmRS9sZ/X00="},"flags/1x1/sa-d9ebc73e7957f86604164dd5054fb32601ad14d7dfd4bfe73da5bdd10bb2f8ae.svg":{"logical_path":"flags/1x1/sa.svg","mtime":"2018-04-02T14:38:31+02:00","size":10233,"digest":"d9ebc73e7957f86604164dd5054fb32601ad14d7dfd4bfe73da5bdd10bb2f8ae","integrity":"sha256-2evHPnlX+GYEFk3VBU+zJgGtFNff1L/nPaW90Quy+K4="},"flags/4x3/sb-37761927039d0a37ba0995c59fd31bbe36c8a0ca161e5b72b8131e3659f8dddf.svg":{"logical_path":"flags/4x3/sb.svg","mtime":"2018-04-02T14:38:31+02:00","size":950,"digest":"37761927039d0a37ba0995c59fd31bbe36c8a0ca161e5b72b8131e3659f8dddf","integrity":"sha256-N3YZJwOdCje6CZXFn9MbvjbIoMoWHltyuBMeNln43d8="},"flags/1x1/sb-bedbf8464cd82f391bfe6178c63055b650d0cf3aee60c37fa79a586f95783b79.svg":{"logical_path":"flags/1x1/sb.svg","mtime":"2018-04-02T14:38:31+02:00","size":956,"digest":"bedbf8464cd82f391bfe6178c63055b650d0cf3aee60c37fa79a586f95783b79","integrity":"sha256-vtv4RkzYLzkb/mF4xjBVtlDQzzruYMN/p5pYb5V4O3k="},"flags/4x3/sc-f6a2f8f37be93f07600b491b52cb58d80d74b92d8ace0af313f4ce081b0d1345.svg":{"logical_path":"flags/4x3/sc.svg","mtime":"2018-04-02T14:38:31+02:00","size":568,"digest":"f6a2f8f37be93f07600b491b52cb58d80d74b92d8ace0af313f4ce081b0d1345","integrity":"sha256-9qL483vpPwdgC0kbUstY2A10uS2KzgrzE/TOCBsNE0U="},"flags/1x1/sc-5dcd01b98c34460c9624280fb5047811fbae7d976620cd0a70ad4263a9085b60.svg":{"logical_path":"flags/1x1/sc.svg","mtime":"2018-04-02T14:38:31+02:00","size":573,"digest":"5dcd01b98c34460c9624280fb5047811fbae7d976620cd0a70ad4263a9085b60","integrity":"sha256-Xc0BuYw0RgyWJCgPtQR4EfuufZdmIM0KcK1CY6kIW2A="},"flags/4x3/sd-cc9cf97e8a37622b9e1bad28811d46c4471595afa448dc055e0e3aae7687fe4b.svg":{"logical_path":"flags/4x3/sd.svg","mtime":"2018-04-02T14:38:31+02:00","size":494,"digest":"cc9cf97e8a37622b9e1bad28811d46c4471595afa448dc055e0e3aae7687fe4b","integrity":"sha256-zJz5foo3YiueG60ogR1GxEcVla+kSNwFXg46rnaH/ks="},"flags/1x1/sd-1f5d13f9780085acbaad13d959b1918c796ba7b0450954b15d145e87cebe045c.svg":{"logical_path":"flags/1x1/sd.svg","mtime":"2018-04-02T14:38:31+02:00","size":496,"digest":"1f5d13f9780085acbaad13d959b1918c796ba7b0450954b15d145e87cebe045c","integrity":"sha256-H10T+XgAhay6rRPZWbGRjHlrp7BFCVSxXRReh86+BFw="},"flags/4x3/se-84b06bcd5bd90ea8dd6d1c3c8d2799a843c47b0256ce098aef75414964618286.svg":{"logical_path":"flags/4x3/se.svg","mtime":"2018-04-02T14:38:31+02:00","size":688,"digest":"84b06bcd5bd90ea8dd6d1c3c8d2799a843c47b0256ce098aef75414964618286","integrity":"sha256-hLBrzVvZDqjdbRw8jSeZqEPEewJWzgmK73VBSWRhgoY="},"flags/1x1/se-39f128686652cf914f8601110fcc9ac879bca204407013b93aff4ca4fb2ed9bc.svg":{"logical_path":"flags/1x1/se.svg","mtime":"2018-04-02T14:38:31+02:00","size":701,"digest":"39f128686652cf914f8601110fcc9ac879bca204407013b93aff4ca4fb2ed9bc","integrity":"sha256-OfEoaGZSz5FPhgERD8yayHm8ogRAcBO5Ov9MpPsu2bw="},"flags/4x3/sg-a82acd90077e76318ddb0be96999d9695b9a9f4627e8a0f341d3987a62747dcc.svg":{"logical_path":"flags/4x3/sg.svg","mtime":"2018-04-02T14:38:31+02:00","size":890,"digest":"a82acd90077e76318ddb0be96999d9695b9a9f4627e8a0f341d3987a62747dcc","integrity":"sha256-qCrNkAd+djGN2wvpaZnZaVuan0Yn6KDzQdOYemJ0fcw="},"flags/1x1/sg-c22e093634568aae249bf35f9ddcaa6796b5f27d76c39ff5336abf7f1b8a47d4.svg":{"logical_path":"flags/1x1/sg.svg","mtime":"2018-04-02T14:38:31+02:00","size":954,"digest":"c22e093634568aae249bf35f9ddcaa6796b5f27d76c39ff5336abf7f1b8a47d4","integrity":"sha256-wi4JNjRWiq4km/NfndyqZ5a18n12w5/1M2q/fxuKR9Q="},"flags/4x3/sh-57470d9a75955f0fac605a94e853bab524c7461a4c025e809fb09db762ebe46f.svg":{"logical_path":"flags/4x3/sh.svg","mtime":"2018-04-02T14:38:31+02:00","size":29702,"digest":"57470d9a75955f0fac605a94e853bab524c7461a4c025e809fb09db762ebe46f","integrity":"sha256-V0cNmnWVXw+sYFqU6FO6tSTHRhpMAl6An7Cdt2Lr5G8="},"flags/1x1/sh-8d06a0fff61e51eb65357d138e00736545835b8649aa2694152f4cdc9f941c16.svg":{"logical_path":"flags/1x1/sh.svg","mtime":"2018-04-02T14:38:31+02:00","size":30308,"digest":"8d06a0fff61e51eb65357d138e00736545835b8649aa2694152f4cdc9f941c16","integrity":"sha256-jQag//YeUetlNX0TjgBzZUWDW4ZJqiaUFS9M3J+UHBY="},"flags/4x3/si-289d6417f154323e7922df09ffc0f49ded31548c7ee8020c39cb85724ffbcea8.svg":{"logical_path":"flags/4x3/si.svg","mtime":"2018-04-02T14:38:31+02:00","size":2055,"digest":"289d6417f154323e7922df09ffc0f49ded31548c7ee8020c39cb85724ffbcea8","integrity":"sha256-KJ1kF/FUMj55It8J/8D0ne0xVIx+6AIMOcuFck/7zqg="},"flags/1x1/si-ca40a5f4f38119d6f52ffd3ddb36af95951a2aa1fadcd897f5bc1641bb2e0051.svg":{"logical_path":"flags/1x1/si.svg","mtime":"2018-04-02T14:38:31+02:00","size":2068,"digest":"ca40a5f4f38119d6f52ffd3ddb36af95951a2aa1fadcd897f5bc1641bb2e0051","integrity":"sha256-ykCl9POBGdb1L/092zavlZUaKqH63NiX9bwWQbsuAFE="},"flags/4x3/sj-67d4cdd268d0c0cd93fc561b506cb5646cb508385c93ed350d11f94aa1c83833.svg":{"logical_path":"flags/4x3/sj.svg","mtime":"2018-04-02T14:38:31+02:00","size":324,"digest":"67d4cdd268d0c0cd93fc561b506cb5646cb508385c93ed350d11f94aa1c83833","integrity":"sha256-Z9TN0mjQwM2T/FYbUGy1ZGy1CDhck+01DRH5SqHIODM="},"flags/1x1/sj-f7c489607033138039612d6abe7f4b0b4b6dada5cac75d78204f404a0d292b1c.svg":{"logical_path":"flags/1x1/sj.svg","mtime":"2018-04-02T14:38:31+02:00","size":324,"digest":"f7c489607033138039612d6abe7f4b0b4b6dada5cac75d78204f404a0d292b1c","integrity":"sha256-98SJYHAzE4A5YS1qvn9LC0ttraXKx114IE9ASg0pKxw="},"flags/4x3/sk-a0bdbb7f5d6998ffe9fcbc80bbdf0e6cff3629740d2ce1b8d61025e0a8b322b5.svg":{"logical_path":"flags/4x3/sk.svg","mtime":"2018-04-02T14:38:31+02:00","size":1208,"digest":"a0bdbb7f5d6998ffe9fcbc80bbdf0e6cff3629740d2ce1b8d61025e0a8b322b5","integrity":"sha256-oL27f11pmP/p/LyAu98ObP82KXQNLOG41hAl4KizIrU="},"flags/1x1/sk-a82a813b2d81af9be1aa775f22b2c2457d11e870e072d7e23957a11d0878faed.svg":{"logical_path":"flags/1x1/sk.svg","mtime":"2018-04-02T14:38:31+02:00","size":1187,"digest":"a82a813b2d81af9be1aa775f22b2c2457d11e870e072d7e23957a11d0878faed","integrity":"sha256-qCqBOy2Br5vhqndfIrLCRX0R6HDgctfiOVehHQh4+u0="},"flags/4x3/sl-be265bed24cfe0b25778201f251e52e4e721e3d319795875913805d1aea84ebb.svg":{"logical_path":"flags/4x3/sl.svg","mtime":"2018-04-02T14:38:31+02:00","size":278,"digest":"be265bed24cfe0b25778201f251e52e4e721e3d319795875913805d1aea84ebb","integrity":"sha256-viZb7STP4LJXeCAfJR5S5Och49MZeVh1kTgF0a6oTrs="},"flags/1x1/sl-cb8bccbaa21957f006ed4ae0144da81c999e93bd8014023b16b500fdcdc397d3.svg":{"logical_path":"flags/1x1/sl.svg","mtime":"2018-04-02T14:38:31+02:00","size":441,"digest":"cb8bccbaa21957f006ed4ae0144da81c999e93bd8014023b16b500fdcdc397d3","integrity":"sha256-y4vMuqIZV/AG7UrgFE2oHJmek72AFAI7FrUA/c3Dl9M="},"flags/4x3/sm-d7818df3f8f2d5dbed27dc5a0a80b1e41cdcd6130eeff221da58f0321e925f27.svg":{"logical_path":"flags/4x3/sm.svg","mtime":"2018-04-02T14:38:31+02:00","size":15960,"digest":"d7818df3f8f2d5dbed27dc5a0a80b1e41cdcd6130eeff221da58f0321e925f27","integrity":"sha256-14GN8/jy1dvtJ9xaCoCx5Bzc1hMO7/Ih2ljwMh6SXyc="},"flags/1x1/sm-6f87660dcac925bbdb036c79a0e20d3b208215d327be4c4764ae1069d6464efd.svg":{"logical_path":"flags/1x1/sm.svg","mtime":"2018-04-02T14:38:31+02:00","size":15881,"digest":"6f87660dcac925bbdb036c79a0e20d3b208215d327be4c4764ae1069d6464efd","integrity":"sha256-b4dmDcrJJbvbA2x5oOINOyCCFdMnvkxHZK4QadZGTv0="},"flags/4x3/sn-b131b17a374bcfbd00d442d282fa52f0e4e0e448cda1cdfaac25a95ff56443c0.svg":{"logical_path":"flags/4x3/sn.svg","mtime":"2018-04-02T14:38:31+02:00","size":427,"digest":"b131b17a374bcfbd00d442d282fa52f0e4e0e448cda1cdfaac25a95ff56443c0","integrity":"sha256-sTGxejdLz70A1ELSgvpS8OTg5EjNoc36rCWpX/VkQ8A="},"flags/1x1/sn-d180d3ce9846966dee6a3d9433ede7d24801dc4311636aabd470ec5b8765d772.svg":{"logical_path":"flags/1x1/sn.svg","mtime":"2018-04-02T14:38:31+02:00","size":418,"digest":"d180d3ce9846966dee6a3d9433ede7d24801dc4311636aabd470ec5b8765d772","integrity":"sha256-0YDTzphGlm3uaj2UM+3n0kgB3EMRY2qr1HDsW4dl13I="},"flags/4x3/so-3b5b77b371299478144a94b60c99524fb6b99bfedb3dcc976ab70185e07f399e.svg":{"logical_path":"flags/4x3/so.svg","mtime":"2018-04-02T14:38:31+02:00","size":494,"digest":"3b5b77b371299478144a94b60c99524fb6b99bfedb3dcc976ab70185e07f399e","integrity":"sha256-O1t3s3EplHgUSpS2DJlST7a5m/7bPcyXarcBheB/OZ4="},"flags/1x1/so-50aa941f2d2954285ef9e5ac260cdd264a73cf2e4b0c627677f04141fff2afd3.svg":{"logical_path":"flags/1x1/so.svg","mtime":"2018-04-02T14:38:31+02:00","size":501,"digest":"50aa941f2d2954285ef9e5ac260cdd264a73cf2e4b0c627677f04141fff2afd3","integrity":"sha256-UKqUHy0pVChe+eWsJgzdJkpzzy5LDGJ2d/BBQf/yr9M="},"flags/4x3/sr-94d0f0aefcbdea8d7ba35648eda5037e99bf4126723ce36416582ea43b08d3e2.svg":{"logical_path":"flags/4x3/sr.svg","mtime":"2018-04-02T14:38:31+02:00","size":318,"digest":"94d0f0aefcbdea8d7ba35648eda5037e99bf4126723ce36416582ea43b08d3e2","integrity":"sha256-lNDwrvy96o17o1ZI7aUDfpm/QSZyPONkFlgupDsI0+I="},"flags/1x1/sr-3944d683068d437471725d22fd71ccbe6a63ae307ff9775690417d3bf262cf82.svg":{"logical_path":"flags/1x1/sr.svg","mtime":"2018-04-02T14:38:31+02:00","size":323,"digest":"3944d683068d437471725d22fd71ccbe6a63ae307ff9775690417d3bf262cf82","integrity":"sha256-OUTWgwaNQ3Rxcl0i/XHMvmpjrjB/+XdWkEF9O/Jiz4I="},"flags/4x3/ss-f391e5002cbce83f97f7d1a11c284fa2e36a7d6dc734757d733656801ab17d0a.svg":{"logical_path":"flags/4x3/ss.svg","mtime":"2018-04-02T14:38:31+02:00","size":389,"digest":"f391e5002cbce83f97f7d1a11c284fa2e36a7d6dc734757d733656801ab17d0a","integrity":"sha256-85HlACy86D+X99GhHChPouNqfW3HNHV9czZWgBqxfQo="},"flags/1x1/ss-853bd9f713d2f6b1fe540a82e8bf4754912da21575b3fe756b8741767f318f7a.svg":{"logical_path":"flags/1x1/ss.svg","mtime":"2018-04-02T14:38:31+02:00","size":400,"digest":"853bd9f713d2f6b1fe540a82e8bf4754912da21575b3fe756b8741767f318f7a","integrity":"sha256-hTvZ9xPS9rH+VAqC6L9HVJEtohV1s/51a4dBdn8xj3o="},"flags/4x3/st-b52bb48a2c0800f5cb4b07bdd93c3908f77bcb6800be883ebf943bbd3d99d42c.svg":{"logical_path":"flags/4x3/st.svg","mtime":"2018-04-02T14:38:31+02:00","size":919,"digest":"b52bb48a2c0800f5cb4b07bdd93c3908f77bcb6800be883ebf943bbd3d99d42c","integrity":"sha256-tSu0iiwIAPXLSwe92Tw5CPd7y2gAvog+v5Q7vT2Z1Cw="},"flags/1x1/st-d8b5b1c8b9fe947086a4d277d2ac5d6b9cff188dfd37bda66c8bf5e02c5facc8.svg":{"logical_path":"flags/1x1/st.svg","mtime":"2018-04-02T14:38:31+02:00","size":923,"digest":"d8b5b1c8b9fe947086a4d277d2ac5d6b9cff188dfd37bda66c8bf5e02c5facc8","integrity":"sha256-2LWxyLn+lHCGpNJ30qxda5z/GI39N72mbIv14CxfrMg="},"flags/4x3/sv-6d02d63c7f04c9388e98f892cc43d8daa2110fc84242758d5627fcd247bfd09b.svg":{"logical_path":"flags/4x3/sv.svg","mtime":"2018-04-02T14:38:31+02:00","size":84037,"digest":"6d02d63c7f04c9388e98f892cc43d8daa2110fc84242758d5627fcd247bfd09b","integrity":"sha256-bQLWPH8EyTiOmPiSzEPY2qIRD8hCQnWNVif80ke/0Js="},"flags/1x1/sv-fb4c8d7eb98396a93c5b9c37195d70e809e0d71d8b8f9316e842121f95bb82ea.svg":{"logical_path":"flags/1x1/sv.svg","mtime":"2018-04-02T14:38:31+02:00","size":84509,"digest":"fb4c8d7eb98396a93c5b9c37195d70e809e0d71d8b8f9316e842121f95bb82ea","integrity":"sha256-+0yNfrmDlqk8W5w3GV1w6Ang1x2Lj5MW6EISH5W7guo="},"flags/4x3/sx-fb6a7b1cbc5b29eeeb39a5aec64ef7aad432c37bbe848d29955a3786b9763224.svg":{"logical_path":"flags/4x3/sx.svg","mtime":"2018-04-02T14:38:31+02:00","size":13306,"digest":"fb6a7b1cbc5b29eeeb39a5aec64ef7aad432c37bbe848d29955a3786b9763224","integrity":"sha256-+2p7HLxbKe7rOaWuxk73qtQyw3u+hI0plVo3hrl2MiQ="},"flags/1x1/sx-a37b124212f8530b921aef7657cfb35c2895a731c7a06f333faee4c93f32806a.svg":{"logical_path":"flags/1x1/sx.svg","mtime":"2018-04-02T14:38:31+02:00","size":13115,"digest":"a37b124212f8530b921aef7657cfb35c2895a731c7a06f333faee4c93f32806a","integrity":"sha256-o3sSQhL4UwuSGu92V8+zXCiVpzHHoG8zP67kyT8ygGo="},"flags/4x3/sy-e35f8d88c864ed4f38edb2f9f96d5bd69f6df078b50515b8c5467bf6b1689f50.svg":{"logical_path":"flags/4x3/sy.svg","mtime":"2018-04-02T14:38:31+02:00","size":568,"digest":"e35f8d88c864ed4f38edb2f9f96d5bd69f6df078b50515b8c5467bf6b1689f50","integrity":"sha256-41+NiMhk7U847bL5+W1b1p9t8Hi1BRW4xUZ79rFon1A="},"flags/1x1/sy-5d537bd5b42b58f6e8a7e33fbe5942a16126abb639edf9cb58b88938c57ebaa9.svg":{"logical_path":"flags/1x1/sy.svg","mtime":"2018-04-02T14:38:31+02:00","size":582,"digest":"5d537bd5b42b58f6e8a7e33fbe5942a16126abb639edf9cb58b88938c57ebaa9","integrity":"sha256-XVN71bQrWPbop+M/vllCoWEmq7Y57fnLWLiJOMV+uqk="},"flags/4x3/sz-c65ae592e943217787848364bdb4c57335869f4626ce705adabdc2620669c1c6.svg":{"logical_path":"flags/4x3/sz.svg","mtime":"2018-04-02T14:38:31+02:00","size":6755,"digest":"c65ae592e943217787848364bdb4c57335869f4626ce705adabdc2620669c1c6","integrity":"sha256-xlrlkulDIXeHhINkvbTFczWGn0YmznBa2r3CYgZpwcY="},"flags/1x1/sz-dd3d1c65bdf09317553f205e588e3dc7336acec1cb9315bfbe0f5bd8ca5bba3f.svg":{"logical_path":"flags/1x1/sz.svg","mtime":"2018-04-02T14:38:31+02:00","size":6706,"digest":"dd3d1c65bdf09317553f205e588e3dc7336acec1cb9315bfbe0f5bd8ca5bba3f","integrity":"sha256-3T0cZb3wkxdVPyBeWI49xzNqzsHLkxW/vg9b2Mpbuj8="},"flags/4x3/tc-594b6cc87040836c6d6777afb5833d565d3e5e75f404350a51443ec4588a1ccb.svg":{"logical_path":"flags/4x3/tc.svg","mtime":"2018-04-02T14:38:31+02:00","size":14585,"digest":"594b6cc87040836c6d6777afb5833d565d3e5e75f404350a51443ec4588a1ccb","integrity":"sha256-WUtsyHBAg2xtZ3evtYM9Vl0+XnX0BDUKUUQ+xFiKHMs="},"flags/1x1/tc-34a37006252eea340488220585c31d047b57e3e7934c77180d930972aaceadc3.svg":{"logical_path":"flags/1x1/tc.svg","mtime":"2018-04-02T14:38:31+02:00","size":14843,"digest":"34a37006252eea340488220585c31d047b57e3e7934c77180d930972aaceadc3","integrity":"sha256-NKNwBiUu6jQEiCIFhcMdBHtX4+eTTHcYDZMJcqrOrcM="},"flags/4x3/td-b67a1978e3badb895ff640c80bb6c0e33eac354220c08cf3fc93d62bf5d685a3.svg":{"logical_path":"flags/4x3/td.svg","mtime":"2018-04-02T14:38:31+02:00","size":270,"digest":"b67a1978e3badb895ff640c80bb6c0e33eac354220c08cf3fc93d62bf5d685a3","integrity":"sha256-tnoZeOO624lf9kDIC7bA4z6sNUIgwIzz/JPWK/XWhaM="},"flags/1x1/td-556b3a7991c17010cb7e1ff23c4edcc2dcdb8c406a128d407fd165ea8a19d311.svg":{"logical_path":"flags/1x1/td.svg","mtime":"2018-04-02T14:38:31+02:00","size":282,"digest":"556b3a7991c17010cb7e1ff23c4edcc2dcdb8c406a128d407fd165ea8a19d311","integrity":"sha256-VWs6eZHBcBDLfh/yPE7cwtzbjEBqEo1Af9Fl6ooZ0xE="},"flags/4x3/tf-35cd83351521f3022a43e01f0c40f34663a66ac1e92045979f31d3fd65c16d02.svg":{"logical_path":"flags/4x3/tf.svg","mtime":"2018-04-02T14:38:31+02:00","size":1091,"digest":"35cd83351521f3022a43e01f0c40f34663a66ac1e92045979f31d3fd65c16d02","integrity":"sha256-Nc2DNRUh8wIqQ+AfDEDzRmOmasHpIEWXnzHT/WXBbQI="},"flags/1x1/tf-485e71f61ff577735dbc4ba1025515c22a83c48ee7f3a2ed49804766c35f6ea5.svg":{"logical_path":"flags/1x1/tf.svg","mtime":"2018-04-02T14:38:31+02:00","size":1199,"digest":"485e71f61ff577735dbc4ba1025515c22a83c48ee7f3a2ed49804766c35f6ea5","integrity":"sha256-SF5x9h/1d3NdvEuhAlUVwiqDxI7n86LtSYBHZsNfbqU="},"flags/4x3/tg-24b25f4c2213fe35e5f5586d7ab23abf0c25ad2049708cd52ba72e1ec7b754ff.svg":{"logical_path":"flags/4x3/tg.svg","mtime":"2018-04-02T14:38:31+02:00","size":725,"digest":"24b25f4c2213fe35e5f5586d7ab23abf0c25ad2049708cd52ba72e1ec7b754ff","integrity":"sha256-JLJfTCIT/jXl9VhterI6vwwlrSBJcIzVK6cuHse3VP8="},"flags/1x1/tg-05f3d98392a5ec3e4aecf8f629d3d03f05ac55abb7d9d84187d599acfe271374.svg":{"logical_path":"flags/1x1/tg.svg","mtime":"2018-04-02T14:38:31+02:00","size":736,"digest":"05f3d98392a5ec3e4aecf8f629d3d03f05ac55abb7d9d84187d599acfe271374","integrity":"sha256-BfPZg5Kl7D5K7Pj2KdPQPwWsVau32dhBh9WZrP4nE3Q="},"flags/4x3/th-cc936bacd84dddd15454ef06bc64e357f83854af34692fc37363272d61f637d4.svg":{"logical_path":"flags/4x3/th.svg","mtime":"2018-04-02T14:38:31+02:00","size":287,"digest":"cc936bacd84dddd15454ef06bc64e357f83854af34692fc37363272d61f637d4","integrity":"sha256-zJNrrNhN3dFUVO8GvGTjV/g4VK80aS/Dc2MnLWH2N9Q="},"flags/1x1/th-de82cbd770db2be53a8e3d59d86e2b748a5d3f96eb8584f7b9364cefbd06a172.svg":{"logical_path":"flags/1x1/th.svg","mtime":"2018-04-02T14:38:31+02:00","size":288,"digest":"de82cbd770db2be53a8e3d59d86e2b748a5d3f96eb8584f7b9364cefbd06a172","integrity":"sha256-3oLL13DbK+U6jj1Z2G4rdIpdP5brhYT3uTZM770GoXI="},"flags/4x3/tj-b90bf3e2dd63265d55b67962b160df65f021c42b6ea304e2943c10b9e2a8749d.svg":{"logical_path":"flags/4x3/tj.svg","mtime":"2018-04-02T14:38:31+02:00","size":1831,"digest":"b90bf3e2dd63265d55b67962b160df65f021c42b6ea304e2943c10b9e2a8749d","integrity":"sha256-uQvz4t1jJl1VtnlisWDfZfAhxCtuowTilDwQueKodJ0="},"flags/1x1/tj-5f6571e74b1f8720f9ecc2d3aa2098ca45d2e7ad6602b2a57c206384719b9f36.svg":{"logical_path":"flags/1x1/tj.svg","mtime":"2018-04-02T14:38:31+02:00","size":1788,"digest":"5f6571e74b1f8720f9ecc2d3aa2098ca45d2e7ad6602b2a57c206384719b9f36","integrity":"sha256-X2Vx50sfhyD57MLTqiCYykXS561mArKlfCBjhHGbnzY="},"flags/4x3/tk-602520b29b909c96baea17a38eb654d6c6fbc7088f46a0cb8d8fe34ff92e3cb8.svg":{"logical_path":"flags/4x3/tk.svg","mtime":"2018-04-02T14:38:31+02:00","size":791,"digest":"602520b29b909c96baea17a38eb654d6c6fbc7088f46a0cb8d8fe34ff92e3cb8","integrity":"sha256-YCUgspuQnJa66hejjrZU1sb7xwiPRqDLjY/jT/kuPLg="},"flags/1x1/tk-fe1dc8aaa0643a45a74ecec8aec09f0fe2207d104bb3c28c0b84405f1275aeba.svg":{"logical_path":"flags/1x1/tk.svg","mtime":"2018-04-02T14:38:31+02:00","size":781,"digest":"fe1dc8aaa0643a45a74ecec8aec09f0fe2207d104bb3c28c0b84405f1275aeba","integrity":"sha256-/h3IqqBkOkWnTs7IrsCfD+IgfRBLs8KMC4RAXxJ1rro="},"flags/4x3/tl-ebdb862aa5ae5de1a72242571deaa70bfb222f488a93b70e304f2075b474d54b.svg":{"logical_path":"flags/4x3/tl.svg","mtime":"2018-04-02T14:38:31+02:00","size":600,"digest":"ebdb862aa5ae5de1a72242571deaa70bfb222f488a93b70e304f2075b474d54b","integrity":"sha256-69uGKqWuXeGnIkJXHeqnC/siL0iKk7cOME8gdbR01Us="},"flags/1x1/tl-485f02183bdb192ba3ce6e5f076e184112739f883ae0a8fde33c454377b848d6.svg":{"logical_path":"flags/1x1/tl.svg","mtime":"2018-04-02T14:38:31+02:00","size":582,"digest":"485f02183bdb192ba3ce6e5f076e184112739f883ae0a8fde33c454377b848d6","integrity":"sha256-SF8CGDvbGSujzm5fB24YQRJzn4g64Kj94zxFQ3e4SNY="},"flags/4x3/tm-5ddb4128bf0becd7c60413d5418027f5f01ca4bc72561d54b94febfee7a5a24b.svg":{"logical_path":"flags/4x3/tm.svg","mtime":"2018-04-02T14:38:31+02:00","size":32579,"digest":"5ddb4128bf0becd7c60413d5418027f5f01ca4bc72561d54b94febfee7a5a24b","integrity":"sha256-XdtBKL8L7NfGBBPVQYAn9fAcpLxyVh1UuU/r/ueloks="},"flags/1x1/tm-3521ad569a4095aa8d4166d5d9094fccfdbb3ea411207ad685b6dd5814ef3392.svg":{"logical_path":"flags/1x1/tm.svg","mtime":"2018-04-02T14:38:31+02:00","size":31884,"digest":"3521ad569a4095aa8d4166d5d9094fccfdbb3ea411207ad685b6dd5814ef3392","integrity":"sha256-NSGtVppAlaqNQWbV2QlPzP27PqQRIHrWhbbdWBTvM5I="},"flags/4x3/tn-ca27eb50d88b11d20b5b09e2bbecb7753267222489920c526608e5d2acd22d79.svg":{"logical_path":"flags/4x3/tn.svg","mtime":"2018-04-02T14:38:31+02:00","size":753,"digest":"ca27eb50d88b11d20b5b09e2bbecb7753267222489920c526608e5d2acd22d79","integrity":"sha256-yifrUNiLEdILWwniu+y3dTJnIiSJkgxSZgjl0qzSLXk="},"flags/1x1/tn-222c6cd4742c558f48ebcacb47ea334057642fffa3456a1c75e0fad9e728d09b.svg":{"logical_path":"flags/1x1/tn.svg","mtime":"2018-04-02T14:38:31+02:00","size":743,"digest":"222c6cd4742c558f48ebcacb47ea334057642fffa3456a1c75e0fad9e728d09b","integrity":"sha256-Iixs1HQsVY9I68rLR+ozQFdkL/+jRWocdeD62eco0Js="},"flags/4x3/to-c9c509fc24f591fbe52bbf732c44291384c787796e1fc9c703a973587c3f8ad1.svg":{"logical_path":"flags/4x3/to.svg","mtime":"2018-04-02T14:38:31+02:00","size":358,"digest":"c9c509fc24f591fbe52bbf732c44291384c787796e1fc9c703a973587c3f8ad1","integrity":"sha256-ycUJ/CT1kfvlK79zLEQpE4THh3luH8nHA6lzWHw/itE="},"flags/1x1/to-cf26dfb44b56b915b2f11896355cb778b938ed54423311d69d7cda9626887dda.svg":{"logical_path":"flags/1x1/to.svg","mtime":"2018-04-02T14:38:31+02:00","size":364,"digest":"cf26dfb44b56b915b2f11896355cb778b938ed54423311d69d7cda9626887dda","integrity":"sha256-zybftEtWuRWy8RiWNVy3eLk47VRCMxHWnXzaliaIfdo="},"flags/4x3/tr-c40f697070cf8d8358785b9203d1c8f438976e3cd644a87d9ee16fa9960deaa4.svg":{"logical_path":"flags/4x3/tr.svg","mtime":"2018-04-02T14:38:31+02:00","size":557,"digest":"c40f697070cf8d8358785b9203d1c8f438976e3cd644a87d9ee16fa9960deaa4","integrity":"sha256-xA9pcHDPjYNYeFuSA9HI9DiXbjzWRKh9nuFvqZYN6qQ="},"flags/1x1/tr-627dcf91a1e5153c045e33a3459b5d56002530fddd3fc53927f4d0fb7ea004a5.svg":{"logical_path":"flags/1x1/tr.svg","mtime":"2018-04-02T14:38:31+02:00","size":578,"digest":"627dcf91a1e5153c045e33a3459b5d56002530fddd3fc53927f4d0fb7ea004a5","integrity":"sha256-Yn3PkaHlFTwEXjOjRZtdVgAlMP3dP8U5J/TQ+36gBKU="},"flags/4x3/tt-04786ffedbde2c96a30ad1cbf4db000848f14bd700324651fc88364e5f3c2fd0.svg":{"logical_path":"flags/4x3/tt.svg","mtime":"2018-04-02T14:38:31+02:00","size":324,"digest":"04786ffedbde2c96a30ad1cbf4db000848f14bd700324651fc88364e5f3c2fd0","integrity":"sha256-BHhv/tveLJajCtHL9NsACEjxS9cAMkZR/Ig2Tl88L9A="},"flags/1x1/tt-6a3c73bfa7782366d95e673d847ef8f84c0475b364d359def1efd264297bac30.svg":{"logical_path":"flags/1x1/tt.svg","mtime":"2018-04-02T14:38:31+02:00","size":323,"digest":"6a3c73bfa7782366d95e673d847ef8f84c0475b364d359def1efd264297bac30","integrity":"sha256-ajxzv6d4I2bZXmc9hH74+EwEdbNk01ne8e/SZCl7rDA="},"flags/4x3/tv-20b56e7c0a2fbaa2a0b7b1bd87afc6368440f175fb3a0589de5e34e99d163fd7.svg":{"logical_path":"flags/4x3/tv.svg","mtime":"2018-04-02T14:38:31+02:00","size":2299,"digest":"20b56e7c0a2fbaa2a0b7b1bd87afc6368440f175fb3a0589de5e34e99d163fd7","integrity":"sha256-ILVufAovuqKgt7G9h6/GNoRA8XX7OgWJ3l406Z0WP9c="},"flags/1x1/tv-8bce1d7bde2e20dcc473ed3a33c66e4bedcf1acf2d2fff6d54353a480b8cafbc.svg":{"logical_path":"flags/1x1/tv.svg","mtime":"2018-04-02T14:38:31+02:00","size":2166,"digest":"8bce1d7bde2e20dcc473ed3a33c66e4bedcf1acf2d2fff6d54353a480b8cafbc","integrity":"sha256-i84de94uINzEc+06M8ZuS+3PGs8tL/9tVDU6SAuMr7w="},"flags/4x3/tw-36070ac0a15ab1f4811478da62e7678756a9aa266b141ed0549aba1c0e04333a.svg":{"logical_path":"flags/4x3/tw.svg","mtime":"2018-04-02T14:38:31+02:00","size":945,"digest":"36070ac0a15ab1f4811478da62e7678756a9aa266b141ed0549aba1c0e04333a","integrity":"sha256-NgcKwKFasfSBFHjaYudnh1apqiZrFB7QVJq6HA4EMzo="},"flags/1x1/tw-fd7a0db2f3808842ca99176f097356fe9e6f3c120d6aa9e8c4a9c2dd4c3943ba.svg":{"logical_path":"flags/1x1/tw.svg","mtime":"2018-04-02T14:38:31+02:00","size":960,"digest":"fd7a0db2f3808842ca99176f097356fe9e6f3c120d6aa9e8c4a9c2dd4c3943ba","integrity":"sha256-/XoNsvOAiELKmRdvCXNW/p5vPBINaqnoxKnC3Uw5Q7o="},"flags/4x3/tz-51ad7d69f059075df61b9226468af0d78642af4ad34a7540f64c5bea82e803d7.svg":{"logical_path":"flags/4x3/tz.svg","mtime":"2018-04-02T14:38:31+02:00","size":546,"digest":"51ad7d69f059075df61b9226468af0d78642af4ad34a7540f64c5bea82e803d7","integrity":"sha256-Ua19afBZB132G5ImRorw14ZCr0rTSnVA9kxb6oLoA9c="},"flags/1x1/tz-0703f29a7ae02a9a1753cb1726dd2934d75ed3a12e8d63faa9fa866e1fe61440.svg":{"logical_path":"flags/1x1/tz.svg","mtime":"2018-04-02T14:38:31+02:00","size":605,"digest":"0703f29a7ae02a9a1753cb1726dd2934d75ed3a12e8d63faa9fa866e1fe61440","integrity":"sha256-BwPymnrgKpoXU8sXJt0pNNde06EujWP6qfqGbh/mFEA="},"flags/4x3/ua-7f7db03c3b492aaacd11b0abac70d543a7c0ec5265a36d529bbb80a7c432d81a.svg":{"logical_path":"flags/4x3/ua.svg","mtime":"2018-04-02T14:38:31+02:00","size":241,"digest":"7f7db03c3b492aaacd11b0abac70d543a7c0ec5265a36d529bbb80a7c432d81a","integrity":"sha256-f32wPDtJKqrNEbCrrHDVQ6fA7FJlo21Sm7uAp8Qy2Bo="},"flags/1x1/ua-25192fa80f120edb1dd1c4757fd7b79ef38f5e1729238f4135003e6a1501bf28.svg":{"logical_path":"flags/1x1/ua.svg","mtime":"2018-04-02T14:38:31+02:00","size":241,"digest":"25192fa80f120edb1dd1c4757fd7b79ef38f5e1729238f4135003e6a1501bf28","integrity":"sha256-JRkvqA8SDtsd0cR1f9e3nvOPXhcpI49BNQA+ahUBvyg="},"flags/4x3/ug-7635df53eafdf411be0809df835bfbcffd61badd6c4df3db0909c8b3188015a0.svg":{"logical_path":"flags/4x3/ug.svg","mtime":"2018-04-02T14:38:31+02:00","size":3959,"digest":"7635df53eafdf411be0809df835bfbcffd61badd6c4df3db0909c8b3188015a0","integrity":"sha256-djXfU+r99BG+CAnfg1v7z/1hut1sTfPbCQnIsxiAFaA="},"flags/1x1/ug-537f34f64e723fbe7cb7902ea0e61303f1ada79214197efc39ebe2c52ce24186.svg":{"logical_path":"flags/1x1/ug.svg","mtime":"2018-04-02T14:38:31+02:00","size":4038,"digest":"537f34f64e723fbe7cb7902ea0e61303f1ada79214197efc39ebe2c52ce24186","integrity":"sha256-U3809k5yP758t5AuoOYTA/Gtp5IUGX78OevixSziQYY="},"flags/4x3/um-a0ae80e34bbf94677dd6052ea87cc0090aba747dab5440e5ca6e231f7f07c96d.svg":{"logical_path":"flags/4x3/um.svg","mtime":"2018-04-02T14:38:31+02:00","size":4524,"digest":"a0ae80e34bbf94677dd6052ea87cc0090aba747dab5440e5ca6e231f7f07c96d","integrity":"sha256-oK6A40u/lGd91gUuqHzACQq6dH2rVEDlym4jH38HyW0="},"flags/1x1/um-3f1bc09babe7fdcf32518bb49d1aac3a66d0204f955eacca291c58d4f4ef895a.svg":{"logical_path":"flags/1x1/um.svg","mtime":"2018-04-02T14:38:31+02:00","size":3975,"digest":"3f1bc09babe7fdcf32518bb49d1aac3a66d0204f955eacca291c58d4f4ef895a","integrity":"sha256-PxvAm6vn/c8yUYu0nRqsOmbQIE+VXqzKKRxY1PTviVo="},"flags/4x3/us-aefd8f7e57d11f7b0416d01d9c665ab3848b10af849f35a4d772d58d24d83329.svg":{"logical_path":"flags/4x3/us.svg","mtime":"2018-04-02T14:38:31+02:00","size":4468,"digest":"aefd8f7e57d11f7b0416d01d9c665ab3848b10af849f35a4d772d58d24d83329","integrity":"sha256-rv2PflfRH3sEFtAdnGZas4SLEK+EnzWk13LVjSTYMyk="},"flags/1x1/us-87af45be9346e8c820312976abe332ee11f8931e29fa361328d28660a711b1e2.svg":{"logical_path":"flags/1x1/us.svg","mtime":"2018-04-02T14:38:31+02:00","size":3924,"digest":"87af45be9346e8c820312976abe332ee11f8931e29fa361328d28660a711b1e2","integrity":"sha256-h69FvpNG6MggMSl2q+My7hH4kx4p+jYTKNKGYKcRseI="},"flags/4x3/uy-9f636c8283abf56cc930746fd427c1d1644dcf8736c537629df13f760da96ebc.svg":{"logical_path":"flags/4x3/uy.svg","mtime":"2018-04-02T14:38:31+02:00","size":1721,"digest":"9f636c8283abf56cc930746fd427c1d1644dcf8736c537629df13f760da96ebc","integrity":"sha256-n2NsgoOr9WzJMHRv1CfB0WRNz4c2xTdinfE/dg2pbrw="},"flags/1x1/uy-e216b762a93ec55bf9b4ae3d35b7febe0b192a12246fd66c45139ce77fb2095e.svg":{"logical_path":"flags/1x1/uy.svg","mtime":"2018-04-02T14:38:31+02:00","size":1718,"digest":"e216b762a93ec55bf9b4ae3d35b7febe0b192a12246fd66c45139ce77fb2095e","integrity":"sha256-4ha3Yqk+xVv5tK49Nbf+vgsZKhIkb9ZsRROc53+yCV4="},"flags/4x3/uz-697d596705372323beddccb3626d1ce405b36249315c6b006ff1529e24909ceb.svg":{"logical_path":"flags/4x3/uz.svg","mtime":"2018-04-02T14:38:31+02:00","size":1457,"digest":"697d596705372323beddccb3626d1ce405b36249315c6b006ff1529e24909ceb","integrity":"sha256-aX1ZZwU3IyO+3cyzYm0c5AWzYkkxXGsAb/FSniSQnOs="},"flags/1x1/uz-aa34cbe4f6f0e4b5d890975578d28cc9b1e88ebd503d3bdca693748eb29b3353.svg":{"logical_path":"flags/1x1/uz.svg","mtime":"2018-04-02T14:38:31+02:00","size":1457,"digest":"aa34cbe4f6f0e4b5d890975578d28cc9b1e88ebd503d3bdca693748eb29b3353","integrity":"sha256-qjTL5Pbw5LXYkJdVeNKMybHojr1QPTvcppN0jrKbM1M="},"flags/4x3/va-d24d3c5bee108c396997c3d5b2bd2273433752d8c222eb531650e51551a4afd0.svg":{"logical_path":"flags/4x3/va.svg","mtime":"2018-04-02T14:38:31+02:00","size":91241,"digest":"d24d3c5bee108c396997c3d5b2bd2273433752d8c222eb531650e51551a4afd0","integrity":"sha256-0k08W+4QjDlpl8PVsr0ic0M3UtjCIutTFlDlFVGkr9A="},"flags/1x1/va-01160c1bffda12f0b94554ba0c50162a88da807943617334bd4c57a030985e95.svg":{"logical_path":"flags/1x1/va.svg","mtime":"2018-04-02T14:38:31+02:00","size":90876,"digest":"01160c1bffda12f0b94554ba0c50162a88da807943617334bd4c57a030985e95","integrity":"sha256-ARYMG//aEvC5RVS6DFAWKojagHlDYXM0vUxXoDCYXpU="},"flags/4x3/vc-ddf979bee2889414e5a05ac55f39a9c93f34e0aff0d35f007605049a2d8b5afb.svg":{"logical_path":"flags/4x3/vc.svg","mtime":"2018-04-02T14:38:31+02:00","size":454,"digest":"ddf979bee2889414e5a05ac55f39a9c93f34e0aff0d35f007605049a2d8b5afb","integrity":"sha256-3fl5vuKIlBTloFrFXzmpyT804K/w018AdgUEmi2LWvs="},"flags/1x1/vc-ac776e16dec19ff2e2d9238f541dae5d977282b451a83ab3d4122efed2392be9.svg":{"logical_path":"flags/1x1/vc.svg","mtime":"2018-04-02T14:38:31+02:00","size":501,"digest":"ac776e16dec19ff2e2d9238f541dae5d977282b451a83ab3d4122efed2392be9","integrity":"sha256-rHduFt7Bn/Li2SOPVB2uXZdygrRRqDqz1BIu/tI5K+k="},"flags/4x3/ve-e23abd006cc75a8c4f9ec1cb122b46f9b52e26c5606532d2c868277d4ccd523b.svg":{"logical_path":"flags/4x3/ve.svg","mtime":"2018-04-02T14:38:31+02:00","size":1171,"digest":"e23abd006cc75a8c4f9ec1cb122b46f9b52e26c5606532d2c868277d4ccd523b","integrity":"sha256-4jq9AGzHWoxPnsHLEitG+bUuJsVgZTLSyGgnfUzNUjs="},"flags/1x1/ve-1480713f28719e0a83da2c5f1333407dbfa5bcc0de8c9ba718fcf47273ee95ef.svg":{"logical_path":"flags/1x1/ve.svg","mtime":"2018-04-02T14:38:31+02:00","size":1191,"digest":"1480713f28719e0a83da2c5f1333407dbfa5bcc0de8c9ba718fcf47273ee95ef","integrity":"sha256-FIBxPyhxngqD2ixfEzNAfb+lvMDejJunGPz0cnPule8="},"flags/4x3/vg-7f8f24a4d6995e4dd39e3d9098dad5e14649821fa12ffc200edf0a586285ee15.svg":{"logical_path":"flags/4x3/vg.svg","mtime":"2018-04-02T14:38:31+02:00","size":24818,"digest":"7f8f24a4d6995e4dd39e3d9098dad5e14649821fa12ffc200edf0a586285ee15","integrity":"sha256-f48kpNaZXk3Tnj2QmNrV4UZJgh+hL/wgDt8KWGKF7hU="},"flags/1x1/vg-b464b6a78e46c29df9e4bdadc2646208f11c59168706456075f970552a24efa8.svg":{"logical_path":"flags/1x1/vg.svg","mtime":"2018-04-02T14:38:31+02:00","size":24997,"digest":"b464b6a78e46c29df9e4bdadc2646208f11c59168706456075f970552a24efa8","integrity":"sha256-tGS2p45Gwp355L2twmRiCPEcWRaHBkVgdflwVSok76g="},"flags/4x3/vi-58311325a293b046044976d899f288ce0fbe9bfd705a23947a9b38d7991983d7.svg":{"logical_path":"flags/4x3/vi.svg","mtime":"2018-04-02T14:38:31+02:00","size":8775,"digest":"58311325a293b046044976d899f288ce0fbe9bfd705a23947a9b38d7991983d7","integrity":"sha256-WDETJaKTsEYESXbYmfKIzg++m/1wWiOUeps415kZg9c="},"flags/1x1/vi-1c132d2cff66cdbdb7b6acf504bb0cd9d7579595d80c3fa6604ff24ca7a0184d.svg":{"logical_path":"flags/1x1/vi.svg","mtime":"2018-04-02T14:38:31+02:00","size":8730,"digest":"1c132d2cff66cdbdb7b6acf504bb0cd9d7579595d80c3fa6604ff24ca7a0184d","integrity":"sha256-HBMtLP9mzb23tqz1BLsM2ddXlZXYDD+mYE/yTKegGE0="},"flags/4x3/vn-a918d3c9cdc368b1d2ff9614d58cbcd1d43b725889b0ba18f5d4e693071e389a.svg":{"logical_path":"flags/4x3/vn.svg","mtime":"2018-04-02T14:38:31+02:00","size":492,"digest":"a918d3c9cdc368b1d2ff9614d58cbcd1d43b725889b0ba18f5d4e693071e389a","integrity":"sha256-qRjTyc3DaLHS/5YU1Yy80dQ7cliJsLoY9dTmkwceOJo="},"flags/1x1/vn-895e428ae3d98c99dbb02088cf8ef040bfb031df6f16c3c8fc3678505d869791.svg":{"logical_path":"flags/1x1/vn.svg","mtime":"2018-04-02T14:38:31+02:00","size":501,"digest":"895e428ae3d98c99dbb02088cf8ef040bfb031df6f16c3c8fc3678505d869791","integrity":"sha256-iV5CiuPZjJnbsCCIz47wQL+wMd9vFsPI/DZ4UF2Gl5E="},"flags/4x3/vu-2c286c778a7bed03cb603ab24b68dc91868f4f054cf4f851bdd17aa16731571c.svg":{"logical_path":"flags/4x3/vu.svg","mtime":"2018-04-02T14:38:31+02:00","size":3771,"digest":"2c286c778a7bed03cb603ab24b68dc91868f4f054cf4f851bdd17aa16731571c","integrity":"sha256-LChsd4p77QPLYDqyS2jckYaPTwVM9PhRvdF6oWcxVxw="},"flags/1x1/vu-51ef23121e2641ebeeac50d31c4e52b7d00d3ab1bc9fc0ad95ea86fd3631975a.svg":{"logical_path":"flags/1x1/vu.svg","mtime":"2018-04-02T14:38:31+02:00","size":3740,"digest":"51ef23121e2641ebeeac50d31c4e52b7d00d3ab1bc9fc0ad95ea86fd3631975a","integrity":"sha256-Ue8jEh4mQevurFDTHE5St9ANOrG8n8CtleqG/TYxl1o="},"flags/4x3/wf-f7e9ac5edac196ac32d7bafa04b5c0d924b89e9d7e4f3535a6a26c6c1523639c.svg":{"logical_path":"flags/4x3/wf.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"f7e9ac5edac196ac32d7bafa04b5c0d924b89e9d7e4f3535a6a26c6c1523639c","integrity":"sha256-9+msXtrBlqwy17r6BLXA2SS4np1+TzU1pqJsbBUjY5w="},"flags/1x1/wf-95a920a79aa32d92f8a362321aae4230e17025ac04d976593f4423d0c37c1aee.svg":{"logical_path":"flags/1x1/wf.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"95a920a79aa32d92f8a362321aae4230e17025ac04d976593f4423d0c37c1aee","integrity":"sha256-lakgp5qjLZL4o2IyGq5CMOFwJawE2XZZP0Qj0MN8Gu4="},"flags/4x3/ws-efc6505a802a3fa2018bc102fc2e11db8c738464c619381b6edc32d0a89341a3.svg":{"logical_path":"flags/4x3/ws.svg","mtime":"2018-04-02T14:38:31+02:00","size":663,"digest":"efc6505a802a3fa2018bc102fc2e11db8c738464c619381b6edc32d0a89341a3","integrity":"sha256-78ZQWoAqP6IBi8EC/C4R24xzhGTGGTgbbtwy0KiTQaM="},"flags/1x1/ws-e3afb81c037c814620027bf61ac5e266683cab7ba5796ecf10b64c110cfcb932.svg":{"logical_path":"flags/1x1/ws.svg","mtime":"2018-04-02T14:38:31+02:00","size":645,"digest":"e3afb81c037c814620027bf61ac5e266683cab7ba5796ecf10b64c110cfcb932","integrity":"sha256-46+4HAN8gUYgAnv2GsXiZmg8q3uleW7PELZMEQz8uTI="},"flags/4x3/ye-fd88856e70d66b01b4f0f608936a61cf3b1d9dad40a2932fc5da4d01f72a447b.svg":{"logical_path":"flags/4x3/ye.svg","mtime":"2018-04-02T14:38:31+02:00","size":278,"digest":"fd88856e70d66b01b4f0f608936a61cf3b1d9dad40a2932fc5da4d01f72a447b","integrity":"sha256-/YiFbnDWawG08PYIk2phzzsdna1AopMvxdpNAfcqRHs="},"flags/1x1/ye-0c0e32330871e6d83af54affb7dadbbe736f9799068508211fbae54db9bbdcc6.svg":{"logical_path":"flags/1x1/ye.svg","mtime":"2018-04-02T14:38:31+02:00","size":278,"digest":"0c0e32330871e6d83af54affb7dadbbe736f9799068508211fbae54db9bbdcc6","integrity":"sha256-DA4yMwhx5tg69Ur/t9rbvnNvl5kGhQghH7rlTbm73MY="},"flags/4x3/yt-2eef17b543424082d9f9b42a67e84c20b52e7f7eae8c4326d60711158da51d5b.svg":{"logical_path":"flags/4x3/yt.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"2eef17b543424082d9f9b42a67e84c20b52e7f7eae8c4326d60711158da51d5b","integrity":"sha256-Lu8XtUNCQILZ+bQqZ+hMILUuf36ujEMm1gcRFY2lHVs="},"flags/1x1/yt-911da8075337fd8f75ecc8a338c294cb771c6b9a08576f96c9de1437888cd2a7.svg":{"logical_path":"flags/1x1/yt.svg","mtime":"2018-04-02T14:38:31+02:00","size":295,"digest":"911da8075337fd8f75ecc8a338c294cb771c6b9a08576f96c9de1437888cd2a7","integrity":"sha256-kR2oB1M3/Y917MijOMKUy3cca5oIV2+Wyd4UN4iM0qc="},"flags/4x3/za-45991a2aee307198510e56bf92523070aac4241cafe6c3ddb8f89b20a61d6371.svg":{"logical_path":"flags/4x3/za.svg","mtime":"2018-04-02T14:38:31+02:00","size":856,"digest":"45991a2aee307198510e56bf92523070aac4241cafe6c3ddb8f89b20a61d6371","integrity":"sha256-RZkaKu4wcZhRDla/klIwcKrEJByv5sPduPibIKYdY3E="},"flags/1x1/za-bc09a89b29311ea7e582ef60bf4e18aff7c29de6fbefe309463ca765723a0ce8.svg":{"logical_path":"flags/1x1/za.svg","mtime":"2018-04-02T14:38:31+02:00","size":875,"digest":"bc09a89b29311ea7e582ef60bf4e18aff7c29de6fbefe309463ca765723a0ce8","integrity":"sha256-vAmomykxHqflgu9gv04Yr/fCneb77+MJRjynZXI6DOg="},"flags/4x3/zm-07c0f30d86e66d0cad9d66cd9c9384d9cce1844f159d245deff6717101fe49c2.svg":{"logical_path":"flags/4x3/zm.svg","mtime":"2018-04-02T14:38:31+02:00","size":5508,"digest":"07c0f30d86e66d0cad9d66cd9c9384d9cce1844f159d245deff6717101fe49c2","integrity":"sha256-B8DzDYbmbQytnWbNnJOE2czhhE8VnSRd7/ZxcQH+ScI="},"flags/1x1/zm-fc5bce3834c71fe36617ea5f57f0bd1dcf3880a7c6aa515dcf92ae067f796241.svg":{"logical_path":"flags/1x1/zm.svg","mtime":"2018-04-02T14:38:31+02:00","size":5429,"digest":"fc5bce3834c71fe36617ea5f57f0bd1dcf3880a7c6aa515dcf92ae067f796241","integrity":"sha256-/FvOODTHH+NmF+pfV/C9Hc84gKfGqlFdz5KuBn95YkE="},"flags/4x3/zw-5217c74f14d9fdda244b69c5982bbabee052ac0f1cc0704926e8b1e621e50f9a.svg":{"logical_path":"flags/4x3/zw.svg","mtime":"2018-04-02T14:38:31+02:00","size":6791,"digest":"5217c74f14d9fdda244b69c5982bbabee052ac0f1cc0704926e8b1e621e50f9a","integrity":"sha256-UhfHTxTZ/dokS2nFmCu6vuBSrA8cwHBJJuix5iHlD5o="},"flags/1x1/zw-a33b191c631709b9e1d85e06f5b15535fb544d4668c8bef865ede2a0b6a88ed9.svg":{"logical_path":"flags/1x1/zw.svg","mtime":"2018-04-02T14:38:31+02:00","size":6770,"digest":"a33b191c631709b9e1d85e06f5b15535fb544d4668c8bef865ede2a0b6a88ed9","integrity":"sha256-ozsZHGMXCbnh2F4G9bFVNftUTUZoyL74Ze3ioLaojtk="},"flags/4x3/es-ct-bcbb454a50c9a647efd43dcf041445f15e8dd70654bde530bf62401d4fb7738d.svg":{"logical_path":"flags/4x3/es-ct.svg","mtime":"2018-04-02T14:38:31+02:00","size":261,"digest":"bcbb454a50c9a647efd43dcf041445f15e8dd70654bde530bf62401d4fb7738d","integrity":"sha256-vLtFSlDJpkfv1D3PBBRF8V6N1wZUveUwv2JAHU+3c40="},"flags/1x1/es-ct-7f13eb2b2f5c11dccd7043286bed7540d4dad4b1a8367b0aca1b8405a351b2ef.svg":{"logical_path":"flags/1x1/es-ct.svg","mtime":"2018-04-02T14:38:31+02:00","size":260,"digest":"7f13eb2b2f5c11dccd7043286bed7540d4dad4b1a8367b0aca1b8405a351b2ef","integrity":"sha256-fxPrKy9cEdzNcEMoa+11QNTa1LGoNnsKyhuEBaNRsu8="},"flags/4x3/eu-5f129db64306353251b78f998d531d2f1019404cfa890ae63ed70dc316c7f240.svg":{"logical_path":"flags/4x3/eu.svg","mtime":"2018-04-02T14:38:31+02:00","size":1252,"digest":"5f129db64306353251b78f998d531d2f1019404cfa890ae63ed70dc316c7f240","integrity":"sha256-XxKdtkMGNTJRt4+ZjVMdLxAZQEz6iQrmPtcNwxbH8kA="},"flags/1x1/eu-ec59ac8daf2a63ea8e299ad63a208445d68a96affe6a10a7328acb6799d44127.svg":{"logical_path":"flags/1x1/eu.svg","mtime":"2018-04-02T14:38:31+02:00","size":1253,"digest":"ec59ac8daf2a63ea8e299ad63a208445d68a96affe6a10a7328acb6799d44127","integrity":"sha256-7Fmsja8qY+qOKZrWOiCERdaKlq/+ahCnMorLZ5nUQSc="},"flags/4x3/gb-eng-1895f4e35ae299f5d869da2462ffcf98df4b08dcddc531c8f175e49720001a14.svg":{"logical_path":"flags/4x3/gb-eng.svg","mtime":"2018-04-02T14:38:31+02:00","size":245,"digest":"1895f4e35ae299f5d869da2462ffcf98df4b08dcddc531c8f175e49720001a14","integrity":"sha256-GJX041rimfXYadokYv/PmN9LCNzdxTHI8XXklyAAGhQ="},"flags/1x1/gb-eng-d11afb87f40f35acda435a886ea044bd5e0b6f363ba0c7319f1d0181551fecf3.svg":{"logical_path":"flags/1x1/gb-eng.svg","mtime":"2018-04-02T14:38:31+02:00","size":235,"digest":"d11afb87f40f35acda435a886ea044bd5e0b6f363ba0c7319f1d0181551fecf3","integrity":"sha256-0Rr7h/QPNazaQ1qIbqBEvV4LbzY7oMcxnx0BgVUf7PM="},"flags/4x3/gb-nir-b280f09c787f495c1074376cd67537b40216f672917e7d204bb12b8e7c72afaf.svg":{"logical_path":"flags/4x3/gb-nir.svg","mtime":"2018-04-02T14:38:31+02:00","size":23738,"digest":"b280f09c787f495c1074376cd67537b40216f672917e7d204bb12b8e7c72afaf","integrity":"sha256-soDwnHh/SVwQdDds1nU3tAIW9nKRfn0gS7Erjnxyr68="},"flags/1x1/gb-nir-2e516e72e0e8e244ef430e6608322f8c4fb276807ab033279b2a6570dd68fd41.svg":{"logical_path":"flags/1x1/gb-nir.svg","mtime":"2018-04-02T14:38:31+02:00","size":25263,"digest":"2e516e72e0e8e244ef430e6608322f8c4fb276807ab033279b2a6570dd68fd41","integrity":"sha256-LlFucuDo4kTvQw5mCDIvjE+ydoB6sDMnmyplcN1o/UE="},"flags/4x3/gb-sct-1b9e407802ae901cf8da740c382ec2b19821837d76271a73346e0c63c2244506.svg":{"logical_path":"flags/4x3/gb-sct.svg","mtime":"2018-04-02T14:38:31+02:00","size":234,"digest":"1b9e407802ae901cf8da740c382ec2b19821837d76271a73346e0c63c2244506","integrity":"sha256-G55AeAKukBz42nQMOC7CsZghg312JxpzNG4MY8IkRQY="},"flags/1x1/gb-sct-d01e8a06a340e30ce52e8a3aba7ca6207afb96fdb238a815cc6cb92df8fa5df3.svg":{"logical_path":"flags/1x1/gb-sct.svg","mtime":"2018-04-02T14:38:31+02:00","size":242,"digest":"d01e8a06a340e30ce52e8a3aba7ca6207afb96fdb238a815cc6cb92df8fa5df3","integrity":"sha256-0B6KBqNA4wzlLoo6unymIHr7lv2yOKgVzGy5Lfj6XfM="},"flags/4x3/gb-wls-5232b3e376a19866cddec8225cba242783b2a48063811957f1ce5a2c347c5bc9.svg":{"logical_path":"flags/4x3/gb-wls.svg","mtime":"2018-04-02T14:38:31+02:00","size":9188,"digest":"5232b3e376a19866cddec8225cba242783b2a48063811957f1ce5a2c347c5bc9","integrity":"sha256-UjKz43ahmGbN3sgiXLokJ4OypIBjgRlX8c5aLDR8W8k="},"flags/1x1/gb-wls-126615bc3597fda1ca4ee931ef24f6c2cf2547998c06db9c1ded69fe66c479e9.svg":{"logical_path":"flags/1x1/gb-wls.svg","mtime":"2018-04-02T14:38:31+02:00","size":9083,"digest":"126615bc3597fda1ca4ee931ef24f6c2cf2547998c06db9c1ded69fe66c479e9","integrity":"sha256-EmYVvDWX/aHKTukx7yT2ws8lR5mMBtucHe1p/mbEeek="},"flags/4x3/un-31dece22ae18c3e01e86648ef3ef45f2f5b3d9d28a1e2bbbcdb1d87c37af55af.svg":{"logical_path":"flags/4x3/un.svg","mtime":"2018-04-02T14:38:31+02:00","size":20268,"digest":"31dece22ae18c3e01e86648ef3ef45f2f5b3d9d28a1e2bbbcdb1d87c37af55af","integrity":"sha256-Md7OIq4Yw+AehmSO8+9F8vWz2dKKHiu7zbHYfDevVa8="},"flags/1x1/un-455b5f3173ca9ac64f2135fac4ead7217d7fbe07551d0d2cc60216f83208f798.svg":{"logical_path":"flags/1x1/un.svg","mtime":"2018-04-02T14:38:31+02:00","size":20476,"digest":"455b5f3173ca9ac64f2135fac4ead7217d7fbe07551d0d2cc60216f83208f798","integrity":"sha256-RVtfMXPKmsZPITX6xOrXIX1/vgdVHQ0sxgIW+DII95g="},"leaflet/dist/images/layers-1dbbe9d028e292f36fcba8f8b3a28d5e8932754fc2215b9ac69e4cdecf5107c6.png":{"logical_path":"leaflet/dist/images/layers.png","mtime":"2018-08-23T19:40:32+02:00","size":696,"digest":"1dbbe9d028e292f36fcba8f8b3a28d5e8932754fc2215b9ac69e4cdecf5107c6","integrity":"sha256-Hbvp0CjikvNvy6j4s6KNXokydU/CIVuaxp5M3s9RB8Y="},"leaflet/dist/images/layers-2x-066daca850d8ffbef007af00b06eac0015728dee279c51f3cb6c716df7c42edf.png":{"logical_path":"leaflet/dist/images/layers-2x.png","mtime":"2018-08-23T19:40:32+02:00","size":1259,"digest":"066daca850d8ffbef007af00b06eac0015728dee279c51f3cb6c716df7c42edf","integrity":"sha256-Bm2sqFDY/77wB68AsG6sABVyje4nnFHzy2xxbffELt8="},"leaflet/dist/images/marker-icon-574c3a5cca85f4114085b6841596d62f00d7c892c7b03f28cbfa301deb1dc437.png":{"logical_path":"leaflet/dist/images/marker-icon.png","mtime":"2018-08-23T19:40:32+02:00","size":1466,"digest":"574c3a5cca85f4114085b6841596d62f00d7c892c7b03f28cbfa301deb1dc437","integrity":"sha256-V0w6XMqF9BFAhbaEFZbWLwDXyJLHsD8oy/owHesdxDc="},"markers-soft-e78784e4ed70aaffddd73c315fab590233cc4e7b72388d7dd47a14796fc7c739.png":{"logical_path":"markers-soft.png","mtime":"2016-05-21T23:41:15+02:00","size":41226,"digest":"e78784e4ed70aaffddd73c315fab590233cc4e7b72388d7dd47a14796fc7c739","integrity":"sha256-54eE5O1wqv/d1zwxX6tZAjPMTntyOI191HoUeW/Hxzk="},"markers-shadow-8703a2262710f5e3d29e65d2acdf90d6512e159e119d27b8234731d8a6208a20.png":{"logical_path":"markers-shadow.png","mtime":"2016-05-21T23:41:15+02:00","size":535,"digest":"8703a2262710f5e3d29e65d2acdf90d6512e159e119d27b8234731d8a6208a20","integrity":"sha256-hwOiJicQ9ePSnmXSrN+Q1lEuFZ4RnSe4I0cx2KYgiiA="},"markers-soft@2x-c1e77253a8bfbe30cec24885d7046f443b76ebb66f4c961f77083b03f4a5cbaf.png":{"logical_path":"markers-soft@2x.png","mtime":"2016-05-21T23:41:15+02:00","size":66408,"digest":"c1e77253a8bfbe30cec24885d7046f443b76ebb66f4c961f77083b03f4a5cbaf","integrity":"sha256-wedyU6i/vjDOwkiF1wRvRDt267ZvTJYfdwg7A/Sly68="},"markers-shadow@2x-b21a536be27313fb504f69f5899ff0b1245b276571769ac08d6c32c35676e47a.png":{"logical_path":"markers-shadow@2x.png","mtime":"2016-05-21T23:41:15+02:00","size":1469,"digest":"b21a536be27313fb504f69f5899ff0b1245b276571769ac08d6c32c35676e47a","integrity":"sha256-shpTa+JzE/tQT2n1iZ/wsSRbJ2VxdprAjWwyw1Z25Ho="},"markers-matte-497826545a90e09a240504d14530eba45823b19fd44175e09e27c47cd822ddb9.png":{"logical_path":"markers-matte.png","mtime":"2016-05-21T23:41:15+02:00","size":14323,"digest":"497826545a90e09a240504d14530eba45823b19fd44175e09e27c47cd822ddb9","integrity":"sha256-SXgmVFqQ4JokBQTRRTDrpFgjsZ/UQXXgnifEfNgi3bk="},"markers-matte@2x-948fc8c4426f04f60964ed20394247f45b0b60e575d02398b9b6810e7a29a823.png":{"logical_path":"markers-matte@2x.png","mtime":"2016-05-21T23:41:15+02:00","size":31113,"digest":"948fc8c4426f04f60964ed20394247f45b0b60e575d02398b9b6810e7a29a823","integrity":"sha256-lI/IxEJvBPYJZO0gOUJH9FsLYOV10COYubaBDnopqCM="},"markers-plain-cf233423aa44e75ac0031e77b8ba571cd3331010517e1197e63fb7b06856c1ff.png":{"logical_path":"markers-plain.png","mtime":"2016-05-21T23:41:15+02:00","size":7946,"digest":"cf233423aa44e75ac0031e77b8ba571cd3331010517e1197e63fb7b06856c1ff","integrity":"sha256-zyM0I6pE51rAAx53uLpXHNMzEBBRfhGX5j+3sGhWwf8="},"leaflet/dist/images/marker-icon-2x-00179c4c1ee830d3a108412ae0d294f55776cfeb085c60129a39aa6fc4ae2528.png":{"logical_path":"leaflet/dist/images/marker-icon-2x.png","mtime":"2018-08-23T19:40:32+02:00","size":2464,"digest":"00179c4c1ee830d3a108412ae0d294f55776cfeb085c60129a39aa6fc4ae2528","integrity":"sha256-ABecTB7oMNOhCEEq4NKU9Vd2z+sIXGASmjmqb8SuJSg="},"leaflet/dist/images/marker-shadow-264f5c640339f042dd729062cfc04c17f8ea0f29882b538e3848ed8f10edb4da.png":{"logical_path":"leaflet/dist/images/marker-shadow.png","mtime":"2018-08-23T19:40:32+02:00","size":618,"digest":"264f5c640339f042dd729062cfc04c17f8ea0f29882b538e3848ed8f10edb4da","integrity":"sha256-Jk9cZAM58ELdcpBiz8BMF/jqDymIK1OOOEjtjxDttNo="},"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-ae65a7ae22c4c23115948fdeb5c05c9137dbd13ca2d426b3c4c3c4183451e410.png":{"logical_path":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png","mtime":"2018-03-12T11:55:26+01:00","size":86,"digest":"ae65a7ae22c4c23115948fdeb5c05c9137dbd13ca2d426b3c4c3c4183451e410","integrity":"sha256-rmWnriLEwjEVlI/etcBckTfb0Tyi1CazxMPEGDRR5BA="},"jquery-ui/ui-icons_444444_256x240-31d988765b4e6f56553c29588c500381dc3e6f0aa2980c8212202e5644aefd5d.png":{"logical_path":"jquery-ui/ui-icons_444444_256x240.png","mtime":"2018-03-12T11:55:26+01:00","size":3756,"digest":"31d988765b4e6f56553c29588c500381dc3e6f0aa2980c8212202e5644aefd5d","integrity":"sha256-MdmIdltOb1ZVPClYjFADgdw+bwqimAyCEiAuVkSu/V0="},"jquery-ui/ui-icons_555555_256x240-32175261daee76c82bb0edf0eea16a56421866fbc31e94f3c1d570aa114502f5.png":{"logical_path":"jquery-ui/ui-icons_555555_256x240.png","mtime":"2018-03-12T11:55:26+01:00","size":3756,"digest":"32175261daee76c82bb0edf0eea16a56421866fbc31e94f3c1d570aa114502f5","integrity":"sha256-MhdSYdrudsgrsO3w7qFqVkIYZvvDHpTzwdVwqhFFAvU="},"jquery-ui/ui-icons_777620_256x240-0b020fc6e696d88d296e7bb1f61f1eb2ad827848e2c7382a4c3e0999e702dd9b.png":{"logical_path":"jquery-ui/ui-icons_777620_256x240.png","mtime":"2018-03-12T11:55:26+01:00","size":3756,"digest":"0b020fc6e696d88d296e7bb1f61f1eb2ad827848e2c7382a4c3e0999e702dd9b","integrity":"sha256-CwIPxuaW2I0pbnux9h8esq2CeEjixzgqTD4JmecC3Zs="},"jquery-ui/ui-icons_777777_256x240-faf32007ae120c302213557626e660dd10e711c5dd4f1113d35f26dc05b78d2f.png":{"logical_path":"jquery-ui/ui-icons_777777_256x240.png","mtime":"2018-03-12T11:55:26+01:00","size":3756,"digest":"faf32007ae120c302213557626e660dd10e711c5dd4f1113d35f26dc05b78d2f","integrity":"sha256-+vMgB64SDDAiE1V2JuZg3RDnEcXdTxET018m3AW3jS8="},"jquery-ui/ui-icons_cc0000_256x240-40985a64b4d5dd213fba27fcd862a1bd1b337a97674f6ff0b9ec20abcee4bc69.png":{"logical_path":"jquery-ui/ui-icons_cc0000_256x240.png","mtime":"2018-03-12T11:55:26+01:00","size":3756,"digest":"40985a64b4d5dd213fba27fcd862a1bd1b337a97674f6ff0b9ec20abcee4bc69","integrity":"sha256-QJhaZLTV3SE/uif82GKhvRszepdnT2/wuewgq87kvGk="},"jquery-ui/ui-icons_ffffff_256x240-350df1b7131037de20e83c5c0f3a41a770d2ac48b5762ea772b3f4a8a7b9d47a.png":{"logical_path":"jquery-ui/ui-icons_ffffff_256x240.png","mtime":"2018-03-12T11:55:26+01:00","size":3756,"digest":"350df1b7131037de20e83c5c0f3a41a770d2ac48b5762ea772b3f4a8a7b9d47a","integrity":"sha256-NQ3xtxMQN94g6DxcDzpBp3DSrEi1di6ncrP0qKe51Ho="},"tinymce/langs/af_ZA-6d5614830d9cc3d504d9922bf5373665246936adc337530a7a672e9bf5fc21ea.js":{"logical_path":"tinymce/langs/af_ZA.js","mtime":"2018-03-12T11:55:28+01:00","size":7669,"digest":"6d5614830d9cc3d504d9922bf5373665246936adc337530a7a672e9bf5fc21ea","integrity":"sha256-bVYUgw2cw9UE2ZIr9Tc2ZSRpNq3DN1MKemcum/X8Ieo="},"tinymce/langs/ar-5a0ab86d268d50c7c9462e0645b96e6c09d928976c0b27007f85f7c5638cbbf8.js":{"logical_path":"tinymce/langs/ar.js","mtime":"2018-03-12T11:55:28+01:00","size":21817,"digest":"5a0ab86d268d50c7c9462e0645b96e6c09d928976c0b27007f85f7c5638cbbf8","integrity":"sha256-Wgq4bSaNUMfJRi4GRblubAnZKJdsCycAf4X3xWOMu/g="},"tinymce/langs/ar_SA-24b62c76e99e114ae44480a67edbacf74f9fed0ff7afbeacce4966f1bc80333b.js":{"logical_path":"tinymce/langs/ar_SA.js","mtime":"2018-03-12T11:55:28+01:00","size":10003,"digest":"24b62c76e99e114ae44480a67edbacf74f9fed0ff7afbeacce4966f1bc80333b","integrity":"sha256-JLYsdumeEUrkRICmftus90+f7Q/3r76szklm8byAMzs="},"tinymce/langs/az-d40cecd6eb423f910f528ae98dcdaba4c2449802621759437174cf8c8c0d5b25.js":{"logical_path":"tinymce/langs/az.js","mtime":"2018-03-12T11:55:28+01:00","size":9680,"digest":"d40cecd6eb423f910f528ae98dcdaba4c2449802621759437174cf8c8c0d5b25","integrity":"sha256-1Azs1utCP5EPUorpjc2rpMJEmAJiF1lDcXTPjIwNWyU="},"tinymce/langs/be-2d601b695076754977002cf73d6809919ca8c0758850a45e34a692af7b08fb1d.js":{"logical_path":"tinymce/langs/be.js","mtime":"2018-03-12T11:55:28+01:00","size":22653,"digest":"2d601b695076754977002cf73d6809919ca8c0758850a45e34a692af7b08fb1d","integrity":"sha256-LWAbaVB2dUl3ACz3PWgJkZyowHWIUKReNKaSr3sI+x0="},"tinymce/langs/bg_BG-0272f963807ba8672db0d5f6b8919d2f3aa2f8bb172a17c5f8c2934760ba0dce.js":{"logical_path":"tinymce/langs/bg_BG.js","mtime":"2018-03-12T11:55:28+01:00","size":28023,"digest":"0272f963807ba8672db0d5f6b8919d2f3aa2f8bb172a17c5f8c2934760ba0dce","integrity":"sha256-AnL5Y4B7qGctsNX2uJGdLzqi+LsXKhfF+MKTR2C6Dc4="},"tinymce/langs/bn_BD-ef48a9094445dfa624af0c35902f60b7949b30585b5e9bc760a225fe2c07cbd3.js":{"logical_path":"tinymce/langs/bn_BD.js","mtime":"2018-03-12T11:55:28+01:00","size":6846,"digest":"ef48a9094445dfa624af0c35902f60b7949b30585b5e9bc760a225fe2c07cbd3","integrity":"sha256-70ipCURF36Ykrww1kC9gt5SbMFhbXpvHYKIl/iwHy9M="},"tinymce/langs/bs-eb66c6d6910a30b950d7a0e784027ed288e6e5a2c6db7741da3359f2067e2e0e.js":{"logical_path":"tinymce/langs/bs.js","mtime":"2018-03-12T11:55:28+01:00","size":6970,"digest":"eb66c6d6910a30b950d7a0e784027ed288e6e5a2c6db7741da3359f2067e2e0e","integrity":"sha256-62bG1pEKMLlQ16DnhAJ+0ojm5aLG23dB2jNZ8gZ+Lg4="},"tinymce/langs/ca-e4765b96adf2232248998c6b703730652cd4302035ee39733cd6e5df8d79ee22.js":{"logical_path":"tinymce/langs/ca.js","mtime":"2018-03-12T11:55:28+01:00","size":9647,"digest":"e4765b96adf2232248998c6b703730652cd4302035ee39733cd6e5df8d79ee22","integrity":"sha256-5HZblq3yIyJImYxrcDcwZSzUMCA17jlzPNbl34157iI="},"tinymce/langs/cs-77418e2f6150bfb0391227eeff79499f8654a9fcc5314f30ec88e4684e8e5fa6.js":{"logical_path":"tinymce/langs/cs.js","mtime":"2018-03-12T11:55:28+01:00","size":10817,"digest":"77418e2f6150bfb0391227eeff79499f8654a9fcc5314f30ec88e4684e8e5fa6","integrity":"sha256-d0GOL2FQv7A5Eifu/3lJn4ZUqfzFMU8w7IjkaE6OX6Y="},"tinymce/langs/cs_CZ-4b0778d233e200dea350f8361129da2844e23d1c0f2d524aeffa6d34e581368d.js":{"logical_path":"tinymce/langs/cs_CZ.js","mtime":"2018-03-12T11:55:28+01:00","size":8399,"digest":"4b0778d233e200dea350f8361129da2844e23d1c0f2d524aeffa6d34e581368d","integrity":"sha256-Swd40jPiAN6jUPg2ESnaKETiPRwPLVJK7/ptNOWBNo0="},"tinymce/langs/cy-d337e01ca993cd9fb80ce3fccc39dff7f1dc47021264bf9ec14ac9af2b3d74b5.js":{"logical_path":"tinymce/langs/cy.js","mtime":"2018-03-12T11:55:28+01:00","size":7751,"digest":"d337e01ca993cd9fb80ce3fccc39dff7f1dc47021264bf9ec14ac9af2b3d74b5","integrity":"sha256-0zfgHKmTzZ+4DOP8zDnf9/HcRwISZL+ewUrJrys9dLU="},"tinymce/langs/da-4a040df5d2a225dcd10aa1c7d05ff7f36a854d4834919497812c3ba5aa5b06f4.js":{"logical_path":"tinymce/langs/da.js","mtime":"2018-03-12T11:55:28+01:00","size":9262,"digest":"4a040df5d2a225dcd10aa1c7d05ff7f36a854d4834919497812c3ba5aa5b06f4","integrity":"sha256-SgQN9dKiJdzRCqHH0F/382qFTUg0kZSXgSw7papbBvQ="},"tinymce/langs/de-f9a88202d526e76875d22053cc659e4aabb43fa88411296ba122b8cf4d468eef.js":{"logical_path":"tinymce/langs/de.js","mtime":"2018-03-12T11:55:28+01:00","size":10076,"digest":"f9a88202d526e76875d22053cc659e4aabb43fa88411296ba122b8cf4d468eef","integrity":"sha256-+aiCAtUm52h10iBTzGWeSqu0P6iEESlroSK4z01Gju8="},"tinymce/langs/de_AT-2c6a1926c1cddd2079d27e844db153d797505e21bab6bdab018c2e5d1f0532fb.js":{"logical_path":"tinymce/langs/de_AT.js","mtime":"2018-03-12T11:55:28+01:00","size":10065,"digest":"2c6a1926c1cddd2079d27e844db153d797505e21bab6bdab018c2e5d1f0532fb","integrity":"sha256-LGoZJsHN3SB50n6ETbFT15dQXiG6tr2rAYwuXR8FMvs="},"tinymce/langs/dv-3b3e040a7e24fd18903d4833a8da09f2e2b65fbd1c3ac325a3cd373775f9bd23.js":{"logical_path":"tinymce/langs/dv.js","mtime":"2018-03-12T11:55:28+01:00","size":22234,"digest":"3b3e040a7e24fd18903d4833a8da09f2e2b65fbd1c3ac325a3cd373775f9bd23","integrity":"sha256-Oz4ECn4k/RiQPUgzqNoJ8uK2X70cOsMlo803N3X5vSM="},"tinymce/langs/el-0d51a187db018442cb94826f66155adb3fd805ac792c1110a04a548bc7d5d6c2.js":{"logical_path":"tinymce/langs/el.js","mtime":"2018-03-12T11:55:28+01:00","size":24860,"digest":"0d51a187db018442cb94826f66155adb3fd805ac792c1110a04a548bc7d5d6c2","integrity":"sha256-DVGhh9sBhELLlIJvZhVa2z/YBax5LBEQoEpUi8fV1sI="},"tinymce/langs/en_CA-2c64a16614c895022cc2b6aa4f134f4917ec8dd045c2184672653f3fae158db4.js":{"logical_path":"tinymce/langs/en_CA.js","mtime":"2018-03-12T11:55:28+01:00","size":8530,"digest":"2c64a16614c895022cc2b6aa4f134f4917ec8dd045c2184672653f3fae158db4","integrity":"sha256-LGShZhTIlQIswraqTxNPSRfsjdBFwhhGcmU/P64VjbQ="},"tinymce/langs/en_GB-4eb69d31cb70a3d3c53185883d58027a70524b0f5db82200bfa45b6a8ea22224.js":{"logical_path":"tinymce/langs/en_GB.js","mtime":"2018-03-12T11:55:28+01:00","size":7438,"digest":"4eb69d31cb70a3d3c53185883d58027a70524b0f5db82200bfa45b6a8ea22224","integrity":"sha256-TradMctwo9PFMYWIPVgCenBSSw9duCIAv6Rbao6iIiQ="},"tinymce/langs/eo-cbac4d7ebcb0679845b852d9354e74586e78cf13eef82de1400cf6b465e203cd.js":{"logical_path":"tinymce/langs/eo.js","mtime":"2018-03-12T11:55:28+01:00","size":7466,"digest":"cbac4d7ebcb0679845b852d9354e74586e78cf13eef82de1400cf6b465e203cd","integrity":"sha256-y6xNfrywZ5hFuFLZNU50WG54zxPu+C3hQAz2tGXiA80="},"tinymce/langs/es-4fd5fd5b991c2c1e3032a297ae4605088bcd6835a467e64f9568de1b554e559c.js":{"logical_path":"tinymce/langs/es.js","mtime":"2018-03-12T11:55:28+01:00","size":9447,"digest":"4fd5fd5b991c2c1e3032a297ae4605088bcd6835a467e64f9568de1b554e559c","integrity":"sha256-T9X9W5kcLB4wMqKXrkYFCIvNaDWkZ+ZPlWjeG1VOVZw="},"tinymce/langs/es_MX-bc4f779c4782ed7bc7e7c4b7cd9293d7803256660cc529307dca05a40c49b94d.js":{"logical_path":"tinymce/langs/es_MX.js","mtime":"2018-03-12T11:55:28+01:00","size":9555,"digest":"bc4f779c4782ed7bc7e7c4b7cd9293d7803256660cc529307dca05a40c49b94d","integrity":"sha256-vE93nEeC7XvH58S3zZKT14AyVmYMxSkwfcoFpAxJuU0="},"tinymce/langs/et-26b7ced79b21dc8a21fda1dd95247e93c35096461238c8579dea16e48d12b4ef.js":{"logical_path":"tinymce/langs/et.js","mtime":"2018-03-12T11:55:28+01:00","size":8364,"digest":"26b7ced79b21dc8a21fda1dd95247e93c35096461238c8579dea16e48d12b4ef","integrity":"sha256-JrfO15sh3Ioh/aHdlSR+k8NQlkYSOMhXneoW5I0StO8="},"tinymce/langs/eu-8698ae4de236fcd490d0f45d485dbd33d8e9de6eb3db51191e1b4f8ea96a4d06.js":{"logical_path":"tinymce/langs/eu.js","mtime":"2018-03-12T11:55:28+01:00","size":7011,"digest":"8698ae4de236fcd490d0f45d485dbd33d8e9de6eb3db51191e1b4f8ea96a4d06","integrity":"sha256-hpiuTeI2/NSQ0PRdSF29M9jp3m6z21EZHhtPjqlqTQY="},"tinymce/langs/fa-7eff96595e93d4b0df484dd90c14b7b412966157ed8293f54429e9418882bdb2.js":{"logical_path":"tinymce/langs/fa.js","mtime":"2018-03-12T11:55:28+01:00","size":16462,"digest":"7eff96595e93d4b0df484dd90c14b7b412966157ed8293f54429e9418882bdb2","integrity":"sha256-fv+WWV6T1LDfSE3ZDBS3tBKWYVftgpP1RCnpQYiCvbI="},"tinymce/langs/fa_IR-4103bdacd3e4b53f30b27019dc9cdbc6402e3345331a93a5768900d591633201.js":{"logical_path":"tinymce/langs/fa_IR.js","mtime":"2018-03-12T11:55:28+01:00","size":22191,"digest":"4103bdacd3e4b53f30b27019dc9cdbc6402e3345331a93a5768900d591633201","integrity":"sha256-QQO9rNPktT8wsnAZ3JzbxkAuM0UzGpOldokA1ZFjMgE="},"tinymce/langs/fi-6ca2a93d045067a86e8ea973d0b89368054b15eb9b9625bf1ca871608a5cb77c.js":{"logical_path":"tinymce/langs/fi.js","mtime":"2018-03-12T11:55:28+01:00","size":8143,"digest":"6ca2a93d045067a86e8ea973d0b89368054b15eb9b9625bf1ca871608a5cb77c","integrity":"sha256-bKKpPQRQZ6hujqlz0LiTaAVLFeubliW/HKhxYIpct3w="},"tinymce/langs/fo-340609cecd5571e4eacb8fe7bd1343c8553d96d12610fb77d9a812dc6d3635fd.js":{"logical_path":"tinymce/langs/fo.js","mtime":"2018-03-12T11:55:28+01:00","size":8044,"digest":"340609cecd5571e4eacb8fe7bd1343c8553d96d12610fb77d9a812dc6d3635fd","integrity":"sha256-NAYJzs1VceTqy4/nvRNDyFU9ltEmEPt32agS3G02Nf0="},"tinymce/langs/fr_CH-e0f43c0f20727368ff0767f3bf099bc23eed9fe3e81f8bbe514381e786526928.js":{"logical_path":"tinymce/langs/fr_CH.js","mtime":"2018-03-12T11:55:28+01:00","size":8074,"digest":"e0f43c0f20727368ff0767f3bf099bc23eed9fe3e81f8bbe514381e786526928","integrity":"sha256-4PQ8DyByc2j/B2fzvwmbwj7tn+PoH4u+UUOB54ZSaSg="},"tinymce/langs/fr_FR-c7b4bea9c3f186767ffee3f06d12830574620a5f58c4f76dede76d311be2a9c6.js":{"logical_path":"tinymce/langs/fr_FR.js","mtime":"2018-03-12T11:55:28+01:00","size":9839,"digest":"c7b4bea9c3f186767ffee3f06d12830574620a5f58c4f76dede76d311be2a9c6","integrity":"sha256-x7S+qcPxhnZ//uPwbRKDBXRiCl9YxPdt7edtMRviqcY="},"tinymce/langs/ga-7c1e918737301e611973d91e10c27930873e97dd690f7d10862d0cd40e639055.js":{"logical_path":"tinymce/langs/ga.js","mtime":"2018-03-12T11:55:28+01:00","size":10477,"digest":"7c1e918737301e611973d91e10c27930873e97dd690f7d10862d0cd40e639055","integrity":"sha256-fB6RhzcwHmEZc9keEMJ5MIc+l91pD30Qhi0M1A5jkFU="},"tinymce/langs/gd-0453e8b97bf3b6cca4065712ec59f20343ad6131735b38547e865177a1c1c490.js":{"logical_path":"tinymce/langs/gd.js","mtime":"2018-03-12T11:55:28+01:00","size":8808,"digest":"0453e8b97bf3b6cca4065712ec59f20343ad6131735b38547e865177a1c1c490","integrity":"sha256-BFPouXvztsykBlcS7FnyA0OtYTFzWzhUfoZRd6HBxJA="},"tinymce/langs/gl-f6ec1cbe13f00683a8fceb6e73a353dfced77ab3f63d99fa2ae7c40bd6b3a64c.js":{"logical_path":"tinymce/langs/gl.js","mtime":"2018-03-12T11:55:28+01:00","size":9315,"digest":"f6ec1cbe13f00683a8fceb6e73a353dfced77ab3f63d99fa2ae7c40bd6b3a64c","integrity":"sha256-9uwcvhPwBoOo/Otuc6NT387XerP2PZn6KufEC9azpkw="},"tinymce/langs/he_IL-74b957588e5998649fde6c6f3686bb74790d7173d0f31c90a4272a4596b16b32.js":{"logical_path":"tinymce/langs/he_IL.js","mtime":"2018-03-12T11:55:28+01:00","size":17345,"digest":"74b957588e5998649fde6c6f3686bb74790d7173d0f31c90a4272a4596b16b32","integrity":"sha256-dLlXWI5ZmGSf3mxvNoa7dHkNcXPQ8xyQpCcqRZaxazI="},"tinymce/langs/hi_IN-695e0cdc22974fe45e0f35289f0249ddab87245165c9df765ec1b885ec55f0be.js":{"logical_path":"tinymce/langs/hi_IN.js","mtime":"2018-03-12T11:55:28+01:00","size":18458,"digest":"695e0cdc22974fe45e0f35289f0249ddab87245165c9df765ec1b885ec55f0be","integrity":"sha256-aV4M3CKXT+ReDzUonwJJ3auHJFFlyd92XsG4hexV8L4="},"tinymce/langs/hr-1dda1c40a40645a936a214478697c44137c805bf8b9c9e4485a0fb142e4ffe18.js":{"logical_path":"tinymce/langs/hr.js","mtime":"2018-03-12T11:55:28+01:00","size":9037,"digest":"1dda1c40a40645a936a214478697c44137c805bf8b9c9e4485a0fb142e4ffe18","integrity":"sha256-HdocQKQGRak2ohRHhpfEQTfIBb+LnJ5EhaD7FC5P/hg="},"tinymce/langs/hu_HU-9e74f5ada14970f167ee2ec1f46c8fd41d8bb98f9f5f5df9b4ad041cdaa81fd7.js":{"logical_path":"tinymce/langs/hu_HU.js","mtime":"2018-03-12T11:55:28+01:00","size":11691,"digest":"9e74f5ada14970f167ee2ec1f46c8fd41d8bb98f9f5f5df9b4ad041cdaa81fd7","integrity":"sha256-nnT1raFJcPFn7i7B9GyP1B2LuY+fX135tK0EHNqoH9c="},"tinymce/langs/hy-0d384f3f82cd76793d3e7428a2140ea97f40a943f25ef99a2e3709a3e02b0930.js":{"logical_path":"tinymce/langs/hy.js","mtime":"2018-03-12T11:55:28+01:00","size":20375,"digest":"0d384f3f82cd76793d3e7428a2140ea97f40a943f25ef99a2e3709a3e02b0930","integrity":"sha256-DThPP4LNdnk9PnQoohQOqX9AqUPyXvmaLjcJo+ArCTA="},"tinymce/langs/id-e9fd018be745b5f14f4af47887420f98c590c607e01d57aca77ef5affe188523.js":{"logical_path":"tinymce/langs/id.js","mtime":"2018-03-12T11:55:28+01:00","size":7141,"digest":"e9fd018be745b5f14f4af47887420f98c590c607e01d57aca77ef5affe188523","integrity":"sha256-6f0Bi+dFtfFPSvR4h0IPmMWQxgfgHVesp371r/4YhSM="},"tinymce/langs/is_IS-c6e8c3e7b0e6b447faec3d8d258928f97c84558b29882c056513fb71cf237bfa.js":{"logical_path":"tinymce/langs/is_IS.js","mtime":"2018-03-12T11:55:28+01:00","size":7928,"digest":"c6e8c3e7b0e6b447faec3d8d258928f97c84558b29882c056513fb71cf237bfa","integrity":"sha256-xujD57DmtEf67D2NJYko+XyEVYspiCwFZRP7cc8je/o="},"tinymce/langs/it-c4549598b4e13df2201efb7f5b971e5bc55a731b25dd9ac7adb5f75780fe5f34.js":{"logical_path":"tinymce/langs/it.js","mtime":"2018-03-12T11:55:28+01:00","size":9264,"digest":"c4549598b4e13df2201efb7f5b971e5bc55a731b25dd9ac7adb5f75780fe5f34","integrity":"sha256-xFSVmLThPfIgHvt/W5ceW8Vacxsl3ZrHrbX3V4D+XzQ="},"tinymce/langs/ja-da6414959d66a9b0cb46078592bd018bc8dc6707588d5ab911ebd09e589f92f6.js":{"logical_path":"tinymce/langs/ja.js","mtime":"2018-03-12T11:55:28+01:00","size":15243,"digest":"da6414959d66a9b0cb46078592bd018bc8dc6707588d5ab911ebd09e589f92f6","integrity":"sha256-2mQUlZ1mqbDLRgeFkr0Bi8jcZwdYjVq5EevQnlifkvY="},"tinymce/langs/ka_GE-480559d4cffe96c5cae5e41f9ffd06f979785b3ce93e547462fbabc5cc1a88fb.js":{"logical_path":"tinymce/langs/ka_GE.js","mtime":"2018-03-12T11:55:28+01:00","size":22807,"digest":"480559d4cffe96c5cae5e41f9ffd06f979785b3ce93e547462fbabc5cc1a88fb","integrity":"sha256-SAVZ1M/+lsXK5eQfn/0G+Xl4WzzpPlR0YvurxcwaiPs="},"tinymce/langs/kab-dc638a064c01cae2218d445beec60da010ee8dee8524f245ae3b99c8c5b3567c.js":{"logical_path":"tinymce/langs/kab.js","mtime":"2018-03-12T11:55:28+01:00","size":7904,"digest":"dc638a064c01cae2218d445beec60da010ee8dee8524f245ae3b99c8c5b3567c","integrity":"sha256-3GOKBkwByuIhjURb7sYNoBDuje6FJPJFrjuZyMWzVnw="},"tinymce/langs/kk-282b790d721dcaf6b44d930f70825e06969602572e477b7ef73766360eefdbaf.js":{"logical_path":"tinymce/langs/kk.js","mtime":"2018-03-12T11:55:28+01:00","size":21706,"digest":"282b790d721dcaf6b44d930f70825e06969602572e477b7ef73766360eefdbaf","integrity":"sha256-KCt5DXIdyva0TZMPcIJeBpaWAlcuR3t+9zdmNg7v268="},"tinymce/langs/km_KH-dddeacc3c7112c6f230c4746d0fc9e9de1a3f53e419524ce03f483a35a49aaad.js":{"logical_path":"tinymce/langs/km_KH.js","mtime":"2018-03-12T11:55:28+01:00","size":25877,"digest":"dddeacc3c7112c6f230c4746d0fc9e9de1a3f53e419524ce03f483a35a49aaad","integrity":"sha256-3d6sw8cRLG8jDEdG0PyeneGj9T5BlSTOA/SDo1pJqq0="},"tinymce/langs/ko-ca535bfa388701fb020d24bdfb3f1e3aab127005b54e943cb1bd60b723c8194d.js":{"logical_path":"tinymce/langs/ko.js","mtime":"2018-03-12T11:55:28+01:00","size":10105,"digest":"ca535bfa388701fb020d24bdfb3f1e3aab127005b54e943cb1bd60b723c8194d","integrity":"sha256-ylNb+jiHAfsCDSS9+z8eOqsScAW1TpQ8sb1gtyPIGU0="},"tinymce/langs/ko_KR-90aae14954461fa073104c36c0f2d7d2c95bbbf0e41be4ef4f04ac402ab8d0a8.js":{"logical_path":"tinymce/langs/ko_KR.js","mtime":"2018-03-12T11:55:28+01:00","size":12447,"digest":"90aae14954461fa073104c36c0f2d7d2c95bbbf0e41be4ef4f04ac402ab8d0a8","integrity":"sha256-kKrhSVRGH6BzEEw2wPLX0slbu/DkG+TvTwSsQCq40Kg="},"tinymce/langs/ku-95e2ffe4f0112df658f10327c26f2cdddedc2e2ed769767366ae22a465c14725.js":{"logical_path":"tinymce/langs/ku.js","mtime":"2018-03-12T11:55:28+01:00","size":18274,"digest":"95e2ffe4f0112df658f10327c26f2cdddedc2e2ed769767366ae22a465c14725","integrity":"sha256-leL/5PARLfZY8QMnwm8s3d7cLi7XaXZzZq4ipGXBRyU="},"tinymce/langs/ku_IQ-a212e8d41695989e56834facf72474e1934ef166c3fcaf7e255ef573a3c6e76c.js":{"logical_path":"tinymce/langs/ku_IQ.js","mtime":"2018-03-12T11:55:28+01:00","size":18364,"digest":"a212e8d41695989e56834facf72474e1934ef166c3fcaf7e255ef573a3c6e76c","integrity":"sha256-ohLo1BaVmJ5Wg0+s9yR04ZNO8WbD/K9+JV71c6PG52w="},"tinymce/langs/lb-94992279091f1a0be927d5d858d3724037d8d81ee6b63cc9ddde84af6124cc04.js":{"logical_path":"tinymce/langs/lb.js","mtime":"2018-03-12T11:55:28+01:00","size":7467,"digest":"94992279091f1a0be927d5d858d3724037d8d81ee6b63cc9ddde84af6124cc04","integrity":"sha256-lJkieQkfGgvpJ9XYWNNyQDfY2B7mtjzJ3d6Er2EkzAQ="},"tinymce/langs/lt-ae7cefbe2cb5420770b31eabf92605728135ab5d6a2d2cfca2d19809be67e6a8.js":{"logical_path":"tinymce/langs/lt.js","mtime":"2018-03-12T11:55:28+01:00","size":8899,"digest":"ae7cefbe2cb5420770b31eabf92605728135ab5d6a2d2cfca2d19809be67e6a8","integrity":"sha256-rnzvviy1Qgdwsx6r+SYFcoE1q11qLSz8otGYCb5n5qg="},"tinymce/langs/lv-6c706e8dbf25774d07fea54cc1cbfaaf60c205c95392eee90ae55ac9cae74768.js":{"logical_path":"tinymce/langs/lv.js","mtime":"2018-03-12T11:55:28+01:00","size":11056,"digest":"6c706e8dbf25774d07fea54cc1cbfaaf60c205c95392eee90ae55ac9cae74768","integrity":"sha256-bHBujb8ld00H/qVMwcv6r2DCBclTku7pCuVaycrnR2g="},"tinymce/langs/mk_MK-55aadb5d7c82c940cfcf42f24423ef0471294c9b02994a6b22e1b4173baa7ec6.js":{"logical_path":"tinymce/langs/mk_MK.js","mtime":"2018-03-12T11:55:28+01:00","size":18733,"digest":"55aadb5d7c82c940cfcf42f24423ef0471294c9b02994a6b22e1b4173baa7ec6","integrity":"sha256-VarbXXyCyUDPz0LyRCPvBHEpTJsCmUprIuG0FzuqfsY="},"tinymce/langs/ml-685de0808683c02274dcbe9f8de023a4d72a49b040e7526a99e3d5c786ff71ae.js":{"logical_path":"tinymce/langs/ml.js","mtime":"2018-03-12T11:55:28+01:00","size":7339,"digest":"685de0808683c02274dcbe9f8de023a4d72a49b040e7526a99e3d5c786ff71ae","integrity":"sha256-aF3ggIaDwCJ03L6fjeAjpNcqSbBA51JqmePVx4b/ca4="},"tinymce/langs/ml_IN-1ab433621d6257c7632718048bacc5ed98a302d33cf0438bbbb4200914e01aac.js":{"logical_path":"tinymce/langs/ml_IN.js","mtime":"2018-03-12T11:55:28+01:00","size":20019,"digest":"1ab433621d6257c7632718048bacc5ed98a302d33cf0438bbbb4200914e01aac","integrity":"sha256-GrQzYh1iV8djJxgEi6zF7ZijAtM88EOLu7QgCRTgGqw="},"tinymce/langs/mn_MN-b89f88cb9b0dd7c879e27532b2979c421c1e69648f65a4108a56060f1e1cb009.js":{"logical_path":"tinymce/langs/mn_MN.js","mtime":"2018-03-12T11:55:28+01:00","size":6877,"digest":"b89f88cb9b0dd7c879e27532b2979c421c1e69648f65a4108a56060f1e1cb009","integrity":"sha256-uJ+Iy5sN18h54nUyspecQhweaWSPZaQQilYGDx4csAk="},"tinymce/langs/nb_NO-8bd2c254b03046ae60710293e7485d4c5cf9fdc3cbce52f97f0bf682ee44e1f8.js":{"logical_path":"tinymce/langs/nb_NO.js","mtime":"2018-03-12T11:55:28+01:00","size":9248,"digest":"8bd2c254b03046ae60710293e7485d4c5cf9fdc3cbce52f97f0bf682ee44e1f8","integrity":"sha256-i9LCVLAwRq5gcQKT50hdTFz5/cPLzlL5fwv2gu5E4fg="},"tinymce/langs/nl-0436131db0f369f1d07ce9a27f61cd351d8b2a441d352f8261cde3990f7b59d8.js":{"logical_path":"tinymce/langs/nl.js","mtime":"2018-03-12T11:55:28+01:00","size":8979,"digest":"0436131db0f369f1d07ce9a27f61cd351d8b2a441d352f8261cde3990f7b59d8","integrity":"sha256-BDYTHbDzafHQfOmif2HNNR2LKkQdNS+CYc3jmQ97Wdg="},"tinymce/langs/pl-eaf96c2c80d9268c2477628c1d23f947391de01553ef43bb488ee88d7bb3b8e6.js":{"logical_path":"tinymce/langs/pl.js","mtime":"2018-03-12T11:55:28+01:00","size":10178,"digest":"eaf96c2c80d9268c2477628c1d23f947391de01553ef43bb488ee88d7bb3b8e6","integrity":"sha256-6vlsLIDZJowkd2KMHSP5Rzkd4BVT70O7SI7ojXuzuOY="},"tinymce/langs/pt_BR-32ccbdf38597b6d0239e8ba70d73ab75de0661bb06c86fc9a90d1c0a890bc31e.js":{"logical_path":"tinymce/langs/pt_BR.js","mtime":"2018-03-12T11:55:28+01:00","size":9820,"digest":"32ccbdf38597b6d0239e8ba70d73ab75de0661bb06c86fc9a90d1c0a890bc31e","integrity":"sha256-Msy984WXttAjnounDXOrdd4GYbsGyG/JqQ0cCokLwx4="},"tinymce/langs/pt_PT-a364a3ca02a98259f33046338ab1bdd32dd4ebf24fa56e88d2578066bc7f0597.js":{"logical_path":"tinymce/langs/pt_PT.js","mtime":"2018-03-12T11:55:28+01:00","size":10011,"digest":"a364a3ca02a98259f33046338ab1bdd32dd4ebf24fa56e88d2578066bc7f0597","integrity":"sha256-o2SjygKpglnzMEYzirG90y3U6/JPpW6I0leAZrx/BZc="},"tinymce/langs/ro-83fd95a929d491cbfbfac83f132bdc41c956a7f4b0459c243fd92613c9c841ef.js":{"logical_path":"tinymce/langs/ro.js","mtime":"2018-03-12T11:55:28+01:00","size":8848,"digest":"83fd95a929d491cbfbfac83f132bdc41c956a7f4b0459c243fd92613c9c841ef","integrity":"sha256-g/2VqSnUkcv7+sg/EyvcQclWp/SwRZwkP9kmE8nIQe8="},"tinymce/langs/ru-2566ddc510b999f19c499a9838d7b987d5a8332b5802f2211beb4274ae2cd563.js":{"logical_path":"tinymce/langs/ru.js","mtime":"2018-03-12T11:55:28+01:00","size":27189,"digest":"2566ddc510b999f19c499a9838d7b987d5a8332b5802f2211beb4274ae2cd563","integrity":"sha256-JWbdxRC5mfGcSZqYONe5h9WoMytYAvIhG+tCdK4s1WM="},"tinymce/langs/ru_RU-9f18ef14f3493cc586cc0b4827fd9e1c2ed3d5790ce536d94f87e2d6aac2a688.js":{"logical_path":"tinymce/langs/ru_RU.js","mtime":"2018-03-12T11:55:28+01:00","size":4955,"digest":"9f18ef14f3493cc586cc0b4827fd9e1c2ed3d5790ce536d94f87e2d6aac2a688","integrity":"sha256-nxjvFPNJPMWGzAtIJ/2eHC7T1XkM5TbZT4fi1qrCpog="},"tinymce/langs/si_LK-5bfefe9b2fe82574d8ed839df18fd8ff65f1e1cd458b0a843cf1aadd1be704ea.js":{"logical_path":"tinymce/langs/si_LK.js","mtime":"2018-03-12T11:55:28+01:00","size":15856,"digest":"5bfefe9b2fe82574d8ed839df18fd8ff65f1e1cd458b0a843cf1aadd1be704ea","integrity":"sha256-W/7+my/oJXTY7YOd8Y/Y/2Xx4c1FiwqEPPGq3RvnBOo="},"tinymce/langs/sk-01d012310139d40e606a633db845a03fe285c32cb47043d6d9d761afa0cc3530.js":{"logical_path":"tinymce/langs/sk.js","mtime":"2018-03-12T11:55:28+01:00","size":10588,"digest":"01d012310139d40e606a633db845a03fe285c32cb47043d6d9d761afa0cc3530","integrity":"sha256-AdASMQE51A5gamM9uEWgP+KFwyy0cEPW2ddhr6DMNTA="},"tinymce/langs/sl_SI-ea499e07b7f4c9430bb15f34f6278f7248334c2553a544e240a21a84195d9582.js":{"logical_path":"tinymce/langs/sl_SI.js","mtime":"2018-03-12T11:55:28+01:00","size":8219,"digest":"ea499e07b7f4c9430bb15f34f6278f7248334c2553a544e240a21a84195d9582","integrity":"sha256-6kmeB7f0yUMLsV809iePckgzTCVTpUTiQKIahBldlYI="},"tinymce/langs/sr-e0b97453a0c1000b19f7ce37fcf86bcacbf9125d81076f60a77686820c7925c6.js":{"logical_path":"tinymce/langs/sr.js","mtime":"2018-03-12T11:55:28+01:00","size":6336,"digest":"e0b97453a0c1000b19f7ce37fcf86bcacbf9125d81076f60a77686820c7925c6","integrity":"sha256-4Ll0U6DBAAsZ9843/Phrysv5El2BB29gp3aGggx5JcY="},"tinymce/langs/sv_SE-7af54d4c82419671562478bf4a66d185be79406f3287628df0d2ad8ac044a485.js":{"logical_path":"tinymce/langs/sv_SE.js","mtime":"2018-03-12T11:55:28+01:00","size":9334,"digest":"7af54d4c82419671562478bf4a66d185be79406f3287628df0d2ad8ac044a485","integrity":"sha256-evVNTIJBlnFWJHi/SmbRhb55QG8yh2KN8NKtisBEpIU="},"tinymce/langs/ta-3b428d97786e6eded1c4973fef3fb487786a79f1eee59f15483bd02b96c76239.js":{"logical_path":"tinymce/langs/ta.js","mtime":"2018-03-12T11:55:28+01:00","size":28524,"digest":"3b428d97786e6eded1c4973fef3fb487786a79f1eee59f15483bd02b96c76239","integrity":"sha256-O0KNl3hubt7RxJc/7z+0h3hqefHu5Z8VSDvQK5bHYjk="},"tinymce/langs/ta_IN-44bf4b6c5e4de01a2c7f2ccc69b6dd561b8afce86397229a9ff27efaf0600812.js":{"logical_path":"tinymce/langs/ta_IN.js","mtime":"2018-03-12T11:55:28+01:00","size":28527,"digest":"44bf4b6c5e4de01a2c7f2ccc69b6dd561b8afce86397229a9ff27efaf0600812","integrity":"sha256-RL9LbF5N4BosfyzMabbdVhuK/OhjlyKan/J++vBgCBI="},"tinymce/langs/tg-1618248bf0aeda614a37ced9fd28b6623ae24f8453368bfb8c483ce820a3cb34.js":{"logical_path":"tinymce/langs/tg.js","mtime":"2018-03-12T11:55:28+01:00","size":18183,"digest":"1618248bf0aeda614a37ced9fd28b6623ae24f8453368bfb8c483ce820a3cb34","integrity":"sha256-Fhgki/Cu2mFKN87Z/Si2YjriT4RTNov7jEg86CCjyzQ="},"tinymce/langs/th_TH-5869e7cc393913371f3314057c1691e6e0fa296b496cf2d5c465276c31645479.js":{"logical_path":"tinymce/langs/th_TH.js","mtime":"2018-03-12T11:55:28+01:00","size":20172,"digest":"5869e7cc393913371f3314057c1691e6e0fa296b496cf2d5c465276c31645479","integrity":"sha256-WGnnzDk5EzcfMxQFfBaR5uD6KWtJbPLVxGUnbDFkVHk="},"tinymce/langs/tr-6a58fb650e940025d957945ae4850f6fbb8446c5f092a661063af9606afc1db8.js":{"logical_path":"tinymce/langs/tr.js","mtime":"2018-03-12T11:55:28+01:00","size":10454,"digest":"6a58fb650e940025d957945ae4850f6fbb8446c5f092a661063af9606afc1db8","integrity":"sha256-alj7ZQ6UACXZV5Ra5IUPb7uERsXwkqZhBjr5YGr8Hbg="},"tinymce/langs/tr_TR-d97de581e91c05fc4f3d9fe1419ad201e227bcd0ff3f036f7b59519395f4dcc2.js":{"logical_path":"tinymce/langs/tr_TR.js","mtime":"2018-03-12T11:55:28+01:00","size":10598,"digest":"d97de581e91c05fc4f3d9fe1419ad201e227bcd0ff3f036f7b59519395f4dcc2","integrity":"sha256-2X3lgekcBfxPPZ/hQZrSAeInvND/PwNve1lRk5X03MI="},"tinymce/langs/tt-22e302672df0a77de14688f58dbedf82de7a26e9089c9535a2a3cd1c0ccd7903.js":{"logical_path":"tinymce/langs/tt.js","mtime":"2018-03-12T11:55:28+01:00","size":19035,"digest":"22e302672df0a77de14688f58dbedf82de7a26e9089c9535a2a3cd1c0ccd7903","integrity":"sha256-IuMCZy3wp33hRoj1jb7fgt56JukInJU1oqPNHAzNeQM="},"tinymce/langs/ug-50232038bf7262c90be4f2919c74ff93792cdb82e6064d0f5c86f885b93271c5.js":{"logical_path":"tinymce/langs/ug.js","mtime":"2018-03-12T11:55:28+01:00","size":16888,"digest":"50232038bf7262c90be4f2919c74ff93792cdb82e6064d0f5c86f885b93271c5","integrity":"sha256-UCMgOL9yYskL5PKRnHT/k3ks24LmBk0PXIb4hbkyccU="},"tinymce/langs/uk-00866ab0fe7746d258b215475089740306b790d572d081b7f53ce65ec313f413.js":{"logical_path":"tinymce/langs/uk.js","mtime":"2018-03-12T11:55:28+01:00","size":26089,"digest":"00866ab0fe7746d258b215475089740306b790d572d081b7f53ce65ec313f413","integrity":"sha256-AIZqsP53RtJYshVHUIl0Awa3kNVy0IG39TzmXsMT9BM="},"tinymce/langs/uk_UA-52b101eeb7079c629edbe4615e64018757791541930fd2733957810a37197356.js":{"logical_path":"tinymce/langs/uk_UA.js","mtime":"2018-03-12T11:55:28+01:00","size":26018,"digest":"52b101eeb7079c629edbe4615e64018757791541930fd2733957810a37197356","integrity":"sha256-UrEB7rcHnGKe2+RhXmQBh1d5FUGTD9JzOVeBCjcZc1Y="},"tinymce/langs/uz-d6923a3190a76dc149ccb2893574e981250344a6c4f6dcaf458df1cce2ea3b30.js":{"logical_path":"tinymce/langs/uz.js","mtime":"2018-03-12T11:55:28+01:00","size":9696,"digest":"d6923a3190a76dc149ccb2893574e981250344a6c4f6dcaf458df1cce2ea3b30","integrity":"sha256-1pI6MZCnbcFJzLKJNXTpgSUDRKbE9tyvRY3xzOLqOzA="},"tinymce/langs/vi-6aa451047e4df911c92e10178e6a70147534e438c64df7a88eee37b4a440726e.js":{"logical_path":"tinymce/langs/vi.js","mtime":"2018-03-12T11:55:28+01:00","size":9901,"digest":"6aa451047e4df911c92e10178e6a70147534e438c64df7a88eee37b4a440726e","integrity":"sha256-aqRRBH5N+RHJLhAXjmpwFHU05DjGTfeoju43tKRAcm4="},"tinymce/langs/vi_VN-54d1da8a0ca8d0242457ddab5e0230c2cca140d3e480bfd55b9dfbaec7868baa.js":{"logical_path":"tinymce/langs/vi_VN.js","mtime":"2018-03-12T11:55:28+01:00","size":10769,"digest":"54d1da8a0ca8d0242457ddab5e0230c2cca140d3e480bfd55b9dfbaec7868baa","integrity":"sha256-VNHaigyo0CQkV92rXgIwwsyhQNPkgL/VW537rseGi6o="},"tinymce/langs/zh_CN-07499e6b0821cb49c5e16efbe4a68a4d843b4d6939a45866aabe6f9ad7fc805d.js":{"logical_path":"tinymce/langs/zh_CN.js","mtime":"2018-03-12T11:55:28+01:00","size":11103,"digest":"07499e6b0821cb49c5e16efbe4a68a4d843b4d6939a45866aabe6f9ad7fc805d","integrity":"sha256-B0meawghy0nF4W775KaKTYQ7TWk5pFhmqr5vmtf8gF0="},"tinymce/langs/zh_TW-c00c3a6539c0e1696436182c935a0a5929ab09ae7bdc43ca9c4ad21098079d53.js":{"logical_path":"tinymce/langs/zh_TW.js","mtime":"2018-03-12T11:55:28+01:00","size":11059,"digest":"c00c3a6539c0e1696436182c935a0a5929ab09ae7bdc43ca9c4ad21098079d53","integrity":"sha256-wAw6ZTnA4WlkNhgsk1oKWSmrCa573EPKnErSEJgHnVM="},"tinymce/preinit-84328a53e798df12f891eb49871773fd9f925439c8630e9e22423a82ef9e6f89.js":{"logical_path":"tinymce/preinit.js","mtime":"2018-12-20T12:04:38+01:00","size":82,"digest":"84328a53e798df12f891eb49871773fd9f925439c8630e9e22423a82ef9e6f89","integrity":"sha256-hDKKU+eY3xL4ketJhxdz/Z+SVDnIYw6eIkI6gu+eb4k="},"tinymce/rails-bf7fd5c952f25481010758dde6a2681498074f9509230f601b317356a6a54fca.js":{"logical_path":"tinymce/rails.js","mtime":"2018-12-20T12:04:38+01:00","size":1345,"digest":"bf7fd5c952f25481010758dde6a2681498074f9509230f601b317356a6a54fca","integrity":"sha256-v3/VyVLyVIEBB1jd5qJoFJgHT5UJIw9gGzFzVqalT8o="},"tinymce/tinymce-31850548e5497145232118f93e5f8e31f1655790c0bfbd2ca754f0d4587deaaa.js":{"logical_path":"tinymce/tinymce.js","mtime":"2018-12-20T12:04:38+01:00","size":949708,"digest":"31850548e5497145232118f93e5f8e31f1655790c0bfbd2ca754f0d4587deaaa","integrity":"sha256-MYUFSOVJcUUjIRj5Pl+OMfFlV5DAv70sp1Tw1Fh96qo="},"tinymce/jquery.tinymce-db2bc0a724d3123cc432dc4d9d8029736b4afc8c8502967e359dce2ed3170c16.js":{"logical_path":"tinymce/jquery.tinymce.js","mtime":"2018-12-20T12:04:38+01:00","size":3562,"digest":"db2bc0a724d3123cc432dc4d9d8029736b4afc8c8502967e359dce2ed3170c16","integrity":"sha256-2yvApyTTEjzEMtxNnYApc2tK/IyFApZ+NZ3OLtMXDBY="},"tinymce/langs/readme-5a8b6a04d57b5c88e3fb7f2a870b8e2d3a48ec03ce6474206c41df78c155b2de.md":{"logical_path":"tinymce/langs/readme.md","mtime":"2018-12-20T12:04:38+01:00","size":151,"digest":"5a8b6a04d57b5c88e3fb7f2a870b8e2d3a48ec03ce6474206c41df78c155b2de","integrity":"sha256-WotqBNV7XIjj+38qhwuOLTpI7APOZHQgbEHfeMFVst4="},"tinymce/license-47a9dcd2574891a5a465112fd9dfcebcc7e61844edec27fa936a64642008fe66.txt":{"logical_path":"tinymce/license.txt","mtime":"2018-12-20T12:04:38+01:00","size":26441,"digest":"47a9dcd2574891a5a465112fd9dfcebcc7e61844edec27fa936a64642008fe66","integrity":"sha256-R6nc0ldIkaWkZREv2d/OvMfmGETt7Cf6k2pkZCAI/mY="},"tinymce/plugins/advlist/plugin-7b5bed8c5b41dbabee490dca68a3fc215c6c2d08ad1174d20fd4ebc27feb9b18.js":{"logical_path":"tinymce/plugins/advlist/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":2227,"digest":"7b5bed8c5b41dbabee490dca68a3fc215c6c2d08ad1174d20fd4ebc27feb9b18","integrity":"sha256-e1vtjFtB26vuSQ3KaKP8IVxsLQitEXTSD9Trwn/rmxg="},"tinymce/plugins/anchor/plugin-8fc6aac86dcfda2df29f3e402541e9f5ed45743f0dce76b80bc4e3c6a16be585.js":{"logical_path":"tinymce/plugins/anchor/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":1447,"digest":"8fc6aac86dcfda2df29f3e402541e9f5ed45743f0dce76b80bc4e3c6a16be585","integrity":"sha256-j8aqyG3P2i3ynz5AJUHp9e1FdD8Nzna4C8TjxqFr5YU="},"tinymce/plugins/autolink/plugin-aacef7388395131adb8a2d04e3d130c13150b04a39ba15bfebdd8b5673e74b56.js":{"logical_path":"tinymce/plugins/autolink/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":2128,"digest":"aacef7388395131adb8a2d04e3d130c13150b04a39ba15bfebdd8b5673e74b56","integrity":"sha256-qs73OIOVExrbii0E49EwwTFQsEo5uhW/692LVnPnS1Y="},"tinymce/plugins/autoresize/plugin-79ff6671020ca454d50be43a8cd68e51bbbab80f6f11d3ef1afc29df593a9cc0.js":{"logical_path":"tinymce/plugins/autoresize/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":2075,"digest":"79ff6671020ca454d50be43a8cd68e51bbbab80f6f11d3ef1afc29df593a9cc0","integrity":"sha256-ef9mcQIMpFTVC+Q6jNaOUbu6uA9vEdPvGvwp31k6nMA="},"tinymce/plugins/autosave/plugin-9ad5834347b0a8f6cbf38dba716696d65c7e35df051dd5c5a39ceda6a4fee645.js":{"logical_path":"tinymce/plugins/autosave/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":2842,"digest":"9ad5834347b0a8f6cbf38dba716696d65c7e35df051dd5c5a39ceda6a4fee645","integrity":"sha256-mtWDQ0ewqPbL8426cWaW1lx+Nd8FHdXFo5ztpqT+5kU="},"tinymce/plugins/bbcode/plugin-8acda51f6565daa44af5423768602b2296eff9cbc3b2355f82a1ae4490428833.js":{"logical_path":"tinymce/plugins/bbcode/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":2851,"digest":"8acda51f6565daa44af5423768602b2296eff9cbc3b2355f82a1ae4490428833","integrity":"sha256-is2lH2Vl2qRK9UI3aGArIpbv+cvDsjVfgqGuRJBCiDM="},"tinymce/plugins/charmap/plugin-f0d451ae7fcfa1f30f73c2d9185c58173e1a8e44d893d752778b226b665f020b.js":{"logical_path":"tinymce/plugins/charmap/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":8602,"digest":"f0d451ae7fcfa1f30f73c2d9185c58173e1a8e44d893d752778b226b665f020b","integrity":"sha256-8NRRrn/PofMPc8LZGFxYFz4ajkTYk9dSd4sia2ZfAgs="},"tinymce/plugins/code/plugin-46957c79ea5f5757444d628fdb90bac81f078d87bc9601df76cc087d4976564b.js":{"logical_path":"tinymce/plugins/code/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":1025,"digest":"46957c79ea5f5757444d628fdb90bac81f078d87bc9601df76cc087d4976564b","integrity":"sha256-RpV8eepfV1dETWKP25C6yB8HjYe8lgHfdswIfUl2Vks="},"tinymce/plugins/codesample/css/prism-1988b66704b4d23e78c6c20c38a6856cbc1f0be96d6d60a3a0b12f4408f1057e.css":{"logical_path":"tinymce/plugins/codesample/css/prism.css","mtime":"2018-12-20T12:04:38+01:00","size":1776,"digest":"1988b66704b4d23e78c6c20c38a6856cbc1f0be96d6d60a3a0b12f4408f1057e","integrity":"sha256-GYi2ZwS00j54xsIMOKaFbLwfC+ltbWCjoLEvRAjxBX4="},"tinymce/plugins/codesample/plugin-850e9f396e000d41d915c20867bcb78d3e6ae394ac5a28f069b3d90edc0138f8.js":{"logical_path":"tinymce/plugins/codesample/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":19336,"digest":"850e9f396e000d41d915c20867bcb78d3e6ae394ac5a28f069b3d90edc0138f8","integrity":"sha256-hQ6fOW4ADUHZFcIIZ7y3jT5q45SsWijwabPZDtwBOPg="},"tinymce/plugins/colorpicker/plugin-48d6719fa10b7bc1b3982d9d9f952d320ebba056102701e49e3945ce3bf8911d.js":{"logical_path":"tinymce/plugins/colorpicker/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":1350,"digest":"48d6719fa10b7bc1b3982d9d9f952d320ebba056102701e49e3945ce3bf8911d","integrity":"sha256-SNZxn6ELe8GzmC2dn5UtMg67oFYQJwHknjlFzjv4kR0="},"tinymce/plugins/contextmenu/plugin-1b3d07a3487dbbf4eb7f0ce2252bdfc13cb849d1e8749b75c3523b22ea8f4761.js":{"logical_path":"tinymce/plugins/contextmenu/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":1825,"digest":"1b3d07a3487dbbf4eb7f0ce2252bdfc13cb849d1e8749b75c3523b22ea8f4761","integrity":"sha256-Gz0Ho0h9u/TrfwziJSvfwTy4SdHodJt1w1I7IuqPR2E="},"tinymce/plugins/directionality/plugin-0893c42f76c330cbae77ee849d287028e03574dcf50b6a0770d4b771f7324f1c.js":{"logical_path":"tinymce/plugins/directionality/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":858,"digest":"0893c42f76c330cbae77ee849d287028e03574dcf50b6a0770d4b771f7324f1c","integrity":"sha256-CJPEL3bDMMuud+6EnShwKOA1dNz1C2oHcNS3cfcyTxw="},"tinymce/plugins/emoticons/img/smiley-cool-bb0e93a050a32df7913e4026b3c88a176998e0e3e073ba06e9b73f6c24227c9c.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-cool.gif","mtime":"2018-12-20T12:04:38+01:00","size":354,"digest":"bb0e93a050a32df7913e4026b3c88a176998e0e3e073ba06e9b73f6c24227c9c","integrity":"sha256-uw6ToFCjLfeRPkAms8iKF2mY4OPgc7oG6bc/bCQifJw="},"tinymce/plugins/emoticons/img/smiley-cry-a0c5f3e7a682449c973c9d9f7c46342081c46920686d2353f57aff91ab907f68.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-cry.gif","mtime":"2018-12-20T12:04:38+01:00","size":329,"digest":"a0c5f3e7a682449c973c9d9f7c46342081c46920686d2353f57aff91ab907f68","integrity":"sha256-oMXz56aCRJyXPJ2ffEY0IIHEaSBobSNT9Xr/kauQf2g="},"tinymce/plugins/emoticons/img/smiley-embarassed-d3cafcb50b335672cb5e9f4600ea9ea261dac7828dd28844d4927c393a25618f.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-embarassed.gif","mtime":"2018-12-20T12:04:38+01:00","size":331,"digest":"d3cafcb50b335672cb5e9f4600ea9ea261dac7828dd28844d4927c393a25618f","integrity":"sha256-08r8tQszVnLLXp9GAOqeomHax4KN0ohE1JJ8OTolYY8="},"tinymce/plugins/emoticons/img/smiley-foot-in-mouth-03fe04d3ed533423ac81f05146584b0c451be3d4a30e76687ceef283ed07071f.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif","mtime":"2018-12-20T12:04:38+01:00","size":342,"digest":"03fe04d3ed533423ac81f05146584b0c451be3d4a30e76687ceef283ed07071f","integrity":"sha256-A/4E0+1TNCOsgfBRRlhLDEUb49SjDnZofO7yg+0HBx8="},"tinymce/plugins/emoticons/img/smiley-frown-1b984bf98931dd1debb54461eb9d83e985f2b2999fe14bcb556d6c0921bc83b0.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-frown.gif","mtime":"2018-12-20T12:04:38+01:00","size":340,"digest":"1b984bf98931dd1debb54461eb9d83e985f2b2999fe14bcb556d6c0921bc83b0","integrity":"sha256-G5hL+Ykx3R3rtURh652D6YXyspmf4UvLVW1sCSG8g7A="},"tinymce/plugins/emoticons/img/smiley-innocent-8db353ef102196f2c6ddf5c4666446de955d7b14fc0957c806c9dbfb48fb0c29.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-innocent.gif","mtime":"2018-12-20T12:04:38+01:00","size":336,"digest":"8db353ef102196f2c6ddf5c4666446de955d7b14fc0957c806c9dbfb48fb0c29","integrity":"sha256-jbNT7xAhlvLG3fXEZmRG3pVdexT8CVfIBsnb+0j7DCk="},"tinymce/plugins/emoticons/img/smiley-kiss-3154c3665356c13ab10fefdbac1fe187fff978a0052037c99cdc4a97103413f2.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-kiss.gif","mtime":"2018-12-20T12:04:38+01:00","size":338,"digest":"3154c3665356c13ab10fefdbac1fe187fff978a0052037c99cdc4a97103413f2","integrity":"sha256-MVTDZlNWwTqxD+/brB/hh//5eKAFIDfJnNxKlxA0E/I="},"tinymce/plugins/emoticons/img/smiley-laughing-8f6adedcd091975ffead171867a6304d908bb6541a6ccb4919286ec6b7d4551e.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-laughing.gif","mtime":"2018-12-20T12:04:38+01:00","size":343,"digest":"8f6adedcd091975ffead171867a6304d908bb6541a6ccb4919286ec6b7d4551e","integrity":"sha256-j2re3NCRl1/+rRcYZ6YwTZCLtlQabMtJGShuxrfUVR4="},"tinymce/plugins/emoticons/img/smiley-money-mouth-f0b9f4f22e237f5dbc851f900fed8d7eca4c954ae6fbc606c0cd8be431d0ac80.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-money-mouth.gif","mtime":"2018-12-20T12:04:38+01:00","size":321,"digest":"f0b9f4f22e237f5dbc851f900fed8d7eca4c954ae6fbc606c0cd8be431d0ac80","integrity":"sha256-8Ln08i4jf128hR+QD+2NfspMlUrm+8YGwM2L5DHQrIA="},"tinymce/plugins/emoticons/img/smiley-sealed-9933b442636b6e537df7b564e2c3f7a2873526eea6b022a98eb1e468e5204c32.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-sealed.gif","mtime":"2018-12-20T12:04:38+01:00","size":323,"digest":"9933b442636b6e537df7b564e2c3f7a2873526eea6b022a98eb1e468e5204c32","integrity":"sha256-mTO0QmNrblN997Vk4sP3ooc1Ju6msCKpjrHkaOUgTDI="},"tinymce/plugins/emoticons/img/smiley-smile-fd89cd460ffcacb7e725e00c0275ef5b3924ce468248e5ff4fb43545571cfa65.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-smile.gif","mtime":"2018-12-20T12:04:38+01:00","size":344,"digest":"fd89cd460ffcacb7e725e00c0275ef5b3924ce468248e5ff4fb43545571cfa65","integrity":"sha256-/YnNRg/8rLfnJeAMAnXvWzkkzkaCSOX/T7Q1RVcc+mU="},"tinymce/plugins/emoticons/img/smiley-surprised-3871f356cb41976d7ae8a5f005e8739e4d014352a8adef9b33f773d81b6e6c01.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-surprised.gif","mtime":"2018-12-20T12:04:38+01:00","size":338,"digest":"3871f356cb41976d7ae8a5f005e8739e4d014352a8adef9b33f773d81b6e6c01","integrity":"sha256-OHHzVstBl2166KXwBehznk0BQ1Kore+bM/dz2BtubAE="},"tinymce/plugins/emoticons/img/smiley-tongue-out-5843c85667a8226dc43be83749fd9fbbc5d20b1577de2b763915d99815d37d47.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-tongue-out.gif","mtime":"2018-12-20T12:04:38+01:00","size":328,"digest":"5843c85667a8226dc43be83749fd9fbbc5d20b1577de2b763915d99815d37d47","integrity":"sha256-WEPIVmeoIm3EO+g3Sf2fu8XSCxV33it2ORXZmBXTfUc="},"tinymce/plugins/emoticons/img/smiley-undecided-d8b9bcbb433951ff3c4ca8dd959ac3844239b98e6d52218833e1485a91f67347.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-undecided.gif","mtime":"2018-12-20T12:04:38+01:00","size":337,"digest":"d8b9bcbb433951ff3c4ca8dd959ac3844239b98e6d52218833e1485a91f67347","integrity":"sha256-2Lm8u0M5Uf88TKjdlZrDhEI5uY5tUiGIM+FIWpH2c0c="},"tinymce/plugins/emoticons/img/smiley-wink-2af75ad7b1c08488505513503e34b15f40005e04a2a9568f698f0945d2d8ba1f.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-wink.gif","mtime":"2018-12-20T12:04:38+01:00","size":350,"digest":"2af75ad7b1c08488505513503e34b15f40005e04a2a9568f698f0945d2d8ba1f","integrity":"sha256-Kvda17HAhIhQVRNQPjSxX0AAXgSiqVaPaY8JRdLYuh8="},"tinymce/plugins/emoticons/img/smiley-yell-bba903fbcb46fce8c68b9e01863fd095b3b1d0e6aa72161f3a88d762a5f90a79.gif":{"logical_path":"tinymce/plugins/emoticons/img/smiley-yell.gif","mtime":"2018-12-20T12:04:38+01:00","size":336,"digest":"bba903fbcb46fce8c68b9e01863fd095b3b1d0e6aa72161f3a88d762a5f90a79","integrity":"sha256-u6kD+8tG/OjGi54Bhj/QlbOx0OaqchYfOojXYqX5Cnk="},"tinymce/plugins/emoticons/plugin-287cc5d2f0fba168841d0d0dab3c6f8f958fb0e80adada67cc1e64d88a69704e.js":{"logical_path":"tinymce/plugins/emoticons/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":1072,"digest":"287cc5d2f0fba168841d0d0dab3c6f8f958fb0e80adada67cc1e64d88a69704e","integrity":"sha256-KHzF0vD7oWiEHQ0Nqzxvj5WPsOgK2tpnzB5k2IppcE4="},"tinymce/plugins/fullpage/plugin-0bd712ddf83de5ad37a6822dc4c5832d82a5e2cd1da918d5b0e41bd09f65e1f6.js":{"logical_path":"tinymce/plugins/fullpage/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":7169,"digest":"0bd712ddf83de5ad37a6822dc4c5832d82a5e2cd1da918d5b0e41bd09f65e1f6","integrity":"sha256-C9cS3fg95a03poItxMWDLYKl4s0dqRjVsOQb0J9l4fY="},"tinymce/plugins/fullscreen/plugin-4c0cb2c23d32be9833cac1551c8eb30c26bf06196698ce463fe0bfb842395bac.js":{"logical_path":"tinymce/plugins/fullscreen/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":2162,"digest":"4c0cb2c23d32be9833cac1551c8eb30c26bf06196698ce463fe0bfb842395bac","integrity":"sha256-TAyywj0yvpgzysFVHI6zDCa/BhlmmM5GP+C/uEI5W6w="},"tinymce/plugins/help/img/logo-95b06f8538b11c4c30170075a09f93cf5871f74dd2541e95ad3d9da31976fcac.png":{"logical_path":"tinymce/plugins/help/img/logo.png","mtime":"2018-12-20T12:04:38+01:00","size":13208,"digest":"95b06f8538b11c4c30170075a09f93cf5871f74dd2541e95ad3d9da31976fcac","integrity":"sha256-lbBvhTixHEwwFwB1oJ+Tz1hx903SVB6VrT2doxl2/Kw="},"tinymce/plugins/help/plugin-09c06aa8a6b13eb5aef6dfc2f25abb4b86f8c27accb396cee254b116cc99b6c7.js":{"logical_path":"tinymce/plugins/help/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":8362,"digest":"09c06aa8a6b13eb5aef6dfc2f25abb4b86f8c27accb396cee254b116cc99b6c7","integrity":"sha256-CcBqqKaxPrWu9t/C8lq7S4b4wnrMs5bO4lSxFsyZtsc="},"tinymce/plugins/hr/plugin-7efaeee8fa1f71745d5726205bbb4fd8c0f4eba1edf2baf5a31a3b59bb677622.js":{"logical_path":"tinymce/plugins/hr/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":429,"digest":"7efaeee8fa1f71745d5726205bbb4fd8c0f4eba1edf2baf5a31a3b59bb677622","integrity":"sha256-fvru6PofcXRdVyYgW7tP2MD066Ht8rr1oxo7WbtndiI="},"tinymce/plugins/image/plugin-adbfb5e4fb680b636b840ec7976fbb35911014f7be60152c3a93cf004ad1b845.js":{"logical_path":"tinymce/plugins/image/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":15808,"digest":"adbfb5e4fb680b636b840ec7976fbb35911014f7be60152c3a93cf004ad1b845","integrity":"sha256-rb+15PtoC2NrhA7Hl2+7NZEQFPe+YBUsOpPPAErRuEU="},"tinymce/plugins/imagetools/plugin-f04d9af2531f05966d8f97098143cb522f99149e78ead5ed7a88dfb8c89e352b.js":{"logical_path":"tinymce/plugins/imagetools/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":43292,"digest":"f04d9af2531f05966d8f97098143cb522f99149e78ead5ed7a88dfb8c89e352b","integrity":"sha256-8E2a8lMfBZZtj5cJgUPLUi+ZFJ546tXteojfuMieNSs="},"tinymce/plugins/importcss/plugin-381b078db51fcc021a6220cf9f57609ed35ee67dd932669abafa5e5837460bbc.js":{"logical_path":"tinymce/plugins/importcss/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":3132,"digest":"381b078db51fcc021a6220cf9f57609ed35ee67dd932669abafa5e5837460bbc","integrity":"sha256-OBsHjbUfzAIaYiDPn1dgntNe5n3ZMmaauvpeWDdGC7w="},"tinymce/plugins/insertdatetime/plugin-246b2dd91f69e2b7d268c35c6aaca0569b0366bc18e85c15eca000564683b71d.js":{"logical_path":"tinymce/plugins/insertdatetime/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":2634,"digest":"246b2dd91f69e2b7d268c35c6aaca0569b0366bc18e85c15eca000564683b71d","integrity":"sha256-JGst2R9p4rfSaMNcaqygVpsDZrwY6FwV7KAAVkaDtx0="},"tinymce/plugins/legacyoutput/plugin-e8c2876525a55671c4ee55a2c298d3ba0eff6a8307c057893e42558eba637652.js":{"logical_path":"tinymce/plugins/legacyoutput/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":3403,"digest":"e8c2876525a55671c4ee55a2c298d3ba0eff6a8307c057893e42558eba637652","integrity":"sha256-6MKHZSWlVnHE7lWiwpjTug7/aoMHwFeJPkJVjrpjdlI="},"tinymce/plugins/link/plugin-ad93098fd1f1a794a1de15625ca2262a413559ad85e8af408bfab31742beb605.js":{"logical_path":"tinymce/plugins/link/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":8920,"digest":"ad93098fd1f1a794a1de15625ca2262a413559ad85e8af408bfab31742beb605","integrity":"sha256-rZMJj9Hxp5Sh3hViXKImKkE1Wa2F6K9Ai/qzF0K+tgU="},"tinymce/plugins/lists/plugin-36477224e13036ddab44ff5882a64eb343f533b056ca7be088a35cb1f29c0b02.js":{"logical_path":"tinymce/plugins/lists/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":27057,"digest":"36477224e13036ddab44ff5882a64eb343f533b056ca7be088a35cb1f29c0b02","integrity":"sha256-NkdyJOEwNt2rRP9YgqZOs0P1M7BWynvgiKNcsfKcCwI="},"tinymce/plugins/media/plugin-570acbace4fda902012c1c0596a586b521dc75cc89a4742f1bb2ecb15680b809.js":{"logical_path":"tinymce/plugins/media/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":15065,"digest":"570acbace4fda902012c1c0596a586b521dc75cc89a4742f1bb2ecb15680b809","integrity":"sha256-VwrLrOT9qQIBLBwFlqWGtSHcdcyJpHQvG7LssVaAuAk="},"tinymce/plugins/nonbreaking/plugin-6438a2f260ffa4724f0d13e99fe8fb1a85c00f16df416468ccd0bf6f722aaee6.js":{"logical_path":"tinymce/plugins/nonbreaking/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":1013,"digest":"6438a2f260ffa4724f0d13e99fe8fb1a85c00f16df416468ccd0bf6f722aaee6","integrity":"sha256-ZDii8mD/pHJPDRPpn+j7GoXADxbfQWRozNC/b3IqruY="},"tinymce/plugins/noneditable/plugin-f3be489845e7a724465d7a2bcf8f033b8b91eda2c29193b354e634da697d2f27.js":{"logical_path":"tinymce/plugins/noneditable/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":1541,"digest":"f3be489845e7a724465d7a2bcf8f033b8b91eda2c29193b354e634da697d2f27","integrity":"sha256-875ImEXnpyRGXXorz48DO4uR7aLCkZOzVOY02ml9Lyc="},"tinymce/plugins/pagebreak/plugin-f4c2fa4074a982fc576ea586ee09e99091bc52d14597223c533e0967188d3a2d.js":{"logical_path":"tinymce/plugins/pagebreak/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":1437,"digest":"f4c2fa4074a982fc576ea586ee09e99091bc52d14597223c533e0967188d3a2d","integrity":"sha256-9ML6QHSpgvxXbqWG7gnpkJG8UtFFlyI8Uz4JZxiNOi0="},"tinymce/plugins/paste/plugin-9b62122835e3f6bac7b42675a900910e6b1b7d0125be5fd29efcb04957379f74.js":{"logical_path":"tinymce/plugins/paste/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":24192,"digest":"9b62122835e3f6bac7b42675a900910e6b1b7d0125be5fd29efcb04957379f74","integrity":"sha256-m2ISKDXj9rrHtCZ1qQCRDmsbfQElvl/SnvywSVc3n3Q="},"tinymce/plugins/preview/plugin-bdf1d10d1e637f00598d3f482895e276933c1e16b1b543d2120fb70c4fbf3d18.js":{"logical_path":"tinymce/plugins/preview/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":2045,"digest":"bdf1d10d1e637f00598d3f482895e276933c1e16b1b543d2120fb70c4fbf3d18","integrity":"sha256-vfHRDR5jfwBZjT9IKJXidpM8HhaxtUPSEg+3DE+/PRg="},"tinymce/plugins/print/plugin-1ba88c314fa4c0c47ab0af0aa908c03d7906a77fef6a319a302ffff44099fe26.js":{"logical_path":"tinymce/plugins/print/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":367,"digest":"1ba88c314fa4c0c47ab0af0aa908c03d7906a77fef6a319a302ffff44099fe26","integrity":"sha256-G6iMMU+kwMR6sK8KqQjAPXkGp3/vajGaMC//9ECZ/iY="},"tinymce/plugins/save/plugin-a944096bba3f8519c898163008a334509d0f4efdbcd9500d752170fdbef570b3.js":{"logical_path":"tinymce/plugins/save/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":1427,"digest":"a944096bba3f8519c898163008a334509d0f4efdbcd9500d752170fdbef570b3","integrity":"sha256-qUQJa7o/hRnImBYwCKM0UJ0PTv282VANdSFw/b71cLM="},"tinymce/plugins/searchreplace/plugin-f92c077beef380fec6358458a27442d22eaca83a81fb3c4d71d9103e2f8b9c7a.js":{"logical_path":"tinymce/plugins/searchreplace/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":7353,"digest":"f92c077beef380fec6358458a27442d22eaca83a81fb3c4d71d9103e2f8b9c7a","integrity":"sha256-+SwHe+7zgP7GNYRYonRC0i6sqDqB+zxNcdkQPi+LnHo="},"tinymce/plugins/spellchecker/plugin-7a55c4356d10d11e4500f1b789f7d3640a37e0da27b26f31498ccff1797cb674.js":{"logical_path":"tinymce/plugins/spellchecker/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":10294,"digest":"7a55c4356d10d11e4500f1b789f7d3640a37e0da27b26f31498ccff1797cb674","integrity":"sha256-elXENW0Q0R5FAPG3iffTZAo34Nonsm8xSYzP8Xl8tnQ="},"tinymce/plugins/tabfocus/plugin-9b8833faf32cbd41142e3cf393e4d4e97a80706a8b402fd18ea82787ee46eb92.js":{"logical_path":"tinymce/plugins/tabfocus/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":1606,"digest":"9b8833faf32cbd41142e3cf393e4d4e97a80706a8b402fd18ea82787ee46eb92","integrity":"sha256-m4gz+vMsvUEULjzzk+TU6XqAcGqLQC/Rjqgnh+5G65I="},"tinymce/plugins/table/plugin-da0ade4b3769d9be7aef2cf42b8efa0e518ffdc3f4c97504b000441e79f748a0.js":{"logical_path":"tinymce/plugins/table/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":119804,"digest":"da0ade4b3769d9be7aef2cf42b8efa0e518ffdc3f4c97504b000441e79f748a0","integrity":"sha256-2greSzdp2b567yz0K476DlGP/cP0yXUEsABEHnn3SKA="},"tinymce/plugins/template/plugin-c8d1a75d3ed920d3a8c5a1de1a154fde85dad3540521734f7226f8ab7fa9a83f.js":{"logical_path":"tinymce/plugins/template/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":5192,"digest":"c8d1a75d3ed920d3a8c5a1de1a154fde85dad3540521734f7226f8ab7fa9a83f","integrity":"sha256-yNGnXT7ZINOoxaHeGhVP3oXa01QFIXNPcib4q3+pqD8="},"tinymce/plugins/textcolor/plugin-ebf778e6028f2d073e3ff9219c8d49ae5f066d4819cfe7fd72bcf6be84e0f014.js":{"logical_path":"tinymce/plugins/textcolor/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":4928,"digest":"ebf778e6028f2d073e3ff9219c8d49ae5f066d4819cfe7fd72bcf6be84e0f014","integrity":"sha256-6/d45gKPLQc+P/khnI1Jrl8GbUgZz+f9crz2voTg8BQ="},"tinymce/plugins/textpattern/plugin-68e355ae68bc6b99b4f6316ccb6e156f1dbc814b238e1fa18e46f694398319d4.js":{"logical_path":"tinymce/plugins/textpattern/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":7265,"digest":"68e355ae68bc6b99b4f6316ccb6e156f1dbc814b238e1fa18e46f694398319d4","integrity":"sha256-aONVrmi8a5m09jFsy24Vbx28gUsjjh+hjkb2lDmDGdQ="},"tinymce/plugins/toc/plugin-a73e6c327940360e18736b041e3345c9b678ecf553c9a1540f1c6f5275589b34.js":{"logical_path":"tinymce/plugins/toc/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":2942,"digest":"a73e6c327940360e18736b041e3345c9b678ecf553c9a1540f1c6f5275589b34","integrity":"sha256-pz5sMnlANg4Yc2sEHjNFybZ47PVTyaFUDxxvUnVYmzQ="},"tinymce/plugins/visualblocks/css/visualblocks-859e261c1d940c90994673ce593b60946710cc4f71371164db4ea695035ea593.css":{"logical_path":"tinymce/plugins/visualblocks/css/visualblocks.css","mtime":"2018-12-20T12:04:38+01:00","size":4995,"digest":"859e261c1d940c90994673ce593b60946710cc4f71371164db4ea695035ea593","integrity":"sha256-hZ4mHB2UDJCZRnPOWTtglGcQzE9xNxFk206mlQNepZM="},"tinymce/plugins/visualblocks/plugin-0b55625bb357cb6113a43de563efa3b6142f7502534ebc705315ef785d052c44.js":{"logical_path":"tinymce/plugins/visualblocks/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":1692,"digest":"0b55625bb357cb6113a43de563efa3b6142f7502534ebc705315ef785d052c44","integrity":"sha256-C1ViW7NXy2ETpD3lY++jthQvdQJTTrxwUxXveF0FLEQ="},"tinymce/plugins/visualchars/plugin-be0176f87f06dab154251d826bfb7019b5218bccd02b69c0334173d7547475c4.js":{"logical_path":"tinymce/plugins/visualchars/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":5089,"digest":"be0176f87f06dab154251d826bfb7019b5218bccd02b69c0334173d7547475c4","integrity":"sha256-vgF2+H8G2rFUJR2Ca/twGbUhi8zQK2nAM0Fz11R0dcQ="},"tinymce/plugins/wordcount/plugin-c1c8b0a36661e2d8ea847cefbaac2dfd95a16bea714c7dbd3d65f51e25311a65.js":{"logical_path":"tinymce/plugins/wordcount/plugin.js","mtime":"2018-12-20T12:04:38+01:00","size":11984,"digest":"c1c8b0a36661e2d8ea847cefbaac2dfd95a16bea714c7dbd3d65f51e25311a65","integrity":"sha256-wciwo2Zh4tjqhHzvuqwt/ZWha+pxTH29PWX1HiUxGmU="},"tinymce/skins/lightgray/content.inline.min-b62ea4e65ad6c87cbfedf3897b59eb30ec3972c410070d8ee2c0f5bececc4cce.css":{"logical_path":"tinymce/skins/lightgray/content.inline.min.css","mtime":"2018-12-20T12:04:38+01:00","size":3527,"digest":"b62ea4e65ad6c87cbfedf3897b59eb30ec3972c410070d8ee2c0f5bececc4cce","integrity":"sha256-ti6k5lrWyHy/7fOJe1nrMOw5csQQBw2O4sD1vs7MTM4="},"tinymce/skins/lightgray/content.min-d72493ca5cc1caca93db665b284fd12fe396a245c3e82cc2d6cf4fca83702cb9.css":{"logical_path":"tinymce/skins/lightgray/content.min.css","mtime":"2018-12-20T12:04:38+01:00","size":3933,"digest":"d72493ca5cc1caca93db665b284fd12fe396a245c3e82cc2d6cf4fca83702cb9","integrity":"sha256-1ySTylzBysqT22ZbKE/RL+OWokXD6CzC1s9PyoNwLLk="},"tinymce/skins/lightgray/content.mobile.min-230c31f65356c7cb1799244a34f7a722c92a6d614e06e59d48db0ebccd7f2346.css":{"logical_path":"tinymce/skins/lightgray/content.mobile.min.css","mtime":"2018-12-20T12:04:38+01:00","size":235,"digest":"230c31f65356c7cb1799244a34f7a722c92a6d614e06e59d48db0ebccd7f2346","integrity":"sha256-Iwwx9lNWx8sXmSRKNPenIskqbWFOBuWdSNsOvM1/I0Y="},"tinymce/skins/lightgray/fonts/tinymce-mobile-e64bf156a432d63f5b34b4567b513dc0d351b49161c7f608fb82574bfdd9d213.woff":{"logical_path":"tinymce/skins/lightgray/fonts/tinymce-mobile.woff","mtime":"2018-12-20T12:04:38+01:00","size":4624,"digest":"e64bf156a432d63f5b34b4567b513dc0d351b49161c7f608fb82574bfdd9d213","integrity":"sha256-5kvxVqQy1j9bNLRWe1E9wNNRtJFhx/YI+4JXS/3Z0hM="},"tinymce/skins/lightgray/fonts/tinymce-small-a10fc4343d95b716c16d77463d475be5c079599ea67e1cd2bd3a94d5e7f508f9.eot":{"logical_path":"tinymce/skins/lightgray/fonts/tinymce-small.eot","mtime":"2018-12-20T12:04:38+01:00","size":9492,"digest":"a10fc4343d95b716c16d77463d475be5c079599ea67e1cd2bd3a94d5e7f508f9","integrity":"sha256-oQ/END2VtxbBbXdGPUdb5cB5WZ6mfhzSvTqU1ef1CPk="},"tinymce/skins/lightgray/fonts/tinymce-small-e7773001446ab937e1d8d4bd5e8dbd9b31d112037353a14b319e36dd010ed8ee.svg":{"logical_path":"tinymce/skins/lightgray/fonts/tinymce-small.svg","mtime":"2018-12-20T12:04:38+01:00","size":24727,"digest":"e7773001446ab937e1d8d4bd5e8dbd9b31d112037353a14b319e36dd010ed8ee","integrity":"sha256-53cwAURquTfh2NS9Xo29mzHREgNzU6FLMZ423QEO2O4="},"tinymce/skins/lightgray/fonts/tinymce-small-2f657502906d6f5c3fc8df3a82969114ebe030addfdc061c60c974b0f515fd09.ttf":{"logical_path":"tinymce/skins/lightgray/fonts/tinymce-small.ttf","mtime":"2018-12-20T12:04:38+01:00","size":9304,"digest":"2f657502906d6f5c3fc8df3a82969114ebe030addfdc061c60c974b0f515fd09","integrity":"sha256-L2V1ApBtb1w/yN86gpaRFOvgMK3f3AYcYMl0sPUV/Qk="},"tinymce/skins/lightgray/fonts/tinymce-small-d3efbb678ca6de5632902bd93772746ba2f8e4e2322b953936e12694a183aa31.woff":{"logical_path":"tinymce/skins/lightgray/fonts/tinymce-small.woff","mtime":"2018-12-20T12:04:38+01:00","size":9380,"digest":"d3efbb678ca6de5632902bd93772746ba2f8e4e2322b953936e12694a183aa31","integrity":"sha256-0++7Z4ym3lYykCvZN3J0a6L45OIyK5U5NuEmlKGDqjE="},"tinymce/skins/lightgray/fonts/tinymce-d7d36b21dc4b2dd2e4252b2b71f7b57d2d828359f2936af6e3fe8e2f913a0498.eot":{"logical_path":"tinymce/skins/lightgray/fonts/tinymce.eot","mtime":"2018-12-20T12:04:38+01:00","size":18912,"digest":"d7d36b21dc4b2dd2e4252b2b71f7b57d2d828359f2936af6e3fe8e2f913a0498","integrity":"sha256-19NrIdxLLdLkJSsrcfe1fS2Cg1nyk2r24/6OL5E6BJg="},"tinymce/skins/lightgray/fonts/tinymce-e17f0683d5785645d10307971450b94e62b86f062e92fcea6a055c2443bdef5f.svg":{"logical_path":"tinymce/skins/lightgray/fonts/tinymce.svg","mtime":"2018-12-20T12:04:38+01:00","size":46373,"digest":"e17f0683d5785645d10307971450b94e62b86f062e92fcea6a055c2443bdef5f","integrity":"sha256-4X8Gg9V4VkXRAweXFFC5TmK4bwYukvzqagVcJEO9718="},"tinymce/skins/lightgray/fonts/tinymce-8c8effbf1b373e7bd3f8f291264eaefeed933fea8fe91637d81f3fc9574c3592.ttf":{"logical_path":"tinymce/skins/lightgray/fonts/tinymce.ttf","mtime":"2018-12-20T12:04:38+01:00","size":18748,"digest":"8c8effbf1b373e7bd3f8f291264eaefeed933fea8fe91637d81f3fc9574c3592","integrity":"sha256-jI7/vxs3PnvT+PKRJk6u/u2TP+qP6RY32B8/yVdMNZI="},"tinymce/skins/lightgray/fonts/tinymce-84d35201689d08969a92a8ccdc5a0002da01eac30651fef23e79e1993ace2ebf.woff":{"logical_path":"tinymce/skins/lightgray/fonts/tinymce.woff","mtime":"2018-12-20T12:04:38+01:00","size":18824,"digest":"84d35201689d08969a92a8ccdc5a0002da01eac30651fef23e79e1993ace2ebf","integrity":"sha256-hNNSAWidCJaakqjM3FoAAtoB6sMGUf7yPnnhmTrOLr8="},"tinymce/skins/lightgray/img/anchor-2861666fd107d278d4449970615136d06d7f746be9bb19072cf9c8f30e565e1e.gif":{"logical_path":"tinymce/skins/lightgray/img/anchor.gif","mtime":"2018-12-20T12:04:38+01:00","size":53,"digest":"2861666fd107d278d4449970615136d06d7f746be9bb19072cf9c8f30e565e1e","integrity":"sha256-KGFmb9EH0njURJlwYVE20G1/dGvpuxkHLPnI8w5WXh4="},"tinymce/skins/lightgray/img/loader-eb7cfd3d959b2e09c170f532e29f8b825f9bc770b2279fde58e595617753e244.gif":{"logical_path":"tinymce/skins/lightgray/img/loader.gif","mtime":"2018-12-20T12:04:38+01:00","size":2608,"digest":"eb7cfd3d959b2e09c170f532e29f8b825f9bc770b2279fde58e595617753e244","integrity":"sha256-63z9PZWbLgnBcPUy4p+Lgl+bx3CyJ5/eWOWVYXdT4kQ="},"tinymce/skins/lightgray/img/object-e6a15e52bc4a17b085073ba8debd4708ead6ae3d4cbeb3880c65cb7afc489777.gif":{"logical_path":"tinymce/skins/lightgray/img/object.gif","mtime":"2018-12-20T12:04:38+01:00","size":152,"digest":"e6a15e52bc4a17b085073ba8debd4708ead6ae3d4cbeb3880c65cb7afc489777","integrity":"sha256-5qFeUrxKF7CFBzuo3r1HCOrWrj1MvrOIDGXLevxIl3c="},"tinymce/skins/lightgray/img/trans-9cf020d7c3bba7f5ab10cda54aabef934f906d4f9a3acf99e9e7dc6c98579635.gif":{"logical_path":"tinymce/skins/lightgray/img/trans.gif","mtime":"2018-12-20T12:04:38+01:00","size":43,"digest":"9cf020d7c3bba7f5ab10cda54aabef934f906d4f9a3acf99e9e7dc6c98579635","integrity":"sha256-nPAg18O7p/WrEM2lSqvvk0+QbU+aOs+Z6efcbJhXljU="},"tinymce/skins/lightgray/skin.min-498d5ce41bbc84b0b86873b5c37a804d011b3e052c8ee92a3fe620cff7a0ef28.css":{"logical_path":"tinymce/skins/lightgray/skin.min.css","mtime":"2018-12-20T12:04:38+01:00","size":43955,"digest":"498d5ce41bbc84b0b86873b5c37a804d011b3e052c8ee92a3fe620cff7a0ef28","integrity":"sha256-SY1c5Bu8hLC4aHO1w3qATQEbPgUsjukqP+Ygz/eg7yg="},"tinymce/skins/lightgray/skin.mobile.min-9c8e5d31db4d29209970e56b8a492922c3e2dd2e0265912a9c1acf58e5a8bd41.css":{"logical_path":"tinymce/skins/lightgray/skin.mobile.min.css","mtime":"2018-12-20T12:04:38+01:00","size":27854,"digest":"9c8e5d31db4d29209970e56b8a492922c3e2dd2e0265912a9c1acf58e5a8bd41","integrity":"sha256-nI5dMdtNKSCZcOVrikkpIsPi3S4CZZEqnBrPWOWovUE="},"tinymce/themes/inlite/theme-e54b5b473507ed972a017eef84a50331b6a3bb4a785f2986e6d1b49015967ae7.js":{"logical_path":"tinymce/themes/inlite/theme.js","mtime":"2018-12-20T12:04:38+01:00","size":131995,"digest":"e54b5b473507ed972a017eef84a50331b6a3bb4a785f2986e6d1b49015967ae7","integrity":"sha256-5UtbRzUH7ZcqAX7vhKUDMbaju0p4XymG5tG0kBWWeuc="},"tinymce/themes/mobile/theme-95bcdf6b66dcd44073798fd6c04d0696ee3620cb694d052652dbefa051fecf80.js":{"logical_path":"tinymce/themes/mobile/theme.js","mtime":"2018-12-20T12:04:38+01:00","size":160124,"digest":"95bcdf6b66dcd44073798fd6c04d0696ee3620cb694d052652dbefa051fecf80","integrity":"sha256-lbzfa2bc1EBzeY/WwE0Glu42IMtpTQUmUtvvoFH+z4A="},"tinymce/themes/modern/theme-17b1c26a5228e485e18dfcdf763d08b4546836a017ae7b0225ea47706171f10b.js":{"logical_path":"tinymce/themes/modern/theme.js","mtime":"2018-12-20T12:04:38+01:00","size":130776,"digest":"17b1c26a5228e485e18dfcdf763d08b4546836a017ae7b0225ea47706171f10b","integrity":"sha256-F7HCalIo5IXhjfzfdj0ItFRoNqAXrnsCJepHcGFx8Qs="}},"assets":{"active_admin.css":"active_admin-24bbef14af36d0015ef6fba11fadd481a1a630a191a27f360e2c40cf93182b37.css","active_admin/nested_menu_arrow.gif":"active_admin/nested_menu_arrow-15084d93c65c1964d7077700ea748bd2d70cfa2d4c19707c58a9c64e232dd442.gif","active_admin/nested_menu_arrow_dark.gif":"active_admin/nested_menu_arrow_dark-7c43b8e0a5f8823875f49a093c9d7a6b374f885b6f9cc248ae9cd7e6e9b29034.gif","active_admin/orderable.png":"active_admin/orderable-29374dbb55b0012d78a37c614d573bb3474f0779849b478a147d0f1845ca6617.png","active_admin/print.css":"active_admin/print-cf99cbf27fb92065a9eacd28e6fad48fa72cadaf6e0918790e8d35b11d8f99f6.css","active_admin.js":"active_admin-b259ca6ce02dc92d306a1a3c5a085c78dded2dcf996d65ce2a20738dbf436520.js","tinymce.js":"tinymce-bd0d26944904afe3a35324b3f6a3b20da54175500d71f0a224873f64240bdee5.js","modernizr.js":"modernizr-654222debe8018b12f1993ceddff30dc163a7d5008d79869c399d6d167321f97.js","font-awesome/fa-brands-400.eot":"font-awesome/fa-brands-400-c563adbadc5eafb6708b610268fbd393d59ae41e220aae5aac99ca2d45a6e151.eot","font-awesome/fa-regular-400.eot":"font-awesome/fa-regular-400-6e70525bb429041c5ec84a81cf4733303cee90966809ed255741fa50e123ae47.eot","font-awesome/fa-solid-900.eot":"font-awesome/fa-solid-900-c141af323058f12f8b0bc760162f9928f6a415fa04940b486fdb4086284e6ecf.eot","font-awesome/fa-brands-400.svg":"font-awesome/fa-brands-400-f6ae6226846422df4abf64b65814d3ccd3570af5e0350983fdb01fbc0dd055d6.svg","font-awesome/fa-regular-400.svg":"font-awesome/fa-regular-400-a849aa4ab8a20512c2e073ed66cf146c5615220c74da85c10909eb2c33d3317a.svg","font-awesome/fa-solid-900.svg":"font-awesome/fa-solid-900-7ad9caabf64ee35d113612f7bb10e531fb17ab431a51e0b088e93f89e1915549.svg","font-awesome/fa-brands-400.ttf":"font-awesome/fa-brands-400-3b3fbc59f287f33a3870175b19eb94d7cbb546af2fdbab29df91ba834352d3ea.ttf","font-awesome/fa-regular-400.ttf":"font-awesome/fa-regular-400-418571014c9250c6197fc3ac4e8e5d96d7a49711a5d6308ca0d36b6f3045c611.ttf","font-awesome/fa-solid-900.ttf":"font-awesome/fa-solid-900-cef5dd667be89aa0b9d1bd0a2ceb7c017c7b183f81d0213f8f99bd380f042577.ttf","font-awesome/fa-brands-400.woff":"font-awesome/fa-brands-400-ca734c792a24c20ff91ec878fd146b3354d4859f728f481c1089a3e2ffa2d30f.woff","font-awesome/fa-regular-400.woff":"font-awesome/fa-regular-400-9064839b35308c034ecf20f0335ea37331328d962baff8e589e69d01f5a56ffe.woff","font-awesome/fa-solid-900.woff":"font-awesome/fa-solid-900-1675e164e5ec88e30fb8c912cf9343c06c18fe419663b40de0a3bf92371b1d07.woff","font-awesome/fa-brands-400.woff2":"font-awesome/fa-brands-400-c885e9f2017a2ed7075db9e876d40a04aa3208114443803bdb120a34afd3b1d6.woff2","font-awesome/fa-regular-400.woff2":"font-awesome/fa-regular-400-e5c1d9e7bdeaf3372dee724d175d25aca879ed52ae9afd018f503e9d74e09b50.woff2","font-awesome/fa-solid-900.woff2":"font-awesome/fa-solid-900-08aa3a5ee68a21d5771a70b20495b6da1c0f996c46982cd1b0447ad2db730d11.woff2","agendadescommuns.png":"agendadescommuns-0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33.png","alert.png":"alert-762ace9479328243a44061346b64c4d6b997e963c68dfc6bddd9e4d241192906.png","baby_gnu_adl.png":"baby_gnu_adl-463a81820aa2d4ffd8e7210dbce1a19ffcac67ef362aa7b092280c6f95c903fc.png","baby_gnu_adl.svg":"baby_gnu_adl-97251005d3225cf1d58b8c497d6b7905dbc9560cc8acd50118fcce60d0a2679e.svg","communs.png":"communs-0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33.png","lef-small.png":"lef-small-93285d531af463f877951d63fe844a6e9600b782c2c81f78723b730072fa942e.png","lef.png":"lef-15f93c1dccd4849a5e30613a3303013292a76cc4997877e626f123fe9afc2f75.png","priorite-logiciel-libre-je-soutiens-april_2_m.png":"priorite-logiciel-libre-je-soutiens-april_2_m-6442e454e96ed45cc1ebc40673a6c50bd286b9c28ea6a8b58572e94f7d6459fc.png","regions/CA-QC.png":"regions/CA-QC-70699e6a6e25c69040a3f1548b0afd829c4903ccca2760b6c10f49cc87d5d174.png","team.png":"team-65c86021cf8a1154493664094aeafcbe3e5aa13dc675bb8ef34b220481db98fa.png","application.js":"application-f586e2a35afa70504e05ea3a2dc1a9a508dadcb36c9365a3785696e4197a9348.js","application.css":"application-5758a3be3fc4c726f3fa040065dd207d269a61ffaeef8e18cf7bae20669ce52d.css","flags/4x3/ad.svg":"flags/4x3/ad-f67c4e5a3f709ead53c04d9ff35614e6c67517c3d3289170f7a317390f661497.svg","flags/1x1/ad.svg":"flags/1x1/ad-a315836ec2c9dcc11ef9bfd8b18aa7ccfc2d31435cbf46a2c31930836076e09c.svg","flags/4x3/ae.svg":"flags/4x3/ae-7a3b3dc0f50b5310014cfbcc8200a5f1ce568127bf43452e40e8158e0cff2d2e.svg","flags/1x1/ae.svg":"flags/1x1/ae-bcdd9a4da09598785f3e31db4ff431e22687b2ead18209a3e615600655068cd5.svg","flags/4x3/af.svg":"flags/4x3/af-01601b521fa86582e32c39eed8c88480afec1f801b6de929b52ed7e49da47260.svg","flags/1x1/af.svg":"flags/1x1/af-6332cf754a5e2866db631923e1f7cfc52a0a554d32b97bcf19f8263819e4ca7d.svg","flags/4x3/ag.svg":"flags/4x3/ag-cb6952d821bac7855231c2cb4d1c44f7c730f6b3621518ab20f30d2b9afe604b.svg","flags/1x1/ag.svg":"flags/1x1/ag-14f7d9978487aaf4446b55167e85a711c48a13ff07edac175c172969a38650c4.svg","flags/4x3/ai.svg":"flags/4x3/ai-f07c6cc0646fdfa441b9a506e1d46e8dce0d97b37222292e9c6733c995dc89bc.svg","flags/1x1/ai.svg":"flags/1x1/ai-95099e544de29bcea3ba735de535823f2e19aeb4043e82dbc1d9862f9262b810.svg","flags/4x3/al.svg":"flags/4x3/al-9b997f2720de861e1b0ccec8ddf42a2890795ebf50817f9223e1ceba712c9b03.svg","flags/1x1/al.svg":"flags/1x1/al-94852d2711fc23abf3423534b9edb950a0c6aabf1d2d98bf2643f3c7dadfac09.svg","flags/4x3/am.svg":"flags/4x3/am-85a199ec21d1af74a256335ead0c1e38592bb603d8da81feda4678945e9e00e6.svg","flags/1x1/am.svg":"flags/1x1/am-869391b014ac299924d30777d72a4aba430752177290a90a1fc3255a7ad79ee7.svg","flags/4x3/ao.svg":"flags/4x3/ao-29224a61bf632826d530cda55d87c2615884bd2c2c3a322036ed468e34d85c75.svg","flags/1x1/ao.svg":"flags/1x1/ao-048eacbc862fe1868cf0ec73457b70a8b49a598c80dea049856f0e1fd6fec83e.svg","flags/4x3/aq.svg":"flags/4x3/aq-b401a776d2f1a7944170114f0aeeceab5e1d962df3de7ed1eff47d96824b73fd.svg","flags/1x1/aq.svg":"flags/1x1/aq-a8d7ce9bfb860b6e2b58608b50bf2cafc5220c77f6d049ab7770891f64334531.svg","flags/4x3/ar.svg":"flags/4x3/ar-bf73475bb707100874dec538ce4b7e1b5afc4ed67dc50a8a800ee519e51cc826.svg","flags/1x1/ar.svg":"flags/1x1/ar-fc6582cc6d3ef0782805d8497ee77ab2d836c53422e91007e48f81a4a9fa2e60.svg","flags/4x3/as.svg":"flags/4x3/as-79d395190345206ea03475b67b44638e1111562411504b60646483c9c0b0f7d1.svg","flags/1x1/as.svg":"flags/1x1/as-04f0db77c5d8610a55c69508b226a7c338924f8cf7d6577d5d6590e85ee57183.svg","flags/4x3/at.svg":"flags/4x3/at-3d197de8f1f0096a2b0d440b6fc7d80821585a6637e646c05487a87718bf6b5f.svg","flags/1x1/at.svg":"flags/1x1/at-ec4db9aeac793827ac7c8e40c072a76f7675010058cc8c8dfd3a86bb5acfa6b8.svg","flags/4x3/au.svg":"flags/4x3/au-126fa2500a315287a5f847f4d958bb929f11da9b39f35912cc440c0fcffb8b12.svg","flags/1x1/au.svg":"flags/1x1/au-bf990dcc957c9f74eb908e8ffa733f1731277bf6ec8b7301a6ea1ed92b59cc4b.svg","flags/4x3/aw.svg":"flags/4x3/aw-4524643452423e95f3b0dbe6216b059a9e52126b34c73ae4b3c17b682f893aa6.svg","flags/1x1/aw.svg":"flags/1x1/aw-f7002bceef55486a442bf6bf433be0c60d0b15b2aa548b81c524c67ccf0565a8.svg","flags/4x3/ax.svg":"flags/4x3/ax-c297e0eb654ca62e58f5eb3abb70df9f245e4919490f29bd0f1d49c4fe052d90.svg","flags/1x1/ax.svg":"flags/1x1/ax-a1245689ecbf321c0a9e556bba17f3c9f2aeb8b1f63d14fcb591d76a87f12880.svg","flags/4x3/az.svg":"flags/4x3/az-132e68d5e0386d3b9fa05b4288a0fd66f1414e2bc7af6b9d437b6935a7dfa00c.svg","flags/1x1/az.svg":"flags/1x1/az-3990c0526b933bd650285d821f2b93e432a73ba709869549b8ef75b051d3bd2d.svg","flags/4x3/ba.svg":"flags/4x3/ba-89dd0c1600d94741de7d667a487310193a0c48c4cf1a5159c3bf9dd37d65d2b5.svg","flags/1x1/ba.svg":"flags/1x1/ba-2dbe90eb12b937f4a9ae8db95760930a3e318f4ce5829ac05e292ead698bae5a.svg","flags/4x3/bb.svg":"flags/4x3/bb-16f8249ff958bfbc18fb1f23a5282000347bffdb5769ac620966185b1dcb57f6.svg","flags/1x1/bb.svg":"flags/1x1/bb-fae92d8426196ae24ffa561aca72613fae651a5e9c0bcda63ecc877add05b060.svg","flags/4x3/bd.svg":"flags/4x3/bd-8dac0547e73ee25a04148a3f0fd026a90e56c23b7e92921565d4263050ba77a6.svg","flags/1x1/bd.svg":"flags/1x1/bd-ecc3c3e87d4cc59c8350f2b4d7dca8f5cf46bdb26319db0ee80b744482af50c1.svg","flags/4x3/be.svg":"flags/4x3/be-a180ca68521188017bb5367f19e503d9599d6cbecd61bf054e59a57f58e648ae.svg","flags/1x1/be.svg":"flags/1x1/be-c8d4194137bd01955285b329dfdf996490d16c3116a92ce2f322e354b6d7494e.svg","flags/4x3/bf.svg":"flags/4x3/bf-6b214936ef89f19133d4a84e99cdf0cfdb99d6409f2f373f6d18694423013313.svg","flags/1x1/bf.svg":"flags/1x1/bf-04c7d61aa314adab5a41bd79d77aa780c10136bb6b8f4c62423e61e23e3851ee.svg","flags/4x3/bg.svg":"flags/4x3/bg-dd3985ba746942b0e65bc52a280cc4d28fb24fd2c7d9e22ac9afd2d75ee7bfc4.svg","flags/1x1/bg.svg":"flags/1x1/bg-f59294a736d5bdc0f102b58d70dbe45d02bd92df822820bf95336840f75a0746.svg","flags/4x3/bh.svg":"flags/4x3/bh-7c82c4a6ba963172c6c1b4423f39a0ebe9c999449cc7dd87018917943db4735c.svg","flags/1x1/bh.svg":"flags/1x1/bh-6893aac3e55c6480e9dac0c023ec2179f6c12a0da82a0bc2717134384c097e88.svg","flags/4x3/bi.svg":"flags/4x3/bi-4fcd0116f7f93c0564c6955806f3c3563d0ea7334ae406f29a897255845c923c.svg","flags/1x1/bi.svg":"flags/1x1/bi-91c34eb431b26be67852782a0b93e1d7d577a925454d6c8cea00a0d872d2de8a.svg","flags/4x3/bj.svg":"flags/4x3/bj-63bddb4268f5f8c2ed867041bcf058fb18fcd9d1e0799e01286fca2d5e961c7f.svg","flags/1x1/bj.svg":"flags/1x1/bj-e2606c5a8498c474a6b6708626b88108fcb73840344766566dc56f804279cdfc.svg","flags/4x3/bl.svg":"flags/4x3/bl-824a7265f48789d5e1ad5c5b0042a13a7d2d4357210e5bd8124fca19931e8c74.svg","flags/1x1/bl.svg":"flags/1x1/bl-ba6a7881b0ca72ac57aee4d823ae611ab4ad24a938ee9e01a7a4d5ae04cfccf6.svg","flags/4x3/bm.svg":"flags/4x3/bm-2e2f09e5a4edf4b18afff581656f50b0b4c37783db29591ff00ca768f7f755bc.svg","flags/1x1/bm.svg":"flags/1x1/bm-f553f953f8784ea4d67a5197f5d808a67747eb8a1cb56990d6838e690090d2d6.svg","flags/4x3/bn.svg":"flags/4x3/bn-bcf9967c12eb6397346cb5b960ae92efa41f314f780d09a3d7c81f5dacac4180.svg","flags/1x1/bn.svg":"flags/1x1/bn-1d1aad3fe9fd33ce922eba33c9ae6047a5646349239c20d1bc7307ec6d19a043.svg","flags/4x3/bo.svg":"flags/4x3/bo-fa423f2bb4ab6e8e9dd399ad73781ea8d9cbafd30f1b7ee0bcecfb9e7b75581e.svg","flags/1x1/bo.svg":"flags/1x1/bo-f5faa29e40191e0c76070ac1a1d2a1f2b18e9cd358b8a77cefaed8efc49a265e.svg","flags/4x3/bq.svg":"flags/4x3/bq-493c92ab19204c3ad319e6caba021df050132b99bd57a8f9b74131b78229c29e.svg","flags/1x1/bq.svg":"flags/1x1/bq-6e30bbeabc2aa097f657a411984b3c23278a8fcce2fc016b1cd6d2262f672d33.svg","flags/4x3/br.svg":"flags/4x3/br-cf3ba80ec2c9fd4d3c845c3a3c43a2b9d81cf90707a2918789e8b1f596833e01.svg","flags/1x1/br.svg":"flags/1x1/br-7bf4e4b31650ac25f0bc6c86eb87491a7e5a8eac13acccfcbde44346c88728f6.svg","flags/4x3/bs.svg":"flags/4x3/bs-69f60b5fea96b67dd939e597099994921bb3dc3bcf31b8dee7cc45be2885c836.svg","flags/1x1/bs.svg":"flags/1x1/bs-f5d6acf7ef7a240dc09ac88710fd77fd3494501104392db74d5c540d482f2262.svg","flags/4x3/bt.svg":"flags/4x3/bt-6c20b0c00e12d5898be0239a0c66ce775debd0bd536de56a271859a0285a039e.svg","flags/1x1/bt.svg":"flags/1x1/bt-58de3ca9438811ef1920e2f84c4ba4ce32d01069f4d197ab5d577de6acbe0c85.svg","flags/4x3/bv.svg":"flags/4x3/bv-ff173190fc339b3cb8b6e8235bc5e373853d7127fd94cbc32ac737e839aeb586.svg","flags/1x1/bv.svg":"flags/1x1/bv-59616ff1a722959064c83927ca2e49c1fce42a9b18e91b9ecbb74f62527aff43.svg","flags/4x3/bw.svg":"flags/4x3/bw-4bb1d3131b88c65b5decc67f7b44903e931bca2fcac841942591c599f0cbb850.svg","flags/1x1/bw.svg":"flags/1x1/bw-e08f50c0836ca5858aed7b0526aed6fb630da8dc6b6b96bd9a476af599dc89d6.svg","flags/4x3/by.svg":"flags/4x3/by-324ac96bfbe075781c664be3b9e2ac6b4d2a46dd2b418ca0920284f64394c7d4.svg","flags/1x1/by.svg":"flags/1x1/by-37b80e8bf7e51fef99a8307d6dffb04ee164790ceeafef606d516ca333e9488a.svg","flags/4x3/bz.svg":"flags/4x3/bz-156fdc45f8c15c9520a1ea9fc0f395f294f02077408ea1938c222a37cfbb7f1d.svg","flags/1x1/bz.svg":"flags/1x1/bz-24577d4e7b29b33ab3b1d37914c8479889baa7e8c8399c6d1c99faed31ab053a.svg","flags/4x3/ca.svg":"flags/4x3/ca-0d57cab46d5dbb0012a5e4ae0a9efee3baee90d5d157950a6c5d67edf2daa58f.svg","flags/1x1/ca.svg":"flags/1x1/ca-192a6fb0544e5a6f33a32149d62f1e7ac0a1d61c5c5afa57f3a42346ca8e8c90.svg","flags/4x3/cc.svg":"flags/4x3/cc-a35f2a9e10a28d6918ced65e0623b03bb2fbf1f20670b581bc0a409d33b4e843.svg","flags/1x1/cc.svg":"flags/1x1/cc-d2025eefc9d30f724f3fcd95c0fd9f7938930ecb01af7e0cd6ee6553d7358eb6.svg","flags/4x3/cd.svg":"flags/4x3/cd-5d2127c991b30522ae0a29d05facbc88728c050d7e333a60d614af1545459c5c.svg","flags/1x1/cd.svg":"flags/1x1/cd-59dacf424d1c8c779db66c5b7f2a93a3c8f14976c2975ccfb07639676a1602e3.svg","flags/4x3/cf.svg":"flags/4x3/cf-ac0aaffba354d848eba2501a402ee81dc96a56ad0acd3741ec9905e76c372e1e.svg","flags/1x1/cf.svg":"flags/1x1/cf-e637674faf7edcdad37182192d038448c157421ab0c69377d9b8e56ab2c0249d.svg","flags/4x3/cg.svg":"flags/4x3/cg-3729f717c83c9df7d0543a1a5d4a506efe184bdfeb39f9260b4b63edf19d2538.svg","flags/1x1/cg.svg":"flags/1x1/cg-8353ff1f251714b1b8905eec1722378426719955d0637d206d35d1dcfa68ddcf.svg","flags/4x3/ch.svg":"flags/4x3/ch-6739edee6d1ef72c4ed97cfe723d3bb7f17e4df5390f3a4ae234f1ffdeece0cf.svg","flags/1x1/ch.svg":"flags/1x1/ch-7c3dec465228981c57a90a3a7b3a6c42dd3e699230663e770b55008ce6d14208.svg","flags/4x3/ci.svg":"flags/4x3/ci-3e076d13c9524149508c442f8f727424660124e3591280d8ae9bddf9d8272a1e.svg","flags/1x1/ci.svg":"flags/1x1/ci-691a0a8577b7d555fc90dc7170adc9ec7571191cb3507c46c0e8516fd1778a91.svg","flags/4x3/ck.svg":"flags/4x3/ck-9cff098e505afde9bf5166cb7b0c409178575633b913ce08c1c700d08c477db6.svg","flags/1x1/ck.svg":"flags/1x1/ck-9c8dffa3bd5953d8a121780831f25b58738e67f3be71961894c56dfd25848c88.svg","flags/4x3/cl.svg":"flags/4x3/cl-a4c57ec2bb9adcb67e1850256e5165227b764187d6941a38d95d0def5144699b.svg","flags/1x1/cl.svg":"flags/1x1/cl-5a3e95cf63358e3911c97404818c2cddfd46414d8445e47d6976ee166c48926c.svg","flags/4x3/cm.svg":"flags/4x3/cm-5dce9f36d92a61bdc0c482141bdb4f55bfcec0a2ecc745db643a7953e2e5a722.svg","flags/1x1/cm.svg":"flags/1x1/cm-d8d21f54c44df5df9edef227691384a4ad37c15ff57c8aa0dead684d19eac8cd.svg","flags/4x3/cn.svg":"flags/4x3/cn-48ce1c2837bb806a6aaf8b7a9878b6d040c0d069a0ffca9a8a49e7a31aa30e7f.svg","flags/1x1/cn.svg":"flags/1x1/cn-e6be64c6c4a976e64d39bfe8a6ae4a5b1d38a6aa1b138ddcacf34a942dff50bc.svg","flags/4x3/co.svg":"flags/4x3/co-648d3ff596a0ecf3e85ac17c53abe1d7ca4759688e10a7a3a8b56f096ba6b6f7.svg","flags/1x1/co.svg":"flags/1x1/co-d3c16180c6bce630f762aff789104d10e9dbc949e740535a61396cd0ec34c1a1.svg","flags/4x3/cr.svg":"flags/4x3/cr-84aec60f19bd33e1ac1a209155fec8d372e17cb59dc1346bb9124e5cc867375d.svg","flags/1x1/cr.svg":"flags/1x1/cr-5371cf8bc5ad1a805155c1b3065e420a0a418c8d63b472bc545890289a365b35.svg","flags/4x3/cu.svg":"flags/4x3/cu-bb3f857e02aeab606120d9f164283f07a44b227f12aad7d6d344c7579f7b3ff0.svg","flags/1x1/cu.svg":"flags/1x1/cu-02c0054169b874a8d231de1f45b2d0884de48848157734e0ddcd0f684c05c18d.svg","flags/4x3/cv.svg":"flags/4x3/cv-90ee90ab59713454a218d8c300c71139e62655de80bfbea81df93142a529b81f.svg","flags/1x1/cv.svg":"flags/1x1/cv-2cf3eede97a468d28459ccc2271c28bb5b6029af2388b0301f6203be55e49308.svg","flags/4x3/cw.svg":"flags/4x3/cw-d46beb7b10b40fa82cfd40eb86a3b3879f59f5da2a2f5ef91d121ab9b16c0aad.svg","flags/1x1/cw.svg":"flags/1x1/cw-ba78c834e61b24a8a2b6bc7c80ab9f14e42c3c69415941ddb7c8c1f652ccd8b5.svg","flags/4x3/cx.svg":"flags/4x3/cx-28187fb9d91bedc6f239b107d26eb6ec1cc2a0c7730810306c5a6b313c14f2b2.svg","flags/1x1/cx.svg":"flags/1x1/cx-8ebe073d997f93d092a493300ea1d234c91aef80c6e8f431e88aa7f8e724f9a6.svg","flags/4x3/cy.svg":"flags/4x3/cy-8d633ecabc7968bb8a869c62545f122aacbbc3e108c25ceb421bb8bc8734b9be.svg","flags/1x1/cy.svg":"flags/1x1/cy-6ef37fdd7518f18727bec1ed9741bb4d1f854dde7ef1a7e9fd2f4ba6291a7790.svg","flags/4x3/cz.svg":"flags/4x3/cz-6c94e3d53fc1ae5982d8eb058b76d86f07d3fb4cd325698fea3291fa35504c56.svg","flags/1x1/cz.svg":"flags/1x1/cz-af9898ebd32559cdbea2fd17b351e5eedafccada6fbc6a2b7952cad78369817e.svg","flags/4x3/de.svg":"flags/4x3/de-e7323083675d25107c85f0cea6534bd21d21e77e6d524d92e1b2d0a4e21117a1.svg","flags/1x1/de.svg":"flags/1x1/de-fdb60146952d3b2d104310b28882a0ecde44d808240c3bab2cd6c302a538b266.svg","flags/4x3/dj.svg":"flags/4x3/dj-546da4a0dae9b1ab74dc6ac6076d0c706f37ef2a0d799342dd0345e11f770f03.svg","flags/1x1/dj.svg":"flags/1x1/dj-c0481b667f003d9d5a3c93861023a97a98224227ac19aa7e07b5b6edd35fe900.svg","flags/4x3/dk.svg":"flags/4x3/dk-a13735c0337ab4679cd8679508bf5e8067637ab611ca5c54172c621d740420e5.svg","flags/1x1/dk.svg":"flags/1x1/dk-822a3b8b6948f49aa81fe7620bd173453d9a45406a9680f24bad7e714e58cb7c.svg","flags/4x3/dm.svg":"flags/4x3/dm-7713fabd3cf341694b4c1ef5d1379820773722b61c190234ac7416f2872e3940.svg","flags/1x1/dm.svg":"flags/1x1/dm-33d984fc9897bb2a3bd16c6672b876effc1a8adc0c57ad122a16db54061e4e46.svg","flags/4x3/do.svg":"flags/4x3/do-714b6f307ea3a9c3d30348684b8574e8b7f5078f51649dfa97ae2a69a7108b4a.svg","flags/1x1/do.svg":"flags/1x1/do-d37306c4b346f89ea14739144374caad69652be31e8ce8e2504c9a0d422a4857.svg","flags/4x3/dz.svg":"flags/4x3/dz-a96e943c830558fe9823044aac2bfb3f6a4caf3bd3c57943352280a7f6b68cb1.svg","flags/1x1/dz.svg":"flags/1x1/dz-09400d3b2c58e641a1641a687b81476761d05f9d0ff65861aeaa33c7f508cda4.svg","flags/4x3/ec.svg":"flags/4x3/ec-6762ba85ea0f7bb289b0aa6219c797e5243103d281b1462c61b61030fa329d5e.svg","flags/1x1/ec.svg":"flags/1x1/ec-7410a75a013738fbb8cbd756d967380e02ae54ca74e9ef9a41c4b583c2c2794f.svg","flags/4x3/ee.svg":"flags/4x3/ee-ce3b622214bd9eefb43373cae2811ea8cf6ef6a16bb6afbaa5bcaaea34024da0.svg","flags/1x1/ee.svg":"flags/1x1/ee-a207a8363b4dde44f59951501c2cb539419e92b0814b25d6448710ced52226f8.svg","flags/4x3/eg.svg":"flags/4x3/eg-16a11fa93856ddc5fd46f8811adfc93660175724b20eaab55ff046855a352d2c.svg","flags/1x1/eg.svg":"flags/1x1/eg-9f4d098c604326bbc3692f9e2f335dbc9b34bdf2706565bf448380f0a889d1e2.svg","flags/4x3/eh.svg":"flags/4x3/eh-9cf4a74d29c1a1afc4137deeb5b678d55c8fbdf8d181217267f3a5cce6a76a97.svg","flags/1x1/eh.svg":"flags/1x1/eh-16c3327dbcf3483e634b3536b056324b5478212dae6d060f2ffb2ec961cd382f.svg","flags/4x3/er.svg":"flags/4x3/er-69a1e1e45289d1282df4b1e5ce5e712d69fbe314abd0c922353fce90814c543e.svg","flags/1x1/er.svg":"flags/1x1/er-90d49408e58955cf1cf3185b0193e03c4a107042d47ef5e975dbbe10c6ef7f4a.svg","flags/4x3/es.svg":"flags/4x3/es-50e59681c6b6412498bd9cbfc473abedc713db75c54c538b839db3c394d64499.svg","flags/1x1/es.svg":"flags/1x1/es-29c68fa3c9c8c2adacdc2eb0162e9c2fa998faa408836900ec6285000476800d.svg","flags/4x3/et.svg":"flags/4x3/et-14263ba7ea890fd0a4d89a2791343ecb7acc89aab1fc2593e00a6093b22251df.svg","flags/1x1/et.svg":"flags/1x1/et-086eefb70e9adad537cc1c640a72cc0fa843ec7a9b06b2778aa98b2db055bfe6.svg","flags/4x3/fi.svg":"flags/4x3/fi-a4c41caa02a4f6803ea0d6c36de4beebf20d150e3df742b1369a4099c2ff648e.svg","flags/1x1/fi.svg":"flags/1x1/fi-c5fdf318fac5fdfc94fe54268618e58a2bc5933617ead09992900f90cc25de9a.svg","flags/4x3/fj.svg":"flags/4x3/fj-cb0cc4b3b5c202f07487ee519f48b3eadb47035f5f2d5d3f99d20f81e48d6b79.svg","flags/1x1/fj.svg":"flags/1x1/fj-c2c7fd536841925e7647b2d510d6a0c58700e2a8ded0e42008fb93ffacde101f.svg","flags/4x3/fk.svg":"flags/4x3/fk-cb61eaa0d7221823f7d17de59ea88ed16b506f9585ab0c7291cf839449d82968.svg","flags/1x1/fk.svg":"flags/1x1/fk-a871742380ae157d1211a63cc35cd3621b1bf6de6d67e4a8e3565ad200b1d8cf.svg","flags/4x3/fm.svg":"flags/4x3/fm-079b937562a9a412aae8fb762b571ddb49bf23627943c97247b6a9bbdb768153.svg","flags/1x1/fm.svg":"flags/1x1/fm-dbec73633ecd8a6c50f56d54df36bbe6a2f8fb534ac7658477c82cad14a806a8.svg","flags/4x3/fo.svg":"flags/4x3/fo-27279c2481bb1cb3e44850a948987d6a8411acffa770c3aecd1b76d4c5853413.svg","flags/1x1/fo.svg":"flags/1x1/fo-7cb4fdbba1c7223702d843cb0709ddc799f89f909dfe101e3e36d6bf36c3e67f.svg","flags/4x3/fr.svg":"flags/4x3/fr-30ed2f68dc9a17927643640f48f3d2a858bd041770547035349c6e79713cd84e.svg","flags/1x1/fr.svg":"flags/1x1/fr-6b849151204c66fa661c30b34e62919a13b9e66b7cd37a4fc8962e8e0baf9bdc.svg","flags/4x3/ga.svg":"flags/4x3/ga-e3840f9d5bd6ee08db748d37a534500b837bee0f8ce65987b2f099a6afd2cc63.svg","flags/1x1/ga.svg":"flags/1x1/ga-9eafd5388042b3d2258ac6223075b726426210136b9851b637973105721b64d9.svg","flags/4x3/gb.svg":"flags/4x3/gb-ce93c8a6b974d63998e263f6d25f898fc20580a28464457f2f4463b687e4fe8d.svg","flags/1x1/gb.svg":"flags/1x1/gb-1d93e1ce2e2e10c1709e4dc50ac956c007b2c1a63a4bc22ddfd64354f79ad457.svg","flags/4x3/gd.svg":"flags/4x3/gd-7c3a6b6068bbd9a6abc98c2297dd4acd5e31022e5a4210fc0e1205ec28498fa2.svg","flags/1x1/gd.svg":"flags/1x1/gd-2310bc03d9e8ddc8599b40891bfb10b812b07023881599a7e02e3028d1bc9ca8.svg","flags/4x3/ge.svg":"flags/4x3/ge-501c0135fb8c377dbd2859ff6290b47ef4907a8e2ab2ae1e39116b716db6795f.svg","flags/1x1/ge.svg":"flags/1x1/ge-ca9ee36883ec12048fbb7fbbfaf231c0d4848ae0b07dab74a46d53b7b34d8114.svg","flags/4x3/gf.svg":"flags/4x3/gf-7c165f90bfe6ac3674903632182221a992f017ff706354b1761002382e89c2c2.svg","flags/1x1/gf.svg":"flags/1x1/gf-8838337b15cdcf143fac16c714e8dbf2d893d2ea8f1c8ef06dadcb652dfec41c.svg","flags/4x3/gg.svg":"flags/4x3/gg-2c7bfc50d5bcd374b5f6107974d06af24e70edba31ad71a225e0c2ecc2d6e778.svg","flags/1x1/gg.svg":"flags/1x1/gg-509489b1792831bb27d6975c76aa0a2ac2fa2c3906bcf844f616de5e0fbbc359.svg","flags/4x3/gh.svg":"flags/4x3/gh-79c187756e93df22fae571ad9419629c5247c016e32a74471e0d461048fdf5cf.svg","flags/1x1/gh.svg":"flags/1x1/gh-e7bf18e6337982ee31e3673ab93e722b3410b7a4c202656a4bc3887d8656286b.svg","flags/4x3/gi.svg":"flags/4x3/gi-ed99b369c8c77e64abd59fab1f28155d71b4378b49625c66ab0ab6dff4f88087.svg","flags/1x1/gi.svg":"flags/1x1/gi-2e563e96e766e13c0a9c5a3a372059a44739bb696e853d71a6f6b08c491dfb9a.svg","flags/4x3/gl.svg":"flags/4x3/gl-612e560dbad68d540be672b80e22c54db43d6e2070523e81c156ccd6b3fc4260.svg","flags/1x1/gl.svg":"flags/1x1/gl-a9bb35d2b9ff27638658d9ad6b9e2c4f452072b9a80b508d32e76d37bf62cf6e.svg","flags/4x3/gm.svg":"flags/4x3/gm-4a6f9670a41548cceaced2b728e4bc56acbc4a3ba5544e7a097f7dae7a8bb045.svg","flags/1x1/gm.svg":"flags/1x1/gm-b67f9f6bce2f8c8700c198de8bfafac72d01b8a1e55b77f71e8cafdc58f8af5c.svg","flags/4x3/gn.svg":"flags/4x3/gn-873b4eb52f34c7558bef93cfd1b82117b5c32c9fbc0610f8821ccd22f28abe28.svg","flags/1x1/gn.svg":"flags/1x1/gn-72f51dc30cf0ed5459ad0f239cf3043eac05ece75945bcaf4ea6653af868c504.svg","flags/4x3/gp.svg":"flags/4x3/gp-4559cad3eb2d173214161d16b0237c68f5c817749a39c862fa7b23dfb4aee923.svg","flags/1x1/gp.svg":"flags/1x1/gp-d6669532054db5b7e441f4858c28920246a65ca3e8a15518c64c7bbb4f9c6416.svg","flags/4x3/gq.svg":"flags/4x3/gq-0c8dfe7f9543307056bbe6d6e44a16c17201228e5344d5afec1ccf1b9a5eb2f9.svg","flags/1x1/gq.svg":"flags/1x1/gq-ecb761e6db59b9bf8ba37533eaf0c60b7fcc7c0dfa2fcf281ee84c970dcb10f8.svg","flags/4x3/gr.svg":"flags/4x3/gr-4a4086310397bffa682d439be8650a9e28d94e32963b6411b61435292ac4cf80.svg","flags/1x1/gr.svg":"flags/1x1/gr-0cbd171892c0568b055d3b6585d58ac13dd60dfbcfad16eda1f4f9ead11dd16f.svg","flags/4x3/gs.svg":"flags/4x3/gs-e45169a93a9e94c15f5cb765a6c863319171fb9b4dce56094411829cd688d486.svg","flags/1x1/gs.svg":"flags/1x1/gs-3efc9e1b32961f9aa9d7faa2626e596282b63d049f6717c2378b28e3f508e79a.svg","flags/4x3/gt.svg":"flags/4x3/gt-64a7345cf66facf7f323d2142aebb4172191108a78ac7493b1a6077b78ac8ec5.svg","flags/1x1/gt.svg":"flags/1x1/gt-436a2af3d95cf3cb13ded897f319cfd6e2c087d678ad0e971c198b0d2c029911.svg","flags/4x3/gu.svg":"flags/4x3/gu-f560822ee237e5277829e63613a615a2ee3d8cc6196dffffe0f0d56a49b11c53.svg","flags/1x1/gu.svg":"flags/1x1/gu-a71c9d290c66c1a0929b05436dc6a8229b1147d7cc62336e04c9adf697030450.svg","flags/4x3/gw.svg":"flags/4x3/gw-0dc9ec17735ed605b68672947ce55c49a4ec1551491ccd121f482c1875cdf219.svg","flags/1x1/gw.svg":"flags/1x1/gw-7868c305e4a64b0d8ebfd3f7cb8c881841d71a7e0c3ead2683fe503c80de0674.svg","flags/4x3/gy.svg":"flags/4x3/gy-c9126e544c62508abfb898f0af0bd79c46f4c767c9ed6f928418a24b0f246d85.svg","flags/1x1/gy.svg":"flags/1x1/gy-0e3b849ce460f8ab1ec7cf66a25be1ba91e89b72d8b0aa679a0553464f37a972.svg","flags/4x3/hk.svg":"flags/4x3/hk-cece9126ccbf9151feadfed75791ebf32d4a16beab12f182404519d0cc24eec7.svg","flags/1x1/hk.svg":"flags/1x1/hk-9fad00e06f9034877149394914baa2bc3292223b0e32df2b1f9399d4de6e167d.svg","flags/4x3/hm.svg":"flags/4x3/hm-4b4923b81da24d62ebf31a9bc0addf76beef84593374b1cbd03ba19f3b12e3e9.svg","flags/1x1/hm.svg":"flags/1x1/hm-776c822113a22e83581234d05f40bfc0ed38b60648d87f513f3da3fff96ffb61.svg","flags/4x3/hn.svg":"flags/4x3/hn-855c830786283862a5f399e0d69dffe52b6223b91b32e31b55d55c82f2fa32c9.svg","flags/1x1/hn.svg":"flags/1x1/hn-64c38bac9403417c4e276bf5536d284fc5410fc04b80acd39a961d298f430dbd.svg","flags/4x3/hr.svg":"flags/4x3/hr-c8cad861f7398a22b9d27ea682d2778df0dde8e146d30142b5294daf988854af.svg","flags/1x1/hr.svg":"flags/1x1/hr-60c093df6760e4cc6abe26c37a52be3b51458f02712f18e11f08b07dc623b489.svg","flags/4x3/ht.svg":"flags/4x3/ht-fe81da06228fa36e7f211bec0d9f0c020f5b9c7f81534b4cb2251848aa276b16.svg","flags/1x1/ht.svg":"flags/1x1/ht-dd0197c078859c5a66ff3a51d3a3f92809768e36bfabdec0fc0ab60d068afcd9.svg","flags/4x3/hu.svg":"flags/4x3/hu-9aa998e636687aede491e307f3d068dbe58f2d90bfdfaec0e7ad03baa5b36344.svg","flags/1x1/hu.svg":"flags/1x1/hu-06858d0fbd4320496e849010e35c8fe82eb618188cf6ec329aef93f5e7af1c23.svg","flags/4x3/id.svg":"flags/4x3/id-775dbfedd6533afdf5bd017ccc1ad4f8f4238cbe87393d9c837a669196f17293.svg","flags/1x1/id.svg":"flags/1x1/id-3920ce662a7ea937b2c11707d8e1f53db52611dd004edf753b0389ed490d9d29.svg","flags/4x3/ie.svg":"flags/4x3/ie-6368a1c92440fcf80d3c35607543bcaa2d4662d6e0bc7acf6749ddbc418a72c0.svg","flags/1x1/ie.svg":"flags/1x1/ie-1997e9de640fa764677aa8f5d52f7888bb24a029160e8f67b06dbd043b4f11b3.svg","flags/4x3/il.svg":"flags/4x3/il-d76883a2330f9a05a4a64990ba955fc1be90bb46bcb19ae548c21816e7e74178.svg","flags/1x1/il.svg":"flags/1x1/il-f5e643d0e10169a438119dc441ea3100b52a2ff569bbb3a3ad6d1131b47602d8.svg","flags/4x3/im.svg":"flags/4x3/im-bbae8aa9dd129f8446556afe4904194ad43377d882f9a705fcf1da2bdbfabccf.svg","flags/1x1/im.svg":"flags/1x1/im-767d72c2e72d732d65c9b016adad983778dfbbb2b5b52e71830f4e41297728d3.svg","flags/4x3/in.svg":"flags/4x3/in-519e33321b8b2ba70a0b7557d66c62d7efdc9723896c49f82528b107028ffe29.svg","flags/1x1/in.svg":"flags/1x1/in-27831f76dc6a218a529b6e5d0eafc4c19c999461327b7c013f59226c0601a361.svg","flags/4x3/io.svg":"flags/4x3/io-8d25a8e98f682199b413adfbcb6898c37058c9bae085e427fbab03d56e8c0de6.svg","flags/1x1/io.svg":"flags/1x1/io-627f3b0cef72fd91ff426d74a007dc32d74c9fe677cf2c8355cba84359e16fde.svg","flags/4x3/iq.svg":"flags/4x3/iq-96b24d1439184d0a4c35ca7cea65e5f20469a0e8c8438963aad016e59c399cc6.svg","flags/1x1/iq.svg":"flags/1x1/iq-af04db139f8c44cfe0c612e2c05e848ccfad88fbbfcb58e88cdb7c80db365669.svg","flags/4x3/ir.svg":"flags/4x3/ir-db2c230d355ade2b1ac235ec647bb1535e4703c639a44f9ce112473272ee1019.svg","flags/1x1/ir.svg":"flags/1x1/ir-c648cbf56fc8f324fda477ea816783c9df8a7d398f45f5f94acc1c16c8877b63.svg","flags/4x3/is.svg":"flags/4x3/is-29508693138977229758b0f322ba34e90dbcd7a8a74e8820729933d24051d9a7.svg","flags/1x1/is.svg":"flags/1x1/is-b1c5db1d4b4853b8144f1d88ababbf14fc88752340457ba3e2c94ab5d54c9c01.svg","flags/4x3/it.svg":"flags/4x3/it-d2c168050fc509adac1163b097b0ed409217560735b27802ae9259587c146562.svg","flags/1x1/it.svg":"flags/1x1/it-592d34fb666430fa00f98d333623d5efa3c8e0e65ac4eee06bbc4c1de7ce4bea.svg","flags/4x3/je.svg":"flags/4x3/je-b363a4e3a21630f10791c2ebeb7f918320816ef87c155d4fd29ce37982f4df35.svg","flags/1x1/je.svg":"flags/1x1/je-6d43f74e30e099bc056da925ec34c0200708f0a6e90da34db1e59d54ce10cfd9.svg","flags/4x3/jm.svg":"flags/4x3/jm-3d133fbc2564f29e036855e8be224d1579fe66fe49e0f5a2ba0bdcf3cb272823.svg","flags/1x1/jm.svg":"flags/1x1/jm-1aea8ea5d8cbc717fa3ef331d8caa9a1421c88a7bd076e40f8276a5b6f8d0467.svg","flags/4x3/jo.svg":"flags/4x3/jo-eee432339f8ea6750987e1121187eb4b53ec537dd7ccb240c018de63f7a92db6.svg","flags/1x1/jo.svg":"flags/1x1/jo-7969b2083c535c85b7e714b755459a6606940e0b5ddb1b71e24daf0a180d14aa.svg","flags/4x3/jp.svg":"flags/4x3/jp-2eadcfc67ba8cd50c1da86e08e6778e0102c3072865dab8c312cc88006da0abe.svg","flags/1x1/jp.svg":"flags/1x1/jp-551281a75e6c6fd64eb65b39f56102b52c182f6c38ee045c9422f6592f0f65c5.svg","flags/4x3/ke.svg":"flags/4x3/ke-45790bc3ec1ed8ed0124777a7c9e09163353b5af4ff70ae6604a61b53712df4b.svg","flags/1x1/ke.svg":"flags/1x1/ke-2cca24ecf024b801543c0572efc9969ffdaf25cec313e2149c64961839bc301b.svg","flags/4x3/kg.svg":"flags/4x3/kg-3879f8931d74cc9c5927261f4095b2bb786f3d62c803b2a96ec550a23fae9f49.svg","flags/1x1/kg.svg":"flags/1x1/kg-74318932808f85b72df308358f2f2699ab0cb7ab4f7ad3c84c4be4024f0fb140.svg","flags/4x3/kh.svg":"flags/4x3/kh-7409fab4ba4e676db7b5c61020b97893b1735fe0b8e39e9b4f96108400be704e.svg","flags/1x1/kh.svg":"flags/1x1/kh-2603f6a61b400cb12b87397eeba60ae1707511467d5e0c430c05809bf89e5042.svg","flags/4x3/ki.svg":"flags/4x3/ki-617c1b52f3d9aee99d094edbd1775cae77aade266a1318eb4671b2bb1620ded5.svg","flags/1x1/ki.svg":"flags/1x1/ki-74615266b440a24f09abdeae3853d7e1111f0eba77df71ccd176d83fbd1fd9ad.svg","flags/4x3/km.svg":"flags/4x3/km-0c9bcbf7e677a541fc8dff6f848c9d92b6982ac2934ae75faa56a2b846bb5698.svg","flags/1x1/km.svg":"flags/1x1/km-81b0fbe53d09194270e8ed4cbe9be8eb1ae727e77957005369ad8bdc651dd1c8.svg","flags/4x3/kn.svg":"flags/4x3/kn-0442f55f81cd3b1057c609301f0af2b503d89a895a954af8c970df997e92bd03.svg","flags/1x1/kn.svg":"flags/1x1/kn-897c34ef54bee486f0d24d2191e2400f49a19d98efb19f8c3f1a27fb0b97131a.svg","flags/4x3/kp.svg":"flags/4x3/kp-a54f7201982b29530381b71a5e2a11c1153860f22c04c0a2d91bb0d20fedf78e.svg","flags/1x1/kp.svg":"flags/1x1/kp-758eccd89ef3707808fb68d931f086e49333904f4cc67c88468f3c96fb43b7b6.svg","flags/4x3/kr.svg":"flags/4x3/kr-c0b9b2c854133410c0ad9cadbc10b1e0bacf0305519883126d55bfa3214f9d06.svg","flags/1x1/kr.svg":"flags/1x1/kr-7c0457ac5d284b28b742ea2e061a1aa2a35f63171e464b3a7eb501a48756ce7b.svg","flags/4x3/kw.svg":"flags/4x3/kw-81c3d5d25c7b840ef14783b51d18c6b7cfc61f94932c664bbc9e5879fef020eb.svg","flags/1x1/kw.svg":"flags/1x1/kw-66670211a67a4e61d4652a19d821dc5195f01a28a3a9b28b7e4c6048cd86b19c.svg","flags/4x3/ky.svg":"flags/4x3/ky-0f4ab66d951ae33f800d680aaa5704804ba9c8844d4d80e5bee2e3fa0e100af3.svg","flags/1x1/ky.svg":"flags/1x1/ky-fb5f57bb58b74d23377bad9954a75ab88d1587af68546ce137a6ae7a88a7701e.svg","flags/4x3/kz.svg":"flags/4x3/kz-39edc952c598c71be2c9510944a8faf708d8e4b367b5ad78a688d1cd37f522eb.svg","flags/1x1/kz.svg":"flags/1x1/kz-924c04dc19267b049f35213af0e2b0c540933c06389433cb4aacd8dda33b286c.svg","flags/4x3/la.svg":"flags/4x3/la-e3a36a3bd0003442c3a21d3a192995fa6fb3b3c08a2daadc8f38f62736b5b1e3.svg","flags/1x1/la.svg":"flags/1x1/la-c9d4223a897e5e2938a4892bbc593d3828093b9439fc3f6de21520e4013ddbc5.svg","flags/4x3/lb.svg":"flags/4x3/lb-508c2a5a9b50d604895675b9f1c1e5914c394a7f468f5d823eb0476acaacbc7f.svg","flags/1x1/lb.svg":"flags/1x1/lb-10c9ba8ea7aa3189f16a7273c837982a887fc4ddfc9d514d8f5a660d72356f7f.svg","flags/4x3/lc.svg":"flags/4x3/lc-04ccd92fb1578654181febaea30ebd6b6620f56115730b2a2d673c712307bf5c.svg","flags/1x1/lc.svg":"flags/1x1/lc-4ffb53afb8bd296d526ac26fd8007afc74855e92833a893d3c934a5d12eb152a.svg","flags/4x3/li.svg":"flags/4x3/li-3058dc4aeaf2bd2da8cb910892137d732b56e5e9d342e565a4059de1a8e40e40.svg","flags/1x1/li.svg":"flags/1x1/li-0780a4f218b9ee466e33d14274b8a01575a86b3787b347e3269a3b301c220d5f.svg","flags/4x3/lk.svg":"flags/4x3/lk-a13d6ab1da51be3b1d2c5b80f4d866c923d42b017e197469e1bfc0dd021c4bfe.svg","flags/1x1/lk.svg":"flags/1x1/lk-99759363f0df6b868fd1398bf05666c680bafe1eeec8b859b64d450930213e02.svg","flags/4x3/lr.svg":"flags/4x3/lr-b06a1d70899826b305ce387fa31e1fa0bdb3bcb17c1392f15f995ce1dba723cf.svg","flags/1x1/lr.svg":"flags/1x1/lr-820a9d023e5b1e68ed640bfaba8f84ad4379c42a6c5c982cb76b0390dd2bcbdd.svg","flags/4x3/ls.svg":"flags/4x3/ls-d02bcefe7c298c153665f35c33eedb08e2e2b345350e4bf1714a87abf86b2d0e.svg","flags/1x1/ls.svg":"flags/1x1/ls-85c731c313a46db12bdb27fe229e9f7d052b447c624663b73ffa1dbab97f03fb.svg","flags/4x3/lt.svg":"flags/4x3/lt-c08eb18a15d2003cb544432b11c5081d3d5741370669b4df306d1c6bce14cb51.svg","flags/1x1/lt.svg":"flags/1x1/lt-c1bd7e3d289ac9b0df06d47237780eaf4d30f01281ed50a7df9a22bc3a2489c5.svg","flags/4x3/lu.svg":"flags/4x3/lu-99e7b6adb3a9e0f867b17eb3b1f0f33db92fd27cfd7b651f62453f359bace22f.svg","flags/1x1/lu.svg":"flags/1x1/lu-ab544445f16afa450549288ac86c2cc9a458a9d7747b3a89d5ecef7db9c83ce7.svg","flags/4x3/lv.svg":"flags/4x3/lv-f8844d50b89f0369f73d580d3676553e7e55dd8ab2460e592a29a530d9bed886.svg","flags/1x1/lv.svg":"flags/1x1/lv-baeced49dd4249e36a25b0f23a5c601a69e9dee3137627cd4450194b85a99dd4.svg","flags/4x3/ly.svg":"flags/4x3/ly-03209121483967f9d74849fb9261de23e9ff2e02c4e40b29f1cda0631b8a5fae.svg","flags/1x1/ly.svg":"flags/1x1/ly-1e6e070aaa4bfc97a5a446a39bf746ab3c4c81d9f62c975cab164e16de3a3ffe.svg","flags/4x3/ma.svg":"flags/4x3/ma-9a25cc7c2868fa45b251dd1b99a0be3b583df69732146142020fe9c6c0c95b63.svg","flags/1x1/ma.svg":"flags/1x1/ma-4f18b9c355b8b8bf0db69badb235a183dbd558deb6439bf03b4f18e56837a7f3.svg","flags/4x3/mc.svg":"flags/4x3/mc-b0c50599ea2a550680a6a867579930e0b47d3e05193a7294a26b7849a7ad35e2.svg","flags/1x1/mc.svg":"flags/1x1/mc-8f1fe6210338399d8791d91f39234b1a09acf2aa5e0387696048dc7068534a28.svg","flags/4x3/md.svg":"flags/4x3/md-8849eef7bdf916e962f7bb31af87c8d47aef33f9f4a2017b2ce55c4166e79643.svg","flags/1x1/md.svg":"flags/1x1/md-43f1bb4157545abe6e79215459efb548d913bbe7922078cd40cb722a4e19d9b4.svg","flags/4x3/me.svg":"flags/4x3/me-983d452d43cfb8d628bfc5c0cf4991c2ba3cf0e39e70aa5353cfd4e9ec3da62d.svg","flags/1x1/me.svg":"flags/1x1/me-104d6a96038ef06d3d8b89c9221996f3649b5b821139b11b2e07695b0f6fda2f.svg","flags/4x3/mf.svg":"flags/4x3/mf-31fb851bfcc2340d2fa43e86a099cc7becfc8e7f996a4d2ca56bd050e6537086.svg","flags/1x1/mf.svg":"flags/1x1/mf-fe20ce9bf911631d6e79edf21c8cff0716f2dc1ffded39515735444d9a66fa55.svg","flags/4x3/mg.svg":"flags/4x3/mg-5effe963e29f804a26f95dbbc9519add454a0fd9eb918ddfeb55e1e99a1a2701.svg","flags/1x1/mg.svg":"flags/1x1/mg-9e546cfb78810d9b25c814a84aadd6907880b8e0cdd2e4e30738b519e7c1ac91.svg","flags/4x3/mh.svg":"flags/4x3/mh-d8cfd123007dbb99aa700c335957926a6d5e877ab49680c79629a32716d7a782.svg","flags/1x1/mh.svg":"flags/1x1/mh-3fe03d4d063a4729fc8b68fd5e9d7d2eef6e65c4e82954c83f76b138cea2eb45.svg","flags/4x3/mk.svg":"flags/4x3/mk-6e8071d15f2ff125d30bf89d000dcb47db9545cf9b7ff04f1474650ec2f4d25c.svg","flags/1x1/mk.svg":"flags/1x1/mk-fdc9212f9f311cbface56b6587468a2e845111b697edc11b7edda9fcf100c1d5.svg","flags/4x3/ml.svg":"flags/4x3/ml-a730102e0c6f6362de9c10ef8da6cf7b123465d01a297e7a89808b01fa4771cd.svg","flags/1x1/ml.svg":"flags/1x1/ml-a661355da206b0cb7ac4c84b6cdf7e411fbca8fcb271ae999fa60d5c67578192.svg","flags/4x3/mm.svg":"flags/4x3/mm-6d0d207d662477110f2b863488088818d8400386358dcbc669a2d8c54d1bae16.svg","flags/1x1/mm.svg":"flags/1x1/mm-de7d46b6543343af61ba997045cb41a707bd0db1e7a5879971ca8fddcbdf9e99.svg","flags/4x3/mn.svg":"flags/4x3/mn-656eb51e88bfce82401e4080eb791ddf16d571cbba102cdd4316c5de4711ac65.svg","flags/1x1/mn.svg":"flags/1x1/mn-ad22cb2c195a7d8ca8e4174db011d5f58238ee25039b5b2da2649d8ca8b00123.svg","flags/4x3/mo.svg":"flags/4x3/mo-37a1088aa687af13951bc93886e3e51cb246eccfde1b56528f189327ea291792.svg","flags/1x1/mo.svg":"flags/1x1/mo-b463a1c37b69131d662e3fb2ae937583458824a09bcf68fc7ed2d7fd729138d1.svg","flags/4x3/mp.svg":"flags/4x3/mp-ecd12cadc358fdf293e856c0a3ffc09409123cabd3c7201225b2d21b59551e14.svg","flags/1x1/mp.svg":"flags/1x1/mp-d1f4ba10c1409e713253f1fbb107eeccbd4ec1a8f9036663f1ac1991aee53835.svg","flags/4x3/mq.svg":"flags/4x3/mq-b4e1b08a93c1364c79e6d61f95b16fca5b884da6e77835bc0e0adfff8ecc2d7f.svg","flags/1x1/mq.svg":"flags/1x1/mq-19cb6f7cb7354c3fd40e987c93a2d76329d34b2ed3873c3f25fe56802f251ea8.svg","flags/4x3/mr.svg":"flags/4x3/mr-9f64af3ed5c6d8d1f68b5cb09fd1aa9d28c3c95107e063f64a0ef95f0cb9429a.svg","flags/1x1/mr.svg":"flags/1x1/mr-0e79b7bcc669bb871d94021db2b78b162b9867c7eaf934d8f7a3025fd5903576.svg","flags/4x3/ms.svg":"flags/4x3/ms-32620dd70353777b2ee62951556976f398cd38ae359b5a8c97311a1dc61eb8bc.svg","flags/1x1/ms.svg":"flags/1x1/ms-4104d4f36cb5cf1c6de78e52e90bc3c5b8bfa262617b16a737673feb8c30a00c.svg","flags/4x3/mt.svg":"flags/4x3/mt-0c9819aa69b34b84c1ee43620922737122eb38f107be9864a0690ac66ef8aa64.svg","flags/1x1/mt.svg":"flags/1x1/mt-3c3fe71f2a2bf0d961fd145ad7e48ca1e9d3a05cce514354714ba4568503d106.svg","flags/4x3/mu.svg":"flags/4x3/mu-c78c23f1499756b9db762ae434ca354d1481447fa94c66bc10aca9443b399059.svg","flags/1x1/mu.svg":"flags/1x1/mu-91ebc79d0fa306127ea8b7a33f77d5b28f35c516ea91ff0468c7344dc838db69.svg","flags/4x3/mv.svg":"flags/4x3/mv-a17c947e17adae6aacef01a3e131c4150aa094911b53fbaead41783683e008eb.svg","flags/1x1/mv.svg":"flags/1x1/mv-d138e94d9d2ed093ef1425c1164493b780202f9a7f7937241a7b081b79ff8b01.svg","flags/4x3/mw.svg":"flags/4x3/mw-21f116afdf71df80e3c59084c6ba640814fa5389430328ff55c9403b5c239632.svg","flags/1x1/mw.svg":"flags/1x1/mw-5c2228d3f1cf1f9cf8cb158e813202981828c11e8caf117836fc57fa6bc1c788.svg","flags/4x3/mx.svg":"flags/4x3/mx-a235f9b16921590b7e78caa6f76339361356946eaf0046badd10732b4647c0b6.svg","flags/1x1/mx.svg":"flags/1x1/mx-cdab01ebcdccc020ca16e1355ef1fd18ca0043b501f399ca8edc48adfa8c7292.svg","flags/4x3/my.svg":"flags/4x3/my-0ed63574cf5f20c0663ab8cd1f700e150fb641fd0b93602ba013abbfaae5ee59.svg","flags/1x1/my.svg":"flags/1x1/my-5e8d31ef06ffc8af33a5616d760592ecd022c52afc8ba33c721f1e4989da0628.svg","flags/4x3/mz.svg":"flags/4x3/mz-752e2293917b1d2ece3f097104caeadf6a679054a779e9d3be8e49dc324bb88a.svg","flags/1x1/mz.svg":"flags/1x1/mz-300cba975ad43c962ceca0d266ded1fe3d21d6b4d701d657fb42b27268ea2964.svg","flags/4x3/na.svg":"flags/4x3/na-a0655a2e70751278e6a60d31e818f672864a6e68e8b3d3361b2fbb70fa9bfef8.svg","flags/1x1/na.svg":"flags/1x1/na-1ce089a189db5be15eb05df8155f9bd017b61fc1a497e5b3021ff2ca664e122d.svg","flags/4x3/nc.svg":"flags/4x3/nc-0c7171d91c44414ed69808611db588f1283ee7e34ea8a74a9a5101ba4b1cb305.svg","flags/1x1/nc.svg":"flags/1x1/nc-d3a1629f06dc3200af7669f2d895fce1908d2c1ca02d71e530bdfa6646a9516c.svg","flags/4x3/ne.svg":"flags/4x3/ne-2b61d30a6cb4554535538e3b753926853e8c629a494a347286b9731c803548e4.svg","flags/1x1/ne.svg":"flags/1x1/ne-9c5f798ccd7d3dd3771ae628b4a39dfb2a4578fefd2e006f3ce89c3e494d0cb1.svg","flags/4x3/nf.svg":"flags/4x3/nf-4e615baa83a8b4db3e39fe1d251ab913943d64e0cd320f251d619ab54e7512d3.svg","flags/1x1/nf.svg":"flags/1x1/nf-45403247c90050484813acf23c50f543779528e346317274373c3c24fd830103.svg","flags/4x3/ng.svg":"flags/4x3/ng-d52fd188be973f31dd34e5a0b3fed0de68fe736c8a41c6028d9c248c038c8641.svg","flags/1x1/ng.svg":"flags/1x1/ng-f22edcc5867554d69ecbe15add0fbbb1389631f3ced07a4f820065c7770c65f5.svg","flags/4x3/ni.svg":"flags/4x3/ni-2fbb883e46fbe3b2ecfed9dac004ceb546f25c77a84a5966eea224674aebc610.svg","flags/1x1/ni.svg":"flags/1x1/ni-214aed148b615c4846f842b47f99cf178ac62a96cf18c5dd6b23467184b56680.svg","flags/4x3/nl.svg":"flags/4x3/nl-4f0ecea529dd4c0099dd41a7801fa5ac44aa04cd872ca31e11efd58b5a813774.svg","flags/1x1/nl.svg":"flags/1x1/nl-9c8f60e638879d642487818975e58c61cd3102f0e68c360708243c076436ff68.svg","flags/4x3/no.svg":"flags/4x3/no-270f7ee9d1d2efa6abf16f693faba8586adae842d79d8aad9e3f37e96c27cbce.svg","flags/1x1/no.svg":"flags/1x1/no-7d377325e8c5ec4de0376e9f4c13463f183af637e6c443716f22020c7a313979.svg","flags/4x3/np.svg":"flags/4x3/np-69637ddb3a173c4522a71598278aa32462e1762e34dd99c9dc99a515433a6cf8.svg","flags/1x1/np.svg":"flags/1x1/np-44ead118cce3a1fcbb720cc8d6eab6ecb6b62292315f61ae5963a40262ee11d2.svg","flags/4x3/nr.svg":"flags/4x3/nr-0bd3c0ba7bbac4bd5985b838096eeebd67711d39065619ef092fa4bb55b22a6d.svg","flags/1x1/nr.svg":"flags/1x1/nr-63b9c44e5dd66a59895f52707dc24db5bd1eab6e535298d24e414c0f2dafcb3c.svg","flags/4x3/nu.svg":"flags/4x3/nu-259989e1eea0cbf6b41a33176a4c9c1eaa2e7ae6571ad80a324c6309bd5aa5fc.svg","flags/1x1/nu.svg":"flags/1x1/nu-1cb535708f64ed8b386a245e571e677e935009af92f2b214760a2832c1ee1b53.svg","flags/4x3/nz.svg":"flags/4x3/nz-90ceca2a683fbec395a91b77b0880cea99c3b2cbdb24caa5474925cbdcc3675e.svg","flags/1x1/nz.svg":"flags/1x1/nz-b0d78f165a72edd46599222a2ea5f6a91a8252975cb03e33c4ca08e389859aac.svg","flags/4x3/om.svg":"flags/4x3/om-aadcca7bc7ad318400097b84849dd64c4744306cd9b4f152fba34f2e84116965.svg","flags/1x1/om.svg":"flags/1x1/om-705e2bd2b2fc7d13c152aa06bfb9e6ee4ad8b299f8c06ca16adad0b18b2b18ed.svg","flags/4x3/pa.svg":"flags/4x3/pa-027e679bd65dcaa2c53145a14669c1e674a467a889ef702cbe2a260f7ca8ad38.svg","flags/1x1/pa.svg":"flags/1x1/pa-edeb4faeadaa286de7fdc667e25d38ad0cdbccaec5023182fed6a3c74e8b09eb.svg","flags/4x3/pe.svg":"flags/4x3/pe-7ec59842737c90d6ff543f1831fd69b51e1e7ee1b068c3ac6259cbf2c214d611.svg","flags/1x1/pe.svg":"flags/1x1/pe-97d1b8ed1d4ed5e5f0348a731ca4a3a4b9abc7d440447dc87a521f229f375ed3.svg","flags/4x3/pf.svg":"flags/4x3/pf-27955c73c5be4043c5b7ddf64c8f46d11c6648e3b1fc0efe028b8afea21a40e1.svg","flags/1x1/pf.svg":"flags/1x1/pf-83e3e1d36fba45e015c62f938e6d182029edc05ebfdc50bcb33860f36f96d73a.svg","flags/4x3/pg.svg":"flags/4x3/pg-c2fdd2551f9044c461eccfae2d7ba0a347a99143f6002b71a429942af0217897.svg","flags/1x1/pg.svg":"flags/1x1/pg-cf60257fa85f9270b1e9980e703435186110167f76c153bc460c10ee8b2d4b09.svg","flags/4x3/ph.svg":"flags/4x3/ph-bf3394850a6cec6a535420eabce263e7f8193413e4af1fb317c76da025388c1b.svg","flags/1x1/ph.svg":"flags/1x1/ph-006c3218effe4269252cb9638de82ea339eb2894951705c630533ceffa842169.svg","flags/4x3/pk.svg":"flags/4x3/pk-b64f6a32e5bb598f57cfe49c4899c2021f2d153653f3d92101e6e11b2158e500.svg","flags/1x1/pk.svg":"flags/1x1/pk-d2d58def913c9081c5eeeda5f0b6895068ec13c955694e359531e23422145e60.svg","flags/4x3/pl.svg":"flags/4x3/pl-f55a710991a94c2e6c2f9f1a7a4a36ebb84b24b7c9d9df4e1ffe86d61321fa6f.svg","flags/1x1/pl.svg":"flags/1x1/pl-fafb539259385f2b99df910cff085710a9b4d9706b74e4e0f8a6ef627615c4e7.svg","flags/4x3/pm.svg":"flags/4x3/pm-8f6338d2ae3e0e42adc9754720ca21ad4979095cf6d7467a8db5a5a1c3e0b2a5.svg","flags/1x1/pm.svg":"flags/1x1/pm-63029c6198dc42c404ec39807a99528b1d198eeeea6f9a1e309548242480140b.svg","flags/4x3/pn.svg":"flags/4x3/pn-4006c11ca83011c0dd60a13ac30b27da0578b9f1368bd8c6de5aab423f6662d8.svg","flags/1x1/pn.svg":"flags/1x1/pn-6c433f7f9cb79c6d5ed7bbeade8a495e3b26ca2604f4fd3995096109684ac5dd.svg","flags/4x3/pr.svg":"flags/4x3/pr-6287e1515fa80e2d05133ed93f14ca03a1be6909a9ef6c736fd60f9c9fe73132.svg","flags/1x1/pr.svg":"flags/1x1/pr-526985b3a6d2d6de577ed0ed92d0b49ce854667e3ff630304813fd5af15527cd.svg","flags/4x3/ps.svg":"flags/4x3/ps-31f50e1fcb44b9aa6e9ce4473c3085f744e70ea0fa1fd8d85787f4e7b0c4a69b.svg","flags/1x1/ps.svg":"flags/1x1/ps-c43918bc71bef71b24dd46e8cacc53e0df53e02dcce6199d06d11a4637f08a04.svg","flags/4x3/pt.svg":"flags/4x3/pt-9aab20caed714ee47fc408f017037aea94a649b3ba4d87e2da37870ee31e4f92.svg","flags/1x1/pt.svg":"flags/1x1/pt-a309869e5018c9690a65ebdf8a2d69d61f82772068a7920f9680ed0581ae5966.svg","flags/4x3/pw.svg":"flags/4x3/pw-9262037d114d0f61571c74f9a5455809709b43e6565443ae2667981eecb5f12a.svg","flags/1x1/pw.svg":"flags/1x1/pw-a6f42019653ae26d43c6e9b7bef83fc98cff8ec5e8d0c50ad7cb0a17d5e565a6.svg","flags/4x3/py.svg":"flags/4x3/py-5bc9e9f0dee94ae3d9bd80ae6fb1aac297dc81a1c592d0a73bc3383bce73af74.svg","flags/1x1/py.svg":"flags/1x1/py-182eff300f4507fd9399fb6310d1cd3b45adadd7924ad2814003c7111ec5c0de.svg","flags/4x3/qa.svg":"flags/4x3/qa-32c93970f8e521850eddfaf2a89dfff987f0ae3b0b73a253c301b61cf547cf9e.svg","flags/1x1/qa.svg":"flags/1x1/qa-182e4d8ace2607d0c02d3c29d65eb084af71092357006bc41cd601981ec3b81c.svg","flags/4x3/re.svg":"flags/4x3/re-8b2ea1f2727c266a2b80cb12a9b7195f6b656f521552b67893b6761a07f9bc92.svg","flags/1x1/re.svg":"flags/1x1/re-07eb7d855022bc678b47b0ce5fd05da5044d6dde86ad3697d4ae55c68ff447c1.svg","flags/4x3/ro.svg":"flags/4x3/ro-4ab797571e1d9eb326486f75654a4590fd33f20444f85b77ba0997eb6138c21f.svg","flags/1x1/ro.svg":"flags/1x1/ro-ddfcbaec04d11bf7f95abebd1d3a42b2862b1af8fca9b02764a6ed0e409a1d75.svg","flags/4x3/rs.svg":"flags/4x3/rs-dd8a52473ea40e23b393b5f4a30d1edd91865aab167f0c1835ae84b15dcce585.svg","flags/1x1/rs.svg":"flags/1x1/rs-42bf40209c92e4e7169daf29fbcb7253b2804eee7a463051529327f38851f865.svg","flags/4x3/ru.svg":"flags/4x3/ru-13f4525a4caad6e31afa523d2bc4a0c1e6377c0bef1bfd872682130d3f199d1d.svg","flags/1x1/ru.svg":"flags/1x1/ru-b9792a963faf667447e0456dba5be80a3b37c197a4284d1539a3433721d9e2fe.svg","flags/4x3/rw.svg":"flags/4x3/rw-bc38bcd6e19d2941839b253af6e863b13338cde1174874f9674471026c15e422.svg","flags/1x1/rw.svg":"flags/1x1/rw-456698123775b83d2b0fa1b9fe073f9ccdba0b6bf39a703b8979dcce158eb32c.svg","flags/4x3/sa.svg":"flags/4x3/sa-2b2fd6abb48415d5407c576c24a24fbd80af5877ef06cf2d026452f6c67f5f4d.svg","flags/1x1/sa.svg":"flags/1x1/sa-d9ebc73e7957f86604164dd5054fb32601ad14d7dfd4bfe73da5bdd10bb2f8ae.svg","flags/4x3/sb.svg":"flags/4x3/sb-37761927039d0a37ba0995c59fd31bbe36c8a0ca161e5b72b8131e3659f8dddf.svg","flags/1x1/sb.svg":"flags/1x1/sb-bedbf8464cd82f391bfe6178c63055b650d0cf3aee60c37fa79a586f95783b79.svg","flags/4x3/sc.svg":"flags/4x3/sc-f6a2f8f37be93f07600b491b52cb58d80d74b92d8ace0af313f4ce081b0d1345.svg","flags/1x1/sc.svg":"flags/1x1/sc-5dcd01b98c34460c9624280fb5047811fbae7d976620cd0a70ad4263a9085b60.svg","flags/4x3/sd.svg":"flags/4x3/sd-cc9cf97e8a37622b9e1bad28811d46c4471595afa448dc055e0e3aae7687fe4b.svg","flags/1x1/sd.svg":"flags/1x1/sd-1f5d13f9780085acbaad13d959b1918c796ba7b0450954b15d145e87cebe045c.svg","flags/4x3/se.svg":"flags/4x3/se-84b06bcd5bd90ea8dd6d1c3c8d2799a843c47b0256ce098aef75414964618286.svg","flags/1x1/se.svg":"flags/1x1/se-39f128686652cf914f8601110fcc9ac879bca204407013b93aff4ca4fb2ed9bc.svg","flags/4x3/sg.svg":"flags/4x3/sg-a82acd90077e76318ddb0be96999d9695b9a9f4627e8a0f341d3987a62747dcc.svg","flags/1x1/sg.svg":"flags/1x1/sg-c22e093634568aae249bf35f9ddcaa6796b5f27d76c39ff5336abf7f1b8a47d4.svg","flags/4x3/sh.svg":"flags/4x3/sh-57470d9a75955f0fac605a94e853bab524c7461a4c025e809fb09db762ebe46f.svg","flags/1x1/sh.svg":"flags/1x1/sh-8d06a0fff61e51eb65357d138e00736545835b8649aa2694152f4cdc9f941c16.svg","flags/4x3/si.svg":"flags/4x3/si-289d6417f154323e7922df09ffc0f49ded31548c7ee8020c39cb85724ffbcea8.svg","flags/1x1/si.svg":"flags/1x1/si-ca40a5f4f38119d6f52ffd3ddb36af95951a2aa1fadcd897f5bc1641bb2e0051.svg","flags/4x3/sj.svg":"flags/4x3/sj-67d4cdd268d0c0cd93fc561b506cb5646cb508385c93ed350d11f94aa1c83833.svg","flags/1x1/sj.svg":"flags/1x1/sj-f7c489607033138039612d6abe7f4b0b4b6dada5cac75d78204f404a0d292b1c.svg","flags/4x3/sk.svg":"flags/4x3/sk-a0bdbb7f5d6998ffe9fcbc80bbdf0e6cff3629740d2ce1b8d61025e0a8b322b5.svg","flags/1x1/sk.svg":"flags/1x1/sk-a82a813b2d81af9be1aa775f22b2c2457d11e870e072d7e23957a11d0878faed.svg","flags/4x3/sl.svg":"flags/4x3/sl-be265bed24cfe0b25778201f251e52e4e721e3d319795875913805d1aea84ebb.svg","flags/1x1/sl.svg":"flags/1x1/sl-cb8bccbaa21957f006ed4ae0144da81c999e93bd8014023b16b500fdcdc397d3.svg","flags/4x3/sm.svg":"flags/4x3/sm-d7818df3f8f2d5dbed27dc5a0a80b1e41cdcd6130eeff221da58f0321e925f27.svg","flags/1x1/sm.svg":"flags/1x1/sm-6f87660dcac925bbdb036c79a0e20d3b208215d327be4c4764ae1069d6464efd.svg","flags/4x3/sn.svg":"flags/4x3/sn-b131b17a374bcfbd00d442d282fa52f0e4e0e448cda1cdfaac25a95ff56443c0.svg","flags/1x1/sn.svg":"flags/1x1/sn-d180d3ce9846966dee6a3d9433ede7d24801dc4311636aabd470ec5b8765d772.svg","flags/4x3/so.svg":"flags/4x3/so-3b5b77b371299478144a94b60c99524fb6b99bfedb3dcc976ab70185e07f399e.svg","flags/1x1/so.svg":"flags/1x1/so-50aa941f2d2954285ef9e5ac260cdd264a73cf2e4b0c627677f04141fff2afd3.svg","flags/4x3/sr.svg":"flags/4x3/sr-94d0f0aefcbdea8d7ba35648eda5037e99bf4126723ce36416582ea43b08d3e2.svg","flags/1x1/sr.svg":"flags/1x1/sr-3944d683068d437471725d22fd71ccbe6a63ae307ff9775690417d3bf262cf82.svg","flags/4x3/ss.svg":"flags/4x3/ss-f391e5002cbce83f97f7d1a11c284fa2e36a7d6dc734757d733656801ab17d0a.svg","flags/1x1/ss.svg":"flags/1x1/ss-853bd9f713d2f6b1fe540a82e8bf4754912da21575b3fe756b8741767f318f7a.svg","flags/4x3/st.svg":"flags/4x3/st-b52bb48a2c0800f5cb4b07bdd93c3908f77bcb6800be883ebf943bbd3d99d42c.svg","flags/1x1/st.svg":"flags/1x1/st-d8b5b1c8b9fe947086a4d277d2ac5d6b9cff188dfd37bda66c8bf5e02c5facc8.svg","flags/4x3/sv.svg":"flags/4x3/sv-6d02d63c7f04c9388e98f892cc43d8daa2110fc84242758d5627fcd247bfd09b.svg","flags/1x1/sv.svg":"flags/1x1/sv-fb4c8d7eb98396a93c5b9c37195d70e809e0d71d8b8f9316e842121f95bb82ea.svg","flags/4x3/sx.svg":"flags/4x3/sx-fb6a7b1cbc5b29eeeb39a5aec64ef7aad432c37bbe848d29955a3786b9763224.svg","flags/1x1/sx.svg":"flags/1x1/sx-a37b124212f8530b921aef7657cfb35c2895a731c7a06f333faee4c93f32806a.svg","flags/4x3/sy.svg":"flags/4x3/sy-e35f8d88c864ed4f38edb2f9f96d5bd69f6df078b50515b8c5467bf6b1689f50.svg","flags/1x1/sy.svg":"flags/1x1/sy-5d537bd5b42b58f6e8a7e33fbe5942a16126abb639edf9cb58b88938c57ebaa9.svg","flags/4x3/sz.svg":"flags/4x3/sz-c65ae592e943217787848364bdb4c57335869f4626ce705adabdc2620669c1c6.svg","flags/1x1/sz.svg":"flags/1x1/sz-dd3d1c65bdf09317553f205e588e3dc7336acec1cb9315bfbe0f5bd8ca5bba3f.svg","flags/4x3/tc.svg":"flags/4x3/tc-594b6cc87040836c6d6777afb5833d565d3e5e75f404350a51443ec4588a1ccb.svg","flags/1x1/tc.svg":"flags/1x1/tc-34a37006252eea340488220585c31d047b57e3e7934c77180d930972aaceadc3.svg","flags/4x3/td.svg":"flags/4x3/td-b67a1978e3badb895ff640c80bb6c0e33eac354220c08cf3fc93d62bf5d685a3.svg","flags/1x1/td.svg":"flags/1x1/td-556b3a7991c17010cb7e1ff23c4edcc2dcdb8c406a128d407fd165ea8a19d311.svg","flags/4x3/tf.svg":"flags/4x3/tf-35cd83351521f3022a43e01f0c40f34663a66ac1e92045979f31d3fd65c16d02.svg","flags/1x1/tf.svg":"flags/1x1/tf-485e71f61ff577735dbc4ba1025515c22a83c48ee7f3a2ed49804766c35f6ea5.svg","flags/4x3/tg.svg":"flags/4x3/tg-24b25f4c2213fe35e5f5586d7ab23abf0c25ad2049708cd52ba72e1ec7b754ff.svg","flags/1x1/tg.svg":"flags/1x1/tg-05f3d98392a5ec3e4aecf8f629d3d03f05ac55abb7d9d84187d599acfe271374.svg","flags/4x3/th.svg":"flags/4x3/th-cc936bacd84dddd15454ef06bc64e357f83854af34692fc37363272d61f637d4.svg","flags/1x1/th.svg":"flags/1x1/th-de82cbd770db2be53a8e3d59d86e2b748a5d3f96eb8584f7b9364cefbd06a172.svg","flags/4x3/tj.svg":"flags/4x3/tj-b90bf3e2dd63265d55b67962b160df65f021c42b6ea304e2943c10b9e2a8749d.svg","flags/1x1/tj.svg":"flags/1x1/tj-5f6571e74b1f8720f9ecc2d3aa2098ca45d2e7ad6602b2a57c206384719b9f36.svg","flags/4x3/tk.svg":"flags/4x3/tk-602520b29b909c96baea17a38eb654d6c6fbc7088f46a0cb8d8fe34ff92e3cb8.svg","flags/1x1/tk.svg":"flags/1x1/tk-fe1dc8aaa0643a45a74ecec8aec09f0fe2207d104bb3c28c0b84405f1275aeba.svg","flags/4x3/tl.svg":"flags/4x3/tl-ebdb862aa5ae5de1a72242571deaa70bfb222f488a93b70e304f2075b474d54b.svg","flags/1x1/tl.svg":"flags/1x1/tl-485f02183bdb192ba3ce6e5f076e184112739f883ae0a8fde33c454377b848d6.svg","flags/4x3/tm.svg":"flags/4x3/tm-5ddb4128bf0becd7c60413d5418027f5f01ca4bc72561d54b94febfee7a5a24b.svg","flags/1x1/tm.svg":"flags/1x1/tm-3521ad569a4095aa8d4166d5d9094fccfdbb3ea411207ad685b6dd5814ef3392.svg","flags/4x3/tn.svg":"flags/4x3/tn-ca27eb50d88b11d20b5b09e2bbecb7753267222489920c526608e5d2acd22d79.svg","flags/1x1/tn.svg":"flags/1x1/tn-222c6cd4742c558f48ebcacb47ea334057642fffa3456a1c75e0fad9e728d09b.svg","flags/4x3/to.svg":"flags/4x3/to-c9c509fc24f591fbe52bbf732c44291384c787796e1fc9c703a973587c3f8ad1.svg","flags/1x1/to.svg":"flags/1x1/to-cf26dfb44b56b915b2f11896355cb778b938ed54423311d69d7cda9626887dda.svg","flags/4x3/tr.svg":"flags/4x3/tr-c40f697070cf8d8358785b9203d1c8f438976e3cd644a87d9ee16fa9960deaa4.svg","flags/1x1/tr.svg":"flags/1x1/tr-627dcf91a1e5153c045e33a3459b5d56002530fddd3fc53927f4d0fb7ea004a5.svg","flags/4x3/tt.svg":"flags/4x3/tt-04786ffedbde2c96a30ad1cbf4db000848f14bd700324651fc88364e5f3c2fd0.svg","flags/1x1/tt.svg":"flags/1x1/tt-6a3c73bfa7782366d95e673d847ef8f84c0475b364d359def1efd264297bac30.svg","flags/4x3/tv.svg":"flags/4x3/tv-20b56e7c0a2fbaa2a0b7b1bd87afc6368440f175fb3a0589de5e34e99d163fd7.svg","flags/1x1/tv.svg":"flags/1x1/tv-8bce1d7bde2e20dcc473ed3a33c66e4bedcf1acf2d2fff6d54353a480b8cafbc.svg","flags/4x3/tw.svg":"flags/4x3/tw-36070ac0a15ab1f4811478da62e7678756a9aa266b141ed0549aba1c0e04333a.svg","flags/1x1/tw.svg":"flags/1x1/tw-fd7a0db2f3808842ca99176f097356fe9e6f3c120d6aa9e8c4a9c2dd4c3943ba.svg","flags/4x3/tz.svg":"flags/4x3/tz-51ad7d69f059075df61b9226468af0d78642af4ad34a7540f64c5bea82e803d7.svg","flags/1x1/tz.svg":"flags/1x1/tz-0703f29a7ae02a9a1753cb1726dd2934d75ed3a12e8d63faa9fa866e1fe61440.svg","flags/4x3/ua.svg":"flags/4x3/ua-7f7db03c3b492aaacd11b0abac70d543a7c0ec5265a36d529bbb80a7c432d81a.svg","flags/1x1/ua.svg":"flags/1x1/ua-25192fa80f120edb1dd1c4757fd7b79ef38f5e1729238f4135003e6a1501bf28.svg","flags/4x3/ug.svg":"flags/4x3/ug-7635df53eafdf411be0809df835bfbcffd61badd6c4df3db0909c8b3188015a0.svg","flags/1x1/ug.svg":"flags/1x1/ug-537f34f64e723fbe7cb7902ea0e61303f1ada79214197efc39ebe2c52ce24186.svg","flags/4x3/um.svg":"flags/4x3/um-a0ae80e34bbf94677dd6052ea87cc0090aba747dab5440e5ca6e231f7f07c96d.svg","flags/1x1/um.svg":"flags/1x1/um-3f1bc09babe7fdcf32518bb49d1aac3a66d0204f955eacca291c58d4f4ef895a.svg","flags/4x3/us.svg":"flags/4x3/us-aefd8f7e57d11f7b0416d01d9c665ab3848b10af849f35a4d772d58d24d83329.svg","flags/1x1/us.svg":"flags/1x1/us-87af45be9346e8c820312976abe332ee11f8931e29fa361328d28660a711b1e2.svg","flags/4x3/uy.svg":"flags/4x3/uy-9f636c8283abf56cc930746fd427c1d1644dcf8736c537629df13f760da96ebc.svg","flags/1x1/uy.svg":"flags/1x1/uy-e216b762a93ec55bf9b4ae3d35b7febe0b192a12246fd66c45139ce77fb2095e.svg","flags/4x3/uz.svg":"flags/4x3/uz-697d596705372323beddccb3626d1ce405b36249315c6b006ff1529e24909ceb.svg","flags/1x1/uz.svg":"flags/1x1/uz-aa34cbe4f6f0e4b5d890975578d28cc9b1e88ebd503d3bdca693748eb29b3353.svg","flags/4x3/va.svg":"flags/4x3/va-d24d3c5bee108c396997c3d5b2bd2273433752d8c222eb531650e51551a4afd0.svg","flags/1x1/va.svg":"flags/1x1/va-01160c1bffda12f0b94554ba0c50162a88da807943617334bd4c57a030985e95.svg","flags/4x3/vc.svg":"flags/4x3/vc-ddf979bee2889414e5a05ac55f39a9c93f34e0aff0d35f007605049a2d8b5afb.svg","flags/1x1/vc.svg":"flags/1x1/vc-ac776e16dec19ff2e2d9238f541dae5d977282b451a83ab3d4122efed2392be9.svg","flags/4x3/ve.svg":"flags/4x3/ve-e23abd006cc75a8c4f9ec1cb122b46f9b52e26c5606532d2c868277d4ccd523b.svg","flags/1x1/ve.svg":"flags/1x1/ve-1480713f28719e0a83da2c5f1333407dbfa5bcc0de8c9ba718fcf47273ee95ef.svg","flags/4x3/vg.svg":"flags/4x3/vg-7f8f24a4d6995e4dd39e3d9098dad5e14649821fa12ffc200edf0a586285ee15.svg","flags/1x1/vg.svg":"flags/1x1/vg-b464b6a78e46c29df9e4bdadc2646208f11c59168706456075f970552a24efa8.svg","flags/4x3/vi.svg":"flags/4x3/vi-58311325a293b046044976d899f288ce0fbe9bfd705a23947a9b38d7991983d7.svg","flags/1x1/vi.svg":"flags/1x1/vi-1c132d2cff66cdbdb7b6acf504bb0cd9d7579595d80c3fa6604ff24ca7a0184d.svg","flags/4x3/vn.svg":"flags/4x3/vn-a918d3c9cdc368b1d2ff9614d58cbcd1d43b725889b0ba18f5d4e693071e389a.svg","flags/1x1/vn.svg":"flags/1x1/vn-895e428ae3d98c99dbb02088cf8ef040bfb031df6f16c3c8fc3678505d869791.svg","flags/4x3/vu.svg":"flags/4x3/vu-2c286c778a7bed03cb603ab24b68dc91868f4f054cf4f851bdd17aa16731571c.svg","flags/1x1/vu.svg":"flags/1x1/vu-51ef23121e2641ebeeac50d31c4e52b7d00d3ab1bc9fc0ad95ea86fd3631975a.svg","flags/4x3/wf.svg":"flags/4x3/wf-f7e9ac5edac196ac32d7bafa04b5c0d924b89e9d7e4f3535a6a26c6c1523639c.svg","flags/1x1/wf.svg":"flags/1x1/wf-95a920a79aa32d92f8a362321aae4230e17025ac04d976593f4423d0c37c1aee.svg","flags/4x3/ws.svg":"flags/4x3/ws-efc6505a802a3fa2018bc102fc2e11db8c738464c619381b6edc32d0a89341a3.svg","flags/1x1/ws.svg":"flags/1x1/ws-e3afb81c037c814620027bf61ac5e266683cab7ba5796ecf10b64c110cfcb932.svg","flags/4x3/ye.svg":"flags/4x3/ye-fd88856e70d66b01b4f0f608936a61cf3b1d9dad40a2932fc5da4d01f72a447b.svg","flags/1x1/ye.svg":"flags/1x1/ye-0c0e32330871e6d83af54affb7dadbbe736f9799068508211fbae54db9bbdcc6.svg","flags/4x3/yt.svg":"flags/4x3/yt-2eef17b543424082d9f9b42a67e84c20b52e7f7eae8c4326d60711158da51d5b.svg","flags/1x1/yt.svg":"flags/1x1/yt-911da8075337fd8f75ecc8a338c294cb771c6b9a08576f96c9de1437888cd2a7.svg","flags/4x3/za.svg":"flags/4x3/za-45991a2aee307198510e56bf92523070aac4241cafe6c3ddb8f89b20a61d6371.svg","flags/1x1/za.svg":"flags/1x1/za-bc09a89b29311ea7e582ef60bf4e18aff7c29de6fbefe309463ca765723a0ce8.svg","flags/4x3/zm.svg":"flags/4x3/zm-07c0f30d86e66d0cad9d66cd9c9384d9cce1844f159d245deff6717101fe49c2.svg","flags/1x1/zm.svg":"flags/1x1/zm-fc5bce3834c71fe36617ea5f57f0bd1dcf3880a7c6aa515dcf92ae067f796241.svg","flags/4x3/zw.svg":"flags/4x3/zw-5217c74f14d9fdda244b69c5982bbabee052ac0f1cc0704926e8b1e621e50f9a.svg","flags/1x1/zw.svg":"flags/1x1/zw-a33b191c631709b9e1d85e06f5b15535fb544d4668c8bef865ede2a0b6a88ed9.svg","flags/4x3/es-ct.svg":"flags/4x3/es-ct-bcbb454a50c9a647efd43dcf041445f15e8dd70654bde530bf62401d4fb7738d.svg","flags/1x1/es-ct.svg":"flags/1x1/es-ct-7f13eb2b2f5c11dccd7043286bed7540d4dad4b1a8367b0aca1b8405a351b2ef.svg","flags/4x3/eu.svg":"flags/4x3/eu-5f129db64306353251b78f998d531d2f1019404cfa890ae63ed70dc316c7f240.svg","flags/1x1/eu.svg":"flags/1x1/eu-ec59ac8daf2a63ea8e299ad63a208445d68a96affe6a10a7328acb6799d44127.svg","flags/4x3/gb-eng.svg":"flags/4x3/gb-eng-1895f4e35ae299f5d869da2462ffcf98df4b08dcddc531c8f175e49720001a14.svg","flags/1x1/gb-eng.svg":"flags/1x1/gb-eng-d11afb87f40f35acda435a886ea044bd5e0b6f363ba0c7319f1d0181551fecf3.svg","flags/4x3/gb-nir.svg":"flags/4x3/gb-nir-b280f09c787f495c1074376cd67537b40216f672917e7d204bb12b8e7c72afaf.svg","flags/1x1/gb-nir.svg":"flags/1x1/gb-nir-2e516e72e0e8e244ef430e6608322f8c4fb276807ab033279b2a6570dd68fd41.svg","flags/4x3/gb-sct.svg":"flags/4x3/gb-sct-1b9e407802ae901cf8da740c382ec2b19821837d76271a73346e0c63c2244506.svg","flags/1x1/gb-sct.svg":"flags/1x1/gb-sct-d01e8a06a340e30ce52e8a3aba7ca6207afb96fdb238a815cc6cb92df8fa5df3.svg","flags/4x3/gb-wls.svg":"flags/4x3/gb-wls-5232b3e376a19866cddec8225cba242783b2a48063811957f1ce5a2c347c5bc9.svg","flags/1x1/gb-wls.svg":"flags/1x1/gb-wls-126615bc3597fda1ca4ee931ef24f6c2cf2547998c06db9c1ded69fe66c479e9.svg","flags/4x3/un.svg":"flags/4x3/un-31dece22ae18c3e01e86648ef3ef45f2f5b3d9d28a1e2bbbcdb1d87c37af55af.svg","flags/1x1/un.svg":"flags/1x1/un-455b5f3173ca9ac64f2135fac4ead7217d7fbe07551d0d2cc60216f83208f798.svg","leaflet/dist/images/layers.png":"leaflet/dist/images/layers-1dbbe9d028e292f36fcba8f8b3a28d5e8932754fc2215b9ac69e4cdecf5107c6.png","leaflet/dist/images/layers-2x.png":"leaflet/dist/images/layers-2x-066daca850d8ffbef007af00b06eac0015728dee279c51f3cb6c716df7c42edf.png","leaflet/dist/images/marker-icon.png":"leaflet/dist/images/marker-icon-574c3a5cca85f4114085b6841596d62f00d7c892c7b03f28cbfa301deb1dc437.png","markers-soft.png":"markers-soft-e78784e4ed70aaffddd73c315fab590233cc4e7b72388d7dd47a14796fc7c739.png","markers-shadow.png":"markers-shadow-8703a2262710f5e3d29e65d2acdf90d6512e159e119d27b8234731d8a6208a20.png","markers-soft@2x.png":"markers-soft@2x-c1e77253a8bfbe30cec24885d7046f443b76ebb66f4c961f77083b03f4a5cbaf.png","markers-shadow@2x.png":"markers-shadow@2x-b21a536be27313fb504f69f5899ff0b1245b276571769ac08d6c32c35676e47a.png","markers-matte.png":"markers-matte-497826545a90e09a240504d14530eba45823b19fd44175e09e27c47cd822ddb9.png","markers-matte@2x.png":"markers-matte@2x-948fc8c4426f04f60964ed20394247f45b0b60e575d02398b9b6810e7a29a823.png","markers-plain.png":"markers-plain-cf233423aa44e75ac0031e77b8ba571cd3331010517e1197e63fb7b06856c1ff.png","leaflet/dist/images/marker-icon-2x.png":"leaflet/dist/images/marker-icon-2x-00179c4c1ee830d3a108412ae0d294f55776cfeb085c60129a39aa6fc4ae2528.png","leaflet/dist/images/marker-shadow.png":"leaflet/dist/images/marker-shadow-264f5c640339f042dd729062cfc04c17f8ea0f29882b538e3848ed8f10edb4da.png","jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-ae65a7ae22c4c23115948fdeb5c05c9137dbd13ca2d426b3c4c3c4183451e410.png","jquery-ui/ui-icons_444444_256x240.png":"jquery-ui/ui-icons_444444_256x240-31d988765b4e6f56553c29588c500381dc3e6f0aa2980c8212202e5644aefd5d.png","jquery-ui/ui-icons_555555_256x240.png":"jquery-ui/ui-icons_555555_256x240-32175261daee76c82bb0edf0eea16a56421866fbc31e94f3c1d570aa114502f5.png","jquery-ui/ui-icons_777620_256x240.png":"jquery-ui/ui-icons_777620_256x240-0b020fc6e696d88d296e7bb1f61f1eb2ad827848e2c7382a4c3e0999e702dd9b.png","jquery-ui/ui-icons_777777_256x240.png":"jquery-ui/ui-icons_777777_256x240-faf32007ae120c302213557626e660dd10e711c5dd4f1113d35f26dc05b78d2f.png","jquery-ui/ui-icons_cc0000_256x240.png":"jquery-ui/ui-icons_cc0000_256x240-40985a64b4d5dd213fba27fcd862a1bd1b337a97674f6ff0b9ec20abcee4bc69.png","jquery-ui/ui-icons_ffffff_256x240.png":"jquery-ui/ui-icons_ffffff_256x240-350df1b7131037de20e83c5c0f3a41a770d2ac48b5762ea772b3f4a8a7b9d47a.png","tinymce/langs/af_ZA.js":"tinymce/langs/af_ZA-6d5614830d9cc3d504d9922bf5373665246936adc337530a7a672e9bf5fc21ea.js","tinymce/langs/ar.js":"tinymce/langs/ar-5a0ab86d268d50c7c9462e0645b96e6c09d928976c0b27007f85f7c5638cbbf8.js","tinymce/langs/ar_SA.js":"tinymce/langs/ar_SA-24b62c76e99e114ae44480a67edbacf74f9fed0ff7afbeacce4966f1bc80333b.js","tinymce/langs/az.js":"tinymce/langs/az-d40cecd6eb423f910f528ae98dcdaba4c2449802621759437174cf8c8c0d5b25.js","tinymce/langs/be.js":"tinymce/langs/be-2d601b695076754977002cf73d6809919ca8c0758850a45e34a692af7b08fb1d.js","tinymce/langs/bg_BG.js":"tinymce/langs/bg_BG-0272f963807ba8672db0d5f6b8919d2f3aa2f8bb172a17c5f8c2934760ba0dce.js","tinymce/langs/bn_BD.js":"tinymce/langs/bn_BD-ef48a9094445dfa624af0c35902f60b7949b30585b5e9bc760a225fe2c07cbd3.js","tinymce/langs/bs.js":"tinymce/langs/bs-eb66c6d6910a30b950d7a0e784027ed288e6e5a2c6db7741da3359f2067e2e0e.js","tinymce/langs/ca.js":"tinymce/langs/ca-e4765b96adf2232248998c6b703730652cd4302035ee39733cd6e5df8d79ee22.js","tinymce/langs/cs.js":"tinymce/langs/cs-77418e2f6150bfb0391227eeff79499f8654a9fcc5314f30ec88e4684e8e5fa6.js","tinymce/langs/cs_CZ.js":"tinymce/langs/cs_CZ-4b0778d233e200dea350f8361129da2844e23d1c0f2d524aeffa6d34e581368d.js","tinymce/langs/cy.js":"tinymce/langs/cy-d337e01ca993cd9fb80ce3fccc39dff7f1dc47021264bf9ec14ac9af2b3d74b5.js","tinymce/langs/da.js":"tinymce/langs/da-4a040df5d2a225dcd10aa1c7d05ff7f36a854d4834919497812c3ba5aa5b06f4.js","tinymce/langs/de.js":"tinymce/langs/de-f9a88202d526e76875d22053cc659e4aabb43fa88411296ba122b8cf4d468eef.js","tinymce/langs/de_AT.js":"tinymce/langs/de_AT-2c6a1926c1cddd2079d27e844db153d797505e21bab6bdab018c2e5d1f0532fb.js","tinymce/langs/dv.js":"tinymce/langs/dv-3b3e040a7e24fd18903d4833a8da09f2e2b65fbd1c3ac325a3cd373775f9bd23.js","tinymce/langs/el.js":"tinymce/langs/el-0d51a187db018442cb94826f66155adb3fd805ac792c1110a04a548bc7d5d6c2.js","tinymce/langs/en_CA.js":"tinymce/langs/en_CA-2c64a16614c895022cc2b6aa4f134f4917ec8dd045c2184672653f3fae158db4.js","tinymce/langs/en_GB.js":"tinymce/langs/en_GB-4eb69d31cb70a3d3c53185883d58027a70524b0f5db82200bfa45b6a8ea22224.js","tinymce/langs/eo.js":"tinymce/langs/eo-cbac4d7ebcb0679845b852d9354e74586e78cf13eef82de1400cf6b465e203cd.js","tinymce/langs/es.js":"tinymce/langs/es-4fd5fd5b991c2c1e3032a297ae4605088bcd6835a467e64f9568de1b554e559c.js","tinymce/langs/es_MX.js":"tinymce/langs/es_MX-bc4f779c4782ed7bc7e7c4b7cd9293d7803256660cc529307dca05a40c49b94d.js","tinymce/langs/et.js":"tinymce/langs/et-26b7ced79b21dc8a21fda1dd95247e93c35096461238c8579dea16e48d12b4ef.js","tinymce/langs/eu.js":"tinymce/langs/eu-8698ae4de236fcd490d0f45d485dbd33d8e9de6eb3db51191e1b4f8ea96a4d06.js","tinymce/langs/fa.js":"tinymce/langs/fa-7eff96595e93d4b0df484dd90c14b7b412966157ed8293f54429e9418882bdb2.js","tinymce/langs/fa_IR.js":"tinymce/langs/fa_IR-4103bdacd3e4b53f30b27019dc9cdbc6402e3345331a93a5768900d591633201.js","tinymce/langs/fi.js":"tinymce/langs/fi-6ca2a93d045067a86e8ea973d0b89368054b15eb9b9625bf1ca871608a5cb77c.js","tinymce/langs/fo.js":"tinymce/langs/fo-340609cecd5571e4eacb8fe7bd1343c8553d96d12610fb77d9a812dc6d3635fd.js","tinymce/langs/fr_CH.js":"tinymce/langs/fr_CH-e0f43c0f20727368ff0767f3bf099bc23eed9fe3e81f8bbe514381e786526928.js","tinymce/langs/fr_FR.js":"tinymce/langs/fr_FR-c7b4bea9c3f186767ffee3f06d12830574620a5f58c4f76dede76d311be2a9c6.js","tinymce/langs/ga.js":"tinymce/langs/ga-7c1e918737301e611973d91e10c27930873e97dd690f7d10862d0cd40e639055.js","tinymce/langs/gd.js":"tinymce/langs/gd-0453e8b97bf3b6cca4065712ec59f20343ad6131735b38547e865177a1c1c490.js","tinymce/langs/gl.js":"tinymce/langs/gl-f6ec1cbe13f00683a8fceb6e73a353dfced77ab3f63d99fa2ae7c40bd6b3a64c.js","tinymce/langs/he_IL.js":"tinymce/langs/he_IL-74b957588e5998649fde6c6f3686bb74790d7173d0f31c90a4272a4596b16b32.js","tinymce/langs/hi_IN.js":"tinymce/langs/hi_IN-695e0cdc22974fe45e0f35289f0249ddab87245165c9df765ec1b885ec55f0be.js","tinymce/langs/hr.js":"tinymce/langs/hr-1dda1c40a40645a936a214478697c44137c805bf8b9c9e4485a0fb142e4ffe18.js","tinymce/langs/hu_HU.js":"tinymce/langs/hu_HU-9e74f5ada14970f167ee2ec1f46c8fd41d8bb98f9f5f5df9b4ad041cdaa81fd7.js","tinymce/langs/hy.js":"tinymce/langs/hy-0d384f3f82cd76793d3e7428a2140ea97f40a943f25ef99a2e3709a3e02b0930.js","tinymce/langs/id.js":"tinymce/langs/id-e9fd018be745b5f14f4af47887420f98c590c607e01d57aca77ef5affe188523.js","tinymce/langs/is_IS.js":"tinymce/langs/is_IS-c6e8c3e7b0e6b447faec3d8d258928f97c84558b29882c056513fb71cf237bfa.js","tinymce/langs/it.js":"tinymce/langs/it-c4549598b4e13df2201efb7f5b971e5bc55a731b25dd9ac7adb5f75780fe5f34.js","tinymce/langs/ja.js":"tinymce/langs/ja-da6414959d66a9b0cb46078592bd018bc8dc6707588d5ab911ebd09e589f92f6.js","tinymce/langs/ka_GE.js":"tinymce/langs/ka_GE-480559d4cffe96c5cae5e41f9ffd06f979785b3ce93e547462fbabc5cc1a88fb.js","tinymce/langs/kab.js":"tinymce/langs/kab-dc638a064c01cae2218d445beec60da010ee8dee8524f245ae3b99c8c5b3567c.js","tinymce/langs/kk.js":"tinymce/langs/kk-282b790d721dcaf6b44d930f70825e06969602572e477b7ef73766360eefdbaf.js","tinymce/langs/km_KH.js":"tinymce/langs/km_KH-dddeacc3c7112c6f230c4746d0fc9e9de1a3f53e419524ce03f483a35a49aaad.js","tinymce/langs/ko.js":"tinymce/langs/ko-ca535bfa388701fb020d24bdfb3f1e3aab127005b54e943cb1bd60b723c8194d.js","tinymce/langs/ko_KR.js":"tinymce/langs/ko_KR-90aae14954461fa073104c36c0f2d7d2c95bbbf0e41be4ef4f04ac402ab8d0a8.js","tinymce/langs/ku.js":"tinymce/langs/ku-95e2ffe4f0112df658f10327c26f2cdddedc2e2ed769767366ae22a465c14725.js","tinymce/langs/ku_IQ.js":"tinymce/langs/ku_IQ-a212e8d41695989e56834facf72474e1934ef166c3fcaf7e255ef573a3c6e76c.js","tinymce/langs/lb.js":"tinymce/langs/lb-94992279091f1a0be927d5d858d3724037d8d81ee6b63cc9ddde84af6124cc04.js","tinymce/langs/lt.js":"tinymce/langs/lt-ae7cefbe2cb5420770b31eabf92605728135ab5d6a2d2cfca2d19809be67e6a8.js","tinymce/langs/lv.js":"tinymce/langs/lv-6c706e8dbf25774d07fea54cc1cbfaaf60c205c95392eee90ae55ac9cae74768.js","tinymce/langs/mk_MK.js":"tinymce/langs/mk_MK-55aadb5d7c82c940cfcf42f24423ef0471294c9b02994a6b22e1b4173baa7ec6.js","tinymce/langs/ml.js":"tinymce/langs/ml-685de0808683c02274dcbe9f8de023a4d72a49b040e7526a99e3d5c786ff71ae.js","tinymce/langs/ml_IN.js":"tinymce/langs/ml_IN-1ab433621d6257c7632718048bacc5ed98a302d33cf0438bbbb4200914e01aac.js","tinymce/langs/mn_MN.js":"tinymce/langs/mn_MN-b89f88cb9b0dd7c879e27532b2979c421c1e69648f65a4108a56060f1e1cb009.js","tinymce/langs/nb_NO.js":"tinymce/langs/nb_NO-8bd2c254b03046ae60710293e7485d4c5cf9fdc3cbce52f97f0bf682ee44e1f8.js","tinymce/langs/nl.js":"tinymce/langs/nl-0436131db0f369f1d07ce9a27f61cd351d8b2a441d352f8261cde3990f7b59d8.js","tinymce/langs/pl.js":"tinymce/langs/pl-eaf96c2c80d9268c2477628c1d23f947391de01553ef43bb488ee88d7bb3b8e6.js","tinymce/langs/pt_BR.js":"tinymce/langs/pt_BR-32ccbdf38597b6d0239e8ba70d73ab75de0661bb06c86fc9a90d1c0a890bc31e.js","tinymce/langs/pt_PT.js":"tinymce/langs/pt_PT-a364a3ca02a98259f33046338ab1bdd32dd4ebf24fa56e88d2578066bc7f0597.js","tinymce/langs/ro.js":"tinymce/langs/ro-83fd95a929d491cbfbfac83f132bdc41c956a7f4b0459c243fd92613c9c841ef.js","tinymce/langs/ru.js":"tinymce/langs/ru-2566ddc510b999f19c499a9838d7b987d5a8332b5802f2211beb4274ae2cd563.js","tinymce/langs/ru_RU.js":"tinymce/langs/ru_RU-9f18ef14f3493cc586cc0b4827fd9e1c2ed3d5790ce536d94f87e2d6aac2a688.js","tinymce/langs/si_LK.js":"tinymce/langs/si_LK-5bfefe9b2fe82574d8ed839df18fd8ff65f1e1cd458b0a843cf1aadd1be704ea.js","tinymce/langs/sk.js":"tinymce/langs/sk-01d012310139d40e606a633db845a03fe285c32cb47043d6d9d761afa0cc3530.js","tinymce/langs/sl_SI.js":"tinymce/langs/sl_SI-ea499e07b7f4c9430bb15f34f6278f7248334c2553a544e240a21a84195d9582.js","tinymce/langs/sr.js":"tinymce/langs/sr-e0b97453a0c1000b19f7ce37fcf86bcacbf9125d81076f60a77686820c7925c6.js","tinymce/langs/sv_SE.js":"tinymce/langs/sv_SE-7af54d4c82419671562478bf4a66d185be79406f3287628df0d2ad8ac044a485.js","tinymce/langs/ta.js":"tinymce/langs/ta-3b428d97786e6eded1c4973fef3fb487786a79f1eee59f15483bd02b96c76239.js","tinymce/langs/ta_IN.js":"tinymce/langs/ta_IN-44bf4b6c5e4de01a2c7f2ccc69b6dd561b8afce86397229a9ff27efaf0600812.js","tinymce/langs/tg.js":"tinymce/langs/tg-1618248bf0aeda614a37ced9fd28b6623ae24f8453368bfb8c483ce820a3cb34.js","tinymce/langs/th_TH.js":"tinymce/langs/th_TH-5869e7cc393913371f3314057c1691e6e0fa296b496cf2d5c465276c31645479.js","tinymce/langs/tr.js":"tinymce/langs/tr-6a58fb650e940025d957945ae4850f6fbb8446c5f092a661063af9606afc1db8.js","tinymce/langs/tr_TR.js":"tinymce/langs/tr_TR-d97de581e91c05fc4f3d9fe1419ad201e227bcd0ff3f036f7b59519395f4dcc2.js","tinymce/langs/tt.js":"tinymce/langs/tt-22e302672df0a77de14688f58dbedf82de7a26e9089c9535a2a3cd1c0ccd7903.js","tinymce/langs/ug.js":"tinymce/langs/ug-50232038bf7262c90be4f2919c74ff93792cdb82e6064d0f5c86f885b93271c5.js","tinymce/langs/uk.js":"tinymce/langs/uk-00866ab0fe7746d258b215475089740306b790d572d081b7f53ce65ec313f413.js","tinymce/langs/uk_UA.js":"tinymce/langs/uk_UA-52b101eeb7079c629edbe4615e64018757791541930fd2733957810a37197356.js","tinymce/langs/uz.js":"tinymce/langs/uz-d6923a3190a76dc149ccb2893574e981250344a6c4f6dcaf458df1cce2ea3b30.js","tinymce/langs/vi.js":"tinymce/langs/vi-6aa451047e4df911c92e10178e6a70147534e438c64df7a88eee37b4a440726e.js","tinymce/langs/vi_VN.js":"tinymce/langs/vi_VN-54d1da8a0ca8d0242457ddab5e0230c2cca140d3e480bfd55b9dfbaec7868baa.js","tinymce/langs/zh_CN.js":"tinymce/langs/zh_CN-07499e6b0821cb49c5e16efbe4a68a4d843b4d6939a45866aabe6f9ad7fc805d.js","tinymce/langs/zh_TW.js":"tinymce/langs/zh_TW-c00c3a6539c0e1696436182c935a0a5929ab09ae7bdc43ca9c4ad21098079d53.js","tinymce/preinit.js":"tinymce/preinit-84328a53e798df12f891eb49871773fd9f925439c8630e9e22423a82ef9e6f89.js","tinymce/rails.js":"tinymce/rails-bf7fd5c952f25481010758dde6a2681498074f9509230f601b317356a6a54fca.js","tinymce/tinymce.js":"tinymce/tinymce-31850548e5497145232118f93e5f8e31f1655790c0bfbd2ca754f0d4587deaaa.js","tinymce/jquery.tinymce.js":"tinymce/jquery.tinymce-db2bc0a724d3123cc432dc4d9d8029736b4afc8c8502967e359dce2ed3170c16.js","tinymce/langs/readme.md":"tinymce/langs/readme-5a8b6a04d57b5c88e3fb7f2a870b8e2d3a48ec03ce6474206c41df78c155b2de.md","tinymce/license.txt":"tinymce/license-47a9dcd2574891a5a465112fd9dfcebcc7e61844edec27fa936a64642008fe66.txt","tinymce/plugins/advlist/plugin.js":"tinymce/plugins/advlist/plugin-7b5bed8c5b41dbabee490dca68a3fc215c6c2d08ad1174d20fd4ebc27feb9b18.js","tinymce/plugins/anchor/plugin.js":"tinymce/plugins/anchor/plugin-8fc6aac86dcfda2df29f3e402541e9f5ed45743f0dce76b80bc4e3c6a16be585.js","tinymce/plugins/autolink/plugin.js":"tinymce/plugins/autolink/plugin-aacef7388395131adb8a2d04e3d130c13150b04a39ba15bfebdd8b5673e74b56.js","tinymce/plugins/autoresize/plugin.js":"tinymce/plugins/autoresize/plugin-79ff6671020ca454d50be43a8cd68e51bbbab80f6f11d3ef1afc29df593a9cc0.js","tinymce/plugins/autosave/plugin.js":"tinymce/plugins/autosave/plugin-9ad5834347b0a8f6cbf38dba716696d65c7e35df051dd5c5a39ceda6a4fee645.js","tinymce/plugins/bbcode/plugin.js":"tinymce/plugins/bbcode/plugin-8acda51f6565daa44af5423768602b2296eff9cbc3b2355f82a1ae4490428833.js","tinymce/plugins/charmap/plugin.js":"tinymce/plugins/charmap/plugin-f0d451ae7fcfa1f30f73c2d9185c58173e1a8e44d893d752778b226b665f020b.js","tinymce/plugins/code/plugin.js":"tinymce/plugins/code/plugin-46957c79ea5f5757444d628fdb90bac81f078d87bc9601df76cc087d4976564b.js","tinymce/plugins/codesample/css/prism.css":"tinymce/plugins/codesample/css/prism-1988b66704b4d23e78c6c20c38a6856cbc1f0be96d6d60a3a0b12f4408f1057e.css","tinymce/plugins/codesample/plugin.js":"tinymce/plugins/codesample/plugin-850e9f396e000d41d915c20867bcb78d3e6ae394ac5a28f069b3d90edc0138f8.js","tinymce/plugins/colorpicker/plugin.js":"tinymce/plugins/colorpicker/plugin-48d6719fa10b7bc1b3982d9d9f952d320ebba056102701e49e3945ce3bf8911d.js","tinymce/plugins/contextmenu/plugin.js":"tinymce/plugins/contextmenu/plugin-1b3d07a3487dbbf4eb7f0ce2252bdfc13cb849d1e8749b75c3523b22ea8f4761.js","tinymce/plugins/directionality/plugin.js":"tinymce/plugins/directionality/plugin-0893c42f76c330cbae77ee849d287028e03574dcf50b6a0770d4b771f7324f1c.js","tinymce/plugins/emoticons/img/smiley-cool.gif":"tinymce/plugins/emoticons/img/smiley-cool-bb0e93a050a32df7913e4026b3c88a176998e0e3e073ba06e9b73f6c24227c9c.gif","tinymce/plugins/emoticons/img/smiley-cry.gif":"tinymce/plugins/emoticons/img/smiley-cry-a0c5f3e7a682449c973c9d9f7c46342081c46920686d2353f57aff91ab907f68.gif","tinymce/plugins/emoticons/img/smiley-embarassed.gif":"tinymce/plugins/emoticons/img/smiley-embarassed-d3cafcb50b335672cb5e9f4600ea9ea261dac7828dd28844d4927c393a25618f.gif","tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif":"tinymce/plugins/emoticons/img/smiley-foot-in-mouth-03fe04d3ed533423ac81f05146584b0c451be3d4a30e76687ceef283ed07071f.gif","tinymce/plugins/emoticons/img/smiley-frown.gif":"tinymce/plugins/emoticons/img/smiley-frown-1b984bf98931dd1debb54461eb9d83e985f2b2999fe14bcb556d6c0921bc83b0.gif","tinymce/plugins/emoticons/img/smiley-innocent.gif":"tinymce/plugins/emoticons/img/smiley-innocent-8db353ef102196f2c6ddf5c4666446de955d7b14fc0957c806c9dbfb48fb0c29.gif","tinymce/plugins/emoticons/img/smiley-kiss.gif":"tinymce/plugins/emoticons/img/smiley-kiss-3154c3665356c13ab10fefdbac1fe187fff978a0052037c99cdc4a97103413f2.gif","tinymce/plugins/emoticons/img/smiley-laughing.gif":"tinymce/plugins/emoticons/img/smiley-laughing-8f6adedcd091975ffead171867a6304d908bb6541a6ccb4919286ec6b7d4551e.gif","tinymce/plugins/emoticons/img/smiley-money-mouth.gif":"tinymce/plugins/emoticons/img/smiley-money-mouth-f0b9f4f22e237f5dbc851f900fed8d7eca4c954ae6fbc606c0cd8be431d0ac80.gif","tinymce/plugins/emoticons/img/smiley-sealed.gif":"tinymce/plugins/emoticons/img/smiley-sealed-9933b442636b6e537df7b564e2c3f7a2873526eea6b022a98eb1e468e5204c32.gif","tinymce/plugins/emoticons/img/smiley-smile.gif":"tinymce/plugins/emoticons/img/smiley-smile-fd89cd460ffcacb7e725e00c0275ef5b3924ce468248e5ff4fb43545571cfa65.gif","tinymce/plugins/emoticons/img/smiley-surprised.gif":"tinymce/plugins/emoticons/img/smiley-surprised-3871f356cb41976d7ae8a5f005e8739e4d014352a8adef9b33f773d81b6e6c01.gif","tinymce/plugins/emoticons/img/smiley-tongue-out.gif":"tinymce/plugins/emoticons/img/smiley-tongue-out-5843c85667a8226dc43be83749fd9fbbc5d20b1577de2b763915d99815d37d47.gif","tinymce/plugins/emoticons/img/smiley-undecided.gif":"tinymce/plugins/emoticons/img/smiley-undecided-d8b9bcbb433951ff3c4ca8dd959ac3844239b98e6d52218833e1485a91f67347.gif","tinymce/plugins/emoticons/img/smiley-wink.gif":"tinymce/plugins/emoticons/img/smiley-wink-2af75ad7b1c08488505513503e34b15f40005e04a2a9568f698f0945d2d8ba1f.gif","tinymce/plugins/emoticons/img/smiley-yell.gif":"tinymce/plugins/emoticons/img/smiley-yell-bba903fbcb46fce8c68b9e01863fd095b3b1d0e6aa72161f3a88d762a5f90a79.gif","tinymce/plugins/emoticons/plugin.js":"tinymce/plugins/emoticons/plugin-287cc5d2f0fba168841d0d0dab3c6f8f958fb0e80adada67cc1e64d88a69704e.js","tinymce/plugins/fullpage/plugin.js":"tinymce/plugins/fullpage/plugin-0bd712ddf83de5ad37a6822dc4c5832d82a5e2cd1da918d5b0e41bd09f65e1f6.js","tinymce/plugins/fullscreen/plugin.js":"tinymce/plugins/fullscreen/plugin-4c0cb2c23d32be9833cac1551c8eb30c26bf06196698ce463fe0bfb842395bac.js","tinymce/plugins/help/img/logo.png":"tinymce/plugins/help/img/logo-95b06f8538b11c4c30170075a09f93cf5871f74dd2541e95ad3d9da31976fcac.png","tinymce/plugins/help/plugin.js":"tinymce/plugins/help/plugin-09c06aa8a6b13eb5aef6dfc2f25abb4b86f8c27accb396cee254b116cc99b6c7.js","tinymce/plugins/hr/plugin.js":"tinymce/plugins/hr/plugin-7efaeee8fa1f71745d5726205bbb4fd8c0f4eba1edf2baf5a31a3b59bb677622.js","tinymce/plugins/image/plugin.js":"tinymce/plugins/image/plugin-adbfb5e4fb680b636b840ec7976fbb35911014f7be60152c3a93cf004ad1b845.js","tinymce/plugins/imagetools/plugin.js":"tinymce/plugins/imagetools/plugin-f04d9af2531f05966d8f97098143cb522f99149e78ead5ed7a88dfb8c89e352b.js","tinymce/plugins/importcss/plugin.js":"tinymce/plugins/importcss/plugin-381b078db51fcc021a6220cf9f57609ed35ee67dd932669abafa5e5837460bbc.js","tinymce/plugins/insertdatetime/plugin.js":"tinymce/plugins/insertdatetime/plugin-246b2dd91f69e2b7d268c35c6aaca0569b0366bc18e85c15eca000564683b71d.js","tinymce/plugins/legacyoutput/plugin.js":"tinymce/plugins/legacyoutput/plugin-e8c2876525a55671c4ee55a2c298d3ba0eff6a8307c057893e42558eba637652.js","tinymce/plugins/link/plugin.js":"tinymce/plugins/link/plugin-ad93098fd1f1a794a1de15625ca2262a413559ad85e8af408bfab31742beb605.js","tinymce/plugins/lists/plugin.js":"tinymce/plugins/lists/plugin-36477224e13036ddab44ff5882a64eb343f533b056ca7be088a35cb1f29c0b02.js","tinymce/plugins/media/plugin.js":"tinymce/plugins/media/plugin-570acbace4fda902012c1c0596a586b521dc75cc89a4742f1bb2ecb15680b809.js","tinymce/plugins/nonbreaking/plugin.js":"tinymce/plugins/nonbreaking/plugin-6438a2f260ffa4724f0d13e99fe8fb1a85c00f16df416468ccd0bf6f722aaee6.js","tinymce/plugins/noneditable/plugin.js":"tinymce/plugins/noneditable/plugin-f3be489845e7a724465d7a2bcf8f033b8b91eda2c29193b354e634da697d2f27.js","tinymce/plugins/pagebreak/plugin.js":"tinymce/plugins/pagebreak/plugin-f4c2fa4074a982fc576ea586ee09e99091bc52d14597223c533e0967188d3a2d.js","tinymce/plugins/paste/plugin.js":"tinymce/plugins/paste/plugin-9b62122835e3f6bac7b42675a900910e6b1b7d0125be5fd29efcb04957379f74.js","tinymce/plugins/preview/plugin.js":"tinymce/plugins/preview/plugin-bdf1d10d1e637f00598d3f482895e276933c1e16b1b543d2120fb70c4fbf3d18.js","tinymce/plugins/print/plugin.js":"tinymce/plugins/print/plugin-1ba88c314fa4c0c47ab0af0aa908c03d7906a77fef6a319a302ffff44099fe26.js","tinymce/plugins/save/plugin.js":"tinymce/plugins/save/plugin-a944096bba3f8519c898163008a334509d0f4efdbcd9500d752170fdbef570b3.js","tinymce/plugins/searchreplace/plugin.js":"tinymce/plugins/searchreplace/plugin-f92c077beef380fec6358458a27442d22eaca83a81fb3c4d71d9103e2f8b9c7a.js","tinymce/plugins/spellchecker/plugin.js":"tinymce/plugins/spellchecker/plugin-7a55c4356d10d11e4500f1b789f7d3640a37e0da27b26f31498ccff1797cb674.js","tinymce/plugins/tabfocus/plugin.js":"tinymce/plugins/tabfocus/plugin-9b8833faf32cbd41142e3cf393e4d4e97a80706a8b402fd18ea82787ee46eb92.js","tinymce/plugins/table/plugin.js":"tinymce/plugins/table/plugin-da0ade4b3769d9be7aef2cf42b8efa0e518ffdc3f4c97504b000441e79f748a0.js","tinymce/plugins/template/plugin.js":"tinymce/plugins/template/plugin-c8d1a75d3ed920d3a8c5a1de1a154fde85dad3540521734f7226f8ab7fa9a83f.js","tinymce/plugins/textcolor/plugin.js":"tinymce/plugins/textcolor/plugin-ebf778e6028f2d073e3ff9219c8d49ae5f066d4819cfe7fd72bcf6be84e0f014.js","tinymce/plugins/textpattern/plugin.js":"tinymce/plugins/textpattern/plugin-68e355ae68bc6b99b4f6316ccb6e156f1dbc814b238e1fa18e46f694398319d4.js","tinymce/plugins/toc/plugin.js":"tinymce/plugins/toc/plugin-a73e6c327940360e18736b041e3345c9b678ecf553c9a1540f1c6f5275589b34.js","tinymce/plugins/visualblocks/css/visualblocks.css":"tinymce/plugins/visualblocks/css/visualblocks-859e261c1d940c90994673ce593b60946710cc4f71371164db4ea695035ea593.css","tinymce/plugins/visualblocks/plugin.js":"tinymce/plugins/visualblocks/plugin-0b55625bb357cb6113a43de563efa3b6142f7502534ebc705315ef785d052c44.js","tinymce/plugins/visualchars/plugin.js":"tinymce/plugins/visualchars/plugin-be0176f87f06dab154251d826bfb7019b5218bccd02b69c0334173d7547475c4.js","tinymce/plugins/wordcount/plugin.js":"tinymce/plugins/wordcount/plugin-c1c8b0a36661e2d8ea847cefbaac2dfd95a16bea714c7dbd3d65f51e25311a65.js","tinymce/skins/lightgray/content.inline.min.css":"tinymce/skins/lightgray/content.inline.min-b62ea4e65ad6c87cbfedf3897b59eb30ec3972c410070d8ee2c0f5bececc4cce.css","tinymce/skins/lightgray/content.min.css":"tinymce/skins/lightgray/content.min-d72493ca5cc1caca93db665b284fd12fe396a245c3e82cc2d6cf4fca83702cb9.css","tinymce/skins/lightgray/content.mobile.min.css":"tinymce/skins/lightgray/content.mobile.min-230c31f65356c7cb1799244a34f7a722c92a6d614e06e59d48db0ebccd7f2346.css","tinymce/skins/lightgray/fonts/tinymce-mobile.woff":"tinymce/skins/lightgray/fonts/tinymce-mobile-e64bf156a432d63f5b34b4567b513dc0d351b49161c7f608fb82574bfdd9d213.woff","tinymce/skins/lightgray/fonts/tinymce-small.eot":"tinymce/skins/lightgray/fonts/tinymce-small-a10fc4343d95b716c16d77463d475be5c079599ea67e1cd2bd3a94d5e7f508f9.eot","tinymce/skins/lightgray/fonts/tinymce-small.svg":"tinymce/skins/lightgray/fonts/tinymce-small-e7773001446ab937e1d8d4bd5e8dbd9b31d112037353a14b319e36dd010ed8ee.svg","tinymce/skins/lightgray/fonts/tinymce-small.ttf":"tinymce/skins/lightgray/fonts/tinymce-small-2f657502906d6f5c3fc8df3a82969114ebe030addfdc061c60c974b0f515fd09.ttf","tinymce/skins/lightgray/fonts/tinymce-small.woff":"tinymce/skins/lightgray/fonts/tinymce-small-d3efbb678ca6de5632902bd93772746ba2f8e4e2322b953936e12694a183aa31.woff","tinymce/skins/lightgray/fonts/tinymce.eot":"tinymce/skins/lightgray/fonts/tinymce-d7d36b21dc4b2dd2e4252b2b71f7b57d2d828359f2936af6e3fe8e2f913a0498.eot","tinymce/skins/lightgray/fonts/tinymce.svg":"tinymce/skins/lightgray/fonts/tinymce-e17f0683d5785645d10307971450b94e62b86f062e92fcea6a055c2443bdef5f.svg","tinymce/skins/lightgray/fonts/tinymce.ttf":"tinymce/skins/lightgray/fonts/tinymce-8c8effbf1b373e7bd3f8f291264eaefeed933fea8fe91637d81f3fc9574c3592.ttf","tinymce/skins/lightgray/fonts/tinymce.woff":"tinymce/skins/lightgray/fonts/tinymce-84d35201689d08969a92a8ccdc5a0002da01eac30651fef23e79e1993ace2ebf.woff","tinymce/skins/lightgray/img/anchor.gif":"tinymce/skins/lightgray/img/anchor-2861666fd107d278d4449970615136d06d7f746be9bb19072cf9c8f30e565e1e.gif","tinymce/skins/lightgray/img/loader.gif":"tinymce/skins/lightgray/img/loader-eb7cfd3d959b2e09c170f532e29f8b825f9bc770b2279fde58e595617753e244.gif","tinymce/skins/lightgray/img/object.gif":"tinymce/skins/lightgray/img/object-e6a15e52bc4a17b085073ba8debd4708ead6ae3d4cbeb3880c65cb7afc489777.gif","tinymce/skins/lightgray/img/trans.gif":"tinymce/skins/lightgray/img/trans-9cf020d7c3bba7f5ab10cda54aabef934f906d4f9a3acf99e9e7dc6c98579635.gif","tinymce/skins/lightgray/skin.min.css":"tinymce/skins/lightgray/skin.min-498d5ce41bbc84b0b86873b5c37a804d011b3e052c8ee92a3fe620cff7a0ef28.css","tinymce/skins/lightgray/skin.mobile.min.css":"tinymce/skins/lightgray/skin.mobile.min-9c8e5d31db4d29209970e56b8a492922c3e2dd2e0265912a9c1acf58e5a8bd41.css","tinymce/themes/inlite/theme.js":"tinymce/themes/inlite/theme-e54b5b473507ed972a017eef84a50331b6a3bb4a785f2986e6d1b49015967ae7.js","tinymce/themes/mobile/theme.js":"tinymce/themes/mobile/theme-95bcdf6b66dcd44073798fd6c04d0696ee3620cb694d052652dbefa051fecf80.js","tinymce/themes/modern/theme.js":"tinymce/themes/modern/theme-17b1c26a5228e485e18dfcdf763d08b4546836a017ae7b0225ea47706171f10b.js"}}
\ No newline at end of file
diff --git a/public/assets/active_admin-24bbef14af36d0015ef6fba11fadd481a1a630a191a27f360e2c40cf93182b37.css b/public/assets/active_admin-24bbef14af36d0015ef6fba11fadd481a1a630a191a27f360e2c40cf93182b37.css
new file mode 100644
index 00000000..3a45253e
--- /dev/null
+++ b/public/assets/active_admin-24bbef14af36d0015ef6fba11fadd481a1a630a191a27f360e2c40cf93182b37.css
@@ -0,0 +1,4 @@
+/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:0.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace, monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,html [type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}html{font-size:100.01%}body{font-size:75%;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif}h1,h2,h3,h4,h5,h6{font-weight:normal;color:#5E6469}h1 img,h2 img,h3 img,h4 img,h5 img,h6 img{margin:0}h1{font-size:3em;line-height:1;margin-bottom:0.5em}h2{font-size:2em;margin-bottom:0.75em}h3{font-size:1.5em;line-height:1;margin-bottom:1em}h4{font-size:1.2em;line-height:1.25;margin-bottom:1.25em}h5{font-size:1em;font-weight:bold;margin-bottom:1.5em}h6{font-size:1em;font-weight:bold}p{margin:0 0 1.5em}p .left{margin:1.5em 1.5em 1.5em 0;padding:0}p .right{margin:1.5em 0 1.5em 1.5em;padding:0}.left{float:left !important}.right{float:right !important}blockquote{margin:1.5em;color:#666;font-style:italic}strong,dfn{font-weight:bold}em,dfn{font-style:italic}sup,sub{line-height:0}abbr,acronym{border-bottom:1px dotted #666}address{margin:0 0 1.5em;font-style:italic}del{color:#666}pre{margin:1.5em 0;white-space:pre}pre,code,tt{font:1em 'andale mono', 'lucida console', monospace;line-height:1.5}li ul,li ol{margin:0}ul,ol{margin:0 1.5em 1.5em 0;padding-left:1.5em}ul{list-style-type:disc}ol{list-style-type:decimal}dl{margin:0 0 1.5em 0}dl dt{font-weight:bold}dd{margin-left:1.5em}table{margin-bottom:1.4em;width:100%}th{font-weight:bold}thead th{background:#c3d9ff}th,td,caption{padding:4px 10px 4px 5px}.small{font-size:.8em;margin-bottom:1.875em;line-height:1.875em}.large{font-size:1.2em;line-height:2.5em;margin-bottom:1.25em}.hide{display:none}.quiet{color:#666}.loud{color:#000}.highlight{background:#ff0}.added{background:#060;color:#fff}.removed{background:#900;color:#fff}.first{margin-left:0;padding-left:0}.last{margin-right:0;padding-right:0}.top{margin-top:0;padding-top:0}.bottom{margin-bottom:0;padding-bottom:0}#header{background-color:#6a7176;background-image:linear-gradient(180deg, #6a7176, #4d5256);border-bottom:1px solid #44484b;box-shadow:0 1px 2px rgba(0,0,0,0.37);text-shadow:#000 0 1px 0;display:table;height:20px;width:100%;overflow:visible;position:inherit;padding:5px 0;z-index:900}#header h1{display:table-cell;vertical-align:middle;white-space:nowrap;color:#cdcdcd;margin-right:20px;margin-bottom:0px;padding:3px 30px 0 30px;font-size:1.3em;font-weight:normal;line-height:1.2}#header h1 a{text-decoration:none}#header h1 a:hover{color:#fff}#header h1 img{position:relative;top:-2px}#header a,#header a:link{color:#cdcdcd}#header .header-item{top:2px;position:relative;height:20px}#header ul.tabs{display:table-cell;vertical-align:middle;height:100%;margin:0;padding:0}#header ul.tabs>li{display:inline-block;margin-right:4px;margin-top:5px;margin-bottom:5px;font-size:1.0em;position:relative}#header ul.tabs>li a{text-decoration:none;padding:6px 10px 4px 10px;position:relative;border-radius:10px}#header ul.tabs>li.current>a{background:#7b8389;color:#fff}#header ul.tabs>li.has_nested>a{background:url(/assets/active_admin/nested_menu_arrow-15084d93c65c1964d7077700ea748bd2d70cfa2d4c19707c58a9c64e232dd442.gif) no-repeat calc(100% - 7px) 50%;padding-right:20px}#header ul.tabs>li.has_nested.current>a{background:#7b8389 url(/assets/active_admin/nested_menu_arrow_dark-7c43b8e0a5f8823875f49a093c9d7a6b374f885b6f9cc248ae9cd7e6e9b29034.gif) no-repeat calc(100% - 7px) 50%;padding-right:20px}#header ul.tabs>li:hover>a{background:#7b8389;color:#fff}#header ul.tabs>li.has_nested:hover>a{border-radius:0;border-top-right-radius:10px;border-top-left-radius:10px;border-bottom:5px solid #7b8389;background:#7b8389 url(/assets/active_admin/nested_menu_arrow_dark-7c43b8e0a5f8823875f49a093c9d7a6b374f885b6f9cc248ae9cd7e6e9b29034.gif) no-repeat calc(100% - 7px) 50%;z-index:1020}#header ul.tabs>li:hover ul{display:block}#header ul.tabs>li ul{background:#7b8389;border-top-right-radius:10px;border-top-left-radius:0;border-bottom-right-radius:10px;border-bottom-left-radius:10px;box-shadow:0 1px 3px #444;position:absolute;width:120%;min-width:175px;max-width:calc(100% + 20px);margin-top:5px;float:left;display:none;padding:3px 0px 5px 0;list-style:none;z-index:1010}#header ul.tabs>li ul li{margin:0px}#header ul.tabs>li ul li a{background:none;display:block}#header ul.tabs>li ul li a:hover{color:#fff;background:none}#header ul.tabs>li ul li.current a{border-radius:0}#header #tabs{width:100%}#header #utility_nav{color:#aaa;display:table-cell;white-space:nowrap;margin:0;padding:0;padding-right:26px;text-align:right}#header #utility_nav a{text-decoration:none}#header #utility_nav a:hover{color:#fff}#header #utility_nav li{display:inline}form ul,form ol,form li,form fieldset,form legend,form input,form textarea,form select,form p{margin:0;padding:0}form ol,form ul{list-style:none}form fieldset{border:0;padding:10px 0;margin-bottom:20px}form fieldset.inputs{background:#f4f4f4;border-radius:4px;box-shadow:inset 0 1px 4px #ddd}form fieldset legend{width:100%}form fieldset legend span{display:block;background-color:#efefef;background-image:linear-gradient(180deg, #efefef, #dfe1e2);text-shadow:#fff 0 1px 0;border:solid 1px #cdcdcd;border-color:#d4d4d4;border-top-color:#e6e6e6;border-right-color:#d4d4d4;border-bottom-color:#cdcdcd;border-left-color:#d4d4d4;box-shadow:0 1px 3px rgba(0,0,0,0.12),0 0 1px #fff inset;font-size:1em;font-weight:bold;line-height:18px;margin-bottom:0.5em;color:#5E6469;padding:5px 10px 3px 10px}form fieldset ol>li{padding:10px}form fieldset ol>li label{display:block;width:20%;float:left;font-size:1.0em;font-weight:bold;color:#5E6469}form fieldset ol>li label abbr{border:none;color:#aaa}form fieldset ol>li.has_many_container{padding:20px 10px}form fieldset ol>li.has_many_container h3{font-size:12px;font-weight:bold}form fieldset ol>li.has_many_container .has_many_fields{margin:10px 0}form fieldset ol>li>li label{line-height:100%;padding-top:0}form fieldset ol>li>li label input{line-height:100%;vertical-align:middle;margin-top:-0.1em}form .has_many_fields{position:relative}form .has_many_container .handle{position:absolute;top:calc(50% - 3em / 2);right:2px;padding:0;cursor:move}form .has_many_container.ui-sortable .has_many_container{margin-right:2em}form .ui-sortable input[type=text],form .ui-sortable input[type=password],form .ui-sortable input[type=email],form .ui-sortable input[type=number],form .ui-sortable input[type=url],form .ui-sortable input[type=tel],form .ui-sortable textarea{width:calc(80% - 22px - 2em - 1px)}form fieldset>ol>li fieldset{position:relative;padding:0;margin-bottom:0}form fieldset>ol>li fieldset legend{position:absolute;width:95%;padding-top:0.1em;left:0px;font-size:100%;font-weight:normal}form fieldset>ol>li fieldset legend span{position:absolute}form fieldset>ol>li fieldset legend.label label{position:absolute}form fieldset>ol>li fieldset:not(.has_many_fields) ol{float:left;width:74%;margin:0;padding:0 0 0 20%}form fieldset>ol>li fieldset:not(.has_many_fields) ol li{padding:0;border:0}form fieldset>ol>li fieldset.has_many_fields ol{float:left;width:100%;margin:0}form input[type=text],form input[type=password],form input[type=email],form input[type=number],form input[type=url],form input[type=tel],form input[type=date],form input[type=time],form textarea{width:calc(80% - 22px);border:1px solid #c9d0d6;border-radius:3px;font-size:0.95em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;outline:none;padding:8px 10px 7px}form input[type=text]:focus,form input[type=password]:focus,form input[type=email]:focus,form input[type=number]:focus,form input[type=url]:focus,form input[type=tel]:focus,form input[type=date]:focus,form input[type=time]:focus,form textarea:focus{border:1px solid #99a2aa;box-shadow:0 0 4px #99a2aa}form input[type=date]{width:calc(100% - 22px)}form fieldset>ol>li p.inline-hints{font-size:0.95em;font-style:italic;color:#666;margin:0.5em 0 0 20%}form fieldset>ol>li.date_select fieldset ol li,form fieldset>ol>li.time_select fieldset ol li,form fieldset>ol>li.datetime_select fieldset ol li{float:left;width:auto;margin:0 0.5em 0 0}form fieldset>ol>li.date_select fieldset ol li label,form fieldset>ol>li.time_select fieldset ol li label,form fieldset>ol>li.datetime_select fieldset ol li label{display:none}form fieldset>ol>li.date_select fieldset ol li input,form fieldset>ol>li.time_select fieldset ol li input,form fieldset>ol>li.datetime_select fieldset ol li input{display:inline;margin:0;padding:0}form fieldset>ol>li.check_boxes fieldset ol,form fieldset>ol>li.radio fieldset ol{margin-bottom:-0.6em}form fieldset>ol>li.check_boxes fieldset ol li,form fieldset>ol>li.radio fieldset ol li{margin:0.1em 0 0.5em 0}form fieldset>ol>li.check_boxes fieldset ol li label,form fieldset>ol>li.radio fieldset ol li label{float:none;width:100%}form fieldset>ol>li.check_boxes fieldset ol li label input,form fieldset>ol>li.radio fieldset ol li label input{margin-right:0.2em}form fieldset>ol>li.boolean{min-height:1.1em}form fieldset>ol>li.boolean label{width:80%;padding-left:20%;padding-right:10px;text-transform:none !important;font-weight:normal}form fieldset>ol>li.boolean label input{margin:0 0.5em 0 0.2em}form fieldset>ol>li.hidden{padding:0}form fieldset>ol>li p.inline-errors{color:#932419;font-weight:bold;margin:0.3em 0 0 20%}form fieldset>ol>li ul.errors{color:#932419;margin:0.5em 0 0 20%;list-style:square}form fieldset>ol>li ul.errors li{padding:0;border:none;display:list-item}form fieldset>ol>li.error input[type=text],form fieldset>ol>li.error input[type=password],form fieldset>ol>li.error input[type=email],form fieldset>ol>li.error input[type=number],form fieldset>ol>li.error input[type=url],form fieldset>ol>li.error input[type=tel],form fieldset>ol>li.error textarea{border:1px solid #932419}form ul.errors{background:#fae6e4;border-radius:4px;color:#932419;font-weight:bold;margin-bottom:10px;padding:10px;list-style:square}form ul.errors li{margin-left:15px;padding:0;border:none;display:list-item}form input[type=submit],form input[type=button],form button{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#838a90;background-image:linear-gradient(180deg, #838a90, #414549);text-shadow:#000 0 1px 0;box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0px rgba(255,255,255,0.2) inset;border:solid 1px #484e53;border-color:#484e53;border-top-color:#616a71;border-right-color:#484e53;border-bottom-color:#363b3f;border-left-color:#484e53;color:#efefef;cursor:pointer}form input[type=submit].disabled,form input[type=button].disabled,form button.disabled{opacity:0.5;cursor:default}form input[type=submit]:not(.disabled):hover,form input[type=button]:not(.disabled):hover,form button:not(.disabled):hover{background-color:#8b9297;background-image:linear-gradient(180deg, #8b9297, #484d51)}form input[type=submit]:not(.disabled):active,form input[type=button]:not(.disabled):active,form button:not(.disabled):active{box-shadow:0 1px 3px rgba(0,0,0,0.4) inset,0 1px 0 0px #fff;background-color:#71797f;background-image:linear-gradient(180deg, #71797f, #35383b)}form .buttons,form .actions{margin-top:15px}form .buttons input[type=submit],form .buttons input[type=button],form .buttons button,form .actions input[type=submit],form .actions input[type=button],form .actions button{margin-right:10px}form .actions .create_another{float:none;margin-bottom:10px}form .actions .create_another label{float:none;display:inline}form fieldset.buttons li,form fieldset.actions li{float:left;padding:0}form fieldset.buttons li.cancel a,form fieldset.actions li.cancel a{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #E7E7E7);box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0 rgba(255,255,255,0.8) inset;border:solid 1px #c7c7c7;border-color:#c7c7c7;border-top-color:#d3d3d3;border-right-color:#c7c7c7;border-bottom-color:#c2c2c2;border-left-color:#c7c7c7;text-shadow:#fff 0 1px 0;color:#5E6469}form fieldset.buttons li.cancel a.disabled,form fieldset.actions li.cancel a.disabled{opacity:0.5;cursor:default}form fieldset.buttons li.cancel a:not(.disabled):hover,form fieldset.actions li.cancel a:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F1F1F1)}form fieldset.buttons li.cancel a:not(.disabled):active,form fieldset.actions li.cancel a:not(.disabled):active{box-shadow:0 1px 2px rgba(0,0,0,0.22) inset,0 1px 0 0px #EEE;border-color:#b9b9b9;border-top-color:#c2c2c2;border-right-color:#b9b9b9;border-bottom-color:#b7b7b7;border-left-color:#b9b9b9;background-color:#F3F3F3;background-image:linear-gradient(180deg, #F3F3F3, #D8D8D8)}.sidebar_section label{display:block;text-transform:uppercase;color:#5E6469;font-size:0.9em;font-weight:bold}.sidebar_section select{width:240px}.sidebar_section input[type=text],.sidebar_section input[type=password],.sidebar_section input[type=email],.sidebar_section input[type=url],.sidebar_section input[type=tel],.sidebar_section textarea{width:220px}form.filter_form .filter_form_field{margin-bottom:10px;clear:both}form.filter_form .filter_form_field.select_and_search input[type=text]{margin-left:16px;width:88px}form.filter_form .filter_form_field.select_and_search select{width:108px}form.filter_form .filter_form_field.filter_check_boxes label{margin-bottom:3px}form.filter_form .filter_form_field.filter_check_boxes fieldset{margin-bottom:0px;padding-bottom:0px}form.filter_form .filter_form_field.filter_check_boxes .check_boxes_wrapper label{font-weight:normal;margin-bottom:3px;text-transform:none;font-size:1.0em}form.filter_form .filter_form_field.filter_check_boxes .check_boxes_wrapper label input{vertical-align:baseline}form.filter_form .filter_form_field.filter_date_range input[type=text]{box-sizing:border-box;width:114px}form.filter_form .filter_form_field.filter_date_range input[type=text]+input{margin-left:6px}form.filter_form a.clear_filters_btn{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #E7E7E7);box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0 rgba(255,255,255,0.8) inset;border:solid 1px #c7c7c7;border-color:#c7c7c7;border-top-color:#d3d3d3;border-right-color:#c7c7c7;border-bottom-color:#c2c2c2;border-left-color:#c7c7c7;text-shadow:#fff 0 1px 0;color:#5E6469}form.filter_form a.clear_filters_btn.disabled{opacity:0.5;cursor:default}form.filter_form a.clear_filters_btn:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F1F1F1)}form.filter_form a.clear_filters_btn:not(.disabled):active{box-shadow:0 1px 2px rgba(0,0,0,0.22) inset,0 1px 0 0px #EEE;border-color:#b9b9b9;border-top-color:#c2c2c2;border-right-color:#b9b9b9;border-bottom-color:#b7b7b7;border-left-color:#b9b9b9;background-color:#F3F3F3;background-image:linear-gradient(180deg, #F3F3F3, #D8D8D8)}.comments .active_admin_comment{clear:both;margin-top:10px;margin-bottom:40px;max-width:700px}.comments .active_admin_comment .active_admin_comment_meta{width:130px;float:left;overflow:hidden;font-size:0.9em;color:#767e84}.comments .active_admin_comment .active_admin_comment_meta .active_admin_comment_author{font-size:1.2em;font-weight:bold;margin:0;color:#5E6469}.comments .active_admin_comment .active_admin_comment_body{margin-left:150px}.comments form.active_admin_comment{margin:0;padding:0;margin-left:150px}.comments form.active_admin_comment fieldset.inputs{margin:0;padding:0;background:none;box-shadow:none}.comments form.active_admin_comment li{padding:0}.comments form.active_admin_comment fieldset.buttons{padding:0;margin-top:5px}body.logged_in .flash{background-color:#f7f1d3;background-image:linear-gradient(180deg, #f7f1d3, #f5edc5);text-shadow:#fafafa 0 1px 0;border-bottom:1px solid #eee098;color:#cb9810;font-weight:bold;font-size:1.1em;line-height:1.0em;padding:13px 30px 11px;position:relative}body.logged_in .flash.flash_notice{background-color:#dce9dd;background-image:linear-gradient(180deg, #dce9dd, #ccdfcd);border-bottom:1px solid #adcbaf;color:#416347}body.logged_in .flash.flash_error{background-color:#f5e4e4;background-image:linear-gradient(180deg, #f5e4e4, #f1dcdc);border-bottom:1px solid #e0c2c0;color:#b33c33}body.logged_out .flash{box-shadow:none;text-shadow:#fff 0 1px 0;background:none;color:#666;font-weight:bold;line-height:1.0em;padding:0;margin-bottom:8px}.ui-datepicker{background:#fff;background-clip:padding-box;color:#fff;display:none;margin-top:2px;padding:0;text-align:center;width:160px}.ui-datepicker a{text-decoration:none}.ui-datepicker a:hover{cursor:pointer}.ui-datepicker .ui-datepicker-header{height:14px;background-color:#6a7176;background-image:linear-gradient(180deg, #6a7176, #4d5256);border-bottom:1px solid #44484b;padding:12px 5px 7px 4px;margin:0px 0px 2px 2px;width:147px;border-top-left-radius:7px;border-top-right-radius:7px;position:relative;z-index:2000}.ui-datepicker .ui-datepicker-header:before{content:"";position:absolute;right:45%;top:-6px;width:0px;height:0px;border-left:8.5px solid transparent;border-right:8.5px solid transparent;border-bottom:10px solid #676e73}.ui-datepicker .ui-datepicker-header .ui-datepicker-title{text-shadow:#000 0 1px 0;color:#fff;display:block;font-size:1.1em;font-weight:bold;line-height:0.8em;text-align:center}.ui-datepicker .ui-datepicker-header .ui-datepicker-title .ui-datepicker-month{margin:-4px 0 0 0}.ui-datepicker .ui-datepicker-header .ui-datepicker-title .ui-datepicker-year{margin:-4px 0 0 0}.ui-datepicker .ui-datepicker-header a{color:#fff;display:block;height:19px;margin-top:-4px;width:10px}.ui-datepicker .ui-datepicker-header a.ui-datepicker-prev{float:left;width:0;height:0;margin:0px 0px 0px 4px;border-top:5px solid transparent;border-right:5px solid white;border-bottom:5px solid transparent}.ui-datepicker .ui-datepicker-header a.ui-datepicker-next{float:right;width:0;height:0;margin:0px 4px 0px 0px;border-top:5px solid transparent;border-left:5px solid white;border-bottom:5px solid transparent}.ui-datepicker .ui-datepicker-header a span{display:none}.ui-datepicker table.ui-datepicker-calendar{border-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;box-shadow:0 1px 6px rgba(0,0,0,0.26);background-color:#f4f4f4;border:solid 1px #63686e;left:2px;margin-bottom:0px;position:relative;top:-2px;width:156px}.ui-datepicker table.ui-datepicker-calendar td,.ui-datepicker table.ui-datepicker-calendar th{padding:0px;text-align:center}.ui-datepicker table.ui-datepicker-calendar thead th{background-color:#dbdddf;color:#333333;font-weight:normal;font-size:0.8em;padding-top:1px}.ui-datepicker table.ui-datepicker-calendar tbody{color:#666666}.ui-datepicker table.ui-datepicker-calendar tbody td{border:none;height:24px;width:22px}.ui-datepicker table.ui-datepicker-calendar tbody td a{border-radius:3px;color:#666666;font-weight:bold;font-size:0.85em;padding:4px}.ui-datepicker table.ui-datepicker-calendar tbody td a.ui-state-active{background-color:#5a5f64;color:#fff}.ui-datepicker table.ui-datepicker-calendar tbody td a.ui-state-active.ui-state-hover{background-color:#5a5f64;color:#fff}.ui-datepicker table.ui-datepicker-calendar tbody td a.ui-state-hover{background-color:#eceef0}.ui-datepicker table.ui-datepicker-calendar tbody td a.ui-state-highlight{background-color:#dbdddf}table tr td{vertical-align:top}table tr th{text-align:left}table.index_table{width:100%;margin-bottom:10px;border:0;border-spacing:0}table.index_table th{background-color:#efefef;background-image:linear-gradient(180deg, #efefef, #dfe1e2);text-shadow:#fff 0 1px 0;border:solid 1px #cdcdcd;border-color:#d4d4d4;border-top-color:#e6e6e6;border-right-color:#d4d4d4;border-bottom-color:#cdcdcd;border-left-color:#d4d4d4;box-shadow:0 1px 3px rgba(0,0,0,0.12),0 0 1px #fff inset;font-size:1em;font-weight:bold;line-height:18px;margin-bottom:0.5em;color:#5E6469;padding:5px 10px 3px 10px;border-right:none;padding-left:12px;padding-right:12px}table.index_table th a,table.index_table th a:link,table.index_table th a:visited{color:#5E6469;text-decoration:none;display:block;white-space:nowrap}table.index_table th.sortable a{background:url(/assets/active_admin/orderable-29374dbb55b0012d78a37c614d573bb3474f0779849b478a147d0f1845ca6617.png) no-repeat 0 4px;padding-left:13px}table.index_table th.sorted-asc a{background-position:0 -27px}table.index_table th.sorted-desc a{background-position:0 -56px}table.index_table th.sorted-asc,table.index_table th.sorted-desc{background-color:#e2e2e2;background-image:linear-gradient(180deg, #e2e2e2, #d2d4d6)}table.index_table th:last-child{border-right:solid 1px #d4d4d4}table.index_table tr.even td{background:#f4f5f5}table.index_table tr.selected td{background:#d9e4ec}table.index_table td{padding:10px 12px 8px 12px;border-bottom:1px solid #e8e8e8;vertical-align:top}.panel_contents table{margin-top:5px}.panel_contents table th{padding-top:10px;background:none;color:#5E6469;box-shadow:none;text-shadow:#fff 0 1px 0;text-transform:uppercase;border-bottom:1px solid #ccc}.panel_contents table tr.odd td{background:#ecedee}.panel_contents table tr.even td{background:#f4f5f5}.attributes_table{overflow:hidden}.attributes_table table col.even{background:#f4f5f5}.attributes_table table col.odd{background:#ecedee}.attributes_table table th,.attributes_table table td{padding:8px 12px 6px 12px;vertical-align:top;border-bottom:1px solid #e8e8e8}.attributes_table table th{box-shadow:none;background-color:none;width:150px;font-size:0.9em;padding-left:0;text-transform:uppercase;color:#5E6469;text-shadow:#fff 0 1px 0}.attributes_table table td .empty{color:#bbb;font-size:0.8em;text-transform:uppercase;letter-spacing:0.2em}.sidebar_section .attributes_table th{width:50px}#collection_selection_toggle_panel:after{visibility:hidden;display:block;content:"";clear:both;height:0}#collection_selection_toggle_panel>.resource_selection_toggle_cell{float:left}.ui-widget-overlay{position:fixed;background:rgba(0,0,0,0.2);top:0;left:0;right:0;bottom:0;z-index:1001}.ui-dialog{position:fixed;z-index:1002;background:#f4f4f4;border-radius:4px;box-shadow:inset 0 1px 4px #ddd;box-shadow:rgba(0,0,0,0.5) 0 0 10px}.ui-dialog .ui-dialog-titlebar{background-color:#efefef;background-image:linear-gradient(180deg, #efefef, #dfe1e2);text-shadow:#fff 0 1px 0;border:solid 1px #cdcdcd;border-color:#d4d4d4;border-top-color:#e6e6e6;border-right-color:#d4d4d4;border-bottom-color:#cdcdcd;border-left-color:#d4d4d4;box-shadow:0 1px 3px rgba(0,0,0,0.12),0 0 1px #fff inset;font-size:1em;font-weight:bold;line-height:18px;margin-bottom:0.5em;color:#5E6469;padding:5px 10px 3px 10px}.ui-dialog .ui-dialog-titlebar span{font-size:1.1em}.ui-dialog ul{list-style-type:none}.ui-dialog li{margin:10px 0}.ui-dialog label{margin-right:10px}.ui-dialog .ui-dialog-buttonpane,.ui-dialog form{padding:7px 15px 13px}.ui-dialog .ui-dialog-buttonpane button{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#838a90;background-image:linear-gradient(180deg, #838a90, #414549);text-shadow:#000 0 1px 0;box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0px rgba(255,255,255,0.2) inset;border:solid 1px #484e53;border-color:#484e53;border-top-color:#616a71;border-right-color:#484e53;border-bottom-color:#363b3f;border-left-color:#484e53;color:#efefef}.ui-dialog .ui-dialog-buttonpane button.disabled{opacity:0.5;cursor:default}.ui-dialog .ui-dialog-buttonpane button:not(.disabled):hover{background-color:#8b9297;background-image:linear-gradient(180deg, #8b9297, #484d51)}.ui-dialog .ui-dialog-buttonpane button:not(.disabled):active{box-shadow:0 1px 3px rgba(0,0,0,0.4) inset,0 1px 0 0px #fff;background-color:#71797f;background-image:linear-gradient(180deg, #71797f, #35383b)}.ui-dialog .ui-dialog-buttonpane button:last-child{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #E7E7E7);box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0 rgba(255,255,255,0.8) inset;border:solid 1px #c7c7c7;border-color:#c7c7c7;border-top-color:#d3d3d3;border-right-color:#c7c7c7;border-bottom-color:#c2c2c2;border-left-color:#c7c7c7;text-shadow:#fff 0 1px 0;color:#5E6469}.ui-dialog .ui-dialog-buttonpane button:last-child.disabled{opacity:0.5;cursor:default}.ui-dialog .ui-dialog-buttonpane button:last-child:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F1F1F1)}.ui-dialog .ui-dialog-buttonpane button:last-child:not(.disabled):active{box-shadow:0 1px 2px rgba(0,0,0,0.22) inset,0 1px 0 0px #EEE;border-color:#b9b9b9;border-top-color:#c2c2c2;border-right-color:#b9b9b9;border-bottom-color:#b7b7b7;border-left-color:#b9b9b9;background-color:#F3F3F3;background-image:linear-gradient(180deg, #F3F3F3, #D8D8D8)}.active_admin_dialog.ui-dialog .ui-dialog-titlebar-close{display:none}.blank_slate_container{clear:both;text-align:center}.blank_slate_container .blank_slate{border-radius:3px;border:1px dashed #DADADA;color:#AAA;display:inline-block;font-size:1.2em;font-weight:bold;padding:14px 25px;text-align:center}.blank_slate_container .blank_slate small{display:block;font-size:0.9em;font-weight:normal}.admin_dashboard .blank_slate_container .blank_slate{margin-top:40px;margin-bottom:40px}.with_sidebar .blank_slate_container .blank_slate{margin-top:80px}.breadcrumb{display:block;font-size:0.9em;font-weight:normal;line-height:1.0em;margin-bottom:12px;text-transform:uppercase}.breadcrumb a,.breadcrumb a:link,.breadcrumb a:visited,.breadcrumb a:active{color:#8a949e;text-decoration:none}.breadcrumb a:hover{text-decoration:underline}.breadcrumb .breadcrumb_sep{margin:0 2px;color:#aab2ba}.dropdown_menu{display:inline}.dropdown_menu .dropdown_menu_button{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #E7E7E7);box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0 rgba(255,255,255,0.8) inset;border:solid 1px #c7c7c7;border-color:#c7c7c7;border-top-color:#d3d3d3;border-right-color:#c7c7c7;border-bottom-color:#c2c2c2;border-left-color:#c7c7c7;text-shadow:#fff 0 1px 0;color:#5E6469;position:relative;padding-right:22px !important;cursor:pointer}.dropdown_menu .dropdown_menu_button.disabled{opacity:0.5;cursor:default}.dropdown_menu .dropdown_menu_button:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F1F1F1)}.dropdown_menu .dropdown_menu_button:not(.disabled):active{box-shadow:0 1px 2px rgba(0,0,0,0.22) inset,0 1px 0 0px #EEE;border-color:#b9b9b9;border-top-color:#c2c2c2;border-right-color:#b9b9b9;border-bottom-color:#b7b7b7;border-left-color:#b9b9b9;background-color:#F3F3F3;background-image:linear-gradient(180deg, #F3F3F3, #D8D8D8)}.dropdown_menu .dropdown_menu_button:before{content:' ';position:absolute;width:0;height:0;border-width:3px 3px 0;border-style:solid;border-color:#FFF transparent;right:12px;top:45%}.dropdown_menu .dropdown_menu_button:after{content:' ';position:absolute;width:0;height:0;border-width:3px 3px 0;border-style:solid;border-color:#777 transparent;right:12px;top:45%}.dropdown_menu .dropdown_menu_nipple{content:"";position:absolute;top:-6px;display:block;width:0;height:0;border-width:0 6px 6px;border-style:solid;border-color:#545a5e transparent;z-index:100}.dropdown_menu .dropdown_menu_nipple:before{content:' ';position:absolute;width:0;height:0;border-width:0 5px 5px;border-style:solid;border-color:#838a90 transparent;left:-5px;top:1px}.dropdown_menu .dropdown_menu_nipple:after{content:' ';position:absolute;width:0;height:0;border-width:0 5px 5px;border-style:solid;border-color:#686e74 transparent;left:-5px;top:2px}.dropdown_menu .dropdown_menu_list_wrapper{display:inline-block;position:absolute;background-color:white;padding:2px;box-shadow:rgba(0,0,0,0.4) 0 1px 3px,#838a90 0px 1px 0px 0px inset;background-color:#5E6469;background-color:#686e74;background-image:linear-gradient(180deg, #686e74, #52575c);border:solid 1px #464a4e;border-top-color:#545a5e;border-bottom-color:#35383b;border-radius:4px;z-index:2000;display:none}.dropdown_menu .dropdown_menu_list_wrapper .dropdown_menu_list{display:block;background-color:#FFF;border:solid 1px #464a4e;box-shadow:#6a7176 0px 1px 0px 0px;border-radius:3px;margin:0;overflow:hidden;padding:8px;list-style-type:none;padding:0}.dropdown_menu .dropdown_menu_list_wrapper .dropdown_menu_list li{display:block;border-bottom:solid 1px #ebebeb;box-sizing:border-box}.dropdown_menu .dropdown_menu_list_wrapper .dropdown_menu_list li a{display:block;box-sizing:padding-box;font-size:0.95em;font-weight:bold;padding:7px 16px 5px;text-decoration:none;text-align:center;white-space:nowrap}.dropdown_menu .dropdown_menu_list_wrapper .dropdown_menu_list li a:hover{background-color:#75a1c2;background-image:linear-gradient(180deg, #75a1c2, #608cb4);text-shadow:#5a83aa 0 1px 0;color:#FFF}.dropdown_menu .dropdown_menu_list_wrapper .dropdown_menu_list li a:active{background-color:#608cb4;background-image:linear-gradient(180deg, #608cb4, #75a1c2);color:#FFF}.dropdown_menu .dropdown_menu_list_wrapper .dropdown_menu_list li:first-child a{border-top-left-radius:2px;border-top-right-radius:2px}.dropdown_menu .dropdown_menu_list_wrapper .dropdown_menu_list li:last-child{border:none}.dropdown_menu .dropdown_menu_list_wrapper .dropdown_menu_list li:last-child a{border-bottom-left-radius:2px;border-bottom-right-radius:2px}a.member_link{margin-right:7px;white-space:nowrap}a.button,a:link.button,a:visited.button,input[type=submit],input[type=button],button{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#838a90;background-image:linear-gradient(180deg, #838a90, #414549);text-shadow:#000 0 1px 0;box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0px rgba(255,255,255,0.2) inset;border:solid 1px #484e53;border-color:#484e53;border-top-color:#616a71;border-right-color:#484e53;border-bottom-color:#363b3f;border-left-color:#484e53;color:#efefef}a.button.disabled,a:link.button.disabled,a:visited.button.disabled,input[type=submit].disabled,input[type=button].disabled,button.disabled{opacity:0.5;cursor:default}a.button:not(.disabled):hover,a:link.button:not(.disabled):hover,a:visited.button:not(.disabled):hover,input[type=submit]:not(.disabled):hover,input[type=button]:not(.disabled):hover,button:not(.disabled):hover{background-color:#8b9297;background-image:linear-gradient(180deg, #8b9297, #484d51)}a.button:not(.disabled):active,a:link.button:not(.disabled):active,a:visited.button:not(.disabled):active,input[type=submit]:not(.disabled):active,input[type=button]:not(.disabled):active,button:not(.disabled):active{box-shadow:0 1px 3px rgba(0,0,0,0.4) inset,0 1px 0 0px #fff;background-color:#71797f;background-image:linear-gradient(180deg, #71797f, #35383b)}table.index_grid td{border:none;background:none;padding:0 20px 20px 0;margin:0}.columns{clear:both;padding:0}.columns .column{float:left}a,a:link,a:visited{color:#38678b;text-decoration:underline}a:hover{text-decoration:none}.paginated_collection_contents{clear:both}.pagination{float:right;font-size:0.9em;margin-left:10px}.pagination a{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #E7E7E7);box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0 rgba(255,255,255,0.8) inset;border:solid 1px #c7c7c7;border-color:#c7c7c7;border-top-color:#d3d3d3;border-right-color:#c7c7c7;border-bottom-color:#c2c2c2;border-left-color:#c7c7c7;text-shadow:#fff 0 1px 0;color:#5E6469}.pagination a.disabled{opacity:0.5;cursor:default}.pagination a:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F1F1F1)}.pagination a:not(.disabled):active{box-shadow:0 1px 2px rgba(0,0,0,0.22) inset,0 1px 0 0px #EEE;border-color:#b9b9b9;border-top-color:#c2c2c2;border-right-color:#b9b9b9;border-bottom-color:#b7b7b7;border-left-color:#b9b9b9;background-color:#F3F3F3;background-image:linear-gradient(180deg, #F3F3F3, #D8D8D8)}.pagination span.page.current{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#838a90;background-image:linear-gradient(180deg, #838a90, #414549);text-shadow:#000 0 1px 0;box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0px rgba(255,255,255,0.2) inset;border:solid 1px #484e53;border-color:#484e53;border-top-color:#616a71;border-right-color:#484e53;border-bottom-color:#363b3f;border-left-color:#484e53;color:#efefef}.pagination span.page.current.disabled{opacity:0.5;cursor:default}.pagination span.page.current:not(.disabled):hover{background-color:#8b9297;background-image:linear-gradient(180deg, #8b9297, #484d51)}.pagination span.page.current:not(.disabled):active{box-shadow:0 1px 3px rgba(0,0,0,0.4) inset,0 1px 0 0px #fff;background-color:#71797f;background-image:linear-gradient(180deg, #71797f, #35383b)}.pagination a,.pagination span.page.current{border-radius:0px;margin-right:4px;padding:2px 5px}.pagination_information{float:right;margin-bottom:5px;color:#b3bcc1}.pagination_information b{color:#5c6469}.download_links{float:left}.pagination_per_page{float:right;margin-left:4px}.pagination_per_page select{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #E7E7E7);box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0 rgba(255,255,255,0.8) inset;border:solid 1px #c7c7c7;border-color:#c7c7c7;border-top-color:#d3d3d3;border-right-color:#c7c7c7;border-bottom-color:#c2c2c2;border-left-color:#c7c7c7;text-shadow:#fff 0 1px 0;color:#5E6469;border-radius:0px;padding:1px 5px}.pagination_per_page select.disabled{opacity:0.5;cursor:default}.pagination_per_page select:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F1F1F1)}.pagination_per_page select:not(.disabled):active{box-shadow:0 1px 2px rgba(0,0,0,0.22) inset,0 1px 0 0px #EEE;border-color:#b9b9b9;border-top-color:#c2c2c2;border-right-color:#b9b9b9;border-bottom-color:#b7b7b7;border-left-color:#b9b9b9;background-color:#F3F3F3;background-image:linear-gradient(180deg, #F3F3F3, #D8D8D8)}.comments .pagination{float:left;margin-bottom:30px}.comments .pagination_information{float:left;color:#000}.section,.panel{background:#f4f4f4;border-radius:4px;box-shadow:inset 0 1px 4px #ddd;margin-bottom:20px}.section>h3,.panel>h3{background-color:#efefef;background-image:linear-gradient(180deg, #efefef, #dfe1e2);text-shadow:#fff 0 1px 0;border:solid 1px #cdcdcd;border-color:#d4d4d4;border-top-color:#e6e6e6;border-right-color:#d4d4d4;border-bottom-color:#cdcdcd;border-left-color:#d4d4d4;box-shadow:0 1px 3px rgba(0,0,0,0.12),0 0 1px #fff inset;font-size:1em;font-weight:bold;line-height:18px;margin-bottom:0.5em;color:#5E6469;padding:5px 10px 3px 10px}.section>h3 .header_action,.panel>h3 .header_action{float:right}.section>div,.panel>div{padding:3px 15px 15px 15px}.section hr,.panel hr{border:none;border-bottom:1px solid #E8E8E8}.sidebar_section{background:#f4f4f4;border-radius:4px;box-shadow:inset 0 1px 4px #ddd;margin-bottom:20px}.sidebar_section>h3{background-color:#efefef;background-image:linear-gradient(180deg, #efefef, #dfe1e2);text-shadow:#fff 0 1px 0;border:solid 1px #cdcdcd;border-color:#d4d4d4;border-top-color:#e6e6e6;border-right-color:#d4d4d4;border-bottom-color:#cdcdcd;border-left-color:#d4d4d4;box-shadow:0 1px 3px rgba(0,0,0,0.12),0 0 1px #fff inset;font-size:1em;font-weight:bold;line-height:18px;margin-bottom:0.5em;color:#5E6469;padding:5px 10px 3px 10px}.sidebar_section>h3 .header_action{float:right}.sidebar_section>div{padding:3px 15px 15px 15px}.sidebar_section hr{border:none;border-bottom:1px solid #E8E8E8}.columns{margin-bottom:10px}.scopes li .count{color:#8e979e;font-weight:normal;font-size:0.9em;line-height:10px}.scopes li:first-child a{margin-left:10px}.status_tag{background:#cacaca;color:#fff;text-transform:uppercase;letter-spacing:0.15em;padding:3px 5px 2px 5px;font-size:0.8em}.status_tag.ok,.status_tag.published,.status_tag.complete,.status_tag.completed,.status_tag.green{background:#8daa92}.status_tag.warn,.status_tag.warning,.status_tag.orange{background:#e29b20}.status_tag.error,.status_tag.errored,.status_tag.red{background:#d45f53}.status_tag.yes{background:#6090DB}.status_tag.no{background:grey}.table_tools{margin-bottom:16px}.table_tools:after{visibility:hidden;display:block;content:"";clear:both;height:0}.table_tools .dropdown_menu{float:left}a.table_tools_button,.table_tools .dropdown_menu_button{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #E7E7E7);box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0 rgba(255,255,255,0.8) inset;border:solid 1px #c7c7c7;border-color:#c7c7c7;border-top-color:#d3d3d3;border-right-color:#c7c7c7;border-bottom-color:#c2c2c2;border-left-color:#c7c7c7;text-shadow:#fff 0 1px 0;color:#5E6469;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F0F0F0);border-color:#d0d0d0;border-top-color:#d9d9d9;border-right-color:#d0d0d0;border-bottom-color:#c5c5c5;border-left-color:#d0d0d0;font-size:0.9em;padding:4px 14px 4px;margin:0}a.table_tools_button.disabled,.table_tools .dropdown_menu_button.disabled{opacity:0.5;cursor:default}a.table_tools_button:not(.disabled):hover,.table_tools .dropdown_menu_button:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F1F1F1)}a.table_tools_button:not(.disabled):active,.table_tools .dropdown_menu_button:not(.disabled):active{box-shadow:0 1px 2px rgba(0,0,0,0.22) inset,0 1px 0 0px #EEE;border-color:#b9b9b9;border-top-color:#c2c2c2;border-right-color:#b9b9b9;border-bottom-color:#b7b7b7;border-left-color:#b9b9b9;background-color:#F3F3F3;background-image:linear-gradient(180deg, #F3F3F3, #D8D8D8)}a.table_tools_button:not(.disabled):hover,.table_tools .dropdown_menu_button:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F6F6F6)}a.table_tools_button:not(.disabled):active,.table_tools .dropdown_menu_button:not(.disabled):active{border-color:#c8c8c8;border-top-color:#d7d7d7;border-right-color:#c8c8c8;border-bottom-color:#c3c3c3;border-left-color:#c8c8c8;box-shadow:0 1px 1px 0 rgba(0,0,0,0.17) inset;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #E8E8E8)}.table_tools_segmented_control{list-style-type:none;padding:0;margin:0}.table_tools_segmented_control li{float:left}.table_tools_segmented_control li a{border-width:1px .5px 1px .5px;border-radius:0}.table_tools_segmented_control li:first-child a{border-left-width:1px;border-top-left-radius:12px;border-bottom-left-radius:12px}.table_tools_segmented_control li:last-child a{border-right-width:1px;border-top-right-radius:12px;border-bottom-right-radius:12px}.table_tools_segmented_control li.selected a{background-color:#F0F0F0;background-image:linear-gradient(180deg, #F0F0F0, #FDFDFD);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1) inset;cursor:default}.table_tools_segmented_control li.selected a:hover{background-color:#F0F0F0;background-image:linear-gradient(180deg, #F0F0F0, #FDFDFD)}.indexes{float:right}.indexes li .count{color:#8e979e;font-weight:normal;font-size:0.9em;line-height:10px}.unsupported_browser{padding:10px 30px;color:#211e14;background-color:#fae692;background-color:#feefae;background-image:linear-gradient(180deg, #feefae, #fae692);border-bottom:1px solid #b3a569}.unsupported_browser h1{font-size:13px;font-weight:bold}.unsupported_browser p{margin-bottom:0.5em}.ui-tabs-nav{list-style:none;display:block;width:auto;margin-bottom:-12px;padding-left:0;overflow:auto;margin-left:15px}.ui-tabs-nav li{display:block;position:relative;margin:0;padding:0;float:left}.ui-tabs-nav li:first-child a{border-left-width:1px;border-top-left-radius:12px;border-bottom-left-radius:12px}.ui-tabs-nav li:last-child a{border-right-width:1px;border-top-right-radius:12px;border-bottom-right-radius:12px}.ui-tabs-nav li a{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #E7E7E7);box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0 rgba(255,255,255,0.8) inset;border:solid 1px #c7c7c7;border-color:#c7c7c7;border-top-color:#d3d3d3;border-right-color:#c7c7c7;border-bottom-color:#c2c2c2;border-left-color:#c7c7c7;text-shadow:#fff 0 1px 0;color:#5E6469;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F0F0F0);border-color:#d0d0d0;border-top-color:#d9d9d9;border-right-color:#d0d0d0;border-bottom-color:#c5c5c5;border-left-color:#d0d0d0;text-decoration:none;border-radius:0;border-width:1px .5px 1px .5px;margin-right:0;padding:4px 14px 4px}.ui-tabs-nav li a.disabled{opacity:0.5;cursor:default}.ui-tabs-nav li a:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F1F1F1)}.ui-tabs-nav li a:not(.disabled):active{box-shadow:0 1px 2px rgba(0,0,0,0.22) inset,0 1px 0 0px #EEE;border-color:#b9b9b9;border-top-color:#c2c2c2;border-right-color:#b9b9b9;border-bottom-color:#b7b7b7;border-left-color:#b9b9b9;background-color:#F3F3F3;background-image:linear-gradient(180deg, #F3F3F3, #D8D8D8)}.ui-tabs-nav li a:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F6F6F6)}.ui-tabs-nav li.ui-tabs-active a{cursor:default;background-color:#F0F0F0;background-image:linear-gradient(180deg, #F0F0F0, #FDFDFD);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1) inset}.ui-tabs-nav li.ui-tabs-active a a:hover{background-color:#F0F0F0;background-image:linear-gradient(180deg, #F0F0F0, #FDFDFD)}.tab-content{border:1px solid #D3D3D3;padding:15px;padding-top:30px;text-align:left}body.logged_out{background:#e8e9ea}body.logged_out #content_wrapper{width:500px;margin:70px auto}body.logged_out #content_wrapper #active_admin_content{box-shadow:0 1px 2px rgba(0,0,0,0.37);background:#fff;padding:13px 30px}body.logged_out h2{background-color:#efefef;background-image:linear-gradient(180deg, #efefef, #dfe1e2);text-shadow:#fff 0 1px 0;border:solid 1px #cdcdcd;border-color:#d4d4d4;border-top-color:#e6e6e6;border-right-color:#d4d4d4;border-bottom-color:#cdcdcd;border-left-color:#d4d4d4;box-shadow:0 1px 3px rgba(0,0,0,0.12),0 0 1px #fff inset;font-size:1em;font-weight:bold;line-height:18px;margin-bottom:0.5em;color:#5E6469;padding:5px 10px 3px 10px;background-color:#6a7176;background-image:linear-gradient(180deg, #6a7176, #4d5256);border-bottom:1px solid #44484b;text-shadow:#000 0 1px 0;box-shadow:0 1px 3px rgba(0,0,0,0.3);border:none;color:#fff;margin:-13px -30px 20px -30px}body.logged_out #login form fieldset{box-shadow:none;background:none;padding:0;margin-bottom:0}body.logged_out #login form fieldset li{padding:10px 0}body.logged_out #login form fieldset input[type=text],body.logged_out #login form fieldset input[type=email],body.logged_out #login form fieldset input[type=password]{width:70%}body.logged_out #login form fieldset.buttons{margin-left:20%}body.logged_out #login a{float:right;margin-top:-32px}#footer{padding:30px 30px;font-size:0.8em;clear:both}#footer p{padding-top:10px}#index_footer{padding-top:5px;text-align:right;font-size:0.85em}.index_content{clear:both}#wrapper{width:100%}.index #wrapper{display:table}#active_admin_content{margin:0;padding:30px}#active_admin_content #main_content_wrapper{float:left;width:100%}#active_admin_content #main_content_wrapper #main_content{margin-right:300px}#active_admin_content.without_sidebar #main_content_wrapper #main_content{margin-right:0}#active_admin_content #sidebar{float:left;width:270px;margin-left:-270px}#title_bar{background-color:#efefef;background-image:linear-gradient(180deg, #efefef, #dfe1e2);text-shadow:#fff 0 1px 0;border:solid 1px #cdcdcd;border-color:#d4d4d4;border-top-color:#e6e6e6;border-right-color:#d4d4d4;border-bottom-color:#cdcdcd;border-left-color:#d4d4d4;box-shadow:0 1px 3px rgba(0,0,0,0.12),0 0 1px #fff inset;font-size:1em;font-weight:bold;line-height:18px;margin-bottom:0.5em;color:#5E6469;padding:5px 10px 3px 10px;box-sizing:border-box;box-shadow:0 1px 2px rgba(0,0,0,0.37);display:table;border-bottom-color:#EEE;width:100%;position:relative;margin:0;padding:10px 30px;z-index:800}#title_bar:after{visibility:hidden;display:block;content:"";clear:both;height:0}#title_bar #titlebar_left,#title_bar #titlebar_right{height:50px;vertical-align:middle;display:table-cell}#title_bar #titlebar_right{text-align:right}#title_bar h2{margin:0;padding:0;font-size:2.6em;line-height:100%;font-weight:bold}#title_bar .action_items span.action_item>a,#title_bar .action_items span.action_item>.dropdown_menu>a{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #E7E7E7);box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0 rgba(255,255,255,0.8) inset;border:solid 1px #c7c7c7;border-color:#c7c7c7;border-top-color:#d3d3d3;border-right-color:#c7c7c7;border-bottom-color:#c2c2c2;border-left-color:#c7c7c7;text-shadow:#fff 0 1px 0;color:#5E6469;padding:12px 17px 10px;margin:0px}#title_bar .action_items span.action_item>a.disabled,#title_bar .action_items span.action_item>.dropdown_menu>a.disabled{opacity:0.5;cursor:default}#title_bar .action_items span.action_item>a:not(.disabled):hover,#title_bar .action_items span.action_item>.dropdown_menu>a:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F1F1F1)}#title_bar .action_items span.action_item>a:not(.disabled):active,#title_bar .action_items span.action_item>.dropdown_menu>a:not(.disabled):active{box-shadow:0 1px 2px rgba(0,0,0,0.22) inset,0 1px 0 0px #EEE;border-color:#b9b9b9;border-top-color:#c2c2c2;border-right-color:#b9b9b9;border-bottom-color:#b7b7b7;border-left-color:#b9b9b9;background-color:#F3F3F3;background-image:linear-gradient(180deg, #F3F3F3, #D8D8D8)}body{font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:1.5;font-size:72%;background:#FFF;color:#323537}/*!
+ * Font Awesome Free 5.6.1 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ */@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:900;src:url("../fonts/font-awesome/fa-solid-900.eot");src:url("../fonts/font-awesome/fa-solid-900.eot#iefix") format("embedded-opentype"),url("../fonts/font-awesome/fa-solid-900.woff2") format("woff2"),url("../fonts/font-awesome/fa-solid-900.woff") format("woff"),url("../fonts/font-awesome/fa-solid-900.ttf") format("truetype"),url("../fonts/font-awesome/fa-solid-900.svg#fontawesome") format("svg")}@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:400;src:url("../fonts/font-awesome/fa-regular-400.eot");src:url("../fonts/font-awesome/fa-regular-400.eot#iefix") format("embedded-opentype"),url("../fonts/font-awesome/fa-regular-400.woff2") format("woff2"),url("../fonts/font-awesome/fa-regular-400.woff") format("woff"),url("../fonts/font-awesome/fa-regular-400.ttf") format("truetype"),url("../fonts/font-awesome/fa-regular-400.svg#fontawesome") format("svg")}@font-face{font-family:'Font Awesome 5 Brands';font-style:normal;font-weight:normal;src:url("../fonts/font-awesome/fa-brands-400.eot");src:url("../fonts/font-awesome/fa-brands-400.eot#iefix") format("embedded-opentype"),url("../fonts/font-awesome/fa-brands-400.woff2") format("woff2"),url("../fonts/font-awesome/fa-brands-400.woff") format("woff"),url("../fonts/font-awesome/fa-brands-400.ttf") format("truetype"),url("../fonts/font-awesome/fa-brands-400.svg#fontawesome") format("svg")}.fa,.fas{font-family:'Font Awesome 5 Free';font-weight:900}.far{font-family:'Font Awesome 5 Free';font-weight:400}.fab{font-family:'Font Awesome 5 Brands'}.fa,.fas,.far,.fal,.fab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:0.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid 0.08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fas.fa-pull-left,.far.fa-pull-left,.fal.fa-pull-left,.fab.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fas.fa-pull-right,.far.fa-pull-right,.fal.fa-pull-right,.fab.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scale(1, -1)}.fa-flip-horizontal.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scale(-1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-balance-scale:before{content:"\f24e"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-icicles:before{content:"\f7ad"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-nintendo-switch:before{content:"\f418"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-volume:before{content:"\f2a0"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0, 0, 0, 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.quantity{text-align:right !important;white-space:nowrap}table{clear:both;margin-top:1em;margin-bottom:1em;border-spacing:2px}table th{padding:0.3em 0.6em}table.list thead tr{background-color:#fed}table.list tbody tr:nth-child(odd){background-color:#def}table.list tbody tr:nth-child(even){background-color:#eee}table.list th{font-size:larger}table.list td{padding:0.2em;text-align:left}table.list td.updated_at{text-align:center}dl{width:40em;margin:1em auto}dl dt{clear:left;float:left;padding:0.2em 1em;min-width:50%;text-align:right}dl dd{padding:0.2em 1em;text-align:left}dl dd.quantity{padding-right:16em}dl dd h3{display:inline}dl dt+dd+dt+dd{border-top:1px solid #999}ul.counters{text-align:center}ul.counters li{display:inline}ul.counters li a:link,ul.counters li a:visited{color:white;padding:0.4em 1em;display:inline-block;font-size:x-large;box-shadow:0 0 2px black;border-radius:0.4em;background-color:#258}.edit_link:link,.delete_link:link{display:none}
diff --git a/public/assets/active_admin-24bbef14af36d0015ef6fba11fadd481a1a630a191a27f360e2c40cf93182b37.css.gz b/public/assets/active_admin-24bbef14af36d0015ef6fba11fadd481a1a630a191a27f360e2c40cf93182b37.css.gz
new file mode 100644
index 00000000..136b960e
Binary files /dev/null and b/public/assets/active_admin-24bbef14af36d0015ef6fba11fadd481a1a630a191a27f360e2c40cf93182b37.css.gz differ
diff --git a/public/assets/active_admin-36292b8422a4426cc0094944f9ebc5bf4765c10d523799d63b941faa6a163601.css b/public/assets/active_admin-36292b8422a4426cc0094944f9ebc5bf4765c10d523799d63b941faa6a163601.css
deleted file mode 100644
index dfd956d9..00000000
--- a/public/assets/active_admin-36292b8422a4426cc0094944f9ebc5bf4765c10d523799d63b941faa6a163601.css
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:0.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace, monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,html [type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}html{font-size:100.01%}body{font-size:75%;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif}h1,h2,h3,h4,h5,h6{font-weight:normal;color:#5E6469}h1 img,h2 img,h3 img,h4 img,h5 img,h6 img{margin:0}h1{font-size:3em;line-height:1;margin-bottom:0.5em}h2{font-size:2em;margin-bottom:0.75em}h3{font-size:1.5em;line-height:1;margin-bottom:1em}h4{font-size:1.2em;line-height:1.25;margin-bottom:1.25em}h5{font-size:1em;font-weight:bold;margin-bottom:1.5em}h6{font-size:1em;font-weight:bold}p{margin:0 0 1.5em}p .left{margin:1.5em 1.5em 1.5em 0;padding:0}p .right{margin:1.5em 0 1.5em 1.5em;padding:0}.left{float:left !important}.right{float:right !important}blockquote{margin:1.5em;color:#666;font-style:italic}strong,dfn{font-weight:bold}em,dfn{font-style:italic}sup,sub{line-height:0}abbr,acronym{border-bottom:1px dotted #666}address{margin:0 0 1.5em;font-style:italic}del{color:#666}pre{margin:1.5em 0;white-space:pre}pre,code,tt{font:1em 'andale mono', 'lucida console', monospace;line-height:1.5}li ul,li ol{margin:0}ul,ol{margin:0 1.5em 1.5em 0;padding-left:1.5em}ul{list-style-type:disc}ol{list-style-type:decimal}dl{margin:0 0 1.5em 0}dl dt{font-weight:bold}dd{margin-left:1.5em}table{margin-bottom:1.4em;width:100%}th{font-weight:bold}thead th{background:#c3d9ff}th,td,caption{padding:4px 10px 4px 5px}.small{font-size:.8em;margin-bottom:1.875em;line-height:1.875em}.large{font-size:1.2em;line-height:2.5em;margin-bottom:1.25em}.hide{display:none}.quiet{color:#666}.loud{color:#000}.highlight{background:#ff0}.added{background:#060;color:#fff}.removed{background:#900;color:#fff}.first{margin-left:0;padding-left:0}.last{margin-right:0;padding-right:0}.top{margin-top:0;padding-top:0}.bottom{margin-bottom:0;padding-bottom:0}#header{background-color:#6a7176;background-image:linear-gradient(180deg, #6a7176, #4d5256);border-bottom:1px solid #44484b;box-shadow:0 1px 2px rgba(0,0,0,0.37);text-shadow:#000 0 1px 0;display:table;height:20px;width:100%;overflow:visible;position:inherit;padding:5px 0;z-index:900}#header h1{display:table-cell;vertical-align:middle;white-space:nowrap;color:#cdcdcd;margin-right:20px;margin-bottom:0px;padding:3px 30px 0 30px;font-size:1.3em;font-weight:normal;line-height:1.2}#header h1 a{text-decoration:none}#header h1 a:hover{color:#fff}#header h1 img{position:relative;top:-2px}#header a,#header a:link{color:#cdcdcd}#header .header-item{top:2px;position:relative;height:20px}#header ul.tabs{display:table-cell;vertical-align:middle;height:100%;margin:0;padding:0}#header ul.tabs>li{display:inline-block;margin-right:4px;margin-top:5px;margin-bottom:5px;font-size:1.0em;position:relative}#header ul.tabs>li a{text-decoration:none;padding:6px 10px 4px 10px;position:relative;border-radius:10px}#header ul.tabs>li.current>a{background:#7b8389;color:#fff}#header ul.tabs>li.has_nested>a{background:url(/assets/active_admin/nested_menu_arrow-15084d93c65c1964d7077700ea748bd2d70cfa2d4c19707c58a9c64e232dd442.gif) no-repeat calc(100% - 7px) 50%;padding-right:20px}#header ul.tabs>li.has_nested.current>a{background:#7b8389 url(/assets/active_admin/nested_menu_arrow_dark-7c43b8e0a5f8823875f49a093c9d7a6b374f885b6f9cc248ae9cd7e6e9b29034.gif) no-repeat calc(100% - 7px) 50%;padding-right:20px}#header ul.tabs>li:hover>a{background:#7b8389;color:#fff}#header ul.tabs>li.has_nested:hover>a{border-radius:0;border-top-right-radius:10px;border-top-left-radius:10px;border-bottom:5px solid #7b8389;background:#7b8389 url(/assets/active_admin/nested_menu_arrow_dark-7c43b8e0a5f8823875f49a093c9d7a6b374f885b6f9cc248ae9cd7e6e9b29034.gif) no-repeat calc(100% - 7px) 50%;z-index:1020}#header ul.tabs>li:hover ul{display:block}#header ul.tabs>li ul{background:#7b8389;border-top-right-radius:10px;border-top-left-radius:0;border-bottom-right-radius:10px;border-bottom-left-radius:10px;box-shadow:0 1px 3px #444;position:absolute;width:120%;min-width:175px;max-width:calc(100% + 20px);margin-top:5px;float:left;display:none;padding:3px 0px 5px 0;list-style:none;z-index:1010}#header ul.tabs>li ul li{margin:0px}#header ul.tabs>li ul li a{background:none;display:block}#header ul.tabs>li ul li a:hover{color:#fff;background:none}#header ul.tabs>li ul li.current a{border-radius:0}#header #tabs{width:100%}#header #utility_nav{color:#aaa;display:table-cell;white-space:nowrap;margin:0;padding:0;padding-right:26px;text-align:right}#header #utility_nav a{text-decoration:none}#header #utility_nav a:hover{color:#fff}#header #utility_nav li{display:inline}form ul,form ol,form li,form fieldset,form legend,form input,form textarea,form select,form p{margin:0;padding:0}form ol,form ul{list-style:none}form fieldset{border:0;padding:10px 0;margin-bottom:20px}form fieldset.inputs{background:#f4f4f4;border-radius:4px;box-shadow:inset 0 1px 4px #ddd}form fieldset legend{width:100%}form fieldset legend span{display:block;background-color:#efefef;background-image:linear-gradient(180deg, #efefef, #dfe1e2);text-shadow:#fff 0 1px 0;border:solid 1px #cdcdcd;border-color:#d4d4d4;border-top-color:#e6e6e6;border-right-color:#d4d4d4;border-bottom-color:#cdcdcd;border-left-color:#d4d4d4;box-shadow:0 1px 3px rgba(0,0,0,0.12),0 0 1px #fff inset;font-size:1em;font-weight:bold;line-height:18px;margin-bottom:0.5em;color:#5E6469;padding:5px 10px 3px 10px}form fieldset ol>li{padding:10px}form fieldset ol>li label{display:block;width:20%;float:left;font-size:1.0em;font-weight:bold;color:#5E6469}form fieldset ol>li label abbr{border:none;color:#aaa}form fieldset ol>li.has_many_container{padding:20px 10px}form fieldset ol>li.has_many_container h3{font-size:12px;font-weight:bold}form fieldset ol>li.has_many_container .has_many_fields{margin:10px 0}form fieldset ol>li>li label{line-height:100%;padding-top:0}form fieldset ol>li>li label input{line-height:100%;vertical-align:middle;margin-top:-0.1em}form .has_many_fields{position:relative}form .has_many_container .handle{position:absolute;top:calc(50% - 3em / 2);right:2px;padding:0;cursor:move}form .has_many_container.ui-sortable .has_many_container{margin-right:2em}form .ui-sortable input[type=text],form .ui-sortable input[type=password],form .ui-sortable input[type=email],form .ui-sortable input[type=number],form .ui-sortable input[type=url],form .ui-sortable input[type=tel],form .ui-sortable textarea{width:calc(80% - 22px - 2em - 1px)}form fieldset>ol>li fieldset{position:relative;padding:0;margin-bottom:0}form fieldset>ol>li fieldset legend{position:absolute;width:95%;padding-top:0.1em;left:0px;font-size:100%;font-weight:normal}form fieldset>ol>li fieldset legend span{position:absolute}form fieldset>ol>li fieldset legend.label label{position:absolute}form fieldset>ol>li fieldset:not(.has_many_fields) ol{float:left;width:74%;margin:0;padding:0 0 0 20%}form fieldset>ol>li fieldset:not(.has_many_fields) ol li{padding:0;border:0}form fieldset>ol>li fieldset.has_many_fields ol{float:left;width:100%;margin:0}form input[type=text],form input[type=password],form input[type=email],form input[type=number],form input[type=url],form input[type=tel],form input[type=date],form input[type=time],form textarea{width:calc(80% - 22px);border:1px solid #c9d0d6;border-radius:3px;font-size:0.95em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;outline:none;padding:8px 10px 7px}form input[type=text]:focus,form input[type=password]:focus,form input[type=email]:focus,form input[type=number]:focus,form input[type=url]:focus,form input[type=tel]:focus,form input[type=date]:focus,form input[type=time]:focus,form textarea:focus{border:1px solid #99a2aa;box-shadow:0 0 4px #99a2aa}form input[type=date]{width:calc(100% - 22px)}form fieldset>ol>li p.inline-hints{font-size:0.95em;font-style:italic;color:#666;margin:0.5em 0 0 20%}form fieldset>ol>li.date_select fieldset ol li,form fieldset>ol>li.time_select fieldset ol li,form fieldset>ol>li.datetime_select fieldset ol li{float:left;width:auto;margin:0 0.5em 0 0}form fieldset>ol>li.date_select fieldset ol li label,form fieldset>ol>li.time_select fieldset ol li label,form fieldset>ol>li.datetime_select fieldset ol li label{display:none}form fieldset>ol>li.date_select fieldset ol li input,form fieldset>ol>li.time_select fieldset ol li input,form fieldset>ol>li.datetime_select fieldset ol li input{display:inline;margin:0;padding:0}form fieldset>ol>li.check_boxes fieldset ol,form fieldset>ol>li.radio fieldset ol{margin-bottom:-0.6em}form fieldset>ol>li.check_boxes fieldset ol li,form fieldset>ol>li.radio fieldset ol li{margin:0.1em 0 0.5em 0}form fieldset>ol>li.check_boxes fieldset ol li label,form fieldset>ol>li.radio fieldset ol li label{float:none;width:100%}form fieldset>ol>li.check_boxes fieldset ol li label input,form fieldset>ol>li.radio fieldset ol li label input{margin-right:0.2em}form fieldset>ol>li.boolean{min-height:1.1em}form fieldset>ol>li.boolean label{width:80%;padding-left:20%;padding-right:10px;text-transform:none !important;font-weight:normal}form fieldset>ol>li.boolean label input{margin:0 0.5em 0 0.2em}form fieldset>ol>li.hidden{padding:0}form fieldset>ol>li p.inline-errors{color:#932419;font-weight:bold;margin:0.3em 0 0 20%}form fieldset>ol>li ul.errors{color:#932419;margin:0.5em 0 0 20%;list-style:square}form fieldset>ol>li ul.errors li{padding:0;border:none;display:list-item}form fieldset>ol>li.error input[type=text],form fieldset>ol>li.error input[type=password],form fieldset>ol>li.error input[type=email],form fieldset>ol>li.error input[type=number],form fieldset>ol>li.error input[type=url],form fieldset>ol>li.error input[type=tel],form fieldset>ol>li.error textarea{border:1px solid #932419}form ul.errors{background:#fae6e4;border-radius:4px;color:#932419;font-weight:bold;margin-bottom:10px;padding:10px;list-style:square}form ul.errors li{margin-left:15px;padding:0;border:none;display:list-item}form input[type=submit],form input[type=button],form button{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#838a90;background-image:linear-gradient(180deg, #838a90, #414549);text-shadow:#000 0 1px 0;box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0px rgba(255,255,255,0.2) inset;border:solid 1px #484e53;border-color:#484e53;border-top-color:#616a71;border-right-color:#484e53;border-bottom-color:#363b3f;border-left-color:#484e53;color:#efefef;cursor:pointer}form input[type=submit].disabled,form input[type=button].disabled,form button.disabled{opacity:0.5;cursor:default}form input[type=submit]:not(.disabled):hover,form input[type=button]:not(.disabled):hover,form button:not(.disabled):hover{background-color:#8b9297;background-image:linear-gradient(180deg, #8b9297, #484d51)}form input[type=submit]:not(.disabled):active,form input[type=button]:not(.disabled):active,form button:not(.disabled):active{box-shadow:0 1px 3px rgba(0,0,0,0.4) inset,0 1px 0 0px #fff;background-color:#71797f;background-image:linear-gradient(180deg, #71797f, #35383b)}form .buttons,form .actions{margin-top:15px}form .buttons input[type=submit],form .buttons input[type=button],form .buttons button,form .actions input[type=submit],form .actions input[type=button],form .actions button{margin-right:10px}form .buttons .actions .create_another{float:none;margin-bottom:10px}form .buttons .actions .create_another label{float:none;display:inline}form fieldset.buttons li,form fieldset.actions li{float:left;padding:0}form fieldset.buttons li.cancel a,form fieldset.actions li.cancel a{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #E7E7E7);box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0 rgba(255,255,255,0.8) inset;border:solid 1px #c7c7c7;border-color:#c7c7c7;border-top-color:#d3d3d3;border-right-color:#c7c7c7;border-bottom-color:#c2c2c2;border-left-color:#c7c7c7;text-shadow:#fff 0 1px 0;color:#5E6469}form fieldset.buttons li.cancel a.disabled,form fieldset.actions li.cancel a.disabled{opacity:0.5;cursor:default}form fieldset.buttons li.cancel a:not(.disabled):hover,form fieldset.actions li.cancel a:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F1F1F1)}form fieldset.buttons li.cancel a:not(.disabled):active,form fieldset.actions li.cancel a:not(.disabled):active{box-shadow:0 1px 2px rgba(0,0,0,0.22) inset,0 1px 0 0px #EEE;border-color:#b9b9b9;border-top-color:#c2c2c2;border-right-color:#b9b9b9;border-bottom-color:#b7b7b7;border-left-color:#b9b9b9;background-color:#F3F3F3;background-image:linear-gradient(180deg, #F3F3F3, #D8D8D8)}.sidebar_section label{display:block;text-transform:uppercase;color:#5E6469;font-size:0.9em;font-weight:bold}.sidebar_section select{width:240px}.sidebar_section input[type=text],.sidebar_section input[type=password],.sidebar_section input[type=email],.sidebar_section input[type=url],.sidebar_section input[type=tel],.sidebar_section textarea{width:220px}form.filter_form .filter_form_field{margin-bottom:10px;clear:both}form.filter_form .filter_form_field.select_and_search input[type=text]{margin-left:16px;width:88px}form.filter_form .filter_form_field.select_and_search select{width:108px}form.filter_form .filter_form_field.filter_check_boxes label{margin-bottom:3px}form.filter_form .filter_form_field.filter_check_boxes fieldset{margin-bottom:0px;padding-bottom:0px}form.filter_form .filter_form_field.filter_check_boxes .check_boxes_wrapper label{font-weight:normal;margin-bottom:3px;text-transform:none;font-size:1.0em}form.filter_form .filter_form_field.filter_check_boxes .check_boxes_wrapper label input{vertical-align:baseline}form.filter_form .filter_form_field.filter_date_range input[type=text]{box-sizing:border-box;width:114px}form.filter_form .filter_form_field.filter_date_range input[type=text]+input{margin-left:6px}form.filter_form a.clear_filters_btn{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #E7E7E7);box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0 rgba(255,255,255,0.8) inset;border:solid 1px #c7c7c7;border-color:#c7c7c7;border-top-color:#d3d3d3;border-right-color:#c7c7c7;border-bottom-color:#c2c2c2;border-left-color:#c7c7c7;text-shadow:#fff 0 1px 0;color:#5E6469}form.filter_form a.clear_filters_btn.disabled{opacity:0.5;cursor:default}form.filter_form a.clear_filters_btn:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F1F1F1)}form.filter_form a.clear_filters_btn:not(.disabled):active{box-shadow:0 1px 2px rgba(0,0,0,0.22) inset,0 1px 0 0px #EEE;border-color:#b9b9b9;border-top-color:#c2c2c2;border-right-color:#b9b9b9;border-bottom-color:#b7b7b7;border-left-color:#b9b9b9;background-color:#F3F3F3;background-image:linear-gradient(180deg, #F3F3F3, #D8D8D8)}.comments .active_admin_comment{clear:both;margin-top:10px;margin-bottom:40px;max-width:700px}.comments .active_admin_comment .active_admin_comment_meta{width:130px;float:left;overflow:hidden;font-size:0.9em;color:#767e84}.comments .active_admin_comment .active_admin_comment_meta .active_admin_comment_author{font-size:1.2em;font-weight:bold;margin:0;color:#5E6469}.comments .active_admin_comment .active_admin_comment_body{margin-left:150px}.comments form.active_admin_comment{margin:0;padding:0;margin-left:150px}.comments form.active_admin_comment fieldset.inputs{margin:0;padding:0;background:none;box-shadow:none}.comments form.active_admin_comment li{padding:0}.comments form.active_admin_comment fieldset.buttons{padding:0;margin-top:5px}body.logged_in .flash{background-color:#f7f1d3;background-image:linear-gradient(180deg, #f7f1d3, #f5edc5);text-shadow:#fafafa 0 1px 0;border-bottom:1px solid #eee098;color:#cb9810;font-weight:bold;font-size:1.1em;line-height:1.0em;padding:13px 30px 11px;position:relative}body.logged_in .flash.flash_notice{background-color:#dce9dd;background-image:linear-gradient(180deg, #dce9dd, #ccdfcd);border-bottom:1px solid #adcbaf;color:#416347}body.logged_in .flash.flash_error{background-color:#f5e4e4;background-image:linear-gradient(180deg, #f5e4e4, #f1dcdc);border-bottom:1px solid #e0c2c0;color:#b33c33}body.logged_out .flash{box-shadow:none;text-shadow:#fff 0 1px 0;background:none;color:#666;font-weight:bold;line-height:1.0em;padding:0;margin-bottom:8px}.ui-datepicker{background:#fff;background-clip:padding-box;color:#fff;display:none;margin-top:2px;padding:0;text-align:center;width:160px}.ui-datepicker a{text-decoration:none}.ui-datepicker a:hover{cursor:pointer}.ui-datepicker .ui-datepicker-header{height:14px;background-color:#6a7176;background-image:linear-gradient(180deg, #6a7176, #4d5256);border-bottom:1px solid #44484b;padding:12px 5px 7px 4px;margin:0px 0px 2px 2px;width:147px;border-top-left-radius:7px;border-top-right-radius:7px;position:relative;z-index:2000}.ui-datepicker .ui-datepicker-header:before{content:"";position:absolute;right:45%;top:-6px;width:0px;height:0px;border-left:8.5px solid transparent;border-right:8.5px solid transparent;border-bottom:10px solid #676e73}.ui-datepicker .ui-datepicker-header .ui-datepicker-title{text-shadow:#000 0 1px 0;color:#fff;display:block;font-size:1.1em;font-weight:bold;line-height:0.8em;text-align:center}.ui-datepicker .ui-datepicker-header .ui-datepicker-title .ui-datepicker-month{margin:-4px 0 0 0}.ui-datepicker .ui-datepicker-header .ui-datepicker-title .ui-datepicker-year{margin:-4px 0 0 0}.ui-datepicker .ui-datepicker-header a{color:#fff;display:block;height:19px;margin-top:-4px;width:10px}.ui-datepicker .ui-datepicker-header a.ui-datepicker-prev{float:left;width:0;height:0;margin:0px 0px 0px 4px;border-top:5px solid transparent;border-right:5px solid white;border-bottom:5px solid transparent}.ui-datepicker .ui-datepicker-header a.ui-datepicker-next{float:right;width:0;height:0;margin:0px 4px 0px 0px;border-top:5px solid transparent;border-left:5px solid white;border-bottom:5px solid transparent}.ui-datepicker .ui-datepicker-header a span{display:none}.ui-datepicker table.ui-datepicker-calendar{border-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;box-shadow:0 1px 6px rgba(0,0,0,0.26);background-color:#f4f4f4;border:solid 1px #63686e;left:2px;margin-bottom:0px;position:relative;top:-2px;width:156px}.ui-datepicker table.ui-datepicker-calendar td,.ui-datepicker table.ui-datepicker-calendar th{padding:0px;text-align:center}.ui-datepicker table.ui-datepicker-calendar thead th{background-color:#dbdddf;color:#333333;font-weight:normal;font-size:0.8em;padding-top:1px}.ui-datepicker table.ui-datepicker-calendar tbody{color:#666666}.ui-datepicker table.ui-datepicker-calendar tbody td{border:none;height:24px;width:22px}.ui-datepicker table.ui-datepicker-calendar tbody td a{border-radius:3px;color:#666666;font-weight:bold;font-size:0.85em;padding:4px}.ui-datepicker table.ui-datepicker-calendar tbody td a.ui-state-active{background-color:#5a5f64;color:#fff}.ui-datepicker table.ui-datepicker-calendar tbody td a.ui-state-active.ui-state-hover{background-color:#5a5f64;color:#fff}.ui-datepicker table.ui-datepicker-calendar tbody td a.ui-state-hover{background-color:#eceef0}.ui-datepicker table.ui-datepicker-calendar tbody td a.ui-state-highlight{background-color:#dbdddf}table tr td{vertical-align:top}table tr th{text-align:left}table.index_table{width:100%;margin-bottom:10px;border:0;border-spacing:0}table.index_table th{background-color:#efefef;background-image:linear-gradient(180deg, #efefef, #dfe1e2);text-shadow:#fff 0 1px 0;border:solid 1px #cdcdcd;border-color:#d4d4d4;border-top-color:#e6e6e6;border-right-color:#d4d4d4;border-bottom-color:#cdcdcd;border-left-color:#d4d4d4;box-shadow:0 1px 3px rgba(0,0,0,0.12),0 0 1px #fff inset;font-size:1em;font-weight:bold;line-height:18px;margin-bottom:0.5em;color:#5E6469;padding:5px 10px 3px 10px;border-right:none;padding-left:12px;padding-right:12px}table.index_table th a,table.index_table th a:link,table.index_table th a:visited{color:#5E6469;text-decoration:none;display:block;white-space:nowrap}table.index_table th.sortable a{background:url(/assets/active_admin/orderable-29374dbb55b0012d78a37c614d573bb3474f0779849b478a147d0f1845ca6617.png) no-repeat 0 4px;padding-left:13px}table.index_table th.sorted-asc a{background-position:0 -27px}table.index_table th.sorted-desc a{background-position:0 -56px}table.index_table th.sorted-asc,table.index_table th.sorted-desc{background-color:#e2e2e2;background-image:linear-gradient(180deg, #e2e2e2, #d2d4d6)}table.index_table th:last-child{border-right:solid 1px #d4d4d4}table.index_table tr.even td{background:#f4f5f5}table.index_table tr.selected td{background:#d9e4ec}table.index_table td{padding:10px 12px 8px 12px;border-bottom:1px solid #e8e8e8;vertical-align:top}.panel_contents table{margin-top:5px}.panel_contents table th{padding-top:10px;background:none;color:#5E6469;box-shadow:none;text-shadow:#fff 0 1px 0;text-transform:uppercase;border-bottom:1px solid #ccc}.panel_contents table tr.odd td{background:#ecedee}.panel_contents table tr.even td{background:#f4f5f5}.attributes_table{overflow:hidden}.attributes_table table col.even{background:#f4f5f5}.attributes_table table col.odd{background:#ecedee}.attributes_table table th,.attributes_table table td{padding:8px 12px 6px 12px;vertical-align:top;border-bottom:1px solid #e8e8e8}.attributes_table table th{box-shadow:none;background-color:none;width:150px;font-size:0.9em;padding-left:0;text-transform:uppercase;color:#5E6469;text-shadow:#fff 0 1px 0}.attributes_table table td .empty{color:#bbb;font-size:0.8em;text-transform:uppercase;letter-spacing:0.2em}.sidebar_section .attributes_table th{width:50px}#collection_selection_toggle_panel:after{visibility:hidden;display:block;content:"";clear:both;height:0}#collection_selection_toggle_panel>.resource_selection_toggle_cell{float:left}.ui-widget-overlay{position:fixed;background:rgba(0,0,0,0.2);top:0;left:0;right:0;bottom:0;z-index:1001}.ui-dialog{position:fixed;z-index:1002;background:#f4f4f4;border-radius:4px;box-shadow:inset 0 1px 4px #ddd;box-shadow:rgba(0,0,0,0.5) 0 0 10px}.ui-dialog .ui-dialog-titlebar{background-color:#efefef;background-image:linear-gradient(180deg, #efefef, #dfe1e2);text-shadow:#fff 0 1px 0;border:solid 1px #cdcdcd;border-color:#d4d4d4;border-top-color:#e6e6e6;border-right-color:#d4d4d4;border-bottom-color:#cdcdcd;border-left-color:#d4d4d4;box-shadow:0 1px 3px rgba(0,0,0,0.12),0 0 1px #fff inset;font-size:1em;font-weight:bold;line-height:18px;margin-bottom:0.5em;color:#5E6469;padding:5px 10px 3px 10px}.ui-dialog .ui-dialog-titlebar span{font-size:1.1em}.ui-dialog ul{list-style-type:none}.ui-dialog li{margin:10px 0}.ui-dialog label{margin-right:10px}.ui-dialog .ui-dialog-buttonpane,.ui-dialog form{padding:7px 15px 13px}.ui-dialog .ui-dialog-buttonpane button{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#838a90;background-image:linear-gradient(180deg, #838a90, #414549);text-shadow:#000 0 1px 0;box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0px rgba(255,255,255,0.2) inset;border:solid 1px #484e53;border-color:#484e53;border-top-color:#616a71;border-right-color:#484e53;border-bottom-color:#363b3f;border-left-color:#484e53;color:#efefef}.ui-dialog .ui-dialog-buttonpane button.disabled{opacity:0.5;cursor:default}.ui-dialog .ui-dialog-buttonpane button:not(.disabled):hover{background-color:#8b9297;background-image:linear-gradient(180deg, #8b9297, #484d51)}.ui-dialog .ui-dialog-buttonpane button:not(.disabled):active{box-shadow:0 1px 3px rgba(0,0,0,0.4) inset,0 1px 0 0px #fff;background-color:#71797f;background-image:linear-gradient(180deg, #71797f, #35383b)}.ui-dialog .ui-dialog-buttonpane button:last-child{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #E7E7E7);box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0 rgba(255,255,255,0.8) inset;border:solid 1px #c7c7c7;border-color:#c7c7c7;border-top-color:#d3d3d3;border-right-color:#c7c7c7;border-bottom-color:#c2c2c2;border-left-color:#c7c7c7;text-shadow:#fff 0 1px 0;color:#5E6469}.ui-dialog .ui-dialog-buttonpane button:last-child.disabled{opacity:0.5;cursor:default}.ui-dialog .ui-dialog-buttonpane button:last-child:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F1F1F1)}.ui-dialog .ui-dialog-buttonpane button:last-child:not(.disabled):active{box-shadow:0 1px 2px rgba(0,0,0,0.22) inset,0 1px 0 0px #EEE;border-color:#b9b9b9;border-top-color:#c2c2c2;border-right-color:#b9b9b9;border-bottom-color:#b7b7b7;border-left-color:#b9b9b9;background-color:#F3F3F3;background-image:linear-gradient(180deg, #F3F3F3, #D8D8D8)}.active_admin_dialog.ui-dialog .ui-dialog-titlebar-close{display:none}.blank_slate_container{clear:both;text-align:center}.blank_slate_container .blank_slate{border-radius:3px;border:1px dashed #DADADA;color:#AAA;display:inline-block;font-size:1.2em;font-weight:bold;padding:14px 25px;text-align:center}.blank_slate_container .blank_slate small{display:block;font-size:0.9em;font-weight:normal}.admin_dashboard .blank_slate_container .blank_slate{margin-top:40px;margin-bottom:40px}.with_sidebar .blank_slate_container .blank_slate{margin-top:80px}.breadcrumb{display:block;font-size:0.9em;font-weight:normal;line-height:1.0em;margin-bottom:12px;text-transform:uppercase}.breadcrumb a,.breadcrumb a:link,.breadcrumb a:visited,.breadcrumb a:active{color:#8a949e;text-decoration:none}.breadcrumb a:hover{text-decoration:underline}.breadcrumb .breadcrumb_sep{margin:0 2px;color:#aab2ba}.dropdown_menu{display:inline}.dropdown_menu .dropdown_menu_button{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #E7E7E7);box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0 rgba(255,255,255,0.8) inset;border:solid 1px #c7c7c7;border-color:#c7c7c7;border-top-color:#d3d3d3;border-right-color:#c7c7c7;border-bottom-color:#c2c2c2;border-left-color:#c7c7c7;text-shadow:#fff 0 1px 0;color:#5E6469;position:relative;padding-right:22px !important;cursor:pointer}.dropdown_menu .dropdown_menu_button.disabled{opacity:0.5;cursor:default}.dropdown_menu .dropdown_menu_button:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F1F1F1)}.dropdown_menu .dropdown_menu_button:not(.disabled):active{box-shadow:0 1px 2px rgba(0,0,0,0.22) inset,0 1px 0 0px #EEE;border-color:#b9b9b9;border-top-color:#c2c2c2;border-right-color:#b9b9b9;border-bottom-color:#b7b7b7;border-left-color:#b9b9b9;background-color:#F3F3F3;background-image:linear-gradient(180deg, #F3F3F3, #D8D8D8)}.dropdown_menu .dropdown_menu_button:before{content:' ';position:absolute;width:0;height:0;border-width:3px 3px 0;border-style:solid;border-color:#FFF transparent;right:12px;top:45%}.dropdown_menu .dropdown_menu_button:after{content:' ';position:absolute;width:0;height:0;border-width:3px 3px 0;border-style:solid;border-color:#777 transparent;right:12px;top:45%}.dropdown_menu .dropdown_menu_nipple{content:"";position:absolute;top:-6px;display:block;width:0;height:0;border-width:0 6px 6px;border-style:solid;border-color:#545a5e transparent;z-index:100}.dropdown_menu .dropdown_menu_nipple:before{content:' ';position:absolute;width:0;height:0;border-width:0 5px 5px;border-style:solid;border-color:#838a90 transparent;left:-5px;top:1px}.dropdown_menu .dropdown_menu_nipple:after{content:' ';position:absolute;width:0;height:0;border-width:0 5px 5px;border-style:solid;border-color:#686e74 transparent;left:-5px;top:2px}.dropdown_menu .dropdown_menu_list_wrapper{display:inline-block;position:absolute;background-color:white;padding:2px;box-shadow:rgba(0,0,0,0.4) 0 1px 3px,#838a90 0px 1px 0px 0px inset;background-color:#5E6469;background-color:#686e74;background-image:linear-gradient(180deg, #686e74, #52575c);border:solid 1px #464a4e;border-top-color:#545a5e;border-bottom-color:#35383b;border-radius:4px;z-index:2000;display:none}.dropdown_menu .dropdown_menu_list_wrapper .dropdown_menu_list{display:block;background-color:#FFF;border:solid 1px #464a4e;box-shadow:#6a7176 0px 1px 0px 0px;border-radius:3px;margin:0;overflow:hidden;padding:8px;list-style-type:none;padding:0}.dropdown_menu .dropdown_menu_list_wrapper .dropdown_menu_list li{display:block;border-bottom:solid 1px #ebebeb;box-sizing:border-box}.dropdown_menu .dropdown_menu_list_wrapper .dropdown_menu_list li a{display:block;box-sizing:padding-box;font-size:0.95em;font-weight:bold;padding:7px 16px 5px;text-decoration:none;text-align:center;white-space:nowrap}.dropdown_menu .dropdown_menu_list_wrapper .dropdown_menu_list li a:hover{background-color:#75a1c2;background-image:linear-gradient(180deg, #75a1c2, #608cb4);text-shadow:#5a83aa 0 1px 0;color:#FFF}.dropdown_menu .dropdown_menu_list_wrapper .dropdown_menu_list li a:active{background-color:#608cb4;background-image:linear-gradient(180deg, #608cb4, #75a1c2);color:#FFF}.dropdown_menu .dropdown_menu_list_wrapper .dropdown_menu_list li:first-child a{border-top-left-radius:2px;border-top-right-radius:2px}.dropdown_menu .dropdown_menu_list_wrapper .dropdown_menu_list li:last-child{border:none}.dropdown_menu .dropdown_menu_list_wrapper .dropdown_menu_list li:last-child a{border-bottom-left-radius:2px;border-bottom-right-radius:2px}a.member_link{margin-right:7px;white-space:nowrap}a.button,a:link.button,a:visited.button,input[type=submit],input[type=button],button{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#838a90;background-image:linear-gradient(180deg, #838a90, #414549);text-shadow:#000 0 1px 0;box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0px rgba(255,255,255,0.2) inset;border:solid 1px #484e53;border-color:#484e53;border-top-color:#616a71;border-right-color:#484e53;border-bottom-color:#363b3f;border-left-color:#484e53;color:#efefef}a.button.disabled,a:link.button.disabled,a:visited.button.disabled,input[type=submit].disabled,input[type=button].disabled,button.disabled{opacity:0.5;cursor:default}a.button:not(.disabled):hover,a:link.button:not(.disabled):hover,a:visited.button:not(.disabled):hover,input[type=submit]:not(.disabled):hover,input[type=button]:not(.disabled):hover,button:not(.disabled):hover{background-color:#8b9297;background-image:linear-gradient(180deg, #8b9297, #484d51)}a.button:not(.disabled):active,a:link.button:not(.disabled):active,a:visited.button:not(.disabled):active,input[type=submit]:not(.disabled):active,input[type=button]:not(.disabled):active,button:not(.disabled):active{box-shadow:0 1px 3px rgba(0,0,0,0.4) inset,0 1px 0 0px #fff;background-color:#71797f;background-image:linear-gradient(180deg, #71797f, #35383b)}table.index_grid td{border:none;background:none;padding:0 20px 20px 0;margin:0}.columns{clear:both;padding:0}.columns .column{float:left}a,a:link,a:visited{color:#38678b;text-decoration:underline}a:hover{text-decoration:none}.paginated_collection_contents{clear:both}.pagination{float:right;font-size:0.9em;margin-left:10px}.pagination a{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #E7E7E7);box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0 rgba(255,255,255,0.8) inset;border:solid 1px #c7c7c7;border-color:#c7c7c7;border-top-color:#d3d3d3;border-right-color:#c7c7c7;border-bottom-color:#c2c2c2;border-left-color:#c7c7c7;text-shadow:#fff 0 1px 0;color:#5E6469}.pagination a.disabled{opacity:0.5;cursor:default}.pagination a:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F1F1F1)}.pagination a:not(.disabled):active{box-shadow:0 1px 2px rgba(0,0,0,0.22) inset,0 1px 0 0px #EEE;border-color:#b9b9b9;border-top-color:#c2c2c2;border-right-color:#b9b9b9;border-bottom-color:#b7b7b7;border-left-color:#b9b9b9;background-color:#F3F3F3;background-image:linear-gradient(180deg, #F3F3F3, #D8D8D8)}.pagination span.page.current{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#838a90;background-image:linear-gradient(180deg, #838a90, #414549);text-shadow:#000 0 1px 0;box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0px rgba(255,255,255,0.2) inset;border:solid 1px #484e53;border-color:#484e53;border-top-color:#616a71;border-right-color:#484e53;border-bottom-color:#363b3f;border-left-color:#484e53;color:#efefef}.pagination span.page.current.disabled{opacity:0.5;cursor:default}.pagination span.page.current:not(.disabled):hover{background-color:#8b9297;background-image:linear-gradient(180deg, #8b9297, #484d51)}.pagination span.page.current:not(.disabled):active{box-shadow:0 1px 3px rgba(0,0,0,0.4) inset,0 1px 0 0px #fff;background-color:#71797f;background-image:linear-gradient(180deg, #71797f, #35383b)}.pagination a,.pagination span.page.current{border-radius:0px;margin-right:4px;padding:2px 5px}.pagination_information{float:right;margin-bottom:5px;color:#b3bcc1}.pagination_information b{color:#5c6469}.download_links{float:left}.pagination_per_page{float:right;margin-left:4px}.pagination_per_page select{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #E7E7E7);box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0 rgba(255,255,255,0.8) inset;border:solid 1px #c7c7c7;border-color:#c7c7c7;border-top-color:#d3d3d3;border-right-color:#c7c7c7;border-bottom-color:#c2c2c2;border-left-color:#c7c7c7;text-shadow:#fff 0 1px 0;color:#5E6469;border-radius:0px;padding:1px 5px}.pagination_per_page select.disabled{opacity:0.5;cursor:default}.pagination_per_page select:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F1F1F1)}.pagination_per_page select:not(.disabled):active{box-shadow:0 1px 2px rgba(0,0,0,0.22) inset,0 1px 0 0px #EEE;border-color:#b9b9b9;border-top-color:#c2c2c2;border-right-color:#b9b9b9;border-bottom-color:#b7b7b7;border-left-color:#b9b9b9;background-color:#F3F3F3;background-image:linear-gradient(180deg, #F3F3F3, #D8D8D8)}.comments .pagination{float:left;margin-bottom:30px}.comments .pagination_information{float:left;color:#000}.section,.panel{background:#f4f4f4;border-radius:4px;box-shadow:inset 0 1px 4px #ddd;margin-bottom:20px}.section>h3,.panel>h3{background-color:#efefef;background-image:linear-gradient(180deg, #efefef, #dfe1e2);text-shadow:#fff 0 1px 0;border:solid 1px #cdcdcd;border-color:#d4d4d4;border-top-color:#e6e6e6;border-right-color:#d4d4d4;border-bottom-color:#cdcdcd;border-left-color:#d4d4d4;box-shadow:0 1px 3px rgba(0,0,0,0.12),0 0 1px #fff inset;font-size:1em;font-weight:bold;line-height:18px;margin-bottom:0.5em;color:#5E6469;padding:5px 10px 3px 10px}.section>h3 .header_action,.panel>h3 .header_action{float:right}.section>div,.panel>div{padding:3px 15px 15px 15px}.section hr,.panel hr{border:none;border-bottom:1px solid #E8E8E8}.sidebar_section{background:#f4f4f4;border-radius:4px;box-shadow:inset 0 1px 4px #ddd;margin-bottom:20px}.sidebar_section>h3{background-color:#efefef;background-image:linear-gradient(180deg, #efefef, #dfe1e2);text-shadow:#fff 0 1px 0;border:solid 1px #cdcdcd;border-color:#d4d4d4;border-top-color:#e6e6e6;border-right-color:#d4d4d4;border-bottom-color:#cdcdcd;border-left-color:#d4d4d4;box-shadow:0 1px 3px rgba(0,0,0,0.12),0 0 1px #fff inset;font-size:1em;font-weight:bold;line-height:18px;margin-bottom:0.5em;color:#5E6469;padding:5px 10px 3px 10px}.sidebar_section>h3 .header_action{float:right}.sidebar_section>div{padding:3px 15px 15px 15px}.sidebar_section hr{border:none;border-bottom:1px solid #E8E8E8}.columns{margin-bottom:10px}.scopes li .count{color:#8e979e;font-weight:normal;font-size:0.9em;line-height:10px}.status_tag{background:#cacaca;color:#fff;text-transform:uppercase;letter-spacing:0.15em;padding:3px 5px 2px 5px;font-size:0.8em}.status_tag.ok,.status_tag.published,.status_tag.complete,.status_tag.completed,.status_tag.green{background:#8daa92}.status_tag.warn,.status_tag.warning,.status_tag.orange{background:#e29b20}.status_tag.error,.status_tag.errored,.status_tag.red{background:#d45f53}.status_tag.yes{background:#6090DB}.status_tag.no{background:grey}.table_tools{margin-bottom:16px}.table_tools:after{visibility:hidden;display:block;content:"";clear:both;height:0}.table_tools .dropdown_menu{float:left}a.table_tools_button,.table_tools .dropdown_menu_button{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #E7E7E7);box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0 rgba(255,255,255,0.8) inset;border:solid 1px #c7c7c7;border-color:#c7c7c7;border-top-color:#d3d3d3;border-right-color:#c7c7c7;border-bottom-color:#c2c2c2;border-left-color:#c7c7c7;text-shadow:#fff 0 1px 0;color:#5E6469;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F0F0F0);border-color:#d0d0d0;border-top-color:#d9d9d9;border-right-color:#d0d0d0;border-bottom-color:#c5c5c5;border-left-color:#d0d0d0;font-size:0.9em;padding:4px 14px 4px;margin:0}a.table_tools_button.disabled,.table_tools .dropdown_menu_button.disabled{opacity:0.5;cursor:default}a.table_tools_button:not(.disabled):hover,.table_tools .dropdown_menu_button:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F1F1F1)}a.table_tools_button:not(.disabled):active,.table_tools .dropdown_menu_button:not(.disabled):active{box-shadow:0 1px 2px rgba(0,0,0,0.22) inset,0 1px 0 0px #EEE;border-color:#b9b9b9;border-top-color:#c2c2c2;border-right-color:#b9b9b9;border-bottom-color:#b7b7b7;border-left-color:#b9b9b9;background-color:#F3F3F3;background-image:linear-gradient(180deg, #F3F3F3, #D8D8D8)}a.table_tools_button:not(.disabled):hover,.table_tools .dropdown_menu_button:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F6F6F6)}a.table_tools_button:not(.disabled):active,.table_tools .dropdown_menu_button:not(.disabled):active{border-color:#c8c8c8;border-top-color:#d7d7d7;border-right-color:#c8c8c8;border-bottom-color:#c3c3c3;border-left-color:#c8c8c8;box-shadow:0 1px 1px 0 rgba(0,0,0,0.17) inset;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #E8E8E8)}.table_tools_segmented_control{list-style-type:none;padding:0;margin:0}.table_tools_segmented_control li{float:left}.table_tools_segmented_control li a{border-width:1px .5px 1px .5px;border-radius:0}.table_tools_segmented_control li:first-child a{border-left-width:1px;border-top-left-radius:12px;border-bottom-left-radius:12px}.table_tools_segmented_control li:last-child a{border-right-width:1px;border-top-right-radius:12px;border-bottom-right-radius:12px}.table_tools_segmented_control li.selected a{background-color:#F0F0F0;background-image:linear-gradient(180deg, #F0F0F0, #FDFDFD);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1) inset;cursor:default}.table_tools_segmented_control li.selected a:hover{background-color:#F0F0F0;background-image:linear-gradient(180deg, #F0F0F0, #FDFDFD)}.indexes{float:right}.indexes li .count{color:#8e979e;font-weight:normal;font-size:0.9em;line-height:10px}.unsupported_browser{padding:10px 30px;color:#211e14;background-color:#fae692;background-color:#feefae;background-image:linear-gradient(180deg, #feefae, #fae692);border-bottom:1px solid #b3a569}.unsupported_browser h1{font-size:13px;font-weight:bold}.unsupported_browser p{margin-bottom:0.5em}.ui-tabs-nav{list-style:none;display:block;width:auto;margin-bottom:-12px;padding-left:0;overflow:auto;margin-left:15px}.ui-tabs-nav li{display:block;position:relative;margin:0;padding:0;float:left}.ui-tabs-nav li:first-child a{border-left-width:1px;border-top-left-radius:12px;border-bottom-left-radius:12px}.ui-tabs-nav li:last-child a{border-right-width:1px;border-top-right-radius:12px;border-bottom-right-radius:12px}.ui-tabs-nav li a{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #E7E7E7);box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0 rgba(255,255,255,0.8) inset;border:solid 1px #c7c7c7;border-color:#c7c7c7;border-top-color:#d3d3d3;border-right-color:#c7c7c7;border-bottom-color:#c2c2c2;border-left-color:#c7c7c7;text-shadow:#fff 0 1px 0;color:#5E6469;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F0F0F0);border-color:#d0d0d0;border-top-color:#d9d9d9;border-right-color:#d0d0d0;border-bottom-color:#c5c5c5;border-left-color:#d0d0d0;text-decoration:none;border-radius:0;border-width:1px .5px 1px .5px;margin-right:0;padding:4px 14px 4px}.ui-tabs-nav li a.disabled{opacity:0.5;cursor:default}.ui-tabs-nav li a:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F1F1F1)}.ui-tabs-nav li a:not(.disabled):active{box-shadow:0 1px 2px rgba(0,0,0,0.22) inset,0 1px 0 0px #EEE;border-color:#b9b9b9;border-top-color:#c2c2c2;border-right-color:#b9b9b9;border-bottom-color:#b7b7b7;border-left-color:#b9b9b9;background-color:#F3F3F3;background-image:linear-gradient(180deg, #F3F3F3, #D8D8D8)}.ui-tabs-nav li a:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F6F6F6)}.ui-tabs-nav li.ui-tabs-active a{cursor:default;background-color:#F0F0F0;background-image:linear-gradient(180deg, #F0F0F0, #FDFDFD);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1) inset}.ui-tabs-nav li.ui-tabs-active a a:hover{background-color:#F0F0F0;background-image:linear-gradient(180deg, #F0F0F0, #FDFDFD)}.tab-content{border:1px solid #D3D3D3;padding:15px;padding-top:30px;text-align:left}body.logged_out{background:#e8e9ea}body.logged_out #content_wrapper{width:500px;margin:70px auto}body.logged_out #content_wrapper #active_admin_content{box-shadow:0 1px 2px rgba(0,0,0,0.37);background:#fff;padding:13px 30px}body.logged_out h2{background-color:#efefef;background-image:linear-gradient(180deg, #efefef, #dfe1e2);text-shadow:#fff 0 1px 0;border:solid 1px #cdcdcd;border-color:#d4d4d4;border-top-color:#e6e6e6;border-right-color:#d4d4d4;border-bottom-color:#cdcdcd;border-left-color:#d4d4d4;box-shadow:0 1px 3px rgba(0,0,0,0.12),0 0 1px #fff inset;font-size:1em;font-weight:bold;line-height:18px;margin-bottom:0.5em;color:#5E6469;padding:5px 10px 3px 10px;background-color:#6a7176;background-image:linear-gradient(180deg, #6a7176, #4d5256);border-bottom:1px solid #44484b;text-shadow:#000 0 1px 0;box-shadow:0 1px 3px rgba(0,0,0,0.3);border:none;color:#fff;margin:-13px -30px 20px -30px}body.logged_out #login form fieldset{box-shadow:none;background:none;padding:0;margin-bottom:0}body.logged_out #login form fieldset li{padding:10px 0}body.logged_out #login form fieldset input[type=text],body.logged_out #login form fieldset input[type=email],body.logged_out #login form fieldset input[type=password]{width:70%}body.logged_out #login form fieldset.buttons{margin-left:20%}body.logged_out #login a{float:right;margin-top:-32px}#footer{padding:30px 30px;font-size:0.8em;clear:both}#footer p{padding-top:10px}#index_footer{padding-top:5px;text-align:right;font-size:0.85em}.index_content{clear:both}#wrapper{width:100%}.index #wrapper{display:table}#active_admin_content{margin:0;padding:30px}#active_admin_content #main_content_wrapper{float:left;width:100%}#active_admin_content #main_content_wrapper #main_content{margin-right:300px}#active_admin_content.without_sidebar #main_content_wrapper #main_content{margin-right:0}#active_admin_content #sidebar{float:left;width:270px;margin-left:-270px}#title_bar{background-color:#efefef;background-image:linear-gradient(180deg, #efefef, #dfe1e2);text-shadow:#fff 0 1px 0;border:solid 1px #cdcdcd;border-color:#d4d4d4;border-top-color:#e6e6e6;border-right-color:#d4d4d4;border-bottom-color:#cdcdcd;border-left-color:#d4d4d4;box-shadow:0 1px 3px rgba(0,0,0,0.12),0 0 1px #fff inset;font-size:1em;font-weight:bold;line-height:18px;margin-bottom:0.5em;color:#5E6469;padding:5px 10px 3px 10px;box-sizing:border-box;box-shadow:0 1px 2px rgba(0,0,0,0.37);display:table;border-bottom-color:#EEE;width:100%;position:relative;margin:0;padding:10px 30px;z-index:800}#title_bar:after{visibility:hidden;display:block;content:"";clear:both;height:0}#title_bar #titlebar_left,#title_bar #titlebar_right{height:50px;vertical-align:middle;display:table-cell}#title_bar #titlebar_right{text-align:right}#title_bar h2{margin:0;padding:0;font-size:2.6em;line-height:100%;font-weight:bold}#title_bar .action_items span.action_item>a,#title_bar .action_items span.action_item>.dropdown_menu>a{border-radius:200px;display:inline-block;font-weight:bold;font-size:1.0em;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:12px;margin-right:3px;padding:7px 16px 6px;text-decoration:none;background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #E7E7E7);box-shadow:0 1px 1px rgba(0,0,0,0.1),0 1px 0 0 rgba(255,255,255,0.8) inset;border:solid 1px #c7c7c7;border-color:#c7c7c7;border-top-color:#d3d3d3;border-right-color:#c7c7c7;border-bottom-color:#c2c2c2;border-left-color:#c7c7c7;text-shadow:#fff 0 1px 0;color:#5E6469;padding:12px 17px 10px;margin:0px}#title_bar .action_items span.action_item>a.disabled,#title_bar .action_items span.action_item>.dropdown_menu>a.disabled{opacity:0.5;cursor:default}#title_bar .action_items span.action_item>a:not(.disabled):hover,#title_bar .action_items span.action_item>.dropdown_menu>a:not(.disabled):hover{background-color:#FFFFFF;background-image:linear-gradient(180deg, #fff, #F1F1F1)}#title_bar .action_items span.action_item>a:not(.disabled):active,#title_bar .action_items span.action_item>.dropdown_menu>a:not(.disabled):active{box-shadow:0 1px 2px rgba(0,0,0,0.22) inset,0 1px 0 0px #EEE;border-color:#b9b9b9;border-top-color:#c2c2c2;border-right-color:#b9b9b9;border-bottom-color:#b7b7b7;border-left-color:#b9b9b9;background-color:#F3F3F3;background-image:linear-gradient(180deg, #F3F3F3, #D8D8D8)}body{font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:1.5;font-size:72%;background:#FFF;color:#323537}/*!
- * Font Awesome Free 5.5.0 by @fontawesome - https://fontawesome.com
- * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
- */@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:900;src:url("../fonts/font-awesome/fa-solid-900.eot");src:url("../fonts/font-awesome/fa-solid-900.eot#iefix") format("embedded-opentype"),url("../fonts/font-awesome/fa-solid-900.woff2") format("woff2"),url("../fonts/font-awesome/fa-solid-900.woff") format("woff"),url("../fonts/font-awesome/fa-solid-900.ttf") format("truetype"),url("../fonts/font-awesome/fa-solid-900.svg#fontawesome") format("svg")}@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:400;src:url("../fonts/font-awesome/fa-regular-400.eot");src:url("../fonts/font-awesome/fa-regular-400.eot#iefix") format("embedded-opentype"),url("../fonts/font-awesome/fa-regular-400.woff2") format("woff2"),url("../fonts/font-awesome/fa-regular-400.woff") format("woff"),url("../fonts/font-awesome/fa-regular-400.ttf") format("truetype"),url("../fonts/font-awesome/fa-regular-400.svg#fontawesome") format("svg")}@font-face{font-family:'Font Awesome 5 Brands';font-style:normal;font-weight:normal;src:url("../fonts/font-awesome/fa-brands-400.eot");src:url("../fonts/font-awesome/fa-brands-400.eot#iefix") format("embedded-opentype"),url("../fonts/font-awesome/fa-brands-400.woff2") format("woff2"),url("../fonts/font-awesome/fa-brands-400.woff") format("woff"),url("../fonts/font-awesome/fa-brands-400.ttf") format("truetype"),url("../fonts/font-awesome/fa-brands-400.svg#fontawesome") format("svg")}.fa,.fas{font-family:'Font Awesome 5 Free';font-weight:900}.far{font-family:'Font Awesome 5 Free';font-weight:400}.fab{font-family:'Font Awesome 5 Brands'}.fa,.fas,.far,.fal,.fab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:0.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid 0.08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fas.fa-pull-left,.far.fa-pull-left,.fal.fa-pull-left,.fab.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fas.fa-pull-right,.far.fa-pull-right,.fal.fa-pull-right,.fab.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scale(1, -1)}.fa-flip-horizontal.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scale(-1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-balance-scale:before{content:"\f24e"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-concierge-bell:before{content:"\f562"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-diagnoses:before{content:"\f470"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-git:before{content:"\f1d3"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-internet-explorer:before{content:"\f26b"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-nintendo-switch:before{content:"\f418"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-volume:before{content:"\f2a0"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-sass:before{content:"\f41e"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowflake:before{content:"\f2dc"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0, 0, 0, 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.quantity{text-align:right !important;white-space:nowrap}table{clear:both;margin-top:1em;margin-bottom:1em;border-spacing:2px}table th{padding:0.3em 0.6em}table.list thead tr{background-color:#fed}table.list tbody tr:nth-child(odd){background-color:#def}table.list tbody tr:nth-child(even){background-color:#eee}table.list th{font-size:larger}table.list td{padding:0.2em;text-align:left}table.list td.updated_at{text-align:center}dl{width:40em;margin:1em auto}dl dt{clear:left;float:left;padding:0.2em 1em;min-width:50%;text-align:right}dl dd{padding:0.2em 1em;text-align:left}dl dd.quantity{padding-right:16em}dl dd h3{display:inline}dl dt+dd+dt+dd{border-top:1px solid #999}ul.counters{text-align:center}ul.counters li{display:inline}ul.counters li a:link,ul.counters li a:visited{color:white;padding:0.4em 1em;display:inline-block;font-size:x-large;box-shadow:0 0 2px black;border-radius:0.4em;background-color:#258}.edit_link:link,.delete_link:link{display:none}
diff --git a/public/assets/active_admin-36292b8422a4426cc0094944f9ebc5bf4765c10d523799d63b941faa6a163601.css.gz b/public/assets/active_admin-36292b8422a4426cc0094944f9ebc5bf4765c10d523799d63b941faa6a163601.css.gz
deleted file mode 100644
index ad56b70f..00000000
Binary files a/public/assets/active_admin-36292b8422a4426cc0094944f9ebc5bf4765c10d523799d63b941faa6a163601.css.gz and /dev/null differ
diff --git a/public/assets/active_admin-b259ca6ce02dc92d306a1a3c5a085c78dded2dcf996d65ce2a20738dbf436520.js.gz b/public/assets/active_admin-b259ca6ce02dc92d306a1a3c5a085c78dded2dcf996d65ce2a20738dbf436520.js.gz
index 79ad9ddf..358c0bb9 100644
Binary files a/public/assets/active_admin-b259ca6ce02dc92d306a1a3c5a085c78dded2dcf996d65ce2a20738dbf436520.js.gz and b/public/assets/active_admin-b259ca6ce02dc92d306a1a3c5a085c78dded2dcf996d65ce2a20738dbf436520.js.gz differ
diff --git a/public/assets/active_admin/print-cf99cbf27fb92065a9eacd28e6fad48fa72cadaf6e0918790e8d35b11d8f99f6.css.gz b/public/assets/active_admin/print-cf99cbf27fb92065a9eacd28e6fad48fa72cadaf6e0918790e8d35b11d8f99f6.css.gz
index e4b6b7df..daae3ca0 100644
Binary files a/public/assets/active_admin/print-cf99cbf27fb92065a9eacd28e6fad48fa72cadaf6e0918790e8d35b11d8f99f6.css.gz and b/public/assets/active_admin/print-cf99cbf27fb92065a9eacd28e6fad48fa72cadaf6e0918790e8d35b11d8f99f6.css.gz differ
diff --git a/public/assets/application-3f59179b0c2a06bb661d73a1de82e1f5c30bdb9d70ad1ec1ee9f383e4b4d373f.css b/public/assets/application-3f59179b0c2a06bb661d73a1de82e1f5c30bdb9d70ad1ec1ee9f383e4b4d373f.css
deleted file mode 100644
index 9b967069..00000000
--- a/public/assets/application-3f59179b0c2a06bb661d73a1de82e1f5c30bdb9d70ad1ec1ee9f383e4b4d373f.css
+++ /dev/null
@@ -1,31 +0,0 @@
-/*!
- * jQuery UI CSS Framework 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- *
- * http://api.jqueryui.com/category/theming/
- */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default !important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}/*!
- * jQuery UI Autocomplete 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- *
- * http://api.jqueryui.com/autocomplete/#theming
- */.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}/*!
- * jQuery UI Menu 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- *
- * http://api.jqueryui.com/menu/#theming
- */.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}div.tagsinput{border:1px solid #CCC;background:#FFF;padding:5px;width:300px;height:100px;overflow-y:auto}div.tagsinput span.tag{border:1px solid #a5d24a;-moz-border-radius:2px;-webkit-border-radius:2px;display:block;float:left;padding:5px;text-decoration:none;background:#cde69c;color:#638421;margin-right:5px;margin-bottom:5px;font-family:helvetica;font-size:13px}div.tagsinput span.tag a{font-weight:bold;color:#82ad2b;text-decoration:none;font-size:11px}div.tagsinput input{width:80px;margin:0px;font-family:helvetica;font-size:13px;border:1px solid transparent;padding:5px;background:transparent;color:#000;outline:0px;margin-right:5px;margin-bottom:5px}div.tagsinput div{display:block;float:left}.tags_clear{clear:both;width:100%;height:0px}.not_valid{background:#FBD8DB !important;color:#90111A !important}/*!
- * Font Awesome Free 5.5.0 by @fontawesome - https://fontawesome.com
- * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
- */@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:900;src:url("/assets/font-awesome/fa-solid-900-690be61fe58020511558ce4b04375178872629f6c737ed1b332aec65855fd937.eot");src:url("/assets/font-awesome/fa-solid-900-690be61fe58020511558ce4b04375178872629f6c737ed1b332aec65855fd937.eot#iefix") format("embedded-opentype"),url("/assets/font-awesome/fa-solid-900-7798165ee5a3c6809310d8261dcbe7c8d0c12d795b7b09a71af3eb86ec8f33f2.woff2") format("woff2"),url("/assets/font-awesome/fa-solid-900-8fb19633f125ca466a45da9e4cf291d8b9519dd74c214f99dde835ef83f3ab96.woff") format("woff"),url("/assets/font-awesome/fa-solid-900-b97adad7ece9792af4122ae88103cad8fab54558a529c4ba79b5224c2b02ebe9.ttf") format("truetype"),url("/assets/font-awesome/fa-solid-900-22f6af77ffeeb267c5270fa1e50681ae01a9a19f8e9ef976798e0196c941ade6.svg#fontawesome") format("svg")}@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:400;src:url("/assets/font-awesome/fa-regular-400-169416887c9d3c310bf02a12eaf82269d4cf77b16af2e91745b1c152bba0061d.eot");src:url("/assets/font-awesome/fa-regular-400-169416887c9d3c310bf02a12eaf82269d4cf77b16af2e91745b1c152bba0061d.eot#iefix") format("embedded-opentype"),url("/assets/font-awesome/fa-regular-400-92ba7bfaa43a35c94353e96860d99376313ee9b5fce6124d4e64067280f9a841.woff2") format("woff2"),url("/assets/font-awesome/fa-regular-400-f101b8f70e36be2e9004222875e9fd45b263f72769c68e25e3c7525d3871728b.woff") format("woff"),url("/assets/font-awesome/fa-regular-400-ecb5719eb6408359d91fd2530646064a3f251aed691fd48277289cc8d6d53dfa.ttf") format("truetype"),url("/assets/font-awesome/fa-regular-400-59dc408283c57a47d27b2a2852726f43db3285cab7e3d6297e8da7c901857f7b.svg#fontawesome") format("svg")}@font-face{font-family:'Font Awesome 5 Brands';font-style:normal;font-weight:normal;src:url("/assets/font-awesome/fa-brands-400-9158ee2ef88ea648444ba1c9fcea310baa1e5e4e5fe86e338dcd29fcb081cfc7.eot");src:url("/assets/font-awesome/fa-brands-400-9158ee2ef88ea648444ba1c9fcea310baa1e5e4e5fe86e338dcd29fcb081cfc7.eot#iefix") format("embedded-opentype"),url("/assets/font-awesome/fa-brands-400-05dbc51654b96590d176c27efbcef2cf4ac0497499a9f28b731b73eea399070c.woff2") format("woff2"),url("/assets/font-awesome/fa-brands-400-ca441c07992a7160e4d2622e78f8970c9b92f176694c8dc07592326496a801d6.woff") format("woff"),url("/assets/font-awesome/fa-brands-400-dbd08d025602b79ce71910b2a68577959cbf2ef02fc664e243bf50277754fdfc.ttf") format("truetype"),url("/assets/font-awesome/fa-brands-400-7aadbc4ac7f80413de00052694c1a44e0b0dbf0e2d7f739c628b88b28bb72bfa.svg#fontawesome") format("svg")}.fa,.field>label:before,.field .field_with_errors>label:before,.field th:before,.field th a:before,.list>label:before,.list .field_with_errors>label:before,.list th:before,.list th a:before,dl>label:before,dl .field_with_errors>label:before,dl th:before,dl th a:before,.fas{font-family:'Font Awesome 5 Free';font-weight:900}.far{font-family:'Font Awesome 5 Free';font-weight:400}.fab{font-family:'Font Awesome 5 Brands'}.fa,.field>label:before,.field .field_with_errors>label:before,.field th:before,.field th a:before,.list>label:before,.list .field_with_errors>label:before,.list th:before,.list th a:before,dl>label:before,dl .field_with_errors>label:before,dl th:before,dl th a:before,.fas,.far,.fal,.fab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:0.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid 0.08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.field>label.fa-pull-left:before,.field .field_with_errors>label.fa-pull-left:before,.field th.fa-pull-left:before,.field th a.fa-pull-left:before,.list>label.fa-pull-left:before,.list .field_with_errors>label.fa-pull-left:before,.list th.fa-pull-left:before,.list th a.fa-pull-left:before,dl>label.fa-pull-left:before,dl .field_with_errors>label.fa-pull-left:before,dl th.fa-pull-left:before,dl th a.fa-pull-left:before,.fas.fa-pull-left,.far.fa-pull-left,.fal.fa-pull-left,.fab.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.field>label.fa-pull-right:before,.field .field_with_errors>label.fa-pull-right:before,.field th.fa-pull-right:before,.field th a.fa-pull-right:before,.list>label.fa-pull-right:before,.list .field_with_errors>label.fa-pull-right:before,.list th.fa-pull-right:before,.list th a.fa-pull-right:before,dl>label.fa-pull-right:before,dl .field_with_errors>label.fa-pull-right:before,dl th.fa-pull-right:before,dl th a.fa-pull-right:before,.fas.fa-pull-right,.far.fa-pull-right,.fal.fa-pull-right,.fab.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scale(1, -1)}.fa-flip-horizontal.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scale(-1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-balance-scale:before{content:"\f24e"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-concierge-bell:before{content:"\f562"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-diagnoses:before{content:"\f470"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-git:before{content:"\f1d3"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-internet-explorer:before{content:"\f26b"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-nintendo-switch:before{content:"\f418"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-volume:before{content:"\f2a0"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-sass:before{content:"\f41e"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowflake:before{content:"\f2dc"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0, 0, 0, 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.flag-icon-background,.flag-icon{background-size:contain;background-position:50%;background-repeat:no-repeat}.flag-icon{position:relative;display:inline-block;width:1.33333em;line-height:1em}.flag-icon:before{content:'\00a0'}.flag-icon.flag-icon-squared{width:1em}.flag-icon-ad{background-image:url(/assets/flags/4x3/ad-f67c4e5a3f709ead53c04d9ff35614e6c67517c3d3289170f7a317390f661497.svg)}.flag-icon-ad.flag-icon-squared{background-image:url(/assets/flags/1x1/ad-a315836ec2c9dcc11ef9bfd8b18aa7ccfc2d31435cbf46a2c31930836076e09c.svg)}.flag-icon-ae{background-image:url(/assets/flags/4x3/ae-7a3b3dc0f50b5310014cfbcc8200a5f1ce568127bf43452e40e8158e0cff2d2e.svg)}.flag-icon-ae.flag-icon-squared{background-image:url(/assets/flags/1x1/ae-bcdd9a4da09598785f3e31db4ff431e22687b2ead18209a3e615600655068cd5.svg)}.flag-icon-af{background-image:url(/assets/flags/4x3/af-01601b521fa86582e32c39eed8c88480afec1f801b6de929b52ed7e49da47260.svg)}.flag-icon-af.flag-icon-squared{background-image:url(/assets/flags/1x1/af-6332cf754a5e2866db631923e1f7cfc52a0a554d32b97bcf19f8263819e4ca7d.svg)}.flag-icon-ag{background-image:url(/assets/flags/4x3/ag-cb6952d821bac7855231c2cb4d1c44f7c730f6b3621518ab20f30d2b9afe604b.svg)}.flag-icon-ag.flag-icon-squared{background-image:url(/assets/flags/1x1/ag-14f7d9978487aaf4446b55167e85a711c48a13ff07edac175c172969a38650c4.svg)}.flag-icon-ai{background-image:url(/assets/flags/4x3/ai-f07c6cc0646fdfa441b9a506e1d46e8dce0d97b37222292e9c6733c995dc89bc.svg)}.flag-icon-ai.flag-icon-squared{background-image:url(/assets/flags/1x1/ai-95099e544de29bcea3ba735de535823f2e19aeb4043e82dbc1d9862f9262b810.svg)}.flag-icon-al{background-image:url(/assets/flags/4x3/al-9b997f2720de861e1b0ccec8ddf42a2890795ebf50817f9223e1ceba712c9b03.svg)}.flag-icon-al.flag-icon-squared{background-image:url(/assets/flags/1x1/al-94852d2711fc23abf3423534b9edb950a0c6aabf1d2d98bf2643f3c7dadfac09.svg)}.flag-icon-am{background-image:url(/assets/flags/4x3/am-85a199ec21d1af74a256335ead0c1e38592bb603d8da81feda4678945e9e00e6.svg)}.flag-icon-am.flag-icon-squared{background-image:url(/assets/flags/1x1/am-869391b014ac299924d30777d72a4aba430752177290a90a1fc3255a7ad79ee7.svg)}.flag-icon-ao{background-image:url(/assets/flags/4x3/ao-29224a61bf632826d530cda55d87c2615884bd2c2c3a322036ed468e34d85c75.svg)}.flag-icon-ao.flag-icon-squared{background-image:url(/assets/flags/1x1/ao-048eacbc862fe1868cf0ec73457b70a8b49a598c80dea049856f0e1fd6fec83e.svg)}.flag-icon-aq{background-image:url(/assets/flags/4x3/aq-b401a776d2f1a7944170114f0aeeceab5e1d962df3de7ed1eff47d96824b73fd.svg)}.flag-icon-aq.flag-icon-squared{background-image:url(/assets/flags/1x1/aq-a8d7ce9bfb860b6e2b58608b50bf2cafc5220c77f6d049ab7770891f64334531.svg)}.flag-icon-ar{background-image:url(/assets/flags/4x3/ar-bf73475bb707100874dec538ce4b7e1b5afc4ed67dc50a8a800ee519e51cc826.svg)}.flag-icon-ar.flag-icon-squared{background-image:url(/assets/flags/1x1/ar-fc6582cc6d3ef0782805d8497ee77ab2d836c53422e91007e48f81a4a9fa2e60.svg)}.flag-icon-as{background-image:url(/assets/flags/4x3/as-79d395190345206ea03475b67b44638e1111562411504b60646483c9c0b0f7d1.svg)}.flag-icon-as.flag-icon-squared{background-image:url(/assets/flags/1x1/as-04f0db77c5d8610a55c69508b226a7c338924f8cf7d6577d5d6590e85ee57183.svg)}.flag-icon-at{background-image:url(/assets/flags/4x3/at-3d197de8f1f0096a2b0d440b6fc7d80821585a6637e646c05487a87718bf6b5f.svg)}.flag-icon-at.flag-icon-squared{background-image:url(/assets/flags/1x1/at-ec4db9aeac793827ac7c8e40c072a76f7675010058cc8c8dfd3a86bb5acfa6b8.svg)}.flag-icon-au{background-image:url(/assets/flags/4x3/au-126fa2500a315287a5f847f4d958bb929f11da9b39f35912cc440c0fcffb8b12.svg)}.flag-icon-au.flag-icon-squared{background-image:url(/assets/flags/1x1/au-bf990dcc957c9f74eb908e8ffa733f1731277bf6ec8b7301a6ea1ed92b59cc4b.svg)}.flag-icon-aw{background-image:url(/assets/flags/4x3/aw-4524643452423e95f3b0dbe6216b059a9e52126b34c73ae4b3c17b682f893aa6.svg)}.flag-icon-aw.flag-icon-squared{background-image:url(/assets/flags/1x1/aw-f7002bceef55486a442bf6bf433be0c60d0b15b2aa548b81c524c67ccf0565a8.svg)}.flag-icon-ax{background-image:url(/assets/flags/4x3/ax-c297e0eb654ca62e58f5eb3abb70df9f245e4919490f29bd0f1d49c4fe052d90.svg)}.flag-icon-ax.flag-icon-squared{background-image:url(/assets/flags/1x1/ax-a1245689ecbf321c0a9e556bba17f3c9f2aeb8b1f63d14fcb591d76a87f12880.svg)}.flag-icon-az{background-image:url(/assets/flags/4x3/az-132e68d5e0386d3b9fa05b4288a0fd66f1414e2bc7af6b9d437b6935a7dfa00c.svg)}.flag-icon-az.flag-icon-squared{background-image:url(/assets/flags/1x1/az-3990c0526b933bd650285d821f2b93e432a73ba709869549b8ef75b051d3bd2d.svg)}.flag-icon-ba{background-image:url(/assets/flags/4x3/ba-89dd0c1600d94741de7d667a487310193a0c48c4cf1a5159c3bf9dd37d65d2b5.svg)}.flag-icon-ba.flag-icon-squared{background-image:url(/assets/flags/1x1/ba-2dbe90eb12b937f4a9ae8db95760930a3e318f4ce5829ac05e292ead698bae5a.svg)}.flag-icon-bb{background-image:url(/assets/flags/4x3/bb-16f8249ff958bfbc18fb1f23a5282000347bffdb5769ac620966185b1dcb57f6.svg)}.flag-icon-bb.flag-icon-squared{background-image:url(/assets/flags/1x1/bb-fae92d8426196ae24ffa561aca72613fae651a5e9c0bcda63ecc877add05b060.svg)}.flag-icon-bd{background-image:url(/assets/flags/4x3/bd-8dac0547e73ee25a04148a3f0fd026a90e56c23b7e92921565d4263050ba77a6.svg)}.flag-icon-bd.flag-icon-squared{background-image:url(/assets/flags/1x1/bd-ecc3c3e87d4cc59c8350f2b4d7dca8f5cf46bdb26319db0ee80b744482af50c1.svg)}.flag-icon-be{background-image:url(/assets/flags/4x3/be-a180ca68521188017bb5367f19e503d9599d6cbecd61bf054e59a57f58e648ae.svg)}.flag-icon-be.flag-icon-squared{background-image:url(/assets/flags/1x1/be-c8d4194137bd01955285b329dfdf996490d16c3116a92ce2f322e354b6d7494e.svg)}.flag-icon-bf{background-image:url(/assets/flags/4x3/bf-6b214936ef89f19133d4a84e99cdf0cfdb99d6409f2f373f6d18694423013313.svg)}.flag-icon-bf.flag-icon-squared{background-image:url(/assets/flags/1x1/bf-04c7d61aa314adab5a41bd79d77aa780c10136bb6b8f4c62423e61e23e3851ee.svg)}.flag-icon-bg{background-image:url(/assets/flags/4x3/bg-dd3985ba746942b0e65bc52a280cc4d28fb24fd2c7d9e22ac9afd2d75ee7bfc4.svg)}.flag-icon-bg.flag-icon-squared{background-image:url(/assets/flags/1x1/bg-f59294a736d5bdc0f102b58d70dbe45d02bd92df822820bf95336840f75a0746.svg)}.flag-icon-bh{background-image:url(/assets/flags/4x3/bh-7c82c4a6ba963172c6c1b4423f39a0ebe9c999449cc7dd87018917943db4735c.svg)}.flag-icon-bh.flag-icon-squared{background-image:url(/assets/flags/1x1/bh-6893aac3e55c6480e9dac0c023ec2179f6c12a0da82a0bc2717134384c097e88.svg)}.flag-icon-bi{background-image:url(/assets/flags/4x3/bi-4fcd0116f7f93c0564c6955806f3c3563d0ea7334ae406f29a897255845c923c.svg)}.flag-icon-bi.flag-icon-squared{background-image:url(/assets/flags/1x1/bi-91c34eb431b26be67852782a0b93e1d7d577a925454d6c8cea00a0d872d2de8a.svg)}.flag-icon-bj{background-image:url(/assets/flags/4x3/bj-63bddb4268f5f8c2ed867041bcf058fb18fcd9d1e0799e01286fca2d5e961c7f.svg)}.flag-icon-bj.flag-icon-squared{background-image:url(/assets/flags/1x1/bj-e2606c5a8498c474a6b6708626b88108fcb73840344766566dc56f804279cdfc.svg)}.flag-icon-bl{background-image:url(/assets/flags/4x3/bl-824a7265f48789d5e1ad5c5b0042a13a7d2d4357210e5bd8124fca19931e8c74.svg)}.flag-icon-bl.flag-icon-squared{background-image:url(/assets/flags/1x1/bl-ba6a7881b0ca72ac57aee4d823ae611ab4ad24a938ee9e01a7a4d5ae04cfccf6.svg)}.flag-icon-bm{background-image:url(/assets/flags/4x3/bm-2e2f09e5a4edf4b18afff581656f50b0b4c37783db29591ff00ca768f7f755bc.svg)}.flag-icon-bm.flag-icon-squared{background-image:url(/assets/flags/1x1/bm-f553f953f8784ea4d67a5197f5d808a67747eb8a1cb56990d6838e690090d2d6.svg)}.flag-icon-bn{background-image:url(/assets/flags/4x3/bn-bcf9967c12eb6397346cb5b960ae92efa41f314f780d09a3d7c81f5dacac4180.svg)}.flag-icon-bn.flag-icon-squared{background-image:url(/assets/flags/1x1/bn-1d1aad3fe9fd33ce922eba33c9ae6047a5646349239c20d1bc7307ec6d19a043.svg)}.flag-icon-bo{background-image:url(/assets/flags/4x3/bo-fa423f2bb4ab6e8e9dd399ad73781ea8d9cbafd30f1b7ee0bcecfb9e7b75581e.svg)}.flag-icon-bo.flag-icon-squared{background-image:url(/assets/flags/1x1/bo-f5faa29e40191e0c76070ac1a1d2a1f2b18e9cd358b8a77cefaed8efc49a265e.svg)}.flag-icon-bq{background-image:url(/assets/flags/4x3/bq-493c92ab19204c3ad319e6caba021df050132b99bd57a8f9b74131b78229c29e.svg)}.flag-icon-bq.flag-icon-squared{background-image:url(/assets/flags/1x1/bq-6e30bbeabc2aa097f657a411984b3c23278a8fcce2fc016b1cd6d2262f672d33.svg)}.flag-icon-br{background-image:url(/assets/flags/4x3/br-cf3ba80ec2c9fd4d3c845c3a3c43a2b9d81cf90707a2918789e8b1f596833e01.svg)}.flag-icon-br.flag-icon-squared{background-image:url(/assets/flags/1x1/br-7bf4e4b31650ac25f0bc6c86eb87491a7e5a8eac13acccfcbde44346c88728f6.svg)}.flag-icon-bs{background-image:url(/assets/flags/4x3/bs-69f60b5fea96b67dd939e597099994921bb3dc3bcf31b8dee7cc45be2885c836.svg)}.flag-icon-bs.flag-icon-squared{background-image:url(/assets/flags/1x1/bs-f5d6acf7ef7a240dc09ac88710fd77fd3494501104392db74d5c540d482f2262.svg)}.flag-icon-bt{background-image:url(/assets/flags/4x3/bt-6c20b0c00e12d5898be0239a0c66ce775debd0bd536de56a271859a0285a039e.svg)}.flag-icon-bt.flag-icon-squared{background-image:url(/assets/flags/1x1/bt-58de3ca9438811ef1920e2f84c4ba4ce32d01069f4d197ab5d577de6acbe0c85.svg)}.flag-icon-bv{background-image:url(/assets/flags/4x3/bv-ff173190fc339b3cb8b6e8235bc5e373853d7127fd94cbc32ac737e839aeb586.svg)}.flag-icon-bv.flag-icon-squared{background-image:url(/assets/flags/1x1/bv-59616ff1a722959064c83927ca2e49c1fce42a9b18e91b9ecbb74f62527aff43.svg)}.flag-icon-bw{background-image:url(/assets/flags/4x3/bw-4bb1d3131b88c65b5decc67f7b44903e931bca2fcac841942591c599f0cbb850.svg)}.flag-icon-bw.flag-icon-squared{background-image:url(/assets/flags/1x1/bw-e08f50c0836ca5858aed7b0526aed6fb630da8dc6b6b96bd9a476af599dc89d6.svg)}.flag-icon-by{background-image:url(/assets/flags/4x3/by-324ac96bfbe075781c664be3b9e2ac6b4d2a46dd2b418ca0920284f64394c7d4.svg)}.flag-icon-by.flag-icon-squared{background-image:url(/assets/flags/1x1/by-37b80e8bf7e51fef99a8307d6dffb04ee164790ceeafef606d516ca333e9488a.svg)}.flag-icon-bz{background-image:url(/assets/flags/4x3/bz-156fdc45f8c15c9520a1ea9fc0f395f294f02077408ea1938c222a37cfbb7f1d.svg)}.flag-icon-bz.flag-icon-squared{background-image:url(/assets/flags/1x1/bz-24577d4e7b29b33ab3b1d37914c8479889baa7e8c8399c6d1c99faed31ab053a.svg)}.flag-icon-ca{background-image:url(/assets/flags/4x3/ca-0d57cab46d5dbb0012a5e4ae0a9efee3baee90d5d157950a6c5d67edf2daa58f.svg)}.flag-icon-ca.flag-icon-squared{background-image:url(/assets/flags/1x1/ca-192a6fb0544e5a6f33a32149d62f1e7ac0a1d61c5c5afa57f3a42346ca8e8c90.svg)}.flag-icon-cc{background-image:url(/assets/flags/4x3/cc-a35f2a9e10a28d6918ced65e0623b03bb2fbf1f20670b581bc0a409d33b4e843.svg)}.flag-icon-cc.flag-icon-squared{background-image:url(/assets/flags/1x1/cc-d2025eefc9d30f724f3fcd95c0fd9f7938930ecb01af7e0cd6ee6553d7358eb6.svg)}.flag-icon-cd{background-image:url(/assets/flags/4x3/cd-5d2127c991b30522ae0a29d05facbc88728c050d7e333a60d614af1545459c5c.svg)}.flag-icon-cd.flag-icon-squared{background-image:url(/assets/flags/1x1/cd-59dacf424d1c8c779db66c5b7f2a93a3c8f14976c2975ccfb07639676a1602e3.svg)}.flag-icon-cf{background-image:url(/assets/flags/4x3/cf-ac0aaffba354d848eba2501a402ee81dc96a56ad0acd3741ec9905e76c372e1e.svg)}.flag-icon-cf.flag-icon-squared{background-image:url(/assets/flags/1x1/cf-e637674faf7edcdad37182192d038448c157421ab0c69377d9b8e56ab2c0249d.svg)}.flag-icon-cg{background-image:url(/assets/flags/4x3/cg-3729f717c83c9df7d0543a1a5d4a506efe184bdfeb39f9260b4b63edf19d2538.svg)}.flag-icon-cg.flag-icon-squared{background-image:url(/assets/flags/1x1/cg-8353ff1f251714b1b8905eec1722378426719955d0637d206d35d1dcfa68ddcf.svg)}.flag-icon-ch{background-image:url(/assets/flags/4x3/ch-6739edee6d1ef72c4ed97cfe723d3bb7f17e4df5390f3a4ae234f1ffdeece0cf.svg)}.flag-icon-ch.flag-icon-squared{background-image:url(/assets/flags/1x1/ch-7c3dec465228981c57a90a3a7b3a6c42dd3e699230663e770b55008ce6d14208.svg)}.flag-icon-ci{background-image:url(/assets/flags/4x3/ci-3e076d13c9524149508c442f8f727424660124e3591280d8ae9bddf9d8272a1e.svg)}.flag-icon-ci.flag-icon-squared{background-image:url(/assets/flags/1x1/ci-691a0a8577b7d555fc90dc7170adc9ec7571191cb3507c46c0e8516fd1778a91.svg)}.flag-icon-ck{background-image:url(/assets/flags/4x3/ck-9cff098e505afde9bf5166cb7b0c409178575633b913ce08c1c700d08c477db6.svg)}.flag-icon-ck.flag-icon-squared{background-image:url(/assets/flags/1x1/ck-9c8dffa3bd5953d8a121780831f25b58738e67f3be71961894c56dfd25848c88.svg)}.flag-icon-cl{background-image:url(/assets/flags/4x3/cl-a4c57ec2bb9adcb67e1850256e5165227b764187d6941a38d95d0def5144699b.svg)}.flag-icon-cl.flag-icon-squared{background-image:url(/assets/flags/1x1/cl-5a3e95cf63358e3911c97404818c2cddfd46414d8445e47d6976ee166c48926c.svg)}.flag-icon-cm{background-image:url(/assets/flags/4x3/cm-5dce9f36d92a61bdc0c482141bdb4f55bfcec0a2ecc745db643a7953e2e5a722.svg)}.flag-icon-cm.flag-icon-squared{background-image:url(/assets/flags/1x1/cm-d8d21f54c44df5df9edef227691384a4ad37c15ff57c8aa0dead684d19eac8cd.svg)}.flag-icon-cn{background-image:url(/assets/flags/4x3/cn-48ce1c2837bb806a6aaf8b7a9878b6d040c0d069a0ffca9a8a49e7a31aa30e7f.svg)}.flag-icon-cn.flag-icon-squared{background-image:url(/assets/flags/1x1/cn-e6be64c6c4a976e64d39bfe8a6ae4a5b1d38a6aa1b138ddcacf34a942dff50bc.svg)}.flag-icon-co{background-image:url(/assets/flags/4x3/co-648d3ff596a0ecf3e85ac17c53abe1d7ca4759688e10a7a3a8b56f096ba6b6f7.svg)}.flag-icon-co.flag-icon-squared{background-image:url(/assets/flags/1x1/co-d3c16180c6bce630f762aff789104d10e9dbc949e740535a61396cd0ec34c1a1.svg)}.flag-icon-cr{background-image:url(/assets/flags/4x3/cr-84aec60f19bd33e1ac1a209155fec8d372e17cb59dc1346bb9124e5cc867375d.svg)}.flag-icon-cr.flag-icon-squared{background-image:url(/assets/flags/1x1/cr-5371cf8bc5ad1a805155c1b3065e420a0a418c8d63b472bc545890289a365b35.svg)}.flag-icon-cu{background-image:url(/assets/flags/4x3/cu-bb3f857e02aeab606120d9f164283f07a44b227f12aad7d6d344c7579f7b3ff0.svg)}.flag-icon-cu.flag-icon-squared{background-image:url(/assets/flags/1x1/cu-02c0054169b874a8d231de1f45b2d0884de48848157734e0ddcd0f684c05c18d.svg)}.flag-icon-cv{background-image:url(/assets/flags/4x3/cv-90ee90ab59713454a218d8c300c71139e62655de80bfbea81df93142a529b81f.svg)}.flag-icon-cv.flag-icon-squared{background-image:url(/assets/flags/1x1/cv-2cf3eede97a468d28459ccc2271c28bb5b6029af2388b0301f6203be55e49308.svg)}.flag-icon-cw{background-image:url(/assets/flags/4x3/cw-d46beb7b10b40fa82cfd40eb86a3b3879f59f5da2a2f5ef91d121ab9b16c0aad.svg)}.flag-icon-cw.flag-icon-squared{background-image:url(/assets/flags/1x1/cw-ba78c834e61b24a8a2b6bc7c80ab9f14e42c3c69415941ddb7c8c1f652ccd8b5.svg)}.flag-icon-cx{background-image:url(/assets/flags/4x3/cx-28187fb9d91bedc6f239b107d26eb6ec1cc2a0c7730810306c5a6b313c14f2b2.svg)}.flag-icon-cx.flag-icon-squared{background-image:url(/assets/flags/1x1/cx-8ebe073d997f93d092a493300ea1d234c91aef80c6e8f431e88aa7f8e724f9a6.svg)}.flag-icon-cy{background-image:url(/assets/flags/4x3/cy-8d633ecabc7968bb8a869c62545f122aacbbc3e108c25ceb421bb8bc8734b9be.svg)}.flag-icon-cy.flag-icon-squared{background-image:url(/assets/flags/1x1/cy-6ef37fdd7518f18727bec1ed9741bb4d1f854dde7ef1a7e9fd2f4ba6291a7790.svg)}.flag-icon-cz{background-image:url(/assets/flags/4x3/cz-6c94e3d53fc1ae5982d8eb058b76d86f07d3fb4cd325698fea3291fa35504c56.svg)}.flag-icon-cz.flag-icon-squared{background-image:url(/assets/flags/1x1/cz-af9898ebd32559cdbea2fd17b351e5eedafccada6fbc6a2b7952cad78369817e.svg)}.flag-icon-de{background-image:url(/assets/flags/4x3/de-e7323083675d25107c85f0cea6534bd21d21e77e6d524d92e1b2d0a4e21117a1.svg)}.flag-icon-de.flag-icon-squared{background-image:url(/assets/flags/1x1/de-fdb60146952d3b2d104310b28882a0ecde44d808240c3bab2cd6c302a538b266.svg)}.flag-icon-dj{background-image:url(/assets/flags/4x3/dj-546da4a0dae9b1ab74dc6ac6076d0c706f37ef2a0d799342dd0345e11f770f03.svg)}.flag-icon-dj.flag-icon-squared{background-image:url(/assets/flags/1x1/dj-c0481b667f003d9d5a3c93861023a97a98224227ac19aa7e07b5b6edd35fe900.svg)}.flag-icon-dk{background-image:url(/assets/flags/4x3/dk-a13735c0337ab4679cd8679508bf5e8067637ab611ca5c54172c621d740420e5.svg)}.flag-icon-dk.flag-icon-squared{background-image:url(/assets/flags/1x1/dk-822a3b8b6948f49aa81fe7620bd173453d9a45406a9680f24bad7e714e58cb7c.svg)}.flag-icon-dm{background-image:url(/assets/flags/4x3/dm-7713fabd3cf341694b4c1ef5d1379820773722b61c190234ac7416f2872e3940.svg)}.flag-icon-dm.flag-icon-squared{background-image:url(/assets/flags/1x1/dm-33d984fc9897bb2a3bd16c6672b876effc1a8adc0c57ad122a16db54061e4e46.svg)}.flag-icon-do{background-image:url(/assets/flags/4x3/do-714b6f307ea3a9c3d30348684b8574e8b7f5078f51649dfa97ae2a69a7108b4a.svg)}.flag-icon-do.flag-icon-squared{background-image:url(/assets/flags/1x1/do-d37306c4b346f89ea14739144374caad69652be31e8ce8e2504c9a0d422a4857.svg)}.flag-icon-dz{background-image:url(/assets/flags/4x3/dz-a96e943c830558fe9823044aac2bfb3f6a4caf3bd3c57943352280a7f6b68cb1.svg)}.flag-icon-dz.flag-icon-squared{background-image:url(/assets/flags/1x1/dz-09400d3b2c58e641a1641a687b81476761d05f9d0ff65861aeaa33c7f508cda4.svg)}.flag-icon-ec{background-image:url(/assets/flags/4x3/ec-6762ba85ea0f7bb289b0aa6219c797e5243103d281b1462c61b61030fa329d5e.svg)}.flag-icon-ec.flag-icon-squared{background-image:url(/assets/flags/1x1/ec-7410a75a013738fbb8cbd756d967380e02ae54ca74e9ef9a41c4b583c2c2794f.svg)}.flag-icon-ee{background-image:url(/assets/flags/4x3/ee-ce3b622214bd9eefb43373cae2811ea8cf6ef6a16bb6afbaa5bcaaea34024da0.svg)}.flag-icon-ee.flag-icon-squared{background-image:url(/assets/flags/1x1/ee-a207a8363b4dde44f59951501c2cb539419e92b0814b25d6448710ced52226f8.svg)}.flag-icon-eg{background-image:url(/assets/flags/4x3/eg-16a11fa93856ddc5fd46f8811adfc93660175724b20eaab55ff046855a352d2c.svg)}.flag-icon-eg.flag-icon-squared{background-image:url(/assets/flags/1x1/eg-9f4d098c604326bbc3692f9e2f335dbc9b34bdf2706565bf448380f0a889d1e2.svg)}.flag-icon-eh{background-image:url(/assets/flags/4x3/eh-9cf4a74d29c1a1afc4137deeb5b678d55c8fbdf8d181217267f3a5cce6a76a97.svg)}.flag-icon-eh.flag-icon-squared{background-image:url(/assets/flags/1x1/eh-16c3327dbcf3483e634b3536b056324b5478212dae6d060f2ffb2ec961cd382f.svg)}.flag-icon-er{background-image:url(/assets/flags/4x3/er-69a1e1e45289d1282df4b1e5ce5e712d69fbe314abd0c922353fce90814c543e.svg)}.flag-icon-er.flag-icon-squared{background-image:url(/assets/flags/1x1/er-90d49408e58955cf1cf3185b0193e03c4a107042d47ef5e975dbbe10c6ef7f4a.svg)}.flag-icon-es{background-image:url(/assets/flags/4x3/es-50e59681c6b6412498bd9cbfc473abedc713db75c54c538b839db3c394d64499.svg)}.flag-icon-es.flag-icon-squared{background-image:url(/assets/flags/1x1/es-29c68fa3c9c8c2adacdc2eb0162e9c2fa998faa408836900ec6285000476800d.svg)}.flag-icon-et{background-image:url(/assets/flags/4x3/et-14263ba7ea890fd0a4d89a2791343ecb7acc89aab1fc2593e00a6093b22251df.svg)}.flag-icon-et.flag-icon-squared{background-image:url(/assets/flags/1x1/et-086eefb70e9adad537cc1c640a72cc0fa843ec7a9b06b2778aa98b2db055bfe6.svg)}.flag-icon-fi{background-image:url(/assets/flags/4x3/fi-a4c41caa02a4f6803ea0d6c36de4beebf20d150e3df742b1369a4099c2ff648e.svg)}.flag-icon-fi.flag-icon-squared{background-image:url(/assets/flags/1x1/fi-c5fdf318fac5fdfc94fe54268618e58a2bc5933617ead09992900f90cc25de9a.svg)}.flag-icon-fj{background-image:url(/assets/flags/4x3/fj-cb0cc4b3b5c202f07487ee519f48b3eadb47035f5f2d5d3f99d20f81e48d6b79.svg)}.flag-icon-fj.flag-icon-squared{background-image:url(/assets/flags/1x1/fj-c2c7fd536841925e7647b2d510d6a0c58700e2a8ded0e42008fb93ffacde101f.svg)}.flag-icon-fk{background-image:url(/assets/flags/4x3/fk-cb61eaa0d7221823f7d17de59ea88ed16b506f9585ab0c7291cf839449d82968.svg)}.flag-icon-fk.flag-icon-squared{background-image:url(/assets/flags/1x1/fk-a871742380ae157d1211a63cc35cd3621b1bf6de6d67e4a8e3565ad200b1d8cf.svg)}.flag-icon-fm{background-image:url(/assets/flags/4x3/fm-079b937562a9a412aae8fb762b571ddb49bf23627943c97247b6a9bbdb768153.svg)}.flag-icon-fm.flag-icon-squared{background-image:url(/assets/flags/1x1/fm-dbec73633ecd8a6c50f56d54df36bbe6a2f8fb534ac7658477c82cad14a806a8.svg)}.flag-icon-fo{background-image:url(/assets/flags/4x3/fo-27279c2481bb1cb3e44850a948987d6a8411acffa770c3aecd1b76d4c5853413.svg)}.flag-icon-fo.flag-icon-squared{background-image:url(/assets/flags/1x1/fo-7cb4fdbba1c7223702d843cb0709ddc799f89f909dfe101e3e36d6bf36c3e67f.svg)}.flag-icon-fr{background-image:url(/assets/flags/4x3/fr-30ed2f68dc9a17927643640f48f3d2a858bd041770547035349c6e79713cd84e.svg)}.flag-icon-fr.flag-icon-squared{background-image:url(/assets/flags/1x1/fr-6b849151204c66fa661c30b34e62919a13b9e66b7cd37a4fc8962e8e0baf9bdc.svg)}.flag-icon-ga{background-image:url(/assets/flags/4x3/ga-e3840f9d5bd6ee08db748d37a534500b837bee0f8ce65987b2f099a6afd2cc63.svg)}.flag-icon-ga.flag-icon-squared{background-image:url(/assets/flags/1x1/ga-9eafd5388042b3d2258ac6223075b726426210136b9851b637973105721b64d9.svg)}.flag-icon-gb{background-image:url(/assets/flags/4x3/gb-ce93c8a6b974d63998e263f6d25f898fc20580a28464457f2f4463b687e4fe8d.svg)}.flag-icon-gb.flag-icon-squared{background-image:url(/assets/flags/1x1/gb-1d93e1ce2e2e10c1709e4dc50ac956c007b2c1a63a4bc22ddfd64354f79ad457.svg)}.flag-icon-gd{background-image:url(/assets/flags/4x3/gd-7c3a6b6068bbd9a6abc98c2297dd4acd5e31022e5a4210fc0e1205ec28498fa2.svg)}.flag-icon-gd.flag-icon-squared{background-image:url(/assets/flags/1x1/gd-2310bc03d9e8ddc8599b40891bfb10b812b07023881599a7e02e3028d1bc9ca8.svg)}.flag-icon-ge{background-image:url(/assets/flags/4x3/ge-501c0135fb8c377dbd2859ff6290b47ef4907a8e2ab2ae1e39116b716db6795f.svg)}.flag-icon-ge.flag-icon-squared{background-image:url(/assets/flags/1x1/ge-ca9ee36883ec12048fbb7fbbfaf231c0d4848ae0b07dab74a46d53b7b34d8114.svg)}.flag-icon-gf{background-image:url(/assets/flags/4x3/gf-7c165f90bfe6ac3674903632182221a992f017ff706354b1761002382e89c2c2.svg)}.flag-icon-gf.flag-icon-squared{background-image:url(/assets/flags/1x1/gf-8838337b15cdcf143fac16c714e8dbf2d893d2ea8f1c8ef06dadcb652dfec41c.svg)}.flag-icon-gg{background-image:url(/assets/flags/4x3/gg-2c7bfc50d5bcd374b5f6107974d06af24e70edba31ad71a225e0c2ecc2d6e778.svg)}.flag-icon-gg.flag-icon-squared{background-image:url(/assets/flags/1x1/gg-509489b1792831bb27d6975c76aa0a2ac2fa2c3906bcf844f616de5e0fbbc359.svg)}.flag-icon-gh{background-image:url(/assets/flags/4x3/gh-79c187756e93df22fae571ad9419629c5247c016e32a74471e0d461048fdf5cf.svg)}.flag-icon-gh.flag-icon-squared{background-image:url(/assets/flags/1x1/gh-e7bf18e6337982ee31e3673ab93e722b3410b7a4c202656a4bc3887d8656286b.svg)}.flag-icon-gi{background-image:url(/assets/flags/4x3/gi-ed99b369c8c77e64abd59fab1f28155d71b4378b49625c66ab0ab6dff4f88087.svg)}.flag-icon-gi.flag-icon-squared{background-image:url(/assets/flags/1x1/gi-2e563e96e766e13c0a9c5a3a372059a44739bb696e853d71a6f6b08c491dfb9a.svg)}.flag-icon-gl{background-image:url(/assets/flags/4x3/gl-612e560dbad68d540be672b80e22c54db43d6e2070523e81c156ccd6b3fc4260.svg)}.flag-icon-gl.flag-icon-squared{background-image:url(/assets/flags/1x1/gl-a9bb35d2b9ff27638658d9ad6b9e2c4f452072b9a80b508d32e76d37bf62cf6e.svg)}.flag-icon-gm{background-image:url(/assets/flags/4x3/gm-4a6f9670a41548cceaced2b728e4bc56acbc4a3ba5544e7a097f7dae7a8bb045.svg)}.flag-icon-gm.flag-icon-squared{background-image:url(/assets/flags/1x1/gm-b67f9f6bce2f8c8700c198de8bfafac72d01b8a1e55b77f71e8cafdc58f8af5c.svg)}.flag-icon-gn{background-image:url(/assets/flags/4x3/gn-873b4eb52f34c7558bef93cfd1b82117b5c32c9fbc0610f8821ccd22f28abe28.svg)}.flag-icon-gn.flag-icon-squared{background-image:url(/assets/flags/1x1/gn-72f51dc30cf0ed5459ad0f239cf3043eac05ece75945bcaf4ea6653af868c504.svg)}.flag-icon-gp{background-image:url(/assets/flags/4x3/gp-4559cad3eb2d173214161d16b0237c68f5c817749a39c862fa7b23dfb4aee923.svg)}.flag-icon-gp.flag-icon-squared{background-image:url(/assets/flags/1x1/gp-d6669532054db5b7e441f4858c28920246a65ca3e8a15518c64c7bbb4f9c6416.svg)}.flag-icon-gq{background-image:url(/assets/flags/4x3/gq-0c8dfe7f9543307056bbe6d6e44a16c17201228e5344d5afec1ccf1b9a5eb2f9.svg)}.flag-icon-gq.flag-icon-squared{background-image:url(/assets/flags/1x1/gq-ecb761e6db59b9bf8ba37533eaf0c60b7fcc7c0dfa2fcf281ee84c970dcb10f8.svg)}.flag-icon-gr{background-image:url(/assets/flags/4x3/gr-4a4086310397bffa682d439be8650a9e28d94e32963b6411b61435292ac4cf80.svg)}.flag-icon-gr.flag-icon-squared{background-image:url(/assets/flags/1x1/gr-0cbd171892c0568b055d3b6585d58ac13dd60dfbcfad16eda1f4f9ead11dd16f.svg)}.flag-icon-gs{background-image:url(/assets/flags/4x3/gs-e45169a93a9e94c15f5cb765a6c863319171fb9b4dce56094411829cd688d486.svg)}.flag-icon-gs.flag-icon-squared{background-image:url(/assets/flags/1x1/gs-3efc9e1b32961f9aa9d7faa2626e596282b63d049f6717c2378b28e3f508e79a.svg)}.flag-icon-gt{background-image:url(/assets/flags/4x3/gt-64a7345cf66facf7f323d2142aebb4172191108a78ac7493b1a6077b78ac8ec5.svg)}.flag-icon-gt.flag-icon-squared{background-image:url(/assets/flags/1x1/gt-436a2af3d95cf3cb13ded897f319cfd6e2c087d678ad0e971c198b0d2c029911.svg)}.flag-icon-gu{background-image:url(/assets/flags/4x3/gu-f560822ee237e5277829e63613a615a2ee3d8cc6196dffffe0f0d56a49b11c53.svg)}.flag-icon-gu.flag-icon-squared{background-image:url(/assets/flags/1x1/gu-a71c9d290c66c1a0929b05436dc6a8229b1147d7cc62336e04c9adf697030450.svg)}.flag-icon-gw{background-image:url(/assets/flags/4x3/gw-0dc9ec17735ed605b68672947ce55c49a4ec1551491ccd121f482c1875cdf219.svg)}.flag-icon-gw.flag-icon-squared{background-image:url(/assets/flags/1x1/gw-7868c305e4a64b0d8ebfd3f7cb8c881841d71a7e0c3ead2683fe503c80de0674.svg)}.flag-icon-gy{background-image:url(/assets/flags/4x3/gy-c9126e544c62508abfb898f0af0bd79c46f4c767c9ed6f928418a24b0f246d85.svg)}.flag-icon-gy.flag-icon-squared{background-image:url(/assets/flags/1x1/gy-0e3b849ce460f8ab1ec7cf66a25be1ba91e89b72d8b0aa679a0553464f37a972.svg)}.flag-icon-hk{background-image:url(/assets/flags/4x3/hk-cece9126ccbf9151feadfed75791ebf32d4a16beab12f182404519d0cc24eec7.svg)}.flag-icon-hk.flag-icon-squared{background-image:url(/assets/flags/1x1/hk-9fad00e06f9034877149394914baa2bc3292223b0e32df2b1f9399d4de6e167d.svg)}.flag-icon-hm{background-image:url(/assets/flags/4x3/hm-4b4923b81da24d62ebf31a9bc0addf76beef84593374b1cbd03ba19f3b12e3e9.svg)}.flag-icon-hm.flag-icon-squared{background-image:url(/assets/flags/1x1/hm-776c822113a22e83581234d05f40bfc0ed38b60648d87f513f3da3fff96ffb61.svg)}.flag-icon-hn{background-image:url(/assets/flags/4x3/hn-855c830786283862a5f399e0d69dffe52b6223b91b32e31b55d55c82f2fa32c9.svg)}.flag-icon-hn.flag-icon-squared{background-image:url(/assets/flags/1x1/hn-64c38bac9403417c4e276bf5536d284fc5410fc04b80acd39a961d298f430dbd.svg)}.flag-icon-hr{background-image:url(/assets/flags/4x3/hr-c8cad861f7398a22b9d27ea682d2778df0dde8e146d30142b5294daf988854af.svg)}.flag-icon-hr.flag-icon-squared{background-image:url(/assets/flags/1x1/hr-60c093df6760e4cc6abe26c37a52be3b51458f02712f18e11f08b07dc623b489.svg)}.flag-icon-ht{background-image:url(/assets/flags/4x3/ht-fe81da06228fa36e7f211bec0d9f0c020f5b9c7f81534b4cb2251848aa276b16.svg)}.flag-icon-ht.flag-icon-squared{background-image:url(/assets/flags/1x1/ht-dd0197c078859c5a66ff3a51d3a3f92809768e36bfabdec0fc0ab60d068afcd9.svg)}.flag-icon-hu{background-image:url(/assets/flags/4x3/hu-9aa998e636687aede491e307f3d068dbe58f2d90bfdfaec0e7ad03baa5b36344.svg)}.flag-icon-hu.flag-icon-squared{background-image:url(/assets/flags/1x1/hu-06858d0fbd4320496e849010e35c8fe82eb618188cf6ec329aef93f5e7af1c23.svg)}.flag-icon-id{background-image:url(/assets/flags/4x3/id-775dbfedd6533afdf5bd017ccc1ad4f8f4238cbe87393d9c837a669196f17293.svg)}.flag-icon-id.flag-icon-squared{background-image:url(/assets/flags/1x1/id-3920ce662a7ea937b2c11707d8e1f53db52611dd004edf753b0389ed490d9d29.svg)}.flag-icon-ie{background-image:url(/assets/flags/4x3/ie-6368a1c92440fcf80d3c35607543bcaa2d4662d6e0bc7acf6749ddbc418a72c0.svg)}.flag-icon-ie.flag-icon-squared{background-image:url(/assets/flags/1x1/ie-1997e9de640fa764677aa8f5d52f7888bb24a029160e8f67b06dbd043b4f11b3.svg)}.flag-icon-il{background-image:url(/assets/flags/4x3/il-d76883a2330f9a05a4a64990ba955fc1be90bb46bcb19ae548c21816e7e74178.svg)}.flag-icon-il.flag-icon-squared{background-image:url(/assets/flags/1x1/il-f5e643d0e10169a438119dc441ea3100b52a2ff569bbb3a3ad6d1131b47602d8.svg)}.flag-icon-im{background-image:url(/assets/flags/4x3/im-bbae8aa9dd129f8446556afe4904194ad43377d882f9a705fcf1da2bdbfabccf.svg)}.flag-icon-im.flag-icon-squared{background-image:url(/assets/flags/1x1/im-767d72c2e72d732d65c9b016adad983778dfbbb2b5b52e71830f4e41297728d3.svg)}.flag-icon-in{background-image:url(/assets/flags/4x3/in-519e33321b8b2ba70a0b7557d66c62d7efdc9723896c49f82528b107028ffe29.svg)}.flag-icon-in.flag-icon-squared{background-image:url(/assets/flags/1x1/in-27831f76dc6a218a529b6e5d0eafc4c19c999461327b7c013f59226c0601a361.svg)}.flag-icon-io{background-image:url(/assets/flags/4x3/io-8d25a8e98f682199b413adfbcb6898c37058c9bae085e427fbab03d56e8c0de6.svg)}.flag-icon-io.flag-icon-squared{background-image:url(/assets/flags/1x1/io-627f3b0cef72fd91ff426d74a007dc32d74c9fe677cf2c8355cba84359e16fde.svg)}.flag-icon-iq{background-image:url(/assets/flags/4x3/iq-96b24d1439184d0a4c35ca7cea65e5f20469a0e8c8438963aad016e59c399cc6.svg)}.flag-icon-iq.flag-icon-squared{background-image:url(/assets/flags/1x1/iq-af04db139f8c44cfe0c612e2c05e848ccfad88fbbfcb58e88cdb7c80db365669.svg)}.flag-icon-ir{background-image:url(/assets/flags/4x3/ir-db2c230d355ade2b1ac235ec647bb1535e4703c639a44f9ce112473272ee1019.svg)}.flag-icon-ir.flag-icon-squared{background-image:url(/assets/flags/1x1/ir-c648cbf56fc8f324fda477ea816783c9df8a7d398f45f5f94acc1c16c8877b63.svg)}.flag-icon-is{background-image:url(/assets/flags/4x3/is-29508693138977229758b0f322ba34e90dbcd7a8a74e8820729933d24051d9a7.svg)}.flag-icon-is.flag-icon-squared{background-image:url(/assets/flags/1x1/is-b1c5db1d4b4853b8144f1d88ababbf14fc88752340457ba3e2c94ab5d54c9c01.svg)}.flag-icon-it{background-image:url(/assets/flags/4x3/it-d2c168050fc509adac1163b097b0ed409217560735b27802ae9259587c146562.svg)}.flag-icon-it.flag-icon-squared{background-image:url(/assets/flags/1x1/it-592d34fb666430fa00f98d333623d5efa3c8e0e65ac4eee06bbc4c1de7ce4bea.svg)}.flag-icon-je{background-image:url(/assets/flags/4x3/je-b363a4e3a21630f10791c2ebeb7f918320816ef87c155d4fd29ce37982f4df35.svg)}.flag-icon-je.flag-icon-squared{background-image:url(/assets/flags/1x1/je-6d43f74e30e099bc056da925ec34c0200708f0a6e90da34db1e59d54ce10cfd9.svg)}.flag-icon-jm{background-image:url(/assets/flags/4x3/jm-3d133fbc2564f29e036855e8be224d1579fe66fe49e0f5a2ba0bdcf3cb272823.svg)}.flag-icon-jm.flag-icon-squared{background-image:url(/assets/flags/1x1/jm-1aea8ea5d8cbc717fa3ef331d8caa9a1421c88a7bd076e40f8276a5b6f8d0467.svg)}.flag-icon-jo{background-image:url(/assets/flags/4x3/jo-eee432339f8ea6750987e1121187eb4b53ec537dd7ccb240c018de63f7a92db6.svg)}.flag-icon-jo.flag-icon-squared{background-image:url(/assets/flags/1x1/jo-7969b2083c535c85b7e714b755459a6606940e0b5ddb1b71e24daf0a180d14aa.svg)}.flag-icon-jp{background-image:url(/assets/flags/4x3/jp-2eadcfc67ba8cd50c1da86e08e6778e0102c3072865dab8c312cc88006da0abe.svg)}.flag-icon-jp.flag-icon-squared{background-image:url(/assets/flags/1x1/jp-551281a75e6c6fd64eb65b39f56102b52c182f6c38ee045c9422f6592f0f65c5.svg)}.flag-icon-ke{background-image:url(/assets/flags/4x3/ke-45790bc3ec1ed8ed0124777a7c9e09163353b5af4ff70ae6604a61b53712df4b.svg)}.flag-icon-ke.flag-icon-squared{background-image:url(/assets/flags/1x1/ke-2cca24ecf024b801543c0572efc9969ffdaf25cec313e2149c64961839bc301b.svg)}.flag-icon-kg{background-image:url(/assets/flags/4x3/kg-3879f8931d74cc9c5927261f4095b2bb786f3d62c803b2a96ec550a23fae9f49.svg)}.flag-icon-kg.flag-icon-squared{background-image:url(/assets/flags/1x1/kg-74318932808f85b72df308358f2f2699ab0cb7ab4f7ad3c84c4be4024f0fb140.svg)}.flag-icon-kh{background-image:url(/assets/flags/4x3/kh-7409fab4ba4e676db7b5c61020b97893b1735fe0b8e39e9b4f96108400be704e.svg)}.flag-icon-kh.flag-icon-squared{background-image:url(/assets/flags/1x1/kh-2603f6a61b400cb12b87397eeba60ae1707511467d5e0c430c05809bf89e5042.svg)}.flag-icon-ki{background-image:url(/assets/flags/4x3/ki-617c1b52f3d9aee99d094edbd1775cae77aade266a1318eb4671b2bb1620ded5.svg)}.flag-icon-ki.flag-icon-squared{background-image:url(/assets/flags/1x1/ki-74615266b440a24f09abdeae3853d7e1111f0eba77df71ccd176d83fbd1fd9ad.svg)}.flag-icon-km{background-image:url(/assets/flags/4x3/km-0c9bcbf7e677a541fc8dff6f848c9d92b6982ac2934ae75faa56a2b846bb5698.svg)}.flag-icon-km.flag-icon-squared{background-image:url(/assets/flags/1x1/km-81b0fbe53d09194270e8ed4cbe9be8eb1ae727e77957005369ad8bdc651dd1c8.svg)}.flag-icon-kn{background-image:url(/assets/flags/4x3/kn-0442f55f81cd3b1057c609301f0af2b503d89a895a954af8c970df997e92bd03.svg)}.flag-icon-kn.flag-icon-squared{background-image:url(/assets/flags/1x1/kn-897c34ef54bee486f0d24d2191e2400f49a19d98efb19f8c3f1a27fb0b97131a.svg)}.flag-icon-kp{background-image:url(/assets/flags/4x3/kp-a54f7201982b29530381b71a5e2a11c1153860f22c04c0a2d91bb0d20fedf78e.svg)}.flag-icon-kp.flag-icon-squared{background-image:url(/assets/flags/1x1/kp-758eccd89ef3707808fb68d931f086e49333904f4cc67c88468f3c96fb43b7b6.svg)}.flag-icon-kr{background-image:url(/assets/flags/4x3/kr-c0b9b2c854133410c0ad9cadbc10b1e0bacf0305519883126d55bfa3214f9d06.svg)}.flag-icon-kr.flag-icon-squared{background-image:url(/assets/flags/1x1/kr-7c0457ac5d284b28b742ea2e061a1aa2a35f63171e464b3a7eb501a48756ce7b.svg)}.flag-icon-kw{background-image:url(/assets/flags/4x3/kw-81c3d5d25c7b840ef14783b51d18c6b7cfc61f94932c664bbc9e5879fef020eb.svg)}.flag-icon-kw.flag-icon-squared{background-image:url(/assets/flags/1x1/kw-66670211a67a4e61d4652a19d821dc5195f01a28a3a9b28b7e4c6048cd86b19c.svg)}.flag-icon-ky{background-image:url(/assets/flags/4x3/ky-0f4ab66d951ae33f800d680aaa5704804ba9c8844d4d80e5bee2e3fa0e100af3.svg)}.flag-icon-ky.flag-icon-squared{background-image:url(/assets/flags/1x1/ky-fb5f57bb58b74d23377bad9954a75ab88d1587af68546ce137a6ae7a88a7701e.svg)}.flag-icon-kz{background-image:url(/assets/flags/4x3/kz-39edc952c598c71be2c9510944a8faf708d8e4b367b5ad78a688d1cd37f522eb.svg)}.flag-icon-kz.flag-icon-squared{background-image:url(/assets/flags/1x1/kz-924c04dc19267b049f35213af0e2b0c540933c06389433cb4aacd8dda33b286c.svg)}.flag-icon-la{background-image:url(/assets/flags/4x3/la-e3a36a3bd0003442c3a21d3a192995fa6fb3b3c08a2daadc8f38f62736b5b1e3.svg)}.flag-icon-la.flag-icon-squared{background-image:url(/assets/flags/1x1/la-c9d4223a897e5e2938a4892bbc593d3828093b9439fc3f6de21520e4013ddbc5.svg)}.flag-icon-lb{background-image:url(/assets/flags/4x3/lb-508c2a5a9b50d604895675b9f1c1e5914c394a7f468f5d823eb0476acaacbc7f.svg)}.flag-icon-lb.flag-icon-squared{background-image:url(/assets/flags/1x1/lb-10c9ba8ea7aa3189f16a7273c837982a887fc4ddfc9d514d8f5a660d72356f7f.svg)}.flag-icon-lc{background-image:url(/assets/flags/4x3/lc-04ccd92fb1578654181febaea30ebd6b6620f56115730b2a2d673c712307bf5c.svg)}.flag-icon-lc.flag-icon-squared{background-image:url(/assets/flags/1x1/lc-4ffb53afb8bd296d526ac26fd8007afc74855e92833a893d3c934a5d12eb152a.svg)}.flag-icon-li{background-image:url(/assets/flags/4x3/li-3058dc4aeaf2bd2da8cb910892137d732b56e5e9d342e565a4059de1a8e40e40.svg)}.flag-icon-li.flag-icon-squared{background-image:url(/assets/flags/1x1/li-0780a4f218b9ee466e33d14274b8a01575a86b3787b347e3269a3b301c220d5f.svg)}.flag-icon-lk{background-image:url(/assets/flags/4x3/lk-a13d6ab1da51be3b1d2c5b80f4d866c923d42b017e197469e1bfc0dd021c4bfe.svg)}.flag-icon-lk.flag-icon-squared{background-image:url(/assets/flags/1x1/lk-99759363f0df6b868fd1398bf05666c680bafe1eeec8b859b64d450930213e02.svg)}.flag-icon-lr{background-image:url(/assets/flags/4x3/lr-b06a1d70899826b305ce387fa31e1fa0bdb3bcb17c1392f15f995ce1dba723cf.svg)}.flag-icon-lr.flag-icon-squared{background-image:url(/assets/flags/1x1/lr-820a9d023e5b1e68ed640bfaba8f84ad4379c42a6c5c982cb76b0390dd2bcbdd.svg)}.flag-icon-ls{background-image:url(/assets/flags/4x3/ls-d02bcefe7c298c153665f35c33eedb08e2e2b345350e4bf1714a87abf86b2d0e.svg)}.flag-icon-ls.flag-icon-squared{background-image:url(/assets/flags/1x1/ls-85c731c313a46db12bdb27fe229e9f7d052b447c624663b73ffa1dbab97f03fb.svg)}.flag-icon-lt{background-image:url(/assets/flags/4x3/lt-c08eb18a15d2003cb544432b11c5081d3d5741370669b4df306d1c6bce14cb51.svg)}.flag-icon-lt.flag-icon-squared{background-image:url(/assets/flags/1x1/lt-c1bd7e3d289ac9b0df06d47237780eaf4d30f01281ed50a7df9a22bc3a2489c5.svg)}.flag-icon-lu{background-image:url(/assets/flags/4x3/lu-99e7b6adb3a9e0f867b17eb3b1f0f33db92fd27cfd7b651f62453f359bace22f.svg)}.flag-icon-lu.flag-icon-squared{background-image:url(/assets/flags/1x1/lu-ab544445f16afa450549288ac86c2cc9a458a9d7747b3a89d5ecef7db9c83ce7.svg)}.flag-icon-lv{background-image:url(/assets/flags/4x3/lv-f8844d50b89f0369f73d580d3676553e7e55dd8ab2460e592a29a530d9bed886.svg)}.flag-icon-lv.flag-icon-squared{background-image:url(/assets/flags/1x1/lv-baeced49dd4249e36a25b0f23a5c601a69e9dee3137627cd4450194b85a99dd4.svg)}.flag-icon-ly{background-image:url(/assets/flags/4x3/ly-03209121483967f9d74849fb9261de23e9ff2e02c4e40b29f1cda0631b8a5fae.svg)}.flag-icon-ly.flag-icon-squared{background-image:url(/assets/flags/1x1/ly-1e6e070aaa4bfc97a5a446a39bf746ab3c4c81d9f62c975cab164e16de3a3ffe.svg)}.flag-icon-ma{background-image:url(/assets/flags/4x3/ma-9a25cc7c2868fa45b251dd1b99a0be3b583df69732146142020fe9c6c0c95b63.svg)}.flag-icon-ma.flag-icon-squared{background-image:url(/assets/flags/1x1/ma-4f18b9c355b8b8bf0db69badb235a183dbd558deb6439bf03b4f18e56837a7f3.svg)}.flag-icon-mc{background-image:url(/assets/flags/4x3/mc-b0c50599ea2a550680a6a867579930e0b47d3e05193a7294a26b7849a7ad35e2.svg)}.flag-icon-mc.flag-icon-squared{background-image:url(/assets/flags/1x1/mc-8f1fe6210338399d8791d91f39234b1a09acf2aa5e0387696048dc7068534a28.svg)}.flag-icon-md{background-image:url(/assets/flags/4x3/md-8849eef7bdf916e962f7bb31af87c8d47aef33f9f4a2017b2ce55c4166e79643.svg)}.flag-icon-md.flag-icon-squared{background-image:url(/assets/flags/1x1/md-43f1bb4157545abe6e79215459efb548d913bbe7922078cd40cb722a4e19d9b4.svg)}.flag-icon-me{background-image:url(/assets/flags/4x3/me-983d452d43cfb8d628bfc5c0cf4991c2ba3cf0e39e70aa5353cfd4e9ec3da62d.svg)}.flag-icon-me.flag-icon-squared{background-image:url(/assets/flags/1x1/me-104d6a96038ef06d3d8b89c9221996f3649b5b821139b11b2e07695b0f6fda2f.svg)}.flag-icon-mf{background-image:url(/assets/flags/4x3/mf-31fb851bfcc2340d2fa43e86a099cc7becfc8e7f996a4d2ca56bd050e6537086.svg)}.flag-icon-mf.flag-icon-squared{background-image:url(/assets/flags/1x1/mf-fe20ce9bf911631d6e79edf21c8cff0716f2dc1ffded39515735444d9a66fa55.svg)}.flag-icon-mg{background-image:url(/assets/flags/4x3/mg-5effe963e29f804a26f95dbbc9519add454a0fd9eb918ddfeb55e1e99a1a2701.svg)}.flag-icon-mg.flag-icon-squared{background-image:url(/assets/flags/1x1/mg-9e546cfb78810d9b25c814a84aadd6907880b8e0cdd2e4e30738b519e7c1ac91.svg)}.flag-icon-mh{background-image:url(/assets/flags/4x3/mh-d8cfd123007dbb99aa700c335957926a6d5e877ab49680c79629a32716d7a782.svg)}.flag-icon-mh.flag-icon-squared{background-image:url(/assets/flags/1x1/mh-3fe03d4d063a4729fc8b68fd5e9d7d2eef6e65c4e82954c83f76b138cea2eb45.svg)}.flag-icon-mk{background-image:url(/assets/flags/4x3/mk-6e8071d15f2ff125d30bf89d000dcb47db9545cf9b7ff04f1474650ec2f4d25c.svg)}.flag-icon-mk.flag-icon-squared{background-image:url(/assets/flags/1x1/mk-fdc9212f9f311cbface56b6587468a2e845111b697edc11b7edda9fcf100c1d5.svg)}.flag-icon-ml{background-image:url(/assets/flags/4x3/ml-a730102e0c6f6362de9c10ef8da6cf7b123465d01a297e7a89808b01fa4771cd.svg)}.flag-icon-ml.flag-icon-squared{background-image:url(/assets/flags/1x1/ml-a661355da206b0cb7ac4c84b6cdf7e411fbca8fcb271ae999fa60d5c67578192.svg)}.flag-icon-mm{background-image:url(/assets/flags/4x3/mm-6d0d207d662477110f2b863488088818d8400386358dcbc669a2d8c54d1bae16.svg)}.flag-icon-mm.flag-icon-squared{background-image:url(/assets/flags/1x1/mm-de7d46b6543343af61ba997045cb41a707bd0db1e7a5879971ca8fddcbdf9e99.svg)}.flag-icon-mn{background-image:url(/assets/flags/4x3/mn-656eb51e88bfce82401e4080eb791ddf16d571cbba102cdd4316c5de4711ac65.svg)}.flag-icon-mn.flag-icon-squared{background-image:url(/assets/flags/1x1/mn-ad22cb2c195a7d8ca8e4174db011d5f58238ee25039b5b2da2649d8ca8b00123.svg)}.flag-icon-mo{background-image:url(/assets/flags/4x3/mo-37a1088aa687af13951bc93886e3e51cb246eccfde1b56528f189327ea291792.svg)}.flag-icon-mo.flag-icon-squared{background-image:url(/assets/flags/1x1/mo-b463a1c37b69131d662e3fb2ae937583458824a09bcf68fc7ed2d7fd729138d1.svg)}.flag-icon-mp{background-image:url(/assets/flags/4x3/mp-ecd12cadc358fdf293e856c0a3ffc09409123cabd3c7201225b2d21b59551e14.svg)}.flag-icon-mp.flag-icon-squared{background-image:url(/assets/flags/1x1/mp-d1f4ba10c1409e713253f1fbb107eeccbd4ec1a8f9036663f1ac1991aee53835.svg)}.flag-icon-mq{background-image:url(/assets/flags/4x3/mq-b4e1b08a93c1364c79e6d61f95b16fca5b884da6e77835bc0e0adfff8ecc2d7f.svg)}.flag-icon-mq.flag-icon-squared{background-image:url(/assets/flags/1x1/mq-19cb6f7cb7354c3fd40e987c93a2d76329d34b2ed3873c3f25fe56802f251ea8.svg)}.flag-icon-mr{background-image:url(/assets/flags/4x3/mr-9f64af3ed5c6d8d1f68b5cb09fd1aa9d28c3c95107e063f64a0ef95f0cb9429a.svg)}.flag-icon-mr.flag-icon-squared{background-image:url(/assets/flags/1x1/mr-0e79b7bcc669bb871d94021db2b78b162b9867c7eaf934d8f7a3025fd5903576.svg)}.flag-icon-ms{background-image:url(/assets/flags/4x3/ms-32620dd70353777b2ee62951556976f398cd38ae359b5a8c97311a1dc61eb8bc.svg)}.flag-icon-ms.flag-icon-squared{background-image:url(/assets/flags/1x1/ms-4104d4f36cb5cf1c6de78e52e90bc3c5b8bfa262617b16a737673feb8c30a00c.svg)}.flag-icon-mt{background-image:url(/assets/flags/4x3/mt-0c9819aa69b34b84c1ee43620922737122eb38f107be9864a0690ac66ef8aa64.svg)}.flag-icon-mt.flag-icon-squared{background-image:url(/assets/flags/1x1/mt-3c3fe71f2a2bf0d961fd145ad7e48ca1e9d3a05cce514354714ba4568503d106.svg)}.flag-icon-mu{background-image:url(/assets/flags/4x3/mu-c78c23f1499756b9db762ae434ca354d1481447fa94c66bc10aca9443b399059.svg)}.flag-icon-mu.flag-icon-squared{background-image:url(/assets/flags/1x1/mu-91ebc79d0fa306127ea8b7a33f77d5b28f35c516ea91ff0468c7344dc838db69.svg)}.flag-icon-mv{background-image:url(/assets/flags/4x3/mv-a17c947e17adae6aacef01a3e131c4150aa094911b53fbaead41783683e008eb.svg)}.flag-icon-mv.flag-icon-squared{background-image:url(/assets/flags/1x1/mv-d138e94d9d2ed093ef1425c1164493b780202f9a7f7937241a7b081b79ff8b01.svg)}.flag-icon-mw{background-image:url(/assets/flags/4x3/mw-21f116afdf71df80e3c59084c6ba640814fa5389430328ff55c9403b5c239632.svg)}.flag-icon-mw.flag-icon-squared{background-image:url(/assets/flags/1x1/mw-5c2228d3f1cf1f9cf8cb158e813202981828c11e8caf117836fc57fa6bc1c788.svg)}.flag-icon-mx{background-image:url(/assets/flags/4x3/mx-a235f9b16921590b7e78caa6f76339361356946eaf0046badd10732b4647c0b6.svg)}.flag-icon-mx.flag-icon-squared{background-image:url(/assets/flags/1x1/mx-cdab01ebcdccc020ca16e1355ef1fd18ca0043b501f399ca8edc48adfa8c7292.svg)}.flag-icon-my{background-image:url(/assets/flags/4x3/my-0ed63574cf5f20c0663ab8cd1f700e150fb641fd0b93602ba013abbfaae5ee59.svg)}.flag-icon-my.flag-icon-squared{background-image:url(/assets/flags/1x1/my-5e8d31ef06ffc8af33a5616d760592ecd022c52afc8ba33c721f1e4989da0628.svg)}.flag-icon-mz{background-image:url(/assets/flags/4x3/mz-752e2293917b1d2ece3f097104caeadf6a679054a779e9d3be8e49dc324bb88a.svg)}.flag-icon-mz.flag-icon-squared{background-image:url(/assets/flags/1x1/mz-300cba975ad43c962ceca0d266ded1fe3d21d6b4d701d657fb42b27268ea2964.svg)}.flag-icon-na{background-image:url(/assets/flags/4x3/na-a0655a2e70751278e6a60d31e818f672864a6e68e8b3d3361b2fbb70fa9bfef8.svg)}.flag-icon-na.flag-icon-squared{background-image:url(/assets/flags/1x1/na-1ce089a189db5be15eb05df8155f9bd017b61fc1a497e5b3021ff2ca664e122d.svg)}.flag-icon-nc{background-image:url(/assets/flags/4x3/nc-0c7171d91c44414ed69808611db588f1283ee7e34ea8a74a9a5101ba4b1cb305.svg)}.flag-icon-nc.flag-icon-squared{background-image:url(/assets/flags/1x1/nc-d3a1629f06dc3200af7669f2d895fce1908d2c1ca02d71e530bdfa6646a9516c.svg)}.flag-icon-ne{background-image:url(/assets/flags/4x3/ne-2b61d30a6cb4554535538e3b753926853e8c629a494a347286b9731c803548e4.svg)}.flag-icon-ne.flag-icon-squared{background-image:url(/assets/flags/1x1/ne-9c5f798ccd7d3dd3771ae628b4a39dfb2a4578fefd2e006f3ce89c3e494d0cb1.svg)}.flag-icon-nf{background-image:url(/assets/flags/4x3/nf-4e615baa83a8b4db3e39fe1d251ab913943d64e0cd320f251d619ab54e7512d3.svg)}.flag-icon-nf.flag-icon-squared{background-image:url(/assets/flags/1x1/nf-45403247c90050484813acf23c50f543779528e346317274373c3c24fd830103.svg)}.flag-icon-ng{background-image:url(/assets/flags/4x3/ng-d52fd188be973f31dd34e5a0b3fed0de68fe736c8a41c6028d9c248c038c8641.svg)}.flag-icon-ng.flag-icon-squared{background-image:url(/assets/flags/1x1/ng-f22edcc5867554d69ecbe15add0fbbb1389631f3ced07a4f820065c7770c65f5.svg)}.flag-icon-ni{background-image:url(/assets/flags/4x3/ni-2fbb883e46fbe3b2ecfed9dac004ceb546f25c77a84a5966eea224674aebc610.svg)}.flag-icon-ni.flag-icon-squared{background-image:url(/assets/flags/1x1/ni-214aed148b615c4846f842b47f99cf178ac62a96cf18c5dd6b23467184b56680.svg)}.flag-icon-nl{background-image:url(/assets/flags/4x3/nl-4f0ecea529dd4c0099dd41a7801fa5ac44aa04cd872ca31e11efd58b5a813774.svg)}.flag-icon-nl.flag-icon-squared{background-image:url(/assets/flags/1x1/nl-9c8f60e638879d642487818975e58c61cd3102f0e68c360708243c076436ff68.svg)}.flag-icon-no{background-image:url(/assets/flags/4x3/no-270f7ee9d1d2efa6abf16f693faba8586adae842d79d8aad9e3f37e96c27cbce.svg)}.flag-icon-no.flag-icon-squared{background-image:url(/assets/flags/1x1/no-7d377325e8c5ec4de0376e9f4c13463f183af637e6c443716f22020c7a313979.svg)}.flag-icon-np{background-image:url(/assets/flags/4x3/np-69637ddb3a173c4522a71598278aa32462e1762e34dd99c9dc99a515433a6cf8.svg)}.flag-icon-np.flag-icon-squared{background-image:url(/assets/flags/1x1/np-44ead118cce3a1fcbb720cc8d6eab6ecb6b62292315f61ae5963a40262ee11d2.svg)}.flag-icon-nr{background-image:url(/assets/flags/4x3/nr-0bd3c0ba7bbac4bd5985b838096eeebd67711d39065619ef092fa4bb55b22a6d.svg)}.flag-icon-nr.flag-icon-squared{background-image:url(/assets/flags/1x1/nr-63b9c44e5dd66a59895f52707dc24db5bd1eab6e535298d24e414c0f2dafcb3c.svg)}.flag-icon-nu{background-image:url(/assets/flags/4x3/nu-259989e1eea0cbf6b41a33176a4c9c1eaa2e7ae6571ad80a324c6309bd5aa5fc.svg)}.flag-icon-nu.flag-icon-squared{background-image:url(/assets/flags/1x1/nu-1cb535708f64ed8b386a245e571e677e935009af92f2b214760a2832c1ee1b53.svg)}.flag-icon-nz{background-image:url(/assets/flags/4x3/nz-90ceca2a683fbec395a91b77b0880cea99c3b2cbdb24caa5474925cbdcc3675e.svg)}.flag-icon-nz.flag-icon-squared{background-image:url(/assets/flags/1x1/nz-b0d78f165a72edd46599222a2ea5f6a91a8252975cb03e33c4ca08e389859aac.svg)}.flag-icon-om{background-image:url(/assets/flags/4x3/om-aadcca7bc7ad318400097b84849dd64c4744306cd9b4f152fba34f2e84116965.svg)}.flag-icon-om.flag-icon-squared{background-image:url(/assets/flags/1x1/om-705e2bd2b2fc7d13c152aa06bfb9e6ee4ad8b299f8c06ca16adad0b18b2b18ed.svg)}.flag-icon-pa{background-image:url(/assets/flags/4x3/pa-027e679bd65dcaa2c53145a14669c1e674a467a889ef702cbe2a260f7ca8ad38.svg)}.flag-icon-pa.flag-icon-squared{background-image:url(/assets/flags/1x1/pa-edeb4faeadaa286de7fdc667e25d38ad0cdbccaec5023182fed6a3c74e8b09eb.svg)}.flag-icon-pe{background-image:url(/assets/flags/4x3/pe-7ec59842737c90d6ff543f1831fd69b51e1e7ee1b068c3ac6259cbf2c214d611.svg)}.flag-icon-pe.flag-icon-squared{background-image:url(/assets/flags/1x1/pe-97d1b8ed1d4ed5e5f0348a731ca4a3a4b9abc7d440447dc87a521f229f375ed3.svg)}.flag-icon-pf{background-image:url(/assets/flags/4x3/pf-27955c73c5be4043c5b7ddf64c8f46d11c6648e3b1fc0efe028b8afea21a40e1.svg)}.flag-icon-pf.flag-icon-squared{background-image:url(/assets/flags/1x1/pf-83e3e1d36fba45e015c62f938e6d182029edc05ebfdc50bcb33860f36f96d73a.svg)}.flag-icon-pg{background-image:url(/assets/flags/4x3/pg-c2fdd2551f9044c461eccfae2d7ba0a347a99143f6002b71a429942af0217897.svg)}.flag-icon-pg.flag-icon-squared{background-image:url(/assets/flags/1x1/pg-cf60257fa85f9270b1e9980e703435186110167f76c153bc460c10ee8b2d4b09.svg)}.flag-icon-ph{background-image:url(/assets/flags/4x3/ph-bf3394850a6cec6a535420eabce263e7f8193413e4af1fb317c76da025388c1b.svg)}.flag-icon-ph.flag-icon-squared{background-image:url(/assets/flags/1x1/ph-006c3218effe4269252cb9638de82ea339eb2894951705c630533ceffa842169.svg)}.flag-icon-pk{background-image:url(/assets/flags/4x3/pk-b64f6a32e5bb598f57cfe49c4899c2021f2d153653f3d92101e6e11b2158e500.svg)}.flag-icon-pk.flag-icon-squared{background-image:url(/assets/flags/1x1/pk-d2d58def913c9081c5eeeda5f0b6895068ec13c955694e359531e23422145e60.svg)}.flag-icon-pl{background-image:url(/assets/flags/4x3/pl-f55a710991a94c2e6c2f9f1a7a4a36ebb84b24b7c9d9df4e1ffe86d61321fa6f.svg)}.flag-icon-pl.flag-icon-squared{background-image:url(/assets/flags/1x1/pl-fafb539259385f2b99df910cff085710a9b4d9706b74e4e0f8a6ef627615c4e7.svg)}.flag-icon-pm{background-image:url(/assets/flags/4x3/pm-8f6338d2ae3e0e42adc9754720ca21ad4979095cf6d7467a8db5a5a1c3e0b2a5.svg)}.flag-icon-pm.flag-icon-squared{background-image:url(/assets/flags/1x1/pm-63029c6198dc42c404ec39807a99528b1d198eeeea6f9a1e309548242480140b.svg)}.flag-icon-pn{background-image:url(/assets/flags/4x3/pn-4006c11ca83011c0dd60a13ac30b27da0578b9f1368bd8c6de5aab423f6662d8.svg)}.flag-icon-pn.flag-icon-squared{background-image:url(/assets/flags/1x1/pn-6c433f7f9cb79c6d5ed7bbeade8a495e3b26ca2604f4fd3995096109684ac5dd.svg)}.flag-icon-pr{background-image:url(/assets/flags/4x3/pr-6287e1515fa80e2d05133ed93f14ca03a1be6909a9ef6c736fd60f9c9fe73132.svg)}.flag-icon-pr.flag-icon-squared{background-image:url(/assets/flags/1x1/pr-526985b3a6d2d6de577ed0ed92d0b49ce854667e3ff630304813fd5af15527cd.svg)}.flag-icon-ps{background-image:url(/assets/flags/4x3/ps-31f50e1fcb44b9aa6e9ce4473c3085f744e70ea0fa1fd8d85787f4e7b0c4a69b.svg)}.flag-icon-ps.flag-icon-squared{background-image:url(/assets/flags/1x1/ps-c43918bc71bef71b24dd46e8cacc53e0df53e02dcce6199d06d11a4637f08a04.svg)}.flag-icon-pt{background-image:url(/assets/flags/4x3/pt-9aab20caed714ee47fc408f017037aea94a649b3ba4d87e2da37870ee31e4f92.svg)}.flag-icon-pt.flag-icon-squared{background-image:url(/assets/flags/1x1/pt-a309869e5018c9690a65ebdf8a2d69d61f82772068a7920f9680ed0581ae5966.svg)}.flag-icon-pw{background-image:url(/assets/flags/4x3/pw-9262037d114d0f61571c74f9a5455809709b43e6565443ae2667981eecb5f12a.svg)}.flag-icon-pw.flag-icon-squared{background-image:url(/assets/flags/1x1/pw-a6f42019653ae26d43c6e9b7bef83fc98cff8ec5e8d0c50ad7cb0a17d5e565a6.svg)}.flag-icon-py{background-image:url(/assets/flags/4x3/py-5bc9e9f0dee94ae3d9bd80ae6fb1aac297dc81a1c592d0a73bc3383bce73af74.svg)}.flag-icon-py.flag-icon-squared{background-image:url(/assets/flags/1x1/py-182eff300f4507fd9399fb6310d1cd3b45adadd7924ad2814003c7111ec5c0de.svg)}.flag-icon-qa{background-image:url(/assets/flags/4x3/qa-32c93970f8e521850eddfaf2a89dfff987f0ae3b0b73a253c301b61cf547cf9e.svg)}.flag-icon-qa.flag-icon-squared{background-image:url(/assets/flags/1x1/qa-182e4d8ace2607d0c02d3c29d65eb084af71092357006bc41cd601981ec3b81c.svg)}.flag-icon-re{background-image:url(/assets/flags/4x3/re-8b2ea1f2727c266a2b80cb12a9b7195f6b656f521552b67893b6761a07f9bc92.svg)}.flag-icon-re.flag-icon-squared{background-image:url(/assets/flags/1x1/re-07eb7d855022bc678b47b0ce5fd05da5044d6dde86ad3697d4ae55c68ff447c1.svg)}.flag-icon-ro{background-image:url(/assets/flags/4x3/ro-4ab797571e1d9eb326486f75654a4590fd33f20444f85b77ba0997eb6138c21f.svg)}.flag-icon-ro.flag-icon-squared{background-image:url(/assets/flags/1x1/ro-ddfcbaec04d11bf7f95abebd1d3a42b2862b1af8fca9b02764a6ed0e409a1d75.svg)}.flag-icon-rs{background-image:url(/assets/flags/4x3/rs-dd8a52473ea40e23b393b5f4a30d1edd91865aab167f0c1835ae84b15dcce585.svg)}.flag-icon-rs.flag-icon-squared{background-image:url(/assets/flags/1x1/rs-42bf40209c92e4e7169daf29fbcb7253b2804eee7a463051529327f38851f865.svg)}.flag-icon-ru{background-image:url(/assets/flags/4x3/ru-13f4525a4caad6e31afa523d2bc4a0c1e6377c0bef1bfd872682130d3f199d1d.svg)}.flag-icon-ru.flag-icon-squared{background-image:url(/assets/flags/1x1/ru-b9792a963faf667447e0456dba5be80a3b37c197a4284d1539a3433721d9e2fe.svg)}.flag-icon-rw{background-image:url(/assets/flags/4x3/rw-bc38bcd6e19d2941839b253af6e863b13338cde1174874f9674471026c15e422.svg)}.flag-icon-rw.flag-icon-squared{background-image:url(/assets/flags/1x1/rw-456698123775b83d2b0fa1b9fe073f9ccdba0b6bf39a703b8979dcce158eb32c.svg)}.flag-icon-sa{background-image:url(/assets/flags/4x3/sa-2b2fd6abb48415d5407c576c24a24fbd80af5877ef06cf2d026452f6c67f5f4d.svg)}.flag-icon-sa.flag-icon-squared{background-image:url(/assets/flags/1x1/sa-d9ebc73e7957f86604164dd5054fb32601ad14d7dfd4bfe73da5bdd10bb2f8ae.svg)}.flag-icon-sb{background-image:url(/assets/flags/4x3/sb-37761927039d0a37ba0995c59fd31bbe36c8a0ca161e5b72b8131e3659f8dddf.svg)}.flag-icon-sb.flag-icon-squared{background-image:url(/assets/flags/1x1/sb-bedbf8464cd82f391bfe6178c63055b650d0cf3aee60c37fa79a586f95783b79.svg)}.flag-icon-sc{background-image:url(/assets/flags/4x3/sc-f6a2f8f37be93f07600b491b52cb58d80d74b92d8ace0af313f4ce081b0d1345.svg)}.flag-icon-sc.flag-icon-squared{background-image:url(/assets/flags/1x1/sc-5dcd01b98c34460c9624280fb5047811fbae7d976620cd0a70ad4263a9085b60.svg)}.flag-icon-sd{background-image:url(/assets/flags/4x3/sd-cc9cf97e8a37622b9e1bad28811d46c4471595afa448dc055e0e3aae7687fe4b.svg)}.flag-icon-sd.flag-icon-squared{background-image:url(/assets/flags/1x1/sd-1f5d13f9780085acbaad13d959b1918c796ba7b0450954b15d145e87cebe045c.svg)}.flag-icon-se{background-image:url(/assets/flags/4x3/se-84b06bcd5bd90ea8dd6d1c3c8d2799a843c47b0256ce098aef75414964618286.svg)}.flag-icon-se.flag-icon-squared{background-image:url(/assets/flags/1x1/se-39f128686652cf914f8601110fcc9ac879bca204407013b93aff4ca4fb2ed9bc.svg)}.flag-icon-sg{background-image:url(/assets/flags/4x3/sg-a82acd90077e76318ddb0be96999d9695b9a9f4627e8a0f341d3987a62747dcc.svg)}.flag-icon-sg.flag-icon-squared{background-image:url(/assets/flags/1x1/sg-c22e093634568aae249bf35f9ddcaa6796b5f27d76c39ff5336abf7f1b8a47d4.svg)}.flag-icon-sh{background-image:url(/assets/flags/4x3/sh-57470d9a75955f0fac605a94e853bab524c7461a4c025e809fb09db762ebe46f.svg)}.flag-icon-sh.flag-icon-squared{background-image:url(/assets/flags/1x1/sh-8d06a0fff61e51eb65357d138e00736545835b8649aa2694152f4cdc9f941c16.svg)}.flag-icon-si{background-image:url(/assets/flags/4x3/si-289d6417f154323e7922df09ffc0f49ded31548c7ee8020c39cb85724ffbcea8.svg)}.flag-icon-si.flag-icon-squared{background-image:url(/assets/flags/1x1/si-ca40a5f4f38119d6f52ffd3ddb36af95951a2aa1fadcd897f5bc1641bb2e0051.svg)}.flag-icon-sj{background-image:url(/assets/flags/4x3/sj-67d4cdd268d0c0cd93fc561b506cb5646cb508385c93ed350d11f94aa1c83833.svg)}.flag-icon-sj.flag-icon-squared{background-image:url(/assets/flags/1x1/sj-f7c489607033138039612d6abe7f4b0b4b6dada5cac75d78204f404a0d292b1c.svg)}.flag-icon-sk{background-image:url(/assets/flags/4x3/sk-a0bdbb7f5d6998ffe9fcbc80bbdf0e6cff3629740d2ce1b8d61025e0a8b322b5.svg)}.flag-icon-sk.flag-icon-squared{background-image:url(/assets/flags/1x1/sk-a82a813b2d81af9be1aa775f22b2c2457d11e870e072d7e23957a11d0878faed.svg)}.flag-icon-sl{background-image:url(/assets/flags/4x3/sl-be265bed24cfe0b25778201f251e52e4e721e3d319795875913805d1aea84ebb.svg)}.flag-icon-sl.flag-icon-squared{background-image:url(/assets/flags/1x1/sl-cb8bccbaa21957f006ed4ae0144da81c999e93bd8014023b16b500fdcdc397d3.svg)}.flag-icon-sm{background-image:url(/assets/flags/4x3/sm-d7818df3f8f2d5dbed27dc5a0a80b1e41cdcd6130eeff221da58f0321e925f27.svg)}.flag-icon-sm.flag-icon-squared{background-image:url(/assets/flags/1x1/sm-6f87660dcac925bbdb036c79a0e20d3b208215d327be4c4764ae1069d6464efd.svg)}.flag-icon-sn{background-image:url(/assets/flags/4x3/sn-b131b17a374bcfbd00d442d282fa52f0e4e0e448cda1cdfaac25a95ff56443c0.svg)}.flag-icon-sn.flag-icon-squared{background-image:url(/assets/flags/1x1/sn-d180d3ce9846966dee6a3d9433ede7d24801dc4311636aabd470ec5b8765d772.svg)}.flag-icon-so{background-image:url(/assets/flags/4x3/so-3b5b77b371299478144a94b60c99524fb6b99bfedb3dcc976ab70185e07f399e.svg)}.flag-icon-so.flag-icon-squared{background-image:url(/assets/flags/1x1/so-50aa941f2d2954285ef9e5ac260cdd264a73cf2e4b0c627677f04141fff2afd3.svg)}.flag-icon-sr{background-image:url(/assets/flags/4x3/sr-94d0f0aefcbdea8d7ba35648eda5037e99bf4126723ce36416582ea43b08d3e2.svg)}.flag-icon-sr.flag-icon-squared{background-image:url(/assets/flags/1x1/sr-3944d683068d437471725d22fd71ccbe6a63ae307ff9775690417d3bf262cf82.svg)}.flag-icon-ss{background-image:url(/assets/flags/4x3/ss-f391e5002cbce83f97f7d1a11c284fa2e36a7d6dc734757d733656801ab17d0a.svg)}.flag-icon-ss.flag-icon-squared{background-image:url(/assets/flags/1x1/ss-853bd9f713d2f6b1fe540a82e8bf4754912da21575b3fe756b8741767f318f7a.svg)}.flag-icon-st{background-image:url(/assets/flags/4x3/st-b52bb48a2c0800f5cb4b07bdd93c3908f77bcb6800be883ebf943bbd3d99d42c.svg)}.flag-icon-st.flag-icon-squared{background-image:url(/assets/flags/1x1/st-d8b5b1c8b9fe947086a4d277d2ac5d6b9cff188dfd37bda66c8bf5e02c5facc8.svg)}.flag-icon-sv{background-image:url(/assets/flags/4x3/sv-6d02d63c7f04c9388e98f892cc43d8daa2110fc84242758d5627fcd247bfd09b.svg)}.flag-icon-sv.flag-icon-squared{background-image:url(/assets/flags/1x1/sv-fb4c8d7eb98396a93c5b9c37195d70e809e0d71d8b8f9316e842121f95bb82ea.svg)}.flag-icon-sx{background-image:url(/assets/flags/4x3/sx-fb6a7b1cbc5b29eeeb39a5aec64ef7aad432c37bbe848d29955a3786b9763224.svg)}.flag-icon-sx.flag-icon-squared{background-image:url(/assets/flags/1x1/sx-a37b124212f8530b921aef7657cfb35c2895a731c7a06f333faee4c93f32806a.svg)}.flag-icon-sy{background-image:url(/assets/flags/4x3/sy-e35f8d88c864ed4f38edb2f9f96d5bd69f6df078b50515b8c5467bf6b1689f50.svg)}.flag-icon-sy.flag-icon-squared{background-image:url(/assets/flags/1x1/sy-5d537bd5b42b58f6e8a7e33fbe5942a16126abb639edf9cb58b88938c57ebaa9.svg)}.flag-icon-sz{background-image:url(/assets/flags/4x3/sz-c65ae592e943217787848364bdb4c57335869f4626ce705adabdc2620669c1c6.svg)}.flag-icon-sz.flag-icon-squared{background-image:url(/assets/flags/1x1/sz-dd3d1c65bdf09317553f205e588e3dc7336acec1cb9315bfbe0f5bd8ca5bba3f.svg)}.flag-icon-tc{background-image:url(/assets/flags/4x3/tc-594b6cc87040836c6d6777afb5833d565d3e5e75f404350a51443ec4588a1ccb.svg)}.flag-icon-tc.flag-icon-squared{background-image:url(/assets/flags/1x1/tc-34a37006252eea340488220585c31d047b57e3e7934c77180d930972aaceadc3.svg)}.flag-icon-td{background-image:url(/assets/flags/4x3/td-b67a1978e3badb895ff640c80bb6c0e33eac354220c08cf3fc93d62bf5d685a3.svg)}.flag-icon-td.flag-icon-squared{background-image:url(/assets/flags/1x1/td-556b3a7991c17010cb7e1ff23c4edcc2dcdb8c406a128d407fd165ea8a19d311.svg)}.flag-icon-tf{background-image:url(/assets/flags/4x3/tf-35cd83351521f3022a43e01f0c40f34663a66ac1e92045979f31d3fd65c16d02.svg)}.flag-icon-tf.flag-icon-squared{background-image:url(/assets/flags/1x1/tf-485e71f61ff577735dbc4ba1025515c22a83c48ee7f3a2ed49804766c35f6ea5.svg)}.flag-icon-tg{background-image:url(/assets/flags/4x3/tg-24b25f4c2213fe35e5f5586d7ab23abf0c25ad2049708cd52ba72e1ec7b754ff.svg)}.flag-icon-tg.flag-icon-squared{background-image:url(/assets/flags/1x1/tg-05f3d98392a5ec3e4aecf8f629d3d03f05ac55abb7d9d84187d599acfe271374.svg)}.flag-icon-th{background-image:url(/assets/flags/4x3/th-cc936bacd84dddd15454ef06bc64e357f83854af34692fc37363272d61f637d4.svg)}.flag-icon-th.flag-icon-squared{background-image:url(/assets/flags/1x1/th-de82cbd770db2be53a8e3d59d86e2b748a5d3f96eb8584f7b9364cefbd06a172.svg)}.flag-icon-tj{background-image:url(/assets/flags/4x3/tj-b90bf3e2dd63265d55b67962b160df65f021c42b6ea304e2943c10b9e2a8749d.svg)}.flag-icon-tj.flag-icon-squared{background-image:url(/assets/flags/1x1/tj-5f6571e74b1f8720f9ecc2d3aa2098ca45d2e7ad6602b2a57c206384719b9f36.svg)}.flag-icon-tk{background-image:url(/assets/flags/4x3/tk-602520b29b909c96baea17a38eb654d6c6fbc7088f46a0cb8d8fe34ff92e3cb8.svg)}.flag-icon-tk.flag-icon-squared{background-image:url(/assets/flags/1x1/tk-fe1dc8aaa0643a45a74ecec8aec09f0fe2207d104bb3c28c0b84405f1275aeba.svg)}.flag-icon-tl{background-image:url(/assets/flags/4x3/tl-ebdb862aa5ae5de1a72242571deaa70bfb222f488a93b70e304f2075b474d54b.svg)}.flag-icon-tl.flag-icon-squared{background-image:url(/assets/flags/1x1/tl-485f02183bdb192ba3ce6e5f076e184112739f883ae0a8fde33c454377b848d6.svg)}.flag-icon-tm{background-image:url(/assets/flags/4x3/tm-5ddb4128bf0becd7c60413d5418027f5f01ca4bc72561d54b94febfee7a5a24b.svg)}.flag-icon-tm.flag-icon-squared{background-image:url(/assets/flags/1x1/tm-3521ad569a4095aa8d4166d5d9094fccfdbb3ea411207ad685b6dd5814ef3392.svg)}.flag-icon-tn{background-image:url(/assets/flags/4x3/tn-ca27eb50d88b11d20b5b09e2bbecb7753267222489920c526608e5d2acd22d79.svg)}.flag-icon-tn.flag-icon-squared{background-image:url(/assets/flags/1x1/tn-222c6cd4742c558f48ebcacb47ea334057642fffa3456a1c75e0fad9e728d09b.svg)}.flag-icon-to{background-image:url(/assets/flags/4x3/to-c9c509fc24f591fbe52bbf732c44291384c787796e1fc9c703a973587c3f8ad1.svg)}.flag-icon-to.flag-icon-squared{background-image:url(/assets/flags/1x1/to-cf26dfb44b56b915b2f11896355cb778b938ed54423311d69d7cda9626887dda.svg)}.flag-icon-tr{background-image:url(/assets/flags/4x3/tr-c40f697070cf8d8358785b9203d1c8f438976e3cd644a87d9ee16fa9960deaa4.svg)}.flag-icon-tr.flag-icon-squared{background-image:url(/assets/flags/1x1/tr-627dcf91a1e5153c045e33a3459b5d56002530fddd3fc53927f4d0fb7ea004a5.svg)}.flag-icon-tt{background-image:url(/assets/flags/4x3/tt-04786ffedbde2c96a30ad1cbf4db000848f14bd700324651fc88364e5f3c2fd0.svg)}.flag-icon-tt.flag-icon-squared{background-image:url(/assets/flags/1x1/tt-6a3c73bfa7782366d95e673d847ef8f84c0475b364d359def1efd264297bac30.svg)}.flag-icon-tv{background-image:url(/assets/flags/4x3/tv-20b56e7c0a2fbaa2a0b7b1bd87afc6368440f175fb3a0589de5e34e99d163fd7.svg)}.flag-icon-tv.flag-icon-squared{background-image:url(/assets/flags/1x1/tv-8bce1d7bde2e20dcc473ed3a33c66e4bedcf1acf2d2fff6d54353a480b8cafbc.svg)}.flag-icon-tw{background-image:url(/assets/flags/4x3/tw-36070ac0a15ab1f4811478da62e7678756a9aa266b141ed0549aba1c0e04333a.svg)}.flag-icon-tw.flag-icon-squared{background-image:url(/assets/flags/1x1/tw-fd7a0db2f3808842ca99176f097356fe9e6f3c120d6aa9e8c4a9c2dd4c3943ba.svg)}.flag-icon-tz{background-image:url(/assets/flags/4x3/tz-51ad7d69f059075df61b9226468af0d78642af4ad34a7540f64c5bea82e803d7.svg)}.flag-icon-tz.flag-icon-squared{background-image:url(/assets/flags/1x1/tz-0703f29a7ae02a9a1753cb1726dd2934d75ed3a12e8d63faa9fa866e1fe61440.svg)}.flag-icon-ua{background-image:url(/assets/flags/4x3/ua-7f7db03c3b492aaacd11b0abac70d543a7c0ec5265a36d529bbb80a7c432d81a.svg)}.flag-icon-ua.flag-icon-squared{background-image:url(/assets/flags/1x1/ua-25192fa80f120edb1dd1c4757fd7b79ef38f5e1729238f4135003e6a1501bf28.svg)}.flag-icon-ug{background-image:url(/assets/flags/4x3/ug-7635df53eafdf411be0809df835bfbcffd61badd6c4df3db0909c8b3188015a0.svg)}.flag-icon-ug.flag-icon-squared{background-image:url(/assets/flags/1x1/ug-537f34f64e723fbe7cb7902ea0e61303f1ada79214197efc39ebe2c52ce24186.svg)}.flag-icon-um{background-image:url(/assets/flags/4x3/um-a0ae80e34bbf94677dd6052ea87cc0090aba747dab5440e5ca6e231f7f07c96d.svg)}.flag-icon-um.flag-icon-squared{background-image:url(/assets/flags/1x1/um-3f1bc09babe7fdcf32518bb49d1aac3a66d0204f955eacca291c58d4f4ef895a.svg)}.flag-icon-us{background-image:url(/assets/flags/4x3/us-aefd8f7e57d11f7b0416d01d9c665ab3848b10af849f35a4d772d58d24d83329.svg)}.flag-icon-us.flag-icon-squared{background-image:url(/assets/flags/1x1/us-87af45be9346e8c820312976abe332ee11f8931e29fa361328d28660a711b1e2.svg)}.flag-icon-uy{background-image:url(/assets/flags/4x3/uy-9f636c8283abf56cc930746fd427c1d1644dcf8736c537629df13f760da96ebc.svg)}.flag-icon-uy.flag-icon-squared{background-image:url(/assets/flags/1x1/uy-e216b762a93ec55bf9b4ae3d35b7febe0b192a12246fd66c45139ce77fb2095e.svg)}.flag-icon-uz{background-image:url(/assets/flags/4x3/uz-697d596705372323beddccb3626d1ce405b36249315c6b006ff1529e24909ceb.svg)}.flag-icon-uz.flag-icon-squared{background-image:url(/assets/flags/1x1/uz-aa34cbe4f6f0e4b5d890975578d28cc9b1e88ebd503d3bdca693748eb29b3353.svg)}.flag-icon-va{background-image:url(/assets/flags/4x3/va-d24d3c5bee108c396997c3d5b2bd2273433752d8c222eb531650e51551a4afd0.svg)}.flag-icon-va.flag-icon-squared{background-image:url(/assets/flags/1x1/va-01160c1bffda12f0b94554ba0c50162a88da807943617334bd4c57a030985e95.svg)}.flag-icon-vc{background-image:url(/assets/flags/4x3/vc-ddf979bee2889414e5a05ac55f39a9c93f34e0aff0d35f007605049a2d8b5afb.svg)}.flag-icon-vc.flag-icon-squared{background-image:url(/assets/flags/1x1/vc-ac776e16dec19ff2e2d9238f541dae5d977282b451a83ab3d4122efed2392be9.svg)}.flag-icon-ve{background-image:url(/assets/flags/4x3/ve-e23abd006cc75a8c4f9ec1cb122b46f9b52e26c5606532d2c868277d4ccd523b.svg)}.flag-icon-ve.flag-icon-squared{background-image:url(/assets/flags/1x1/ve-1480713f28719e0a83da2c5f1333407dbfa5bcc0de8c9ba718fcf47273ee95ef.svg)}.flag-icon-vg{background-image:url(/assets/flags/4x3/vg-7f8f24a4d6995e4dd39e3d9098dad5e14649821fa12ffc200edf0a586285ee15.svg)}.flag-icon-vg.flag-icon-squared{background-image:url(/assets/flags/1x1/vg-b464b6a78e46c29df9e4bdadc2646208f11c59168706456075f970552a24efa8.svg)}.flag-icon-vi{background-image:url(/assets/flags/4x3/vi-58311325a293b046044976d899f288ce0fbe9bfd705a23947a9b38d7991983d7.svg)}.flag-icon-vi.flag-icon-squared{background-image:url(/assets/flags/1x1/vi-1c132d2cff66cdbdb7b6acf504bb0cd9d7579595d80c3fa6604ff24ca7a0184d.svg)}.flag-icon-vn{background-image:url(/assets/flags/4x3/vn-a918d3c9cdc368b1d2ff9614d58cbcd1d43b725889b0ba18f5d4e693071e389a.svg)}.flag-icon-vn.flag-icon-squared{background-image:url(/assets/flags/1x1/vn-895e428ae3d98c99dbb02088cf8ef040bfb031df6f16c3c8fc3678505d869791.svg)}.flag-icon-vu{background-image:url(/assets/flags/4x3/vu-2c286c778a7bed03cb603ab24b68dc91868f4f054cf4f851bdd17aa16731571c.svg)}.flag-icon-vu.flag-icon-squared{background-image:url(/assets/flags/1x1/vu-51ef23121e2641ebeeac50d31c4e52b7d00d3ab1bc9fc0ad95ea86fd3631975a.svg)}.flag-icon-wf{background-image:url(/assets/flags/4x3/wf-f7e9ac5edac196ac32d7bafa04b5c0d924b89e9d7e4f3535a6a26c6c1523639c.svg)}.flag-icon-wf.flag-icon-squared{background-image:url(/assets/flags/1x1/wf-95a920a79aa32d92f8a362321aae4230e17025ac04d976593f4423d0c37c1aee.svg)}.flag-icon-ws{background-image:url(/assets/flags/4x3/ws-efc6505a802a3fa2018bc102fc2e11db8c738464c619381b6edc32d0a89341a3.svg)}.flag-icon-ws.flag-icon-squared{background-image:url(/assets/flags/1x1/ws-e3afb81c037c814620027bf61ac5e266683cab7ba5796ecf10b64c110cfcb932.svg)}.flag-icon-ye{background-image:url(/assets/flags/4x3/ye-fd88856e70d66b01b4f0f608936a61cf3b1d9dad40a2932fc5da4d01f72a447b.svg)}.flag-icon-ye.flag-icon-squared{background-image:url(/assets/flags/1x1/ye-0c0e32330871e6d83af54affb7dadbbe736f9799068508211fbae54db9bbdcc6.svg)}.flag-icon-yt{background-image:url(/assets/flags/4x3/yt-2eef17b543424082d9f9b42a67e84c20b52e7f7eae8c4326d60711158da51d5b.svg)}.flag-icon-yt.flag-icon-squared{background-image:url(/assets/flags/1x1/yt-911da8075337fd8f75ecc8a338c294cb771c6b9a08576f96c9de1437888cd2a7.svg)}.flag-icon-za{background-image:url(/assets/flags/4x3/za-45991a2aee307198510e56bf92523070aac4241cafe6c3ddb8f89b20a61d6371.svg)}.flag-icon-za.flag-icon-squared{background-image:url(/assets/flags/1x1/za-bc09a89b29311ea7e582ef60bf4e18aff7c29de6fbefe309463ca765723a0ce8.svg)}.flag-icon-zm{background-image:url(/assets/flags/4x3/zm-07c0f30d86e66d0cad9d66cd9c9384d9cce1844f159d245deff6717101fe49c2.svg)}.flag-icon-zm.flag-icon-squared{background-image:url(/assets/flags/1x1/zm-fc5bce3834c71fe36617ea5f57f0bd1dcf3880a7c6aa515dcf92ae067f796241.svg)}.flag-icon-zw{background-image:url(/assets/flags/4x3/zw-5217c74f14d9fdda244b69c5982bbabee052ac0f1cc0704926e8b1e621e50f9a.svg)}.flag-icon-zw.flag-icon-squared{background-image:url(/assets/flags/1x1/zw-a33b191c631709b9e1d85e06f5b15535fb544d4668c8bef865ede2a0b6a88ed9.svg)}.flag-icon-es-ct{background-image:url(/assets/flags/4x3/es-ct-bcbb454a50c9a647efd43dcf041445f15e8dd70654bde530bf62401d4fb7738d.svg)}.flag-icon-es-ct.flag-icon-squared{background-image:url(/assets/flags/1x1/es-ct-7f13eb2b2f5c11dccd7043286bed7540d4dad4b1a8367b0aca1b8405a351b2ef.svg)}.flag-icon-eu{background-image:url(/assets/flags/4x3/eu-5f129db64306353251b78f998d531d2f1019404cfa890ae63ed70dc316c7f240.svg)}.flag-icon-eu.flag-icon-squared{background-image:url(/assets/flags/1x1/eu-ec59ac8daf2a63ea8e299ad63a208445d68a96affe6a10a7328acb6799d44127.svg)}.flag-icon-gb-eng{background-image:url(/assets/flags/4x3/gb-eng-1895f4e35ae299f5d869da2462ffcf98df4b08dcddc531c8f175e49720001a14.svg)}.flag-icon-gb-eng.flag-icon-squared{background-image:url(/assets/flags/1x1/gb-eng-d11afb87f40f35acda435a886ea044bd5e0b6f363ba0c7319f1d0181551fecf3.svg)}.flag-icon-gb-nir{background-image:url(/assets/flags/4x3/gb-nir-b280f09c787f495c1074376cd67537b40216f672917e7d204bb12b8e7c72afaf.svg)}.flag-icon-gb-nir.flag-icon-squared{background-image:url(/assets/flags/1x1/gb-nir-2e516e72e0e8e244ef430e6608322f8c4fb276807ab033279b2a6570dd68fd41.svg)}.flag-icon-gb-sct{background-image:url(/assets/flags/4x3/gb-sct-1b9e407802ae901cf8da740c382ec2b19821837d76271a73346e0c63c2244506.svg)}.flag-icon-gb-sct.flag-icon-squared{background-image:url(/assets/flags/1x1/gb-sct-d01e8a06a340e30ce52e8a3aba7ca6207afb96fdb238a815cc6cb92df8fa5df3.svg)}.flag-icon-gb-wls{background-image:url(/assets/flags/4x3/gb-wls-5232b3e376a19866cddec8225cba242783b2a48063811957f1ce5a2c347c5bc9.svg)}.flag-icon-gb-wls.flag-icon-squared{background-image:url(/assets/flags/1x1/gb-wls-126615bc3597fda1ca4ee931ef24f6c2cf2547998c06db9c1ded69fe66c479e9.svg)}.flag-icon-un{background-image:url(/assets/flags/4x3/un-31dece22ae18c3e01e86648ef3ef45f2f5b3d9d28a1e2bbbcdb1d87c37af55af.svg)}.flag-icon-un.flag-icon-squared{background-image:url(/assets/flags/1x1/un-455b5f3173ca9ac64f2135fac4ead7217d7fbe07551d0d2cc60216f83208f798.svg)}.leaflet-pane,.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile-container,.leaflet-pane>svg,.leaflet-pane>canvas,.leaflet-zoom-box,.leaflet-image-layer,.leaflet-layer{position:absolute;left:0;top:0}.leaflet-container{overflow:hidden}.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.leaflet-safari .leaflet-tile{image-rendering:-webkit-optimize-contrast}.leaflet-safari .leaflet-tile-container{width:1600px;height:1600px;-webkit-transform-origin:0 0}.leaflet-marker-icon,.leaflet-marker-shadow{display:block}.leaflet-container .leaflet-overlay-pane svg,.leaflet-container .leaflet-marker-pane img,.leaflet-container .leaflet-shadow-pane img,.leaflet-container .leaflet-tile-pane img,.leaflet-container img.leaflet-image-layer,.leaflet-container .leaflet-tile{max-width:none !important;max-height:none !important}.leaflet-container.leaflet-touch-zoom{-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y}.leaflet-container.leaflet-touch-drag{-ms-touch-action:pinch-zoom;touch-action:none;touch-action:pinch-zoom}.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom{-ms-touch-action:none;touch-action:none}.leaflet-container{-webkit-tap-highlight-color:transparent}.leaflet-container a{-webkit-tap-highlight-color:rgba(51,181,229,0.4)}.leaflet-tile{filter:inherit;visibility:hidden}.leaflet-tile-loaded{visibility:inherit}.leaflet-zoom-box{width:0;height:0;-moz-box-sizing:border-box;box-sizing:border-box;z-index:800}.leaflet-overlay-pane svg{-moz-user-select:none}.leaflet-pane{z-index:400}.leaflet-tile-pane{z-index:200}.leaflet-overlay-pane{z-index:400}.leaflet-shadow-pane{z-index:500}.leaflet-marker-pane{z-index:600}.leaflet-tooltip-pane{z-index:650}.leaflet-popup-pane{z-index:700}.leaflet-map-pane canvas{z-index:100}.leaflet-map-pane svg{z-index:200}.leaflet-vml-shape{width:1px;height:1px}.lvml{behavior:url(#default#VML);display:inline-block;position:absolute}.leaflet-control{position:relative;z-index:800;pointer-events:visiblePainted;pointer-events:auto}.leaflet-top,.leaflet-bottom{position:absolute;z-index:1000;pointer-events:none}.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}.leaflet-control{float:left;clear:both}.leaflet-right .leaflet-control{float:right}.leaflet-top .leaflet-control{margin-top:10px}.leaflet-bottom .leaflet-control{margin-bottom:10px}.leaflet-left .leaflet-control{margin-left:10px}.leaflet-right .leaflet-control{margin-right:10px}.leaflet-fade-anim .leaflet-tile{will-change:opacity}.leaflet-fade-anim .leaflet-popup{opacity:0;-webkit-transition:opacity 0.2s linear;-moz-transition:opacity 0.2s linear;transition:opacity 0.2s linear}.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}.leaflet-zoom-animated{-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0}.leaflet-zoom-anim .leaflet-zoom-animated{will-change:transform}.leaflet-zoom-anim .leaflet-zoom-animated{-webkit-transition:-webkit-transform 0.25s cubic-bezier(0, 0, 0.25, 1);-moz-transition:-moz-transform 0.25s cubic-bezier(0, 0, 0.25, 1);transition:transform 0.25s cubic-bezier(0, 0, 0.25, 1)}.leaflet-zoom-anim .leaflet-tile,.leaflet-pan-anim .leaflet-tile{-webkit-transition:none;-moz-transition:none;transition:none}.leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}.leaflet-interactive{cursor:pointer}.leaflet-grab{cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}.leaflet-crosshair,.leaflet-crosshair .leaflet-interactive{cursor:crosshair}.leaflet-popup-pane,.leaflet-control{cursor:auto}.leaflet-dragging .leaflet-grab,.leaflet-dragging .leaflet-grab .leaflet-interactive,.leaflet-dragging .leaflet-marker-draggable{cursor:move;cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-image-layer,.leaflet-pane>svg path,.leaflet-tile-container{pointer-events:none}.leaflet-marker-icon.leaflet-interactive,.leaflet-image-layer.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive{pointer-events:visiblePainted;pointer-events:auto}.leaflet-container{background:#ddd;outline:0}.leaflet-container a{color:#0078A8}.leaflet-container a.leaflet-active{outline:2px solid orange}.leaflet-zoom-box{border:2px dotted #38f;background:rgba(255,255,255,0.5)}.leaflet-container{font:12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif}.leaflet-bar{box-shadow:0 1px 5px rgba(0,0,0,0.65);border-radius:4px}.leaflet-bar a,.leaflet-bar a:hover{background-color:#fff;border-bottom:1px solid #ccc;width:26px;height:26px;line-height:26px;display:block;text-align:center;text-decoration:none;color:black}.leaflet-bar a,.leaflet-control-layers-toggle{background-position:50% 50%;background-repeat:no-repeat;display:block}.leaflet-bar a:hover{background-color:#f4f4f4}.leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom:none}.leaflet-bar a.leaflet-disabled{cursor:default;background-color:#f4f4f4;color:#bbb}.leaflet-touch .leaflet-bar a{width:30px;height:30px;line-height:30px}.leaflet-touch .leaflet-bar a:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.leaflet-touch .leaflet-bar a:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.leaflet-control-zoom-in,.leaflet-control-zoom-out{font:bold 18px 'Lucida Console', Monaco, monospace;text-indent:1px}.leaflet-touch .leaflet-control-zoom-in,.leaflet-touch .leaflet-control-zoom-out{font-size:22px}.leaflet-control-layers{box-shadow:0 1px 5px rgba(0,0,0,0.4);background:#fff;border-radius:5px}.leaflet-control-layers-toggle{background-image:url(/assets/leaflet/dist/images/layers-1dbbe9d028e292f36fcba8f8b3a28d5e8932754fc2215b9ac69e4cdecf5107c6.png);width:36px;height:36px}.leaflet-retina .leaflet-control-layers-toggle{background-image:url(/assets/leaflet/dist/images/layers-2x-066daca850d8ffbef007af00b06eac0015728dee279c51f3cb6c716df7c42edf.png);background-size:26px 26px}.leaflet-touch .leaflet-control-layers-toggle{width:44px;height:44px}.leaflet-control-layers .leaflet-control-layers-list,.leaflet-control-layers-expanded .leaflet-control-layers-toggle{display:none}.leaflet-control-layers-expanded .leaflet-control-layers-list{display:block;position:relative}.leaflet-control-layers-expanded{padding:6px 10px 6px 6px;color:#333;background:#fff}.leaflet-control-layers-scrollbar{overflow-y:scroll;overflow-x:hidden;padding-right:5px}.leaflet-control-layers-selector{margin-top:2px;position:relative;top:1px}.leaflet-control-layers label{display:block}.leaflet-control-layers-separator{height:0;border-top:1px solid #ddd;margin:5px -10px 5px -6px}.leaflet-default-icon-path{background-image:url(/assets/leaflet/dist/images/marker-icon-574c3a5cca85f4114085b6841596d62f00d7c892c7b03f28cbfa301deb1dc437.png)}.leaflet-container .leaflet-control-attribution{background:#fff;background:rgba(255,255,255,0.7);margin:0}.leaflet-control-attribution,.leaflet-control-scale-line{padding:0 5px;color:#333}.leaflet-control-attribution a{text-decoration:none}.leaflet-control-attribution a:hover{text-decoration:underline}.leaflet-container .leaflet-control-attribution,.leaflet-container .leaflet-control-scale{font-size:11px}.leaflet-left .leaflet-control-scale{margin-left:5px}.leaflet-bottom .leaflet-control-scale{margin-bottom:5px}.leaflet-control-scale-line{border:2px solid #777;border-top:none;line-height:1.1;padding:2px 5px 1px;font-size:11px;white-space:nowrap;overflow:hidden;-moz-box-sizing:border-box;box-sizing:border-box;background:#fff;background:rgba(255,255,255,0.5)}.leaflet-control-scale-line:not(:first-child){border-top:2px solid #777;border-bottom:none;margin-top:-2px}.leaflet-control-scale-line:not(:first-child):not(:last-child){border-bottom:2px solid #777}.leaflet-touch .leaflet-control-attribution,.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{box-shadow:none}.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{border:2px solid rgba(0,0,0,0.2);background-clip:padding-box}.leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}.leaflet-popup-content-wrapper{padding:1px;text-align:left;border-radius:12px}.leaflet-popup-content{margin:13px 19px;line-height:1.4}.leaflet-popup-content p{margin:18px 0}.leaflet-popup-tip-container{width:40px;height:20px;position:absolute;left:50%;margin-left:-20px;overflow:hidden;pointer-events:none}.leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:white;color:#333;box-shadow:0 3px 14px rgba(0,0,0,0.4)}.leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;padding:4px 4px 0 0;border:none;text-align:center;width:18px;height:14px;font:16px/14px Tahoma, Verdana, sans-serif;color:#c3c3c3;text-decoration:none;font-weight:bold;background:transparent}.leaflet-container a.leaflet-popup-close-button:hover{color:#999}.leaflet-popup-scrolled{overflow:auto;border-bottom:1px solid #ddd;border-top:1px solid #ddd}.leaflet-oldie .leaflet-popup-content-wrapper{zoom:1}.leaflet-oldie .leaflet-popup-tip{width:24px;margin:0 auto;-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";filter:progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)}.leaflet-oldie .leaflet-popup-tip-container{margin-top:-1px}.leaflet-oldie .leaflet-control-zoom,.leaflet-oldie .leaflet-control-layers,.leaflet-oldie .leaflet-popup-content-wrapper,.leaflet-oldie .leaflet-popup-tip{border:1px solid #999}.leaflet-div-icon{background:#fff;border:1px solid #666}.leaflet-tooltip{position:absolute;padding:6px;background-color:#fff;border:1px solid #fff;border-radius:3px;color:#222;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;box-shadow:0 1px 3px rgba(0,0,0,0.4)}.leaflet-tooltip.leaflet-clickable{cursor:pointer;pointer-events:auto}.leaflet-tooltip-top:before,.leaflet-tooltip-bottom:before,.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{position:absolute;pointer-events:none;border:6px solid transparent;background:transparent;content:""}.leaflet-tooltip-bottom{margin-top:6px}.leaflet-tooltip-top{margin-top:-6px}.leaflet-tooltip-bottom:before,.leaflet-tooltip-top:before{left:50%;margin-left:-6px}.leaflet-tooltip-top:before{bottom:0;margin-bottom:-12px;border-top-color:#fff}.leaflet-tooltip-bottom:before{top:0;margin-top:-12px;margin-left:-6px;border-bottom-color:#fff}.leaflet-tooltip-left{margin-left:-6px}.leaflet-tooltip-right{margin-left:6px}.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{top:50%;margin-top:-6px}.leaflet-tooltip-left:before{right:0;margin-right:-12px;border-left-color:#fff}.leaflet-tooltip-right:before{left:0;margin-left:-12px;border-right-color:#fff}.leaflet-cluster-anim .leaflet-marker-icon,.leaflet-cluster-anim .leaflet-marker-shadow{-webkit-transition:-webkit-transform 0.3s ease-out, opacity 0.3s ease-in;-moz-transition:-moz-transform 0.3s ease-out, opacity 0.3s ease-in;-o-transition:-o-transform 0.3s ease-out, opacity 0.3s ease-in;transition:transform 0.3s ease-out, opacity 0.3s ease-in}.leaflet-cluster-spider-leg{-webkit-transition:-webkit-stroke-dashoffset 0.3s ease-out, -webkit-stroke-opacity 0.3s ease-in;-moz-transition:-moz-stroke-dashoffset 0.3s ease-out, -moz-stroke-opacity 0.3s ease-in;-o-transition:-o-stroke-dashoffset 0.3s ease-out, -o-stroke-opacity 0.3s ease-in;transition:stroke-dashoffset 0.3s ease-out, stroke-opacity 0.3s ease-in}.marker-cluster-small{background-color:rgba(181,226,140,0.6)}.marker-cluster-small div{background-color:rgba(110,204,57,0.6)}.marker-cluster-medium{background-color:rgba(241,211,87,0.6)}.marker-cluster-medium div{background-color:rgba(240,194,12,0.6)}.marker-cluster-large{background-color:rgba(253,156,115,0.6)}.marker-cluster-large div{background-color:rgba(241,128,23,0.6)}.leaflet-oldie .marker-cluster-small{background-color:#b5e28c}.leaflet-oldie .marker-cluster-small div{background-color:#6ecc39}.leaflet-oldie .marker-cluster-medium{background-color:#f1d357}.leaflet-oldie .marker-cluster-medium div{background-color:#f0c20c}.leaflet-oldie .marker-cluster-large{background-color:#fd9c73}.leaflet-oldie .marker-cluster-large div{background-color:#f18017}.marker-cluster{background-clip:padding-box;border-radius:20px}.marker-cluster div{width:30px;height:30px;margin-left:5px;margin-top:5px;text-align:center;border-radius:15px;font:12px "Helvetica Neue", Arial, Helvetica, sans-serif}.marker-cluster span{line-height:30px}.awesome-marker{background:url(/assets/markers-soft-e78784e4ed70aaffddd73c315fab590233cc4e7b72388d7dd47a14796fc7c739.png) no-repeat 0 0;width:35px;height:46px;position:absolute;left:0;top:0;display:block;text-align:center}.awesome-marker-shadow{background:url(/assets/markers-shadow-8703a2262710f5e3d29e65d2acdf90d6512e159e119d27b8234731d8a6208a20.png) no-repeat 0 0;width:36px;height:16px}@media (min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (-webkit-min-device-pixel-ratio: 1.5), (min-device-pixel-ratio: 1.5), (min-resolution: 1.5dppx){.awesome-marker{background-image:url(/assets/markers-soft@2x-c1e77253a8bfbe30cec24885d7046f443b76ebb66f4c961f77083b03f4a5cbaf.png);background-size:720px 46px}.awesome-marker-shadow{background-image:url(/assets/markers-shadow@2x-b21a536be27313fb504f69f5899ff0b1245b276571769ac08d6c32c35676e47a.png);background-size:35px 16px}}.awesome-marker i{color:#333;margin-top:10px;display:inline-block;font-size:14px}.awesome-marker .icon-white{color:#fff}.awesome-marker-icon-red{background-position:0 0}.awesome-marker-icon-darkred{background-position:-180px 0}.awesome-marker-icon-lightred{background-position:-360px 0}.awesome-marker-icon-orange{background-position:-36px 0}.awesome-marker-icon-beige{background-position:-396px 0}.awesome-marker-icon-green{background-position:-72px 0}.awesome-marker-icon-darkgreen{background-position:-252px 0}.awesome-marker-icon-lightgreen{background-position:-432px 0}.awesome-marker-icon-blue{background-position:-108px 0}.awesome-marker-icon-darkblue{background-position:-216px 0}.awesome-marker-icon-lightblue{background-position:-468px 0}.awesome-marker-icon-purple{background-position:-144px 0}.awesome-marker-icon-darkpurple{background-position:-288px 0}.awesome-marker-icon-pink{background-position:-504px 0}.awesome-marker-icon-cadetblue{background-position:-324px 0}.awesome-marker-icon-white{background-position:-574px 0}.awesome-marker-icon-gray{background-position:-648px 0}.awesome-marker-icon-lightgray{background-position:-612px 0}.awesome-marker-icon-black{background-position:-682px 0}body.agendadescommuns{font-family:georgia, serif}body.agendadescommuns header.top{padding-left:120px;padding-right:120px;background-image:url(agendadescommuns.png);background-repeat:no-repeat;background-position:20px top}body.agendadescommuns header.top img.logo{display:none}body.agendadescommuns ul.countries,body.agendadescommuns form#orga_search,body.agendadescommuns a#banner{display:none}body.agendadescommuns .city{text-transform:uppercase}body.agendadescommuns.events.index table tr .day_number{color:#727070}body.agendadescommuns.events.index table tr td.current-month.past,body.agendadescommuns.events.index table tr td.current-month.past .day_number{color:#FFFAEB;background-color:#7494B5}body.agendadescommuns.events.index table tr td.current-month.today{border-color:#FFFAEB;background-color:#DBEDFF}body.agendadescommuns.events.index table tr td.current-month.future{color:#444;border-color:#EAE4D3;background-color:#F0E8D1}*{height:auto;padding:0;max-width:100%;box-sizing:border-box;margin-left:auto;margin-right:auto}html{height:100%;background-color:#9CC5EE}html.iframe{background-color:transparent}html.iframe body{border:none;margin:0;padding:0;background-color:transparent}html.iframe body>header,html.iframe body>footer,html.iframe body h2,html.iframe body nav,html.iframe body .region_filter,html.iframe body .orga_search,html.iframe body #banner{display:none}html.iframe body ul{margin:0}body{border:1px solid #68A6E5;margin:0.2%;padding:1%;min-height:99.1%;text-align:center;font-family:sans-serif;background-color:white}body header *,body main *,body footer *{transition-duration:0.5s}a:link,a:visited{color:#258;text-decoration:none}a:hover,a:active,a:focus{color:#2E97FF}#flash-messages .flash{color:white;border:solid 1px #007ba0;margin:1em auto;padding:0.5em 1.1em;max-width:50em;font-size:larger;text-align:justify;box-shadow:0 0 0.3em gray;border-radius:3px;background-color:#008cba}#flash-messages .flash.notice{border-color:#3a945b;background-color:#43ac6a}#flash-messages .flash.alert{border-color:#de2b0f;background-color:#f04124}h3.warning{color:white;margin:0;padding:1em;display:inline-block;text-align:center;box-shadow:0 0 0.3em gray;border-radius:1em;background-color:orange}header.top{text-align:left}header.top img.logo{float:left;margin-right:1%}header.top h1{margin:0;padding:0}header.top h2{font-size:inherit;font-style:italic;font-weight:normal;margin-top:0.2em}main,body.mce-content-body{clear:both;position:relative}main h3,body.mce-content-body h3{text-align:left}main ul,main ol,body.mce-content-body ul,body.mce-content-body ol{text-align:left;padding-left:1em;list-style-position:inside}main p,body.mce-content-body p{text-align:left}main p.label,body.mce-content-body p.label{text-align:center}main p span.label:after,body.mce-content-body p span.label:after{content:':'}main hr,body.mce-content-body hr{margin:10px 20px}aside{float:right;border:1px solid #96CFFF;margin:0 1.2em;z-index:10;padding:5px;position:relative;max-width:20em;box-shadow:4px 4px 1em gray;margin-right:-4em;border-radius:1em;background-color:#D6ECFF}aside h2{border-bottom:1px black solid;padding-bottom:0.3em}aside ul a{padding:0.5em 1em 0.5em 0;display:block}fieldset{width:60em;border:none;margin:1em auto;padding:2%;box-shadow:1px 1px 5px gray;border-radius:0.4em}fieldset legend{color:#666;padding:0 1em;font-size:larger;background-color:white}fieldset h2{margin-top:0}footer.bottom nav{clear:both}footer.bottom nav a{padding:1.8%;display:inline-block;font-weight:bolder}footer.bottom nav a:hover{text-shadow:0 0 1em lightgray}#loading{top:45%;left:45%;color:gray;display:none;position:fixed;font-size:10vw;text-shadow:0 0 4px gray;vertical-align:baseline}.pagination span{display:none}.pagination span.next{display:block}body.digests main{padding:1em;max-width:60em;box-shadow:1px 1px 5px gray;border-radius:0.4em}body.digests main h2{margin:0;padding:0;font-size:larger;text-align:left}body.digests main .description p,body.digests main .second_part p{white-space:pre-line}body.digests main textarea{width:40em;height:20em}header.calendar-header{font-size:1.5em;margin-top:0.4em;font-weight:bolder}header.calendar-header a{font-weight:normal}header.calendar-header a:first-child,header.calendar-header a:last-child{margin:0 0.3em}em.locality.fa{color:gray}span.city:after,strong.city:after,em.city:after{content:':'}p.full_address span:after{content:','}p.full_address span:last-child:after{content:''}.calendar-header,.month{text-transform:capitalize}body.events.index table{width:100%;max-width:100%;table-layout:fixed}body.events.index table tr th{padding-bottom:0.35em;text-transform:capitalize}body.events.index table tr td{height:4.8em;border:1px solid #89B7E5;padding:1px;position:relative;vertical-align:top;background-color:#A1C3E7}body.events.index table tr td.past .event{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}body.events.index table tr td.today{border:1px solid #FFB578;background-color:#FFE0C7}body.events.index table tr td.today .day_number{color:#531}body.events.index table tr td.today .event a:link,body.events.index table tr td.today .event a:visited{color:#730}body.events.index table tr td.future{border-color:#96cfff;background-color:#C6E5FF}body.events.index table tr td.prev-month,body.events.index table tr td.next-month{border:none;background-color:#ededed}body.events.index table tr td.prev-month li,body.events.index table tr td.next-month li{color:#555}body.events.index table tr td.prev-month .event a:link,body.events.index table tr td.prev-month .event a:visited,body.events.index table tr td.next-month .event a:link,body.events.index table tr td.next-month .event a:visited{color:#444}body.events.index table tr td .day_number{float:left;color:#111;font-size:0.6em;font-weight:bolder;letter-spacing:2px}body.events.index table tr td:hover .day_number{color:black}body.events.index table tr td ul{clear:left;margin:0;padding:0}body.events.index table tr td ul li{color:#444;margin:0;padding:0}body.events.index table tr td ul li em.fa.fa-globe{color:red;font-size:smaller}body.events.index table tr td ul .event{padding-left:0.2em}body.events.index table tr td ul .event img{vertical-align:middle}body.events.index table tr td ul .event a:link,body.events.index table tr td ul .event a:visited{color:#111;font-size:smaller}body.events.index table tr td ul .event a:link:hover,body.events.index table tr td ul .event a:visited:hover{color:black;text-decoration:underline}.links{float:right}.fa-rss{color:darkorange}a#banner{float:left}body.events.show main,body.orgas.show main,body.tags.show main,body.pages main{padding:1em;max-width:60em;box-shadow:1px 1px 5px gray;border-radius:0.4em}body.events.show main h2,body.orgas.show main h2,body.tags.show main h2,body.pages main h2{margin-top:1em}#advises{border:1px solid #FFB578;padding-left:10px;padding-right:10px;margin-bottom:1.2em;background-color:#ffe0c7}#advises h1{font-size:1.9em;font-weight:normal}#advises a{color:#8F4900}.description img,body.mce-content-body img{margin-left:1%;margin-right:1%}article.event{box-shadow:-1em 1em 1em -1em gray;margin-left:1em;padding-left:1em;padding-bottom:0.4em;border-bottom-left-radius:1em}body.mce-content-body{margin:0;border:none;padding:1px 1%;font-size:inherit;min-height:100%}.mce-menubar,.mce-panel{border:none !important}.helper p{color:gray;text-align:right;margin-top:0;margin-bottom:0}legend{margin-left:0}.field{color:#666;border:none;display:flex;flex-wrap:wrap;box-shadow:0 0 2px darkgray;align-items:center;border-radius:4px}.field>label,.field .field_with_errors>label{width:10em;margin:0;padding:0.8em;text-align:right;padding-left:0}.field .helper{color:#888;padding:0.8em;font-style:italic;margin-left:0}.field input,.field textarea,.field .mce-tinymce,.field div.tagsinput,.field .field_with_errors:last-child{flex-grow:1}.field input[type=number],.field input[type=checkbox],.field textarea[type=number],.field textarea[type=checkbox],.field .mce-tinymce[type=number],.field .mce-tinymce[type=checkbox],.field div.tagsinput[type=number],.field div.tagsinput[type=checkbox],.field .field_with_errors:last-child[type=number],.field .field_with_errors:last-child[type=checkbox]{flex-grow:unset;margin-left:0;margin-right:0}.field select{margin-left:0;margin-right:0}.field .field_with_errors:first-child{width:10em}.field .field_with_errors>*{width:100%;display:block}input,textarea,select,a.button,.actions>button,.mce-tinymce,div.tagsinput,.ui-autocomplete-input{color:black;border:solid 0.25em transparent;outline:none;padding:0.25em;font-size:inherit;font-family:inherit;background-color:transparent}input:focus,textarea:focus,select:focus,a.button:focus,.actions>button:focus,.mce-tinymce:focus,div.tagsinput:focus,.ui-autocomplete-input:focus{border-color:#F0F8FF}input[type=radio],textarea[type=radio],select[type=radio],a.button[type=radio],.actions>button[type=radio],.mce-tinymce[type=radio],div.tagsinput[type=radio],.ui-autocomplete-input[type=radio]{box-shadow:none}input[type=radio]+label,textarea[type=radio]+label,select[type=radio]+label,a.button[type=radio]+label,.actions>button[type=radio]+label,.mce-tinymce[type=radio]+label,div.tagsinput[type=radio]+label,.ui-autocomplete-input[type=radio]+label{border:none}input[type=submit],input.button,textarea[type=submit],textarea.button,select[type=submit],select.button,a.button[type=submit],a.button.button,.actions>button[type=submit],.actions>button.button,.mce-tinymce[type=submit],.mce-tinymce.button,div.tagsinput[type=submit],div.tagsinput.button,.ui-autocomplete-input[type=submit],.ui-autocomplete-input.button{cursor:pointer;margin:3px 0.4em;font-size:larger;box-shadow:0 0 2px darkgray;font-weight:bolder;letter-spacing:2px;background-color:#9CC5EE}.mce-tinymce{box-shadow:none !important}.mce-top-part:before{box-shadow:0 1px lightgray !important}.field_with_errors{display:inline}.field_with_errors input,.field_with_errors textarea,.field_with_errors select,.field_with_errors a.button{background-color:pink}.radios{margin-left:0}.radios [type=radio]{display:none}.radios label{color:#258;cursor:pointer;padding:0.8em 0;display:inline-block}.radios label:hover{color:#222;box-shadow:0 0 0 4px lightgray}.radios [type=radio]:checked+label{color:black;box-shadow:0 0 0 6px lightgray}.radios [type=radio]:invalid+label{box-shadow:0 0 1px tomato}.actions{text-align:center}.actions input{font-size:x-large}.field.required>label:after,.field.required .field_with_errors>label:after,.list.required>label:after,.list.required .field_with_errors>label:after,dl.required>label:after,dl.required .field_with_errors>label:after{color:darkred;content:'*';font-size:smaller;margin-left:0.4em}.field>label:before,.field .field_with_errors>label:before,.field th:before,.field th a:before,.list>label:before,.list .field_with_errors>label:before,.list th:before,.list th a:before,dl>label:before,dl .field_with_errors>label:before,dl th:before,dl th a:before{margin-right:0.4em}.field.login label:before,.list.login label:before,dl.login label:before{content:"\f2f6"}.field.password label:before,.list.password label:before,dl.password label:before{content:"\f09c"}.field.title label:before,.list.title label:before,dl.title label:before{content:"\f1ea"}.field.start_time label:before,.list.start_time label:before,dl.start_time label:before{content:"\f205"}.field.end_time label:before,.list.end_time label:before,dl.end_time label:before{content:"\f204"}.field.repeat label:before,.list.repeat label:before,dl.repeat label:before{content:"\f01e"}.field.rule>label:before,.list.rule>label:before,dl.rule>label:before{content:"\f1ec"}.field.description label:before,.list.description label:before,dl.description label:before{content:"\f044"}.field.place_name label:before,.list.place_name label:before,dl.place_name label:before{content:"\f276"}.field.address label:before,.list.address label:before,dl.address label:before{content:"\f041"}.field.city label:before,.field th.city a:before,.list.city label:before,.list th.city a:before,dl.city label:before,dl th.city a:before{content:"\f1ad"}.field.department label:before,.field th.department a:before,.list.department label:before,.list th.department a:before,dl.department label:before,dl th.department a:before{content:"\f12e"}.field.region>label:before,.field th.region a:before,.list.region>label:before,.list th.region a:before,dl.region>label:before,dl th.region a:before{content:"\f3ed"}.field.locality>label:before,.list.locality>label:before,dl.locality>label:before{content:"\f065"}.field.contact label:before,.list.contact label:before,dl.contact label:before{content:"\f0e0"}.field.submitter label:before,.list.submitter label:before,dl.submitter label:before{content:"\f0e0"}.field.url label:before,.field th.url:before,.list.url label:before,.list th.url:before,dl.url label:before,dl th.url:before{content:"\f35d"}.field.diaspora label:after,.field td.diaspora em:before,.field dt.diaspora em:before,.list.diaspora label:after,.list td.diaspora em:before,.list dt.diaspora em:before,dl.diaspora label:after,dl td.diaspora em:before,dl dt.diaspora em:before{content:"*";font-size:22px;font-family:'Roboto', 'Helvetica', 'Arial', sans-serif;line-height:0}.field.tags label:before,.field th.tags a:before,.list.tags label:before,.list th.tags a:before,dl.tags label:before,dl th.tags a:before{content:"\f02c"}.field.active label:before,.list.active label:before,dl.active label:before{content:"\f21e"}.field.reason label:before,.list.reason label:before,dl.reason label:before{content:"\f075"}.field.kind>label:before,.field th.kind:before,.list.kind>label:before,.list th.kind:before,dl.kind>label:before,dl th.kind:before{content:"\f1b3"}.field.feed label:before,.field th.feed:before,.list.feed label:before,.list th.feed:before,dl.feed label:before,dl th.feed:before{content:"\f09e"}.field.future label:before,.list.future label:before,dl.future label:before{content:"\f04a"}.field.period_year label:before,.list.period_year label:before,dl.period_year label:before{content:"\f049"}.field.period_week label:before,.list.period_week label:before,dl.period_week label:before{content:"\f048"}.field.near_location label:before,.list.near_location label:before,dl.near_location label:before{content:"\f276"}.field.near_distance label:before,.list.near_distance label:before,dl.near_distance label:before{content:"\f337"}.field.iframe label:before,.list.iframe label:before,dl.iframe label:before{content:"\f0b2"}.finePre,.city:after,span.label:after{margin-left:0.25em}.finePost{margin-right:0.25em}.quantity{text-align:right !important;white-space:nowrap}table{clear:both;margin-top:1em;margin-bottom:1em;border-spacing:2px}table th{padding:0.3em 0.6em}table.list thead tr{background-color:#fed}table.list tbody tr:nth-child(odd){background-color:#def}table.list tbody tr:nth-child(even){background-color:#eee}table.list th{font-size:larger}table.list td{padding:0.2em;text-align:left}table.list td.updated_at{text-align:center}dl{width:40em;margin:1em auto}dl dt{clear:left;float:left;padding:0.2em 1em;min-width:50%;text-align:right}dl dd{padding:0.2em 1em;text-align:left}dl dd.quantity{padding-right:16em}dl dd h3{display:inline}dl dt+dd+dt+dd{border-top:1px solid #999}ul.counters{text-align:center}ul.counters li{display:inline}ul.counters li a:link,ul.counters li a:visited{color:white;padding:0.4em 1em;display:inline-block;font-size:x-large;box-shadow:0 0 2px black;border-radius:0.4em;background-color:#258}.edit_link:link,.delete_link:link{display:none}#map{height:60em;box-shadow:0 0 1em SteelBlue;transition:none}#map *{max-width:initial}#map.event,#map.orga{height:20em}#map li{position:relative}#map li .awesome-marker{display:inline-block !important;position:relative}.tags #map{width:40%;height:60em;margin:1.6em 2%;display:inline-block}form.leaflet-control-layers-list label{text-align:left}form.leaflet-control-layers-list label .awesome-marker{height:auto !important;display:inline-block !important;position:relative !important}html.iframe #map{width:100%;max-width:100%;box-shadow:none}@media all and (max-width: 1024px){.links,a#banner{margin:0.6em auto}table,table.list,table.dates,table.list.dates{border-spacing:1px}table tbody th,table.list tbody th,table.dates tbody th,table.list.dates tbody th{overflow:hidden;max-width:3em}}@media all and (max-width: 900px){body{border:none;margin:0;padding:1%;font-size:smaller}body main ul{margin-left:0}form#orga_search,button.search,.digest{font-size:smaller !important}table.list.dates th,table.list.dates th a,table.list.dates td,table.list.dates td a{padding:0 !important;font-size:inherit}}@media all and (max-width: 34em){body{padding:0}p{padding-left:0.4em;padding-right:0.4em}header.top nav{display:none}header.top img.logo{margin-right:0}form#orga_search{display:none}body.index table thead{display:none}body.index.events table tr td{clear:both;width:auto;height:auto;margin:1px;display:block;font-size:larger;min-height:1em;border-width:1px !important}body.index.events table tr td.prev-month,body.index.events table tr td.next-month,body.index.events table tr td.current-month.past{display:none}body.index.events table tr td .day_number{font-size:initial}body.index.events table tr td .event a{padding:0.4em 1em}body.index header:active+table tr td.current-month.past,body.index header:hover+table tr td.current-month.past{display:block}body.index.versions table tbody tr td,body.index.orgas table tbody tr td{width:auto;padding:0 0.2em;display:block}body.index.versions table tbody tr td:first-child,body.index.orgas table tbody tr td:first-child{float:left}body.index.versions table tbody td+td+td,body.index.orgas table tbody td+td+td{display:inline-block}body.index.versions table tbody td:first-child+td,body.index.orgas table tbody td:first-child+td{width:100%;display:block}dl dt{min-width:auto;text-align:left}dl dd,dl dd.quantity{padding-right:1em}aside{display:none}.links,a#banner{float:none;padding:0.4em 0}.field label{width:auto;display:block;text-align:left}.field input{width:100%;display:block}}@media all and (min-width: 1600px){body{font-size:larger}#advises{max-width:60em}}h2.warning{color:red}.moderations table.list,.notes table.list{min-width:90%;margin-top:15px}.moderations table.list td,.notes table.list td{padding-top:0.5em;padding-bottom:0.5em}.moderations table.list td.empty,.notes table.list td.empty{background-color:white}.moderations table.list td.note,.notes table.list td.note{text-align:left}.moderations table.list td pre,.notes table.list td pre{width:70%;margin:auto;padding:5px;overflow:auto;text-align:left;background-color:#eee}.moderations table.list td em.author,.notes table.list td em.author{display:block;font-size:smaller;text-align:right;font-style:italic;margin-top:15px}.moderations table.list th.actions,.notes table.list th.actions{padding:0}.moderations table.list th.actions a,.notes table.list th.actions a{padding:0.2em;display:inline-block;font-weight:normal}.fa.fa-check,.field>label.fa-check:before,.field .field_with_errors>label.fa-check:before,.field th.fa-check:before,.field th a.fa-check:before,.list>label.fa-check:before,.list .field_with_errors>label.fa-check:before,.list th.fa-check:before,.list th a.fa-check:before,dl>label.fa-check:before,dl .field_with_errors>label.fa-check:before,dl th.fa-check:before,dl th a.fa-check:before,.fa.fa-thumbs-up,.field>label.fa-thumbs-up:before,.field .field_with_errors>label.fa-thumbs-up:before,.field th.fa-thumbs-up:before,.field th a.fa-thumbs-up:before,.list>label.fa-thumbs-up:before,.list .field_with_errors>label.fa-thumbs-up:before,.list th.fa-thumbs-up:before,.list th a.fa-thumbs-up:before,dl>label.fa-thumbs-up:before,dl .field_with_errors>label.fa-thumbs-up:before,dl th.fa-thumbs-up:before,dl th a.fa-thumbs-up:before{color:green}.fa.fa-thumbs-down,.field>label.fa-thumbs-down:before,.field .field_with_errors>label.fa-thumbs-down:before,.field th.fa-thumbs-down:before,.field th a.fa-thumbs-down:before,.list>label.fa-thumbs-down:before,.list .field_with_errors>label.fa-thumbs-down:before,.list th.fa-thumbs-down:before,.list th a.fa-thumbs-down:before,dl>label.fa-thumbs-down:before,dl .field_with_errors>label.fa-thumbs-down:before,dl th.fa-thumbs-down:before,dl th a.fa-thumbs-down:before{color:red}.notes form label:after{content:':'}img.favicon{max-height:2em;border-radius:3px;vertical-align:middle}form#orga_search{clear:right;float:right;font-size:larger;margin-top:0.9em;margin-left:1em}form#orga_search label{display:none}form#orga_search em.fa{color:#258}form#orga_search input{width:14em;border:solid thin #258;padding:0;margin-left:-1.7em;margin-right:-1.3em;padding-left:1.5em;padding-right:1.2em;border-radius:0.4em}form#orga_search button.search{color:#258;border:none;padding:0;font-size:large;box-shadow:none;margin-top:-0.1em;margin-left:0;vertical-align:middle;background-color:transparent}form#orga_search button.search:hover em.fa{color:#2E97FF}form#orga_search button.search span.label{display:none}body.orgas.show main fieldset.orga{min-width:60em}body.orgas.show main dl,body.orgas.show main iframe,body.orgas.show main fieldset{display:inline-block;min-width:40em;vertical-align:top}table tr.inactive{color:gray}body.pages main h3,body.pages main h4{text-align:left}.digest{float:right;font-size:larger;margin-top:1em}.digest span{margin-left:1em}header nav{max-width:calc(99% - 91px);margin-top:-3.1em}header:hover nav{margin-top:0}.region_filter{float:right;font-size:smaller}.region_filter>ul>li{float:left}.region_filter ul{margin:0;z-index:1500;list-style:none;text-align:left;border-bottom-left-radius:0.4em;border-bottom-right-radius:0.4em}.region_filter ul ul{position:absolute;background-color:white}.region_filter ul ul li{display:none;border-top:solid thin #eee}.region_filter ul li:hover li,.region_filter ul li.selected{display:block}.region_filter li{margin:0}.region_filter li.selected{box-shadow:0 0 0 6px lightgray}.region_filter li a{padding:0.3em;display:inline-block;white-space:nowrap}.region_filter li:hover ul{box-shadow:0 4px 4px gray}.radios .radios{display:inline-block;text-align:left;background-color:white}.radios .radios label{display:none;padding:0.2em}.radios .radios input:checked+label{display:inline}.radios .region:hover .radios{z-index:1000;position:absolute;box-shadow:0 4px 4px gray}.radios .region:hover .radios label{display:block !important}.flag-icon-ca-qc{background-image:url(/assets/regions/CA-QC-70699e6a6e25c69040a3f1548b0afd829c4903ccca2760b6c10f49cc87d5d174.png)}body.stats h3{text-align:center}table.list.dates th,table.list.dates td{padding:0 0.6em}table.list.dates .sparkline{padding:0}div.field,div.actions{margin-bottom:10px}#notice{color:green}#error_explanation{width:450px;border:2px solid red;padding-bottom:0;margin-bottom:20px;background-color:#f0f0f0}#error_explanation h2{text-align:left;font-weight:bold;padding:15px;font-size:12px;background-color:#c00;color:#fff}#error_explanation p,#error_explanation ul{padding:0 1em}#error_explanation p li,#error_explanation ul li{font-size:12px;list-style:square}.sessions form{margin:6em auto}.logout{margin:2em auto}table.list.dates{width:100%}table.list.dates thead th{height:3em;padding:0 !important;font-size:initial;transform:rotate(-45deg)}table.list.dates tbody th:first-child{font-size:large;text-align:right}table.list.dates tbody td{padding:0}table.list.dates tbody td a{padding:0 1em;display:block}table.list.dates tfoot td canvas{width:100% !important;background-color:white}p.tags a:after{color:black;content:','}p.tags a:last-child:after{content:''}.css1{font-size:0.8em}.css2{font-size:1.0em}.css3{font-size:1.4em}.css4{font-size:1.8em}div.tagsinput{height:auto !important;border:none;margin:0;padding:0;display:inline-block;min-height:auto !important;vertical-align:middle}div.tagsinput span.tag{margin:0;padding:0.75em;font-size:inherit;font-family:inherit}div.tagsinput #event_tag_list_addTag,div.tagsinput #tag_addTag{float:none;text-align:left}div.tagsinput #event_tag_list_addTag:first-child #event_tag_list_tag,div.tagsinput #event_tag_list_addTag:first-child #tag_tag,div.tagsinput #tag_addTag:first-child #event_tag_list_tag,div.tagsinput #tag_addTag:first-child #tag_tag{width:100% !important}div.tagsinput input,div.tagsinput .ui-autocomplete-input{width:8em !important;border:solid 0.25em transparent !important;padding:0.6em;font-size:inherit;margin-right:0;margin-bottom:0}div.tagsinput input:focus,div.tagsinput .ui-autocomplete-input:focus{border-color:#F0F8FF !important}ul.ui-autocomplete li{text-align:left;box-shadow:0 0 2px #a5d24a;background-color:white}ul.ui-autocomplete li .ui-state-active{margin:0;background-color:#F0F8FF}body.versions td.changes{white-space:pre-wrap}
diff --git a/public/assets/application-3f59179b0c2a06bb661d73a1de82e1f5c30bdb9d70ad1ec1ee9f383e4b4d373f.css.gz b/public/assets/application-3f59179b0c2a06bb661d73a1de82e1f5c30bdb9d70ad1ec1ee9f383e4b4d373f.css.gz
deleted file mode 100644
index ee019dcc..00000000
Binary files a/public/assets/application-3f59179b0c2a06bb661d73a1de82e1f5c30bdb9d70ad1ec1ee9f383e4b4d373f.css.gz and /dev/null differ
diff --git a/public/assets/application-5605ff641c9b98cb2f64836cdef985707cf326fd9b11541ef1ef2daad21c4c08.js.gz b/public/assets/application-5605ff641c9b98cb2f64836cdef985707cf326fd9b11541ef1ef2daad21c4c08.js.gz
deleted file mode 100644
index baa57631..00000000
Binary files a/public/assets/application-5605ff641c9b98cb2f64836cdef985707cf326fd9b11541ef1ef2daad21c4c08.js.gz and /dev/null differ
diff --git a/public/assets/application-5758a3be3fc4c726f3fa040065dd207d269a61ffaeef8e18cf7bae20669ce52d.css b/public/assets/application-5758a3be3fc4c726f3fa040065dd207d269a61ffaeef8e18cf7bae20669ce52d.css
new file mode 100644
index 00000000..61b556cd
--- /dev/null
+++ b/public/assets/application-5758a3be3fc4c726f3fa040065dd207d269a61ffaeef8e18cf7bae20669ce52d.css
@@ -0,0 +1,31 @@
+/*!
+ * jQuery UI CSS Framework 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/category/theming/
+ */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default !important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}/*!
+ * jQuery UI Autocomplete 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/autocomplete/#theming
+ */.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}/*!
+ * jQuery UI Menu 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/menu/#theming
+ */.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}div.tagsinput{border:1px solid #CCC;background:#FFF;padding:5px;width:300px;height:100px;overflow-y:auto}div.tagsinput span.tag{border:1px solid #a5d24a;-moz-border-radius:2px;-webkit-border-radius:2px;display:block;float:left;padding:5px;text-decoration:none;background:#cde69c;color:#638421;margin-right:5px;margin-bottom:5px;font-family:helvetica;font-size:13px}div.tagsinput span.tag a{font-weight:bold;color:#82ad2b;text-decoration:none;font-size:11px}div.tagsinput input{width:80px;margin:0px;font-family:helvetica;font-size:13px;border:1px solid transparent;padding:5px;background:transparent;color:#000;outline:0px;margin-right:5px;margin-bottom:5px}div.tagsinput div{display:block;float:left}.tags_clear{clear:both;width:100%;height:0px}.not_valid{background:#FBD8DB !important;color:#90111A !important}/*!
+ * Font Awesome Free 5.6.1 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ */@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:900;src:url("/assets/font-awesome/fa-solid-900-c141af323058f12f8b0bc760162f9928f6a415fa04940b486fdb4086284e6ecf.eot");src:url("/assets/font-awesome/fa-solid-900-c141af323058f12f8b0bc760162f9928f6a415fa04940b486fdb4086284e6ecf.eot#iefix") format("embedded-opentype"),url("/assets/font-awesome/fa-solid-900-08aa3a5ee68a21d5771a70b20495b6da1c0f996c46982cd1b0447ad2db730d11.woff2") format("woff2"),url("/assets/font-awesome/fa-solid-900-1675e164e5ec88e30fb8c912cf9343c06c18fe419663b40de0a3bf92371b1d07.woff") format("woff"),url("/assets/font-awesome/fa-solid-900-cef5dd667be89aa0b9d1bd0a2ceb7c017c7b183f81d0213f8f99bd380f042577.ttf") format("truetype"),url("/assets/font-awesome/fa-solid-900-7ad9caabf64ee35d113612f7bb10e531fb17ab431a51e0b088e93f89e1915549.svg#fontawesome") format("svg")}@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:400;src:url("/assets/font-awesome/fa-regular-400-6e70525bb429041c5ec84a81cf4733303cee90966809ed255741fa50e123ae47.eot");src:url("/assets/font-awesome/fa-regular-400-6e70525bb429041c5ec84a81cf4733303cee90966809ed255741fa50e123ae47.eot#iefix") format("embedded-opentype"),url("/assets/font-awesome/fa-regular-400-e5c1d9e7bdeaf3372dee724d175d25aca879ed52ae9afd018f503e9d74e09b50.woff2") format("woff2"),url("/assets/font-awesome/fa-regular-400-9064839b35308c034ecf20f0335ea37331328d962baff8e589e69d01f5a56ffe.woff") format("woff"),url("/assets/font-awesome/fa-regular-400-418571014c9250c6197fc3ac4e8e5d96d7a49711a5d6308ca0d36b6f3045c611.ttf") format("truetype"),url("/assets/font-awesome/fa-regular-400-a849aa4ab8a20512c2e073ed66cf146c5615220c74da85c10909eb2c33d3317a.svg#fontawesome") format("svg")}@font-face{font-family:'Font Awesome 5 Brands';font-style:normal;font-weight:normal;src:url("/assets/font-awesome/fa-brands-400-c563adbadc5eafb6708b610268fbd393d59ae41e220aae5aac99ca2d45a6e151.eot");src:url("/assets/font-awesome/fa-brands-400-c563adbadc5eafb6708b610268fbd393d59ae41e220aae5aac99ca2d45a6e151.eot#iefix") format("embedded-opentype"),url("/assets/font-awesome/fa-brands-400-c885e9f2017a2ed7075db9e876d40a04aa3208114443803bdb120a34afd3b1d6.woff2") format("woff2"),url("/assets/font-awesome/fa-brands-400-ca734c792a24c20ff91ec878fd146b3354d4859f728f481c1089a3e2ffa2d30f.woff") format("woff"),url("/assets/font-awesome/fa-brands-400-3b3fbc59f287f33a3870175b19eb94d7cbb546af2fdbab29df91ba834352d3ea.ttf") format("truetype"),url("/assets/font-awesome/fa-brands-400-f6ae6226846422df4abf64b65814d3ccd3570af5e0350983fdb01fbc0dd055d6.svg#fontawesome") format("svg")}.fa,.field>label:before,.field .field_with_errors>label:before,.field th:before,.field th a:before,.list>label:before,.list .field_with_errors>label:before,.list th:before,.list th a:before,dl>label:before,dl .field_with_errors>label:before,dl th:before,dl th a:before,.fas{font-family:'Font Awesome 5 Free';font-weight:900}.far{font-family:'Font Awesome 5 Free';font-weight:400}.fab{font-family:'Font Awesome 5 Brands'}.fa,.field>label:before,.field .field_with_errors>label:before,.field th:before,.field th a:before,.list>label:before,.list .field_with_errors>label:before,.list th:before,.list th a:before,dl>label:before,dl .field_with_errors>label:before,dl th:before,dl th a:before,.fas,.far,.fal,.fab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:0.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid 0.08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.field>label.fa-pull-left:before,.field .field_with_errors>label.fa-pull-left:before,.field th.fa-pull-left:before,.field th a.fa-pull-left:before,.list>label.fa-pull-left:before,.list .field_with_errors>label.fa-pull-left:before,.list th.fa-pull-left:before,.list th a.fa-pull-left:before,dl>label.fa-pull-left:before,dl .field_with_errors>label.fa-pull-left:before,dl th.fa-pull-left:before,dl th a.fa-pull-left:before,.fas.fa-pull-left,.far.fa-pull-left,.fal.fa-pull-left,.fab.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.field>label.fa-pull-right:before,.field .field_with_errors>label.fa-pull-right:before,.field th.fa-pull-right:before,.field th a.fa-pull-right:before,.list>label.fa-pull-right:before,.list .field_with_errors>label.fa-pull-right:before,.list th.fa-pull-right:before,.list th a.fa-pull-right:before,dl>label.fa-pull-right:before,dl .field_with_errors>label.fa-pull-right:before,dl th.fa-pull-right:before,dl th a.fa-pull-right:before,.fas.fa-pull-right,.far.fa-pull-right,.fal.fa-pull-right,.fab.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scale(1, -1)}.fa-flip-horizontal.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scale(-1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-balance-scale:before{content:"\f24e"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-icicles:before{content:"\f7ad"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-nintendo-switch:before{content:"\f418"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-volume:before{content:"\f2a0"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0, 0, 0, 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.flag-icon-background,.flag-icon{background-size:contain;background-position:50%;background-repeat:no-repeat}.flag-icon{position:relative;display:inline-block;width:1.33333em;line-height:1em}.flag-icon:before{content:'\00a0'}.flag-icon.flag-icon-squared{width:1em}.flag-icon-ad{background-image:url(/assets/flags/4x3/ad-f67c4e5a3f709ead53c04d9ff35614e6c67517c3d3289170f7a317390f661497.svg)}.flag-icon-ad.flag-icon-squared{background-image:url(/assets/flags/1x1/ad-a315836ec2c9dcc11ef9bfd8b18aa7ccfc2d31435cbf46a2c31930836076e09c.svg)}.flag-icon-ae{background-image:url(/assets/flags/4x3/ae-7a3b3dc0f50b5310014cfbcc8200a5f1ce568127bf43452e40e8158e0cff2d2e.svg)}.flag-icon-ae.flag-icon-squared{background-image:url(/assets/flags/1x1/ae-bcdd9a4da09598785f3e31db4ff431e22687b2ead18209a3e615600655068cd5.svg)}.flag-icon-af{background-image:url(/assets/flags/4x3/af-01601b521fa86582e32c39eed8c88480afec1f801b6de929b52ed7e49da47260.svg)}.flag-icon-af.flag-icon-squared{background-image:url(/assets/flags/1x1/af-6332cf754a5e2866db631923e1f7cfc52a0a554d32b97bcf19f8263819e4ca7d.svg)}.flag-icon-ag{background-image:url(/assets/flags/4x3/ag-cb6952d821bac7855231c2cb4d1c44f7c730f6b3621518ab20f30d2b9afe604b.svg)}.flag-icon-ag.flag-icon-squared{background-image:url(/assets/flags/1x1/ag-14f7d9978487aaf4446b55167e85a711c48a13ff07edac175c172969a38650c4.svg)}.flag-icon-ai{background-image:url(/assets/flags/4x3/ai-f07c6cc0646fdfa441b9a506e1d46e8dce0d97b37222292e9c6733c995dc89bc.svg)}.flag-icon-ai.flag-icon-squared{background-image:url(/assets/flags/1x1/ai-95099e544de29bcea3ba735de535823f2e19aeb4043e82dbc1d9862f9262b810.svg)}.flag-icon-al{background-image:url(/assets/flags/4x3/al-9b997f2720de861e1b0ccec8ddf42a2890795ebf50817f9223e1ceba712c9b03.svg)}.flag-icon-al.flag-icon-squared{background-image:url(/assets/flags/1x1/al-94852d2711fc23abf3423534b9edb950a0c6aabf1d2d98bf2643f3c7dadfac09.svg)}.flag-icon-am{background-image:url(/assets/flags/4x3/am-85a199ec21d1af74a256335ead0c1e38592bb603d8da81feda4678945e9e00e6.svg)}.flag-icon-am.flag-icon-squared{background-image:url(/assets/flags/1x1/am-869391b014ac299924d30777d72a4aba430752177290a90a1fc3255a7ad79ee7.svg)}.flag-icon-ao{background-image:url(/assets/flags/4x3/ao-29224a61bf632826d530cda55d87c2615884bd2c2c3a322036ed468e34d85c75.svg)}.flag-icon-ao.flag-icon-squared{background-image:url(/assets/flags/1x1/ao-048eacbc862fe1868cf0ec73457b70a8b49a598c80dea049856f0e1fd6fec83e.svg)}.flag-icon-aq{background-image:url(/assets/flags/4x3/aq-b401a776d2f1a7944170114f0aeeceab5e1d962df3de7ed1eff47d96824b73fd.svg)}.flag-icon-aq.flag-icon-squared{background-image:url(/assets/flags/1x1/aq-a8d7ce9bfb860b6e2b58608b50bf2cafc5220c77f6d049ab7770891f64334531.svg)}.flag-icon-ar{background-image:url(/assets/flags/4x3/ar-bf73475bb707100874dec538ce4b7e1b5afc4ed67dc50a8a800ee519e51cc826.svg)}.flag-icon-ar.flag-icon-squared{background-image:url(/assets/flags/1x1/ar-fc6582cc6d3ef0782805d8497ee77ab2d836c53422e91007e48f81a4a9fa2e60.svg)}.flag-icon-as{background-image:url(/assets/flags/4x3/as-79d395190345206ea03475b67b44638e1111562411504b60646483c9c0b0f7d1.svg)}.flag-icon-as.flag-icon-squared{background-image:url(/assets/flags/1x1/as-04f0db77c5d8610a55c69508b226a7c338924f8cf7d6577d5d6590e85ee57183.svg)}.flag-icon-at{background-image:url(/assets/flags/4x3/at-3d197de8f1f0096a2b0d440b6fc7d80821585a6637e646c05487a87718bf6b5f.svg)}.flag-icon-at.flag-icon-squared{background-image:url(/assets/flags/1x1/at-ec4db9aeac793827ac7c8e40c072a76f7675010058cc8c8dfd3a86bb5acfa6b8.svg)}.flag-icon-au{background-image:url(/assets/flags/4x3/au-126fa2500a315287a5f847f4d958bb929f11da9b39f35912cc440c0fcffb8b12.svg)}.flag-icon-au.flag-icon-squared{background-image:url(/assets/flags/1x1/au-bf990dcc957c9f74eb908e8ffa733f1731277bf6ec8b7301a6ea1ed92b59cc4b.svg)}.flag-icon-aw{background-image:url(/assets/flags/4x3/aw-4524643452423e95f3b0dbe6216b059a9e52126b34c73ae4b3c17b682f893aa6.svg)}.flag-icon-aw.flag-icon-squared{background-image:url(/assets/flags/1x1/aw-f7002bceef55486a442bf6bf433be0c60d0b15b2aa548b81c524c67ccf0565a8.svg)}.flag-icon-ax{background-image:url(/assets/flags/4x3/ax-c297e0eb654ca62e58f5eb3abb70df9f245e4919490f29bd0f1d49c4fe052d90.svg)}.flag-icon-ax.flag-icon-squared{background-image:url(/assets/flags/1x1/ax-a1245689ecbf321c0a9e556bba17f3c9f2aeb8b1f63d14fcb591d76a87f12880.svg)}.flag-icon-az{background-image:url(/assets/flags/4x3/az-132e68d5e0386d3b9fa05b4288a0fd66f1414e2bc7af6b9d437b6935a7dfa00c.svg)}.flag-icon-az.flag-icon-squared{background-image:url(/assets/flags/1x1/az-3990c0526b933bd650285d821f2b93e432a73ba709869549b8ef75b051d3bd2d.svg)}.flag-icon-ba{background-image:url(/assets/flags/4x3/ba-89dd0c1600d94741de7d667a487310193a0c48c4cf1a5159c3bf9dd37d65d2b5.svg)}.flag-icon-ba.flag-icon-squared{background-image:url(/assets/flags/1x1/ba-2dbe90eb12b937f4a9ae8db95760930a3e318f4ce5829ac05e292ead698bae5a.svg)}.flag-icon-bb{background-image:url(/assets/flags/4x3/bb-16f8249ff958bfbc18fb1f23a5282000347bffdb5769ac620966185b1dcb57f6.svg)}.flag-icon-bb.flag-icon-squared{background-image:url(/assets/flags/1x1/bb-fae92d8426196ae24ffa561aca72613fae651a5e9c0bcda63ecc877add05b060.svg)}.flag-icon-bd{background-image:url(/assets/flags/4x3/bd-8dac0547e73ee25a04148a3f0fd026a90e56c23b7e92921565d4263050ba77a6.svg)}.flag-icon-bd.flag-icon-squared{background-image:url(/assets/flags/1x1/bd-ecc3c3e87d4cc59c8350f2b4d7dca8f5cf46bdb26319db0ee80b744482af50c1.svg)}.flag-icon-be{background-image:url(/assets/flags/4x3/be-a180ca68521188017bb5367f19e503d9599d6cbecd61bf054e59a57f58e648ae.svg)}.flag-icon-be.flag-icon-squared{background-image:url(/assets/flags/1x1/be-c8d4194137bd01955285b329dfdf996490d16c3116a92ce2f322e354b6d7494e.svg)}.flag-icon-bf{background-image:url(/assets/flags/4x3/bf-6b214936ef89f19133d4a84e99cdf0cfdb99d6409f2f373f6d18694423013313.svg)}.flag-icon-bf.flag-icon-squared{background-image:url(/assets/flags/1x1/bf-04c7d61aa314adab5a41bd79d77aa780c10136bb6b8f4c62423e61e23e3851ee.svg)}.flag-icon-bg{background-image:url(/assets/flags/4x3/bg-dd3985ba746942b0e65bc52a280cc4d28fb24fd2c7d9e22ac9afd2d75ee7bfc4.svg)}.flag-icon-bg.flag-icon-squared{background-image:url(/assets/flags/1x1/bg-f59294a736d5bdc0f102b58d70dbe45d02bd92df822820bf95336840f75a0746.svg)}.flag-icon-bh{background-image:url(/assets/flags/4x3/bh-7c82c4a6ba963172c6c1b4423f39a0ebe9c999449cc7dd87018917943db4735c.svg)}.flag-icon-bh.flag-icon-squared{background-image:url(/assets/flags/1x1/bh-6893aac3e55c6480e9dac0c023ec2179f6c12a0da82a0bc2717134384c097e88.svg)}.flag-icon-bi{background-image:url(/assets/flags/4x3/bi-4fcd0116f7f93c0564c6955806f3c3563d0ea7334ae406f29a897255845c923c.svg)}.flag-icon-bi.flag-icon-squared{background-image:url(/assets/flags/1x1/bi-91c34eb431b26be67852782a0b93e1d7d577a925454d6c8cea00a0d872d2de8a.svg)}.flag-icon-bj{background-image:url(/assets/flags/4x3/bj-63bddb4268f5f8c2ed867041bcf058fb18fcd9d1e0799e01286fca2d5e961c7f.svg)}.flag-icon-bj.flag-icon-squared{background-image:url(/assets/flags/1x1/bj-e2606c5a8498c474a6b6708626b88108fcb73840344766566dc56f804279cdfc.svg)}.flag-icon-bl{background-image:url(/assets/flags/4x3/bl-824a7265f48789d5e1ad5c5b0042a13a7d2d4357210e5bd8124fca19931e8c74.svg)}.flag-icon-bl.flag-icon-squared{background-image:url(/assets/flags/1x1/bl-ba6a7881b0ca72ac57aee4d823ae611ab4ad24a938ee9e01a7a4d5ae04cfccf6.svg)}.flag-icon-bm{background-image:url(/assets/flags/4x3/bm-2e2f09e5a4edf4b18afff581656f50b0b4c37783db29591ff00ca768f7f755bc.svg)}.flag-icon-bm.flag-icon-squared{background-image:url(/assets/flags/1x1/bm-f553f953f8784ea4d67a5197f5d808a67747eb8a1cb56990d6838e690090d2d6.svg)}.flag-icon-bn{background-image:url(/assets/flags/4x3/bn-bcf9967c12eb6397346cb5b960ae92efa41f314f780d09a3d7c81f5dacac4180.svg)}.flag-icon-bn.flag-icon-squared{background-image:url(/assets/flags/1x1/bn-1d1aad3fe9fd33ce922eba33c9ae6047a5646349239c20d1bc7307ec6d19a043.svg)}.flag-icon-bo{background-image:url(/assets/flags/4x3/bo-fa423f2bb4ab6e8e9dd399ad73781ea8d9cbafd30f1b7ee0bcecfb9e7b75581e.svg)}.flag-icon-bo.flag-icon-squared{background-image:url(/assets/flags/1x1/bo-f5faa29e40191e0c76070ac1a1d2a1f2b18e9cd358b8a77cefaed8efc49a265e.svg)}.flag-icon-bq{background-image:url(/assets/flags/4x3/bq-493c92ab19204c3ad319e6caba021df050132b99bd57a8f9b74131b78229c29e.svg)}.flag-icon-bq.flag-icon-squared{background-image:url(/assets/flags/1x1/bq-6e30bbeabc2aa097f657a411984b3c23278a8fcce2fc016b1cd6d2262f672d33.svg)}.flag-icon-br{background-image:url(/assets/flags/4x3/br-cf3ba80ec2c9fd4d3c845c3a3c43a2b9d81cf90707a2918789e8b1f596833e01.svg)}.flag-icon-br.flag-icon-squared{background-image:url(/assets/flags/1x1/br-7bf4e4b31650ac25f0bc6c86eb87491a7e5a8eac13acccfcbde44346c88728f6.svg)}.flag-icon-bs{background-image:url(/assets/flags/4x3/bs-69f60b5fea96b67dd939e597099994921bb3dc3bcf31b8dee7cc45be2885c836.svg)}.flag-icon-bs.flag-icon-squared{background-image:url(/assets/flags/1x1/bs-f5d6acf7ef7a240dc09ac88710fd77fd3494501104392db74d5c540d482f2262.svg)}.flag-icon-bt{background-image:url(/assets/flags/4x3/bt-6c20b0c00e12d5898be0239a0c66ce775debd0bd536de56a271859a0285a039e.svg)}.flag-icon-bt.flag-icon-squared{background-image:url(/assets/flags/1x1/bt-58de3ca9438811ef1920e2f84c4ba4ce32d01069f4d197ab5d577de6acbe0c85.svg)}.flag-icon-bv{background-image:url(/assets/flags/4x3/bv-ff173190fc339b3cb8b6e8235bc5e373853d7127fd94cbc32ac737e839aeb586.svg)}.flag-icon-bv.flag-icon-squared{background-image:url(/assets/flags/1x1/bv-59616ff1a722959064c83927ca2e49c1fce42a9b18e91b9ecbb74f62527aff43.svg)}.flag-icon-bw{background-image:url(/assets/flags/4x3/bw-4bb1d3131b88c65b5decc67f7b44903e931bca2fcac841942591c599f0cbb850.svg)}.flag-icon-bw.flag-icon-squared{background-image:url(/assets/flags/1x1/bw-e08f50c0836ca5858aed7b0526aed6fb630da8dc6b6b96bd9a476af599dc89d6.svg)}.flag-icon-by{background-image:url(/assets/flags/4x3/by-324ac96bfbe075781c664be3b9e2ac6b4d2a46dd2b418ca0920284f64394c7d4.svg)}.flag-icon-by.flag-icon-squared{background-image:url(/assets/flags/1x1/by-37b80e8bf7e51fef99a8307d6dffb04ee164790ceeafef606d516ca333e9488a.svg)}.flag-icon-bz{background-image:url(/assets/flags/4x3/bz-156fdc45f8c15c9520a1ea9fc0f395f294f02077408ea1938c222a37cfbb7f1d.svg)}.flag-icon-bz.flag-icon-squared{background-image:url(/assets/flags/1x1/bz-24577d4e7b29b33ab3b1d37914c8479889baa7e8c8399c6d1c99faed31ab053a.svg)}.flag-icon-ca{background-image:url(/assets/flags/4x3/ca-0d57cab46d5dbb0012a5e4ae0a9efee3baee90d5d157950a6c5d67edf2daa58f.svg)}.flag-icon-ca.flag-icon-squared{background-image:url(/assets/flags/1x1/ca-192a6fb0544e5a6f33a32149d62f1e7ac0a1d61c5c5afa57f3a42346ca8e8c90.svg)}.flag-icon-cc{background-image:url(/assets/flags/4x3/cc-a35f2a9e10a28d6918ced65e0623b03bb2fbf1f20670b581bc0a409d33b4e843.svg)}.flag-icon-cc.flag-icon-squared{background-image:url(/assets/flags/1x1/cc-d2025eefc9d30f724f3fcd95c0fd9f7938930ecb01af7e0cd6ee6553d7358eb6.svg)}.flag-icon-cd{background-image:url(/assets/flags/4x3/cd-5d2127c991b30522ae0a29d05facbc88728c050d7e333a60d614af1545459c5c.svg)}.flag-icon-cd.flag-icon-squared{background-image:url(/assets/flags/1x1/cd-59dacf424d1c8c779db66c5b7f2a93a3c8f14976c2975ccfb07639676a1602e3.svg)}.flag-icon-cf{background-image:url(/assets/flags/4x3/cf-ac0aaffba354d848eba2501a402ee81dc96a56ad0acd3741ec9905e76c372e1e.svg)}.flag-icon-cf.flag-icon-squared{background-image:url(/assets/flags/1x1/cf-e637674faf7edcdad37182192d038448c157421ab0c69377d9b8e56ab2c0249d.svg)}.flag-icon-cg{background-image:url(/assets/flags/4x3/cg-3729f717c83c9df7d0543a1a5d4a506efe184bdfeb39f9260b4b63edf19d2538.svg)}.flag-icon-cg.flag-icon-squared{background-image:url(/assets/flags/1x1/cg-8353ff1f251714b1b8905eec1722378426719955d0637d206d35d1dcfa68ddcf.svg)}.flag-icon-ch{background-image:url(/assets/flags/4x3/ch-6739edee6d1ef72c4ed97cfe723d3bb7f17e4df5390f3a4ae234f1ffdeece0cf.svg)}.flag-icon-ch.flag-icon-squared{background-image:url(/assets/flags/1x1/ch-7c3dec465228981c57a90a3a7b3a6c42dd3e699230663e770b55008ce6d14208.svg)}.flag-icon-ci{background-image:url(/assets/flags/4x3/ci-3e076d13c9524149508c442f8f727424660124e3591280d8ae9bddf9d8272a1e.svg)}.flag-icon-ci.flag-icon-squared{background-image:url(/assets/flags/1x1/ci-691a0a8577b7d555fc90dc7170adc9ec7571191cb3507c46c0e8516fd1778a91.svg)}.flag-icon-ck{background-image:url(/assets/flags/4x3/ck-9cff098e505afde9bf5166cb7b0c409178575633b913ce08c1c700d08c477db6.svg)}.flag-icon-ck.flag-icon-squared{background-image:url(/assets/flags/1x1/ck-9c8dffa3bd5953d8a121780831f25b58738e67f3be71961894c56dfd25848c88.svg)}.flag-icon-cl{background-image:url(/assets/flags/4x3/cl-a4c57ec2bb9adcb67e1850256e5165227b764187d6941a38d95d0def5144699b.svg)}.flag-icon-cl.flag-icon-squared{background-image:url(/assets/flags/1x1/cl-5a3e95cf63358e3911c97404818c2cddfd46414d8445e47d6976ee166c48926c.svg)}.flag-icon-cm{background-image:url(/assets/flags/4x3/cm-5dce9f36d92a61bdc0c482141bdb4f55bfcec0a2ecc745db643a7953e2e5a722.svg)}.flag-icon-cm.flag-icon-squared{background-image:url(/assets/flags/1x1/cm-d8d21f54c44df5df9edef227691384a4ad37c15ff57c8aa0dead684d19eac8cd.svg)}.flag-icon-cn{background-image:url(/assets/flags/4x3/cn-48ce1c2837bb806a6aaf8b7a9878b6d040c0d069a0ffca9a8a49e7a31aa30e7f.svg)}.flag-icon-cn.flag-icon-squared{background-image:url(/assets/flags/1x1/cn-e6be64c6c4a976e64d39bfe8a6ae4a5b1d38a6aa1b138ddcacf34a942dff50bc.svg)}.flag-icon-co{background-image:url(/assets/flags/4x3/co-648d3ff596a0ecf3e85ac17c53abe1d7ca4759688e10a7a3a8b56f096ba6b6f7.svg)}.flag-icon-co.flag-icon-squared{background-image:url(/assets/flags/1x1/co-d3c16180c6bce630f762aff789104d10e9dbc949e740535a61396cd0ec34c1a1.svg)}.flag-icon-cr{background-image:url(/assets/flags/4x3/cr-84aec60f19bd33e1ac1a209155fec8d372e17cb59dc1346bb9124e5cc867375d.svg)}.flag-icon-cr.flag-icon-squared{background-image:url(/assets/flags/1x1/cr-5371cf8bc5ad1a805155c1b3065e420a0a418c8d63b472bc545890289a365b35.svg)}.flag-icon-cu{background-image:url(/assets/flags/4x3/cu-bb3f857e02aeab606120d9f164283f07a44b227f12aad7d6d344c7579f7b3ff0.svg)}.flag-icon-cu.flag-icon-squared{background-image:url(/assets/flags/1x1/cu-02c0054169b874a8d231de1f45b2d0884de48848157734e0ddcd0f684c05c18d.svg)}.flag-icon-cv{background-image:url(/assets/flags/4x3/cv-90ee90ab59713454a218d8c300c71139e62655de80bfbea81df93142a529b81f.svg)}.flag-icon-cv.flag-icon-squared{background-image:url(/assets/flags/1x1/cv-2cf3eede97a468d28459ccc2271c28bb5b6029af2388b0301f6203be55e49308.svg)}.flag-icon-cw{background-image:url(/assets/flags/4x3/cw-d46beb7b10b40fa82cfd40eb86a3b3879f59f5da2a2f5ef91d121ab9b16c0aad.svg)}.flag-icon-cw.flag-icon-squared{background-image:url(/assets/flags/1x1/cw-ba78c834e61b24a8a2b6bc7c80ab9f14e42c3c69415941ddb7c8c1f652ccd8b5.svg)}.flag-icon-cx{background-image:url(/assets/flags/4x3/cx-28187fb9d91bedc6f239b107d26eb6ec1cc2a0c7730810306c5a6b313c14f2b2.svg)}.flag-icon-cx.flag-icon-squared{background-image:url(/assets/flags/1x1/cx-8ebe073d997f93d092a493300ea1d234c91aef80c6e8f431e88aa7f8e724f9a6.svg)}.flag-icon-cy{background-image:url(/assets/flags/4x3/cy-8d633ecabc7968bb8a869c62545f122aacbbc3e108c25ceb421bb8bc8734b9be.svg)}.flag-icon-cy.flag-icon-squared{background-image:url(/assets/flags/1x1/cy-6ef37fdd7518f18727bec1ed9741bb4d1f854dde7ef1a7e9fd2f4ba6291a7790.svg)}.flag-icon-cz{background-image:url(/assets/flags/4x3/cz-6c94e3d53fc1ae5982d8eb058b76d86f07d3fb4cd325698fea3291fa35504c56.svg)}.flag-icon-cz.flag-icon-squared{background-image:url(/assets/flags/1x1/cz-af9898ebd32559cdbea2fd17b351e5eedafccada6fbc6a2b7952cad78369817e.svg)}.flag-icon-de{background-image:url(/assets/flags/4x3/de-e7323083675d25107c85f0cea6534bd21d21e77e6d524d92e1b2d0a4e21117a1.svg)}.flag-icon-de.flag-icon-squared{background-image:url(/assets/flags/1x1/de-fdb60146952d3b2d104310b28882a0ecde44d808240c3bab2cd6c302a538b266.svg)}.flag-icon-dj{background-image:url(/assets/flags/4x3/dj-546da4a0dae9b1ab74dc6ac6076d0c706f37ef2a0d799342dd0345e11f770f03.svg)}.flag-icon-dj.flag-icon-squared{background-image:url(/assets/flags/1x1/dj-c0481b667f003d9d5a3c93861023a97a98224227ac19aa7e07b5b6edd35fe900.svg)}.flag-icon-dk{background-image:url(/assets/flags/4x3/dk-a13735c0337ab4679cd8679508bf5e8067637ab611ca5c54172c621d740420e5.svg)}.flag-icon-dk.flag-icon-squared{background-image:url(/assets/flags/1x1/dk-822a3b8b6948f49aa81fe7620bd173453d9a45406a9680f24bad7e714e58cb7c.svg)}.flag-icon-dm{background-image:url(/assets/flags/4x3/dm-7713fabd3cf341694b4c1ef5d1379820773722b61c190234ac7416f2872e3940.svg)}.flag-icon-dm.flag-icon-squared{background-image:url(/assets/flags/1x1/dm-33d984fc9897bb2a3bd16c6672b876effc1a8adc0c57ad122a16db54061e4e46.svg)}.flag-icon-do{background-image:url(/assets/flags/4x3/do-714b6f307ea3a9c3d30348684b8574e8b7f5078f51649dfa97ae2a69a7108b4a.svg)}.flag-icon-do.flag-icon-squared{background-image:url(/assets/flags/1x1/do-d37306c4b346f89ea14739144374caad69652be31e8ce8e2504c9a0d422a4857.svg)}.flag-icon-dz{background-image:url(/assets/flags/4x3/dz-a96e943c830558fe9823044aac2bfb3f6a4caf3bd3c57943352280a7f6b68cb1.svg)}.flag-icon-dz.flag-icon-squared{background-image:url(/assets/flags/1x1/dz-09400d3b2c58e641a1641a687b81476761d05f9d0ff65861aeaa33c7f508cda4.svg)}.flag-icon-ec{background-image:url(/assets/flags/4x3/ec-6762ba85ea0f7bb289b0aa6219c797e5243103d281b1462c61b61030fa329d5e.svg)}.flag-icon-ec.flag-icon-squared{background-image:url(/assets/flags/1x1/ec-7410a75a013738fbb8cbd756d967380e02ae54ca74e9ef9a41c4b583c2c2794f.svg)}.flag-icon-ee{background-image:url(/assets/flags/4x3/ee-ce3b622214bd9eefb43373cae2811ea8cf6ef6a16bb6afbaa5bcaaea34024da0.svg)}.flag-icon-ee.flag-icon-squared{background-image:url(/assets/flags/1x1/ee-a207a8363b4dde44f59951501c2cb539419e92b0814b25d6448710ced52226f8.svg)}.flag-icon-eg{background-image:url(/assets/flags/4x3/eg-16a11fa93856ddc5fd46f8811adfc93660175724b20eaab55ff046855a352d2c.svg)}.flag-icon-eg.flag-icon-squared{background-image:url(/assets/flags/1x1/eg-9f4d098c604326bbc3692f9e2f335dbc9b34bdf2706565bf448380f0a889d1e2.svg)}.flag-icon-eh{background-image:url(/assets/flags/4x3/eh-9cf4a74d29c1a1afc4137deeb5b678d55c8fbdf8d181217267f3a5cce6a76a97.svg)}.flag-icon-eh.flag-icon-squared{background-image:url(/assets/flags/1x1/eh-16c3327dbcf3483e634b3536b056324b5478212dae6d060f2ffb2ec961cd382f.svg)}.flag-icon-er{background-image:url(/assets/flags/4x3/er-69a1e1e45289d1282df4b1e5ce5e712d69fbe314abd0c922353fce90814c543e.svg)}.flag-icon-er.flag-icon-squared{background-image:url(/assets/flags/1x1/er-90d49408e58955cf1cf3185b0193e03c4a107042d47ef5e975dbbe10c6ef7f4a.svg)}.flag-icon-es{background-image:url(/assets/flags/4x3/es-50e59681c6b6412498bd9cbfc473abedc713db75c54c538b839db3c394d64499.svg)}.flag-icon-es.flag-icon-squared{background-image:url(/assets/flags/1x1/es-29c68fa3c9c8c2adacdc2eb0162e9c2fa998faa408836900ec6285000476800d.svg)}.flag-icon-et{background-image:url(/assets/flags/4x3/et-14263ba7ea890fd0a4d89a2791343ecb7acc89aab1fc2593e00a6093b22251df.svg)}.flag-icon-et.flag-icon-squared{background-image:url(/assets/flags/1x1/et-086eefb70e9adad537cc1c640a72cc0fa843ec7a9b06b2778aa98b2db055bfe6.svg)}.flag-icon-fi{background-image:url(/assets/flags/4x3/fi-a4c41caa02a4f6803ea0d6c36de4beebf20d150e3df742b1369a4099c2ff648e.svg)}.flag-icon-fi.flag-icon-squared{background-image:url(/assets/flags/1x1/fi-c5fdf318fac5fdfc94fe54268618e58a2bc5933617ead09992900f90cc25de9a.svg)}.flag-icon-fj{background-image:url(/assets/flags/4x3/fj-cb0cc4b3b5c202f07487ee519f48b3eadb47035f5f2d5d3f99d20f81e48d6b79.svg)}.flag-icon-fj.flag-icon-squared{background-image:url(/assets/flags/1x1/fj-c2c7fd536841925e7647b2d510d6a0c58700e2a8ded0e42008fb93ffacde101f.svg)}.flag-icon-fk{background-image:url(/assets/flags/4x3/fk-cb61eaa0d7221823f7d17de59ea88ed16b506f9585ab0c7291cf839449d82968.svg)}.flag-icon-fk.flag-icon-squared{background-image:url(/assets/flags/1x1/fk-a871742380ae157d1211a63cc35cd3621b1bf6de6d67e4a8e3565ad200b1d8cf.svg)}.flag-icon-fm{background-image:url(/assets/flags/4x3/fm-079b937562a9a412aae8fb762b571ddb49bf23627943c97247b6a9bbdb768153.svg)}.flag-icon-fm.flag-icon-squared{background-image:url(/assets/flags/1x1/fm-dbec73633ecd8a6c50f56d54df36bbe6a2f8fb534ac7658477c82cad14a806a8.svg)}.flag-icon-fo{background-image:url(/assets/flags/4x3/fo-27279c2481bb1cb3e44850a948987d6a8411acffa770c3aecd1b76d4c5853413.svg)}.flag-icon-fo.flag-icon-squared{background-image:url(/assets/flags/1x1/fo-7cb4fdbba1c7223702d843cb0709ddc799f89f909dfe101e3e36d6bf36c3e67f.svg)}.flag-icon-fr{background-image:url(/assets/flags/4x3/fr-30ed2f68dc9a17927643640f48f3d2a858bd041770547035349c6e79713cd84e.svg)}.flag-icon-fr.flag-icon-squared{background-image:url(/assets/flags/1x1/fr-6b849151204c66fa661c30b34e62919a13b9e66b7cd37a4fc8962e8e0baf9bdc.svg)}.flag-icon-ga{background-image:url(/assets/flags/4x3/ga-e3840f9d5bd6ee08db748d37a534500b837bee0f8ce65987b2f099a6afd2cc63.svg)}.flag-icon-ga.flag-icon-squared{background-image:url(/assets/flags/1x1/ga-9eafd5388042b3d2258ac6223075b726426210136b9851b637973105721b64d9.svg)}.flag-icon-gb{background-image:url(/assets/flags/4x3/gb-ce93c8a6b974d63998e263f6d25f898fc20580a28464457f2f4463b687e4fe8d.svg)}.flag-icon-gb.flag-icon-squared{background-image:url(/assets/flags/1x1/gb-1d93e1ce2e2e10c1709e4dc50ac956c007b2c1a63a4bc22ddfd64354f79ad457.svg)}.flag-icon-gd{background-image:url(/assets/flags/4x3/gd-7c3a6b6068bbd9a6abc98c2297dd4acd5e31022e5a4210fc0e1205ec28498fa2.svg)}.flag-icon-gd.flag-icon-squared{background-image:url(/assets/flags/1x1/gd-2310bc03d9e8ddc8599b40891bfb10b812b07023881599a7e02e3028d1bc9ca8.svg)}.flag-icon-ge{background-image:url(/assets/flags/4x3/ge-501c0135fb8c377dbd2859ff6290b47ef4907a8e2ab2ae1e39116b716db6795f.svg)}.flag-icon-ge.flag-icon-squared{background-image:url(/assets/flags/1x1/ge-ca9ee36883ec12048fbb7fbbfaf231c0d4848ae0b07dab74a46d53b7b34d8114.svg)}.flag-icon-gf{background-image:url(/assets/flags/4x3/gf-7c165f90bfe6ac3674903632182221a992f017ff706354b1761002382e89c2c2.svg)}.flag-icon-gf.flag-icon-squared{background-image:url(/assets/flags/1x1/gf-8838337b15cdcf143fac16c714e8dbf2d893d2ea8f1c8ef06dadcb652dfec41c.svg)}.flag-icon-gg{background-image:url(/assets/flags/4x3/gg-2c7bfc50d5bcd374b5f6107974d06af24e70edba31ad71a225e0c2ecc2d6e778.svg)}.flag-icon-gg.flag-icon-squared{background-image:url(/assets/flags/1x1/gg-509489b1792831bb27d6975c76aa0a2ac2fa2c3906bcf844f616de5e0fbbc359.svg)}.flag-icon-gh{background-image:url(/assets/flags/4x3/gh-79c187756e93df22fae571ad9419629c5247c016e32a74471e0d461048fdf5cf.svg)}.flag-icon-gh.flag-icon-squared{background-image:url(/assets/flags/1x1/gh-e7bf18e6337982ee31e3673ab93e722b3410b7a4c202656a4bc3887d8656286b.svg)}.flag-icon-gi{background-image:url(/assets/flags/4x3/gi-ed99b369c8c77e64abd59fab1f28155d71b4378b49625c66ab0ab6dff4f88087.svg)}.flag-icon-gi.flag-icon-squared{background-image:url(/assets/flags/1x1/gi-2e563e96e766e13c0a9c5a3a372059a44739bb696e853d71a6f6b08c491dfb9a.svg)}.flag-icon-gl{background-image:url(/assets/flags/4x3/gl-612e560dbad68d540be672b80e22c54db43d6e2070523e81c156ccd6b3fc4260.svg)}.flag-icon-gl.flag-icon-squared{background-image:url(/assets/flags/1x1/gl-a9bb35d2b9ff27638658d9ad6b9e2c4f452072b9a80b508d32e76d37bf62cf6e.svg)}.flag-icon-gm{background-image:url(/assets/flags/4x3/gm-4a6f9670a41548cceaced2b728e4bc56acbc4a3ba5544e7a097f7dae7a8bb045.svg)}.flag-icon-gm.flag-icon-squared{background-image:url(/assets/flags/1x1/gm-b67f9f6bce2f8c8700c198de8bfafac72d01b8a1e55b77f71e8cafdc58f8af5c.svg)}.flag-icon-gn{background-image:url(/assets/flags/4x3/gn-873b4eb52f34c7558bef93cfd1b82117b5c32c9fbc0610f8821ccd22f28abe28.svg)}.flag-icon-gn.flag-icon-squared{background-image:url(/assets/flags/1x1/gn-72f51dc30cf0ed5459ad0f239cf3043eac05ece75945bcaf4ea6653af868c504.svg)}.flag-icon-gp{background-image:url(/assets/flags/4x3/gp-4559cad3eb2d173214161d16b0237c68f5c817749a39c862fa7b23dfb4aee923.svg)}.flag-icon-gp.flag-icon-squared{background-image:url(/assets/flags/1x1/gp-d6669532054db5b7e441f4858c28920246a65ca3e8a15518c64c7bbb4f9c6416.svg)}.flag-icon-gq{background-image:url(/assets/flags/4x3/gq-0c8dfe7f9543307056bbe6d6e44a16c17201228e5344d5afec1ccf1b9a5eb2f9.svg)}.flag-icon-gq.flag-icon-squared{background-image:url(/assets/flags/1x1/gq-ecb761e6db59b9bf8ba37533eaf0c60b7fcc7c0dfa2fcf281ee84c970dcb10f8.svg)}.flag-icon-gr{background-image:url(/assets/flags/4x3/gr-4a4086310397bffa682d439be8650a9e28d94e32963b6411b61435292ac4cf80.svg)}.flag-icon-gr.flag-icon-squared{background-image:url(/assets/flags/1x1/gr-0cbd171892c0568b055d3b6585d58ac13dd60dfbcfad16eda1f4f9ead11dd16f.svg)}.flag-icon-gs{background-image:url(/assets/flags/4x3/gs-e45169a93a9e94c15f5cb765a6c863319171fb9b4dce56094411829cd688d486.svg)}.flag-icon-gs.flag-icon-squared{background-image:url(/assets/flags/1x1/gs-3efc9e1b32961f9aa9d7faa2626e596282b63d049f6717c2378b28e3f508e79a.svg)}.flag-icon-gt{background-image:url(/assets/flags/4x3/gt-64a7345cf66facf7f323d2142aebb4172191108a78ac7493b1a6077b78ac8ec5.svg)}.flag-icon-gt.flag-icon-squared{background-image:url(/assets/flags/1x1/gt-436a2af3d95cf3cb13ded897f319cfd6e2c087d678ad0e971c198b0d2c029911.svg)}.flag-icon-gu{background-image:url(/assets/flags/4x3/gu-f560822ee237e5277829e63613a615a2ee3d8cc6196dffffe0f0d56a49b11c53.svg)}.flag-icon-gu.flag-icon-squared{background-image:url(/assets/flags/1x1/gu-a71c9d290c66c1a0929b05436dc6a8229b1147d7cc62336e04c9adf697030450.svg)}.flag-icon-gw{background-image:url(/assets/flags/4x3/gw-0dc9ec17735ed605b68672947ce55c49a4ec1551491ccd121f482c1875cdf219.svg)}.flag-icon-gw.flag-icon-squared{background-image:url(/assets/flags/1x1/gw-7868c305e4a64b0d8ebfd3f7cb8c881841d71a7e0c3ead2683fe503c80de0674.svg)}.flag-icon-gy{background-image:url(/assets/flags/4x3/gy-c9126e544c62508abfb898f0af0bd79c46f4c767c9ed6f928418a24b0f246d85.svg)}.flag-icon-gy.flag-icon-squared{background-image:url(/assets/flags/1x1/gy-0e3b849ce460f8ab1ec7cf66a25be1ba91e89b72d8b0aa679a0553464f37a972.svg)}.flag-icon-hk{background-image:url(/assets/flags/4x3/hk-cece9126ccbf9151feadfed75791ebf32d4a16beab12f182404519d0cc24eec7.svg)}.flag-icon-hk.flag-icon-squared{background-image:url(/assets/flags/1x1/hk-9fad00e06f9034877149394914baa2bc3292223b0e32df2b1f9399d4de6e167d.svg)}.flag-icon-hm{background-image:url(/assets/flags/4x3/hm-4b4923b81da24d62ebf31a9bc0addf76beef84593374b1cbd03ba19f3b12e3e9.svg)}.flag-icon-hm.flag-icon-squared{background-image:url(/assets/flags/1x1/hm-776c822113a22e83581234d05f40bfc0ed38b60648d87f513f3da3fff96ffb61.svg)}.flag-icon-hn{background-image:url(/assets/flags/4x3/hn-855c830786283862a5f399e0d69dffe52b6223b91b32e31b55d55c82f2fa32c9.svg)}.flag-icon-hn.flag-icon-squared{background-image:url(/assets/flags/1x1/hn-64c38bac9403417c4e276bf5536d284fc5410fc04b80acd39a961d298f430dbd.svg)}.flag-icon-hr{background-image:url(/assets/flags/4x3/hr-c8cad861f7398a22b9d27ea682d2778df0dde8e146d30142b5294daf988854af.svg)}.flag-icon-hr.flag-icon-squared{background-image:url(/assets/flags/1x1/hr-60c093df6760e4cc6abe26c37a52be3b51458f02712f18e11f08b07dc623b489.svg)}.flag-icon-ht{background-image:url(/assets/flags/4x3/ht-fe81da06228fa36e7f211bec0d9f0c020f5b9c7f81534b4cb2251848aa276b16.svg)}.flag-icon-ht.flag-icon-squared{background-image:url(/assets/flags/1x1/ht-dd0197c078859c5a66ff3a51d3a3f92809768e36bfabdec0fc0ab60d068afcd9.svg)}.flag-icon-hu{background-image:url(/assets/flags/4x3/hu-9aa998e636687aede491e307f3d068dbe58f2d90bfdfaec0e7ad03baa5b36344.svg)}.flag-icon-hu.flag-icon-squared{background-image:url(/assets/flags/1x1/hu-06858d0fbd4320496e849010e35c8fe82eb618188cf6ec329aef93f5e7af1c23.svg)}.flag-icon-id{background-image:url(/assets/flags/4x3/id-775dbfedd6533afdf5bd017ccc1ad4f8f4238cbe87393d9c837a669196f17293.svg)}.flag-icon-id.flag-icon-squared{background-image:url(/assets/flags/1x1/id-3920ce662a7ea937b2c11707d8e1f53db52611dd004edf753b0389ed490d9d29.svg)}.flag-icon-ie{background-image:url(/assets/flags/4x3/ie-6368a1c92440fcf80d3c35607543bcaa2d4662d6e0bc7acf6749ddbc418a72c0.svg)}.flag-icon-ie.flag-icon-squared{background-image:url(/assets/flags/1x1/ie-1997e9de640fa764677aa8f5d52f7888bb24a029160e8f67b06dbd043b4f11b3.svg)}.flag-icon-il{background-image:url(/assets/flags/4x3/il-d76883a2330f9a05a4a64990ba955fc1be90bb46bcb19ae548c21816e7e74178.svg)}.flag-icon-il.flag-icon-squared{background-image:url(/assets/flags/1x1/il-f5e643d0e10169a438119dc441ea3100b52a2ff569bbb3a3ad6d1131b47602d8.svg)}.flag-icon-im{background-image:url(/assets/flags/4x3/im-bbae8aa9dd129f8446556afe4904194ad43377d882f9a705fcf1da2bdbfabccf.svg)}.flag-icon-im.flag-icon-squared{background-image:url(/assets/flags/1x1/im-767d72c2e72d732d65c9b016adad983778dfbbb2b5b52e71830f4e41297728d3.svg)}.flag-icon-in{background-image:url(/assets/flags/4x3/in-519e33321b8b2ba70a0b7557d66c62d7efdc9723896c49f82528b107028ffe29.svg)}.flag-icon-in.flag-icon-squared{background-image:url(/assets/flags/1x1/in-27831f76dc6a218a529b6e5d0eafc4c19c999461327b7c013f59226c0601a361.svg)}.flag-icon-io{background-image:url(/assets/flags/4x3/io-8d25a8e98f682199b413adfbcb6898c37058c9bae085e427fbab03d56e8c0de6.svg)}.flag-icon-io.flag-icon-squared{background-image:url(/assets/flags/1x1/io-627f3b0cef72fd91ff426d74a007dc32d74c9fe677cf2c8355cba84359e16fde.svg)}.flag-icon-iq{background-image:url(/assets/flags/4x3/iq-96b24d1439184d0a4c35ca7cea65e5f20469a0e8c8438963aad016e59c399cc6.svg)}.flag-icon-iq.flag-icon-squared{background-image:url(/assets/flags/1x1/iq-af04db139f8c44cfe0c612e2c05e848ccfad88fbbfcb58e88cdb7c80db365669.svg)}.flag-icon-ir{background-image:url(/assets/flags/4x3/ir-db2c230d355ade2b1ac235ec647bb1535e4703c639a44f9ce112473272ee1019.svg)}.flag-icon-ir.flag-icon-squared{background-image:url(/assets/flags/1x1/ir-c648cbf56fc8f324fda477ea816783c9df8a7d398f45f5f94acc1c16c8877b63.svg)}.flag-icon-is{background-image:url(/assets/flags/4x3/is-29508693138977229758b0f322ba34e90dbcd7a8a74e8820729933d24051d9a7.svg)}.flag-icon-is.flag-icon-squared{background-image:url(/assets/flags/1x1/is-b1c5db1d4b4853b8144f1d88ababbf14fc88752340457ba3e2c94ab5d54c9c01.svg)}.flag-icon-it{background-image:url(/assets/flags/4x3/it-d2c168050fc509adac1163b097b0ed409217560735b27802ae9259587c146562.svg)}.flag-icon-it.flag-icon-squared{background-image:url(/assets/flags/1x1/it-592d34fb666430fa00f98d333623d5efa3c8e0e65ac4eee06bbc4c1de7ce4bea.svg)}.flag-icon-je{background-image:url(/assets/flags/4x3/je-b363a4e3a21630f10791c2ebeb7f918320816ef87c155d4fd29ce37982f4df35.svg)}.flag-icon-je.flag-icon-squared{background-image:url(/assets/flags/1x1/je-6d43f74e30e099bc056da925ec34c0200708f0a6e90da34db1e59d54ce10cfd9.svg)}.flag-icon-jm{background-image:url(/assets/flags/4x3/jm-3d133fbc2564f29e036855e8be224d1579fe66fe49e0f5a2ba0bdcf3cb272823.svg)}.flag-icon-jm.flag-icon-squared{background-image:url(/assets/flags/1x1/jm-1aea8ea5d8cbc717fa3ef331d8caa9a1421c88a7bd076e40f8276a5b6f8d0467.svg)}.flag-icon-jo{background-image:url(/assets/flags/4x3/jo-eee432339f8ea6750987e1121187eb4b53ec537dd7ccb240c018de63f7a92db6.svg)}.flag-icon-jo.flag-icon-squared{background-image:url(/assets/flags/1x1/jo-7969b2083c535c85b7e714b755459a6606940e0b5ddb1b71e24daf0a180d14aa.svg)}.flag-icon-jp{background-image:url(/assets/flags/4x3/jp-2eadcfc67ba8cd50c1da86e08e6778e0102c3072865dab8c312cc88006da0abe.svg)}.flag-icon-jp.flag-icon-squared{background-image:url(/assets/flags/1x1/jp-551281a75e6c6fd64eb65b39f56102b52c182f6c38ee045c9422f6592f0f65c5.svg)}.flag-icon-ke{background-image:url(/assets/flags/4x3/ke-45790bc3ec1ed8ed0124777a7c9e09163353b5af4ff70ae6604a61b53712df4b.svg)}.flag-icon-ke.flag-icon-squared{background-image:url(/assets/flags/1x1/ke-2cca24ecf024b801543c0572efc9969ffdaf25cec313e2149c64961839bc301b.svg)}.flag-icon-kg{background-image:url(/assets/flags/4x3/kg-3879f8931d74cc9c5927261f4095b2bb786f3d62c803b2a96ec550a23fae9f49.svg)}.flag-icon-kg.flag-icon-squared{background-image:url(/assets/flags/1x1/kg-74318932808f85b72df308358f2f2699ab0cb7ab4f7ad3c84c4be4024f0fb140.svg)}.flag-icon-kh{background-image:url(/assets/flags/4x3/kh-7409fab4ba4e676db7b5c61020b97893b1735fe0b8e39e9b4f96108400be704e.svg)}.flag-icon-kh.flag-icon-squared{background-image:url(/assets/flags/1x1/kh-2603f6a61b400cb12b87397eeba60ae1707511467d5e0c430c05809bf89e5042.svg)}.flag-icon-ki{background-image:url(/assets/flags/4x3/ki-617c1b52f3d9aee99d094edbd1775cae77aade266a1318eb4671b2bb1620ded5.svg)}.flag-icon-ki.flag-icon-squared{background-image:url(/assets/flags/1x1/ki-74615266b440a24f09abdeae3853d7e1111f0eba77df71ccd176d83fbd1fd9ad.svg)}.flag-icon-km{background-image:url(/assets/flags/4x3/km-0c9bcbf7e677a541fc8dff6f848c9d92b6982ac2934ae75faa56a2b846bb5698.svg)}.flag-icon-km.flag-icon-squared{background-image:url(/assets/flags/1x1/km-81b0fbe53d09194270e8ed4cbe9be8eb1ae727e77957005369ad8bdc651dd1c8.svg)}.flag-icon-kn{background-image:url(/assets/flags/4x3/kn-0442f55f81cd3b1057c609301f0af2b503d89a895a954af8c970df997e92bd03.svg)}.flag-icon-kn.flag-icon-squared{background-image:url(/assets/flags/1x1/kn-897c34ef54bee486f0d24d2191e2400f49a19d98efb19f8c3f1a27fb0b97131a.svg)}.flag-icon-kp{background-image:url(/assets/flags/4x3/kp-a54f7201982b29530381b71a5e2a11c1153860f22c04c0a2d91bb0d20fedf78e.svg)}.flag-icon-kp.flag-icon-squared{background-image:url(/assets/flags/1x1/kp-758eccd89ef3707808fb68d931f086e49333904f4cc67c88468f3c96fb43b7b6.svg)}.flag-icon-kr{background-image:url(/assets/flags/4x3/kr-c0b9b2c854133410c0ad9cadbc10b1e0bacf0305519883126d55bfa3214f9d06.svg)}.flag-icon-kr.flag-icon-squared{background-image:url(/assets/flags/1x1/kr-7c0457ac5d284b28b742ea2e061a1aa2a35f63171e464b3a7eb501a48756ce7b.svg)}.flag-icon-kw{background-image:url(/assets/flags/4x3/kw-81c3d5d25c7b840ef14783b51d18c6b7cfc61f94932c664bbc9e5879fef020eb.svg)}.flag-icon-kw.flag-icon-squared{background-image:url(/assets/flags/1x1/kw-66670211a67a4e61d4652a19d821dc5195f01a28a3a9b28b7e4c6048cd86b19c.svg)}.flag-icon-ky{background-image:url(/assets/flags/4x3/ky-0f4ab66d951ae33f800d680aaa5704804ba9c8844d4d80e5bee2e3fa0e100af3.svg)}.flag-icon-ky.flag-icon-squared{background-image:url(/assets/flags/1x1/ky-fb5f57bb58b74d23377bad9954a75ab88d1587af68546ce137a6ae7a88a7701e.svg)}.flag-icon-kz{background-image:url(/assets/flags/4x3/kz-39edc952c598c71be2c9510944a8faf708d8e4b367b5ad78a688d1cd37f522eb.svg)}.flag-icon-kz.flag-icon-squared{background-image:url(/assets/flags/1x1/kz-924c04dc19267b049f35213af0e2b0c540933c06389433cb4aacd8dda33b286c.svg)}.flag-icon-la{background-image:url(/assets/flags/4x3/la-e3a36a3bd0003442c3a21d3a192995fa6fb3b3c08a2daadc8f38f62736b5b1e3.svg)}.flag-icon-la.flag-icon-squared{background-image:url(/assets/flags/1x1/la-c9d4223a897e5e2938a4892bbc593d3828093b9439fc3f6de21520e4013ddbc5.svg)}.flag-icon-lb{background-image:url(/assets/flags/4x3/lb-508c2a5a9b50d604895675b9f1c1e5914c394a7f468f5d823eb0476acaacbc7f.svg)}.flag-icon-lb.flag-icon-squared{background-image:url(/assets/flags/1x1/lb-10c9ba8ea7aa3189f16a7273c837982a887fc4ddfc9d514d8f5a660d72356f7f.svg)}.flag-icon-lc{background-image:url(/assets/flags/4x3/lc-04ccd92fb1578654181febaea30ebd6b6620f56115730b2a2d673c712307bf5c.svg)}.flag-icon-lc.flag-icon-squared{background-image:url(/assets/flags/1x1/lc-4ffb53afb8bd296d526ac26fd8007afc74855e92833a893d3c934a5d12eb152a.svg)}.flag-icon-li{background-image:url(/assets/flags/4x3/li-3058dc4aeaf2bd2da8cb910892137d732b56e5e9d342e565a4059de1a8e40e40.svg)}.flag-icon-li.flag-icon-squared{background-image:url(/assets/flags/1x1/li-0780a4f218b9ee466e33d14274b8a01575a86b3787b347e3269a3b301c220d5f.svg)}.flag-icon-lk{background-image:url(/assets/flags/4x3/lk-a13d6ab1da51be3b1d2c5b80f4d866c923d42b017e197469e1bfc0dd021c4bfe.svg)}.flag-icon-lk.flag-icon-squared{background-image:url(/assets/flags/1x1/lk-99759363f0df6b868fd1398bf05666c680bafe1eeec8b859b64d450930213e02.svg)}.flag-icon-lr{background-image:url(/assets/flags/4x3/lr-b06a1d70899826b305ce387fa31e1fa0bdb3bcb17c1392f15f995ce1dba723cf.svg)}.flag-icon-lr.flag-icon-squared{background-image:url(/assets/flags/1x1/lr-820a9d023e5b1e68ed640bfaba8f84ad4379c42a6c5c982cb76b0390dd2bcbdd.svg)}.flag-icon-ls{background-image:url(/assets/flags/4x3/ls-d02bcefe7c298c153665f35c33eedb08e2e2b345350e4bf1714a87abf86b2d0e.svg)}.flag-icon-ls.flag-icon-squared{background-image:url(/assets/flags/1x1/ls-85c731c313a46db12bdb27fe229e9f7d052b447c624663b73ffa1dbab97f03fb.svg)}.flag-icon-lt{background-image:url(/assets/flags/4x3/lt-c08eb18a15d2003cb544432b11c5081d3d5741370669b4df306d1c6bce14cb51.svg)}.flag-icon-lt.flag-icon-squared{background-image:url(/assets/flags/1x1/lt-c1bd7e3d289ac9b0df06d47237780eaf4d30f01281ed50a7df9a22bc3a2489c5.svg)}.flag-icon-lu{background-image:url(/assets/flags/4x3/lu-99e7b6adb3a9e0f867b17eb3b1f0f33db92fd27cfd7b651f62453f359bace22f.svg)}.flag-icon-lu.flag-icon-squared{background-image:url(/assets/flags/1x1/lu-ab544445f16afa450549288ac86c2cc9a458a9d7747b3a89d5ecef7db9c83ce7.svg)}.flag-icon-lv{background-image:url(/assets/flags/4x3/lv-f8844d50b89f0369f73d580d3676553e7e55dd8ab2460e592a29a530d9bed886.svg)}.flag-icon-lv.flag-icon-squared{background-image:url(/assets/flags/1x1/lv-baeced49dd4249e36a25b0f23a5c601a69e9dee3137627cd4450194b85a99dd4.svg)}.flag-icon-ly{background-image:url(/assets/flags/4x3/ly-03209121483967f9d74849fb9261de23e9ff2e02c4e40b29f1cda0631b8a5fae.svg)}.flag-icon-ly.flag-icon-squared{background-image:url(/assets/flags/1x1/ly-1e6e070aaa4bfc97a5a446a39bf746ab3c4c81d9f62c975cab164e16de3a3ffe.svg)}.flag-icon-ma{background-image:url(/assets/flags/4x3/ma-9a25cc7c2868fa45b251dd1b99a0be3b583df69732146142020fe9c6c0c95b63.svg)}.flag-icon-ma.flag-icon-squared{background-image:url(/assets/flags/1x1/ma-4f18b9c355b8b8bf0db69badb235a183dbd558deb6439bf03b4f18e56837a7f3.svg)}.flag-icon-mc{background-image:url(/assets/flags/4x3/mc-b0c50599ea2a550680a6a867579930e0b47d3e05193a7294a26b7849a7ad35e2.svg)}.flag-icon-mc.flag-icon-squared{background-image:url(/assets/flags/1x1/mc-8f1fe6210338399d8791d91f39234b1a09acf2aa5e0387696048dc7068534a28.svg)}.flag-icon-md{background-image:url(/assets/flags/4x3/md-8849eef7bdf916e962f7bb31af87c8d47aef33f9f4a2017b2ce55c4166e79643.svg)}.flag-icon-md.flag-icon-squared{background-image:url(/assets/flags/1x1/md-43f1bb4157545abe6e79215459efb548d913bbe7922078cd40cb722a4e19d9b4.svg)}.flag-icon-me{background-image:url(/assets/flags/4x3/me-983d452d43cfb8d628bfc5c0cf4991c2ba3cf0e39e70aa5353cfd4e9ec3da62d.svg)}.flag-icon-me.flag-icon-squared{background-image:url(/assets/flags/1x1/me-104d6a96038ef06d3d8b89c9221996f3649b5b821139b11b2e07695b0f6fda2f.svg)}.flag-icon-mf{background-image:url(/assets/flags/4x3/mf-31fb851bfcc2340d2fa43e86a099cc7becfc8e7f996a4d2ca56bd050e6537086.svg)}.flag-icon-mf.flag-icon-squared{background-image:url(/assets/flags/1x1/mf-fe20ce9bf911631d6e79edf21c8cff0716f2dc1ffded39515735444d9a66fa55.svg)}.flag-icon-mg{background-image:url(/assets/flags/4x3/mg-5effe963e29f804a26f95dbbc9519add454a0fd9eb918ddfeb55e1e99a1a2701.svg)}.flag-icon-mg.flag-icon-squared{background-image:url(/assets/flags/1x1/mg-9e546cfb78810d9b25c814a84aadd6907880b8e0cdd2e4e30738b519e7c1ac91.svg)}.flag-icon-mh{background-image:url(/assets/flags/4x3/mh-d8cfd123007dbb99aa700c335957926a6d5e877ab49680c79629a32716d7a782.svg)}.flag-icon-mh.flag-icon-squared{background-image:url(/assets/flags/1x1/mh-3fe03d4d063a4729fc8b68fd5e9d7d2eef6e65c4e82954c83f76b138cea2eb45.svg)}.flag-icon-mk{background-image:url(/assets/flags/4x3/mk-6e8071d15f2ff125d30bf89d000dcb47db9545cf9b7ff04f1474650ec2f4d25c.svg)}.flag-icon-mk.flag-icon-squared{background-image:url(/assets/flags/1x1/mk-fdc9212f9f311cbface56b6587468a2e845111b697edc11b7edda9fcf100c1d5.svg)}.flag-icon-ml{background-image:url(/assets/flags/4x3/ml-a730102e0c6f6362de9c10ef8da6cf7b123465d01a297e7a89808b01fa4771cd.svg)}.flag-icon-ml.flag-icon-squared{background-image:url(/assets/flags/1x1/ml-a661355da206b0cb7ac4c84b6cdf7e411fbca8fcb271ae999fa60d5c67578192.svg)}.flag-icon-mm{background-image:url(/assets/flags/4x3/mm-6d0d207d662477110f2b863488088818d8400386358dcbc669a2d8c54d1bae16.svg)}.flag-icon-mm.flag-icon-squared{background-image:url(/assets/flags/1x1/mm-de7d46b6543343af61ba997045cb41a707bd0db1e7a5879971ca8fddcbdf9e99.svg)}.flag-icon-mn{background-image:url(/assets/flags/4x3/mn-656eb51e88bfce82401e4080eb791ddf16d571cbba102cdd4316c5de4711ac65.svg)}.flag-icon-mn.flag-icon-squared{background-image:url(/assets/flags/1x1/mn-ad22cb2c195a7d8ca8e4174db011d5f58238ee25039b5b2da2649d8ca8b00123.svg)}.flag-icon-mo{background-image:url(/assets/flags/4x3/mo-37a1088aa687af13951bc93886e3e51cb246eccfde1b56528f189327ea291792.svg)}.flag-icon-mo.flag-icon-squared{background-image:url(/assets/flags/1x1/mo-b463a1c37b69131d662e3fb2ae937583458824a09bcf68fc7ed2d7fd729138d1.svg)}.flag-icon-mp{background-image:url(/assets/flags/4x3/mp-ecd12cadc358fdf293e856c0a3ffc09409123cabd3c7201225b2d21b59551e14.svg)}.flag-icon-mp.flag-icon-squared{background-image:url(/assets/flags/1x1/mp-d1f4ba10c1409e713253f1fbb107eeccbd4ec1a8f9036663f1ac1991aee53835.svg)}.flag-icon-mq{background-image:url(/assets/flags/4x3/mq-b4e1b08a93c1364c79e6d61f95b16fca5b884da6e77835bc0e0adfff8ecc2d7f.svg)}.flag-icon-mq.flag-icon-squared{background-image:url(/assets/flags/1x1/mq-19cb6f7cb7354c3fd40e987c93a2d76329d34b2ed3873c3f25fe56802f251ea8.svg)}.flag-icon-mr{background-image:url(/assets/flags/4x3/mr-9f64af3ed5c6d8d1f68b5cb09fd1aa9d28c3c95107e063f64a0ef95f0cb9429a.svg)}.flag-icon-mr.flag-icon-squared{background-image:url(/assets/flags/1x1/mr-0e79b7bcc669bb871d94021db2b78b162b9867c7eaf934d8f7a3025fd5903576.svg)}.flag-icon-ms{background-image:url(/assets/flags/4x3/ms-32620dd70353777b2ee62951556976f398cd38ae359b5a8c97311a1dc61eb8bc.svg)}.flag-icon-ms.flag-icon-squared{background-image:url(/assets/flags/1x1/ms-4104d4f36cb5cf1c6de78e52e90bc3c5b8bfa262617b16a737673feb8c30a00c.svg)}.flag-icon-mt{background-image:url(/assets/flags/4x3/mt-0c9819aa69b34b84c1ee43620922737122eb38f107be9864a0690ac66ef8aa64.svg)}.flag-icon-mt.flag-icon-squared{background-image:url(/assets/flags/1x1/mt-3c3fe71f2a2bf0d961fd145ad7e48ca1e9d3a05cce514354714ba4568503d106.svg)}.flag-icon-mu{background-image:url(/assets/flags/4x3/mu-c78c23f1499756b9db762ae434ca354d1481447fa94c66bc10aca9443b399059.svg)}.flag-icon-mu.flag-icon-squared{background-image:url(/assets/flags/1x1/mu-91ebc79d0fa306127ea8b7a33f77d5b28f35c516ea91ff0468c7344dc838db69.svg)}.flag-icon-mv{background-image:url(/assets/flags/4x3/mv-a17c947e17adae6aacef01a3e131c4150aa094911b53fbaead41783683e008eb.svg)}.flag-icon-mv.flag-icon-squared{background-image:url(/assets/flags/1x1/mv-d138e94d9d2ed093ef1425c1164493b780202f9a7f7937241a7b081b79ff8b01.svg)}.flag-icon-mw{background-image:url(/assets/flags/4x3/mw-21f116afdf71df80e3c59084c6ba640814fa5389430328ff55c9403b5c239632.svg)}.flag-icon-mw.flag-icon-squared{background-image:url(/assets/flags/1x1/mw-5c2228d3f1cf1f9cf8cb158e813202981828c11e8caf117836fc57fa6bc1c788.svg)}.flag-icon-mx{background-image:url(/assets/flags/4x3/mx-a235f9b16921590b7e78caa6f76339361356946eaf0046badd10732b4647c0b6.svg)}.flag-icon-mx.flag-icon-squared{background-image:url(/assets/flags/1x1/mx-cdab01ebcdccc020ca16e1355ef1fd18ca0043b501f399ca8edc48adfa8c7292.svg)}.flag-icon-my{background-image:url(/assets/flags/4x3/my-0ed63574cf5f20c0663ab8cd1f700e150fb641fd0b93602ba013abbfaae5ee59.svg)}.flag-icon-my.flag-icon-squared{background-image:url(/assets/flags/1x1/my-5e8d31ef06ffc8af33a5616d760592ecd022c52afc8ba33c721f1e4989da0628.svg)}.flag-icon-mz{background-image:url(/assets/flags/4x3/mz-752e2293917b1d2ece3f097104caeadf6a679054a779e9d3be8e49dc324bb88a.svg)}.flag-icon-mz.flag-icon-squared{background-image:url(/assets/flags/1x1/mz-300cba975ad43c962ceca0d266ded1fe3d21d6b4d701d657fb42b27268ea2964.svg)}.flag-icon-na{background-image:url(/assets/flags/4x3/na-a0655a2e70751278e6a60d31e818f672864a6e68e8b3d3361b2fbb70fa9bfef8.svg)}.flag-icon-na.flag-icon-squared{background-image:url(/assets/flags/1x1/na-1ce089a189db5be15eb05df8155f9bd017b61fc1a497e5b3021ff2ca664e122d.svg)}.flag-icon-nc{background-image:url(/assets/flags/4x3/nc-0c7171d91c44414ed69808611db588f1283ee7e34ea8a74a9a5101ba4b1cb305.svg)}.flag-icon-nc.flag-icon-squared{background-image:url(/assets/flags/1x1/nc-d3a1629f06dc3200af7669f2d895fce1908d2c1ca02d71e530bdfa6646a9516c.svg)}.flag-icon-ne{background-image:url(/assets/flags/4x3/ne-2b61d30a6cb4554535538e3b753926853e8c629a494a347286b9731c803548e4.svg)}.flag-icon-ne.flag-icon-squared{background-image:url(/assets/flags/1x1/ne-9c5f798ccd7d3dd3771ae628b4a39dfb2a4578fefd2e006f3ce89c3e494d0cb1.svg)}.flag-icon-nf{background-image:url(/assets/flags/4x3/nf-4e615baa83a8b4db3e39fe1d251ab913943d64e0cd320f251d619ab54e7512d3.svg)}.flag-icon-nf.flag-icon-squared{background-image:url(/assets/flags/1x1/nf-45403247c90050484813acf23c50f543779528e346317274373c3c24fd830103.svg)}.flag-icon-ng{background-image:url(/assets/flags/4x3/ng-d52fd188be973f31dd34e5a0b3fed0de68fe736c8a41c6028d9c248c038c8641.svg)}.flag-icon-ng.flag-icon-squared{background-image:url(/assets/flags/1x1/ng-f22edcc5867554d69ecbe15add0fbbb1389631f3ced07a4f820065c7770c65f5.svg)}.flag-icon-ni{background-image:url(/assets/flags/4x3/ni-2fbb883e46fbe3b2ecfed9dac004ceb546f25c77a84a5966eea224674aebc610.svg)}.flag-icon-ni.flag-icon-squared{background-image:url(/assets/flags/1x1/ni-214aed148b615c4846f842b47f99cf178ac62a96cf18c5dd6b23467184b56680.svg)}.flag-icon-nl{background-image:url(/assets/flags/4x3/nl-4f0ecea529dd4c0099dd41a7801fa5ac44aa04cd872ca31e11efd58b5a813774.svg)}.flag-icon-nl.flag-icon-squared{background-image:url(/assets/flags/1x1/nl-9c8f60e638879d642487818975e58c61cd3102f0e68c360708243c076436ff68.svg)}.flag-icon-no{background-image:url(/assets/flags/4x3/no-270f7ee9d1d2efa6abf16f693faba8586adae842d79d8aad9e3f37e96c27cbce.svg)}.flag-icon-no.flag-icon-squared{background-image:url(/assets/flags/1x1/no-7d377325e8c5ec4de0376e9f4c13463f183af637e6c443716f22020c7a313979.svg)}.flag-icon-np{background-image:url(/assets/flags/4x3/np-69637ddb3a173c4522a71598278aa32462e1762e34dd99c9dc99a515433a6cf8.svg)}.flag-icon-np.flag-icon-squared{background-image:url(/assets/flags/1x1/np-44ead118cce3a1fcbb720cc8d6eab6ecb6b62292315f61ae5963a40262ee11d2.svg)}.flag-icon-nr{background-image:url(/assets/flags/4x3/nr-0bd3c0ba7bbac4bd5985b838096eeebd67711d39065619ef092fa4bb55b22a6d.svg)}.flag-icon-nr.flag-icon-squared{background-image:url(/assets/flags/1x1/nr-63b9c44e5dd66a59895f52707dc24db5bd1eab6e535298d24e414c0f2dafcb3c.svg)}.flag-icon-nu{background-image:url(/assets/flags/4x3/nu-259989e1eea0cbf6b41a33176a4c9c1eaa2e7ae6571ad80a324c6309bd5aa5fc.svg)}.flag-icon-nu.flag-icon-squared{background-image:url(/assets/flags/1x1/nu-1cb535708f64ed8b386a245e571e677e935009af92f2b214760a2832c1ee1b53.svg)}.flag-icon-nz{background-image:url(/assets/flags/4x3/nz-90ceca2a683fbec395a91b77b0880cea99c3b2cbdb24caa5474925cbdcc3675e.svg)}.flag-icon-nz.flag-icon-squared{background-image:url(/assets/flags/1x1/nz-b0d78f165a72edd46599222a2ea5f6a91a8252975cb03e33c4ca08e389859aac.svg)}.flag-icon-om{background-image:url(/assets/flags/4x3/om-aadcca7bc7ad318400097b84849dd64c4744306cd9b4f152fba34f2e84116965.svg)}.flag-icon-om.flag-icon-squared{background-image:url(/assets/flags/1x1/om-705e2bd2b2fc7d13c152aa06bfb9e6ee4ad8b299f8c06ca16adad0b18b2b18ed.svg)}.flag-icon-pa{background-image:url(/assets/flags/4x3/pa-027e679bd65dcaa2c53145a14669c1e674a467a889ef702cbe2a260f7ca8ad38.svg)}.flag-icon-pa.flag-icon-squared{background-image:url(/assets/flags/1x1/pa-edeb4faeadaa286de7fdc667e25d38ad0cdbccaec5023182fed6a3c74e8b09eb.svg)}.flag-icon-pe{background-image:url(/assets/flags/4x3/pe-7ec59842737c90d6ff543f1831fd69b51e1e7ee1b068c3ac6259cbf2c214d611.svg)}.flag-icon-pe.flag-icon-squared{background-image:url(/assets/flags/1x1/pe-97d1b8ed1d4ed5e5f0348a731ca4a3a4b9abc7d440447dc87a521f229f375ed3.svg)}.flag-icon-pf{background-image:url(/assets/flags/4x3/pf-27955c73c5be4043c5b7ddf64c8f46d11c6648e3b1fc0efe028b8afea21a40e1.svg)}.flag-icon-pf.flag-icon-squared{background-image:url(/assets/flags/1x1/pf-83e3e1d36fba45e015c62f938e6d182029edc05ebfdc50bcb33860f36f96d73a.svg)}.flag-icon-pg{background-image:url(/assets/flags/4x3/pg-c2fdd2551f9044c461eccfae2d7ba0a347a99143f6002b71a429942af0217897.svg)}.flag-icon-pg.flag-icon-squared{background-image:url(/assets/flags/1x1/pg-cf60257fa85f9270b1e9980e703435186110167f76c153bc460c10ee8b2d4b09.svg)}.flag-icon-ph{background-image:url(/assets/flags/4x3/ph-bf3394850a6cec6a535420eabce263e7f8193413e4af1fb317c76da025388c1b.svg)}.flag-icon-ph.flag-icon-squared{background-image:url(/assets/flags/1x1/ph-006c3218effe4269252cb9638de82ea339eb2894951705c630533ceffa842169.svg)}.flag-icon-pk{background-image:url(/assets/flags/4x3/pk-b64f6a32e5bb598f57cfe49c4899c2021f2d153653f3d92101e6e11b2158e500.svg)}.flag-icon-pk.flag-icon-squared{background-image:url(/assets/flags/1x1/pk-d2d58def913c9081c5eeeda5f0b6895068ec13c955694e359531e23422145e60.svg)}.flag-icon-pl{background-image:url(/assets/flags/4x3/pl-f55a710991a94c2e6c2f9f1a7a4a36ebb84b24b7c9d9df4e1ffe86d61321fa6f.svg)}.flag-icon-pl.flag-icon-squared{background-image:url(/assets/flags/1x1/pl-fafb539259385f2b99df910cff085710a9b4d9706b74e4e0f8a6ef627615c4e7.svg)}.flag-icon-pm{background-image:url(/assets/flags/4x3/pm-8f6338d2ae3e0e42adc9754720ca21ad4979095cf6d7467a8db5a5a1c3e0b2a5.svg)}.flag-icon-pm.flag-icon-squared{background-image:url(/assets/flags/1x1/pm-63029c6198dc42c404ec39807a99528b1d198eeeea6f9a1e309548242480140b.svg)}.flag-icon-pn{background-image:url(/assets/flags/4x3/pn-4006c11ca83011c0dd60a13ac30b27da0578b9f1368bd8c6de5aab423f6662d8.svg)}.flag-icon-pn.flag-icon-squared{background-image:url(/assets/flags/1x1/pn-6c433f7f9cb79c6d5ed7bbeade8a495e3b26ca2604f4fd3995096109684ac5dd.svg)}.flag-icon-pr{background-image:url(/assets/flags/4x3/pr-6287e1515fa80e2d05133ed93f14ca03a1be6909a9ef6c736fd60f9c9fe73132.svg)}.flag-icon-pr.flag-icon-squared{background-image:url(/assets/flags/1x1/pr-526985b3a6d2d6de577ed0ed92d0b49ce854667e3ff630304813fd5af15527cd.svg)}.flag-icon-ps{background-image:url(/assets/flags/4x3/ps-31f50e1fcb44b9aa6e9ce4473c3085f744e70ea0fa1fd8d85787f4e7b0c4a69b.svg)}.flag-icon-ps.flag-icon-squared{background-image:url(/assets/flags/1x1/ps-c43918bc71bef71b24dd46e8cacc53e0df53e02dcce6199d06d11a4637f08a04.svg)}.flag-icon-pt{background-image:url(/assets/flags/4x3/pt-9aab20caed714ee47fc408f017037aea94a649b3ba4d87e2da37870ee31e4f92.svg)}.flag-icon-pt.flag-icon-squared{background-image:url(/assets/flags/1x1/pt-a309869e5018c9690a65ebdf8a2d69d61f82772068a7920f9680ed0581ae5966.svg)}.flag-icon-pw{background-image:url(/assets/flags/4x3/pw-9262037d114d0f61571c74f9a5455809709b43e6565443ae2667981eecb5f12a.svg)}.flag-icon-pw.flag-icon-squared{background-image:url(/assets/flags/1x1/pw-a6f42019653ae26d43c6e9b7bef83fc98cff8ec5e8d0c50ad7cb0a17d5e565a6.svg)}.flag-icon-py{background-image:url(/assets/flags/4x3/py-5bc9e9f0dee94ae3d9bd80ae6fb1aac297dc81a1c592d0a73bc3383bce73af74.svg)}.flag-icon-py.flag-icon-squared{background-image:url(/assets/flags/1x1/py-182eff300f4507fd9399fb6310d1cd3b45adadd7924ad2814003c7111ec5c0de.svg)}.flag-icon-qa{background-image:url(/assets/flags/4x3/qa-32c93970f8e521850eddfaf2a89dfff987f0ae3b0b73a253c301b61cf547cf9e.svg)}.flag-icon-qa.flag-icon-squared{background-image:url(/assets/flags/1x1/qa-182e4d8ace2607d0c02d3c29d65eb084af71092357006bc41cd601981ec3b81c.svg)}.flag-icon-re{background-image:url(/assets/flags/4x3/re-8b2ea1f2727c266a2b80cb12a9b7195f6b656f521552b67893b6761a07f9bc92.svg)}.flag-icon-re.flag-icon-squared{background-image:url(/assets/flags/1x1/re-07eb7d855022bc678b47b0ce5fd05da5044d6dde86ad3697d4ae55c68ff447c1.svg)}.flag-icon-ro{background-image:url(/assets/flags/4x3/ro-4ab797571e1d9eb326486f75654a4590fd33f20444f85b77ba0997eb6138c21f.svg)}.flag-icon-ro.flag-icon-squared{background-image:url(/assets/flags/1x1/ro-ddfcbaec04d11bf7f95abebd1d3a42b2862b1af8fca9b02764a6ed0e409a1d75.svg)}.flag-icon-rs{background-image:url(/assets/flags/4x3/rs-dd8a52473ea40e23b393b5f4a30d1edd91865aab167f0c1835ae84b15dcce585.svg)}.flag-icon-rs.flag-icon-squared{background-image:url(/assets/flags/1x1/rs-42bf40209c92e4e7169daf29fbcb7253b2804eee7a463051529327f38851f865.svg)}.flag-icon-ru{background-image:url(/assets/flags/4x3/ru-13f4525a4caad6e31afa523d2bc4a0c1e6377c0bef1bfd872682130d3f199d1d.svg)}.flag-icon-ru.flag-icon-squared{background-image:url(/assets/flags/1x1/ru-b9792a963faf667447e0456dba5be80a3b37c197a4284d1539a3433721d9e2fe.svg)}.flag-icon-rw{background-image:url(/assets/flags/4x3/rw-bc38bcd6e19d2941839b253af6e863b13338cde1174874f9674471026c15e422.svg)}.flag-icon-rw.flag-icon-squared{background-image:url(/assets/flags/1x1/rw-456698123775b83d2b0fa1b9fe073f9ccdba0b6bf39a703b8979dcce158eb32c.svg)}.flag-icon-sa{background-image:url(/assets/flags/4x3/sa-2b2fd6abb48415d5407c576c24a24fbd80af5877ef06cf2d026452f6c67f5f4d.svg)}.flag-icon-sa.flag-icon-squared{background-image:url(/assets/flags/1x1/sa-d9ebc73e7957f86604164dd5054fb32601ad14d7dfd4bfe73da5bdd10bb2f8ae.svg)}.flag-icon-sb{background-image:url(/assets/flags/4x3/sb-37761927039d0a37ba0995c59fd31bbe36c8a0ca161e5b72b8131e3659f8dddf.svg)}.flag-icon-sb.flag-icon-squared{background-image:url(/assets/flags/1x1/sb-bedbf8464cd82f391bfe6178c63055b650d0cf3aee60c37fa79a586f95783b79.svg)}.flag-icon-sc{background-image:url(/assets/flags/4x3/sc-f6a2f8f37be93f07600b491b52cb58d80d74b92d8ace0af313f4ce081b0d1345.svg)}.flag-icon-sc.flag-icon-squared{background-image:url(/assets/flags/1x1/sc-5dcd01b98c34460c9624280fb5047811fbae7d976620cd0a70ad4263a9085b60.svg)}.flag-icon-sd{background-image:url(/assets/flags/4x3/sd-cc9cf97e8a37622b9e1bad28811d46c4471595afa448dc055e0e3aae7687fe4b.svg)}.flag-icon-sd.flag-icon-squared{background-image:url(/assets/flags/1x1/sd-1f5d13f9780085acbaad13d959b1918c796ba7b0450954b15d145e87cebe045c.svg)}.flag-icon-se{background-image:url(/assets/flags/4x3/se-84b06bcd5bd90ea8dd6d1c3c8d2799a843c47b0256ce098aef75414964618286.svg)}.flag-icon-se.flag-icon-squared{background-image:url(/assets/flags/1x1/se-39f128686652cf914f8601110fcc9ac879bca204407013b93aff4ca4fb2ed9bc.svg)}.flag-icon-sg{background-image:url(/assets/flags/4x3/sg-a82acd90077e76318ddb0be96999d9695b9a9f4627e8a0f341d3987a62747dcc.svg)}.flag-icon-sg.flag-icon-squared{background-image:url(/assets/flags/1x1/sg-c22e093634568aae249bf35f9ddcaa6796b5f27d76c39ff5336abf7f1b8a47d4.svg)}.flag-icon-sh{background-image:url(/assets/flags/4x3/sh-57470d9a75955f0fac605a94e853bab524c7461a4c025e809fb09db762ebe46f.svg)}.flag-icon-sh.flag-icon-squared{background-image:url(/assets/flags/1x1/sh-8d06a0fff61e51eb65357d138e00736545835b8649aa2694152f4cdc9f941c16.svg)}.flag-icon-si{background-image:url(/assets/flags/4x3/si-289d6417f154323e7922df09ffc0f49ded31548c7ee8020c39cb85724ffbcea8.svg)}.flag-icon-si.flag-icon-squared{background-image:url(/assets/flags/1x1/si-ca40a5f4f38119d6f52ffd3ddb36af95951a2aa1fadcd897f5bc1641bb2e0051.svg)}.flag-icon-sj{background-image:url(/assets/flags/4x3/sj-67d4cdd268d0c0cd93fc561b506cb5646cb508385c93ed350d11f94aa1c83833.svg)}.flag-icon-sj.flag-icon-squared{background-image:url(/assets/flags/1x1/sj-f7c489607033138039612d6abe7f4b0b4b6dada5cac75d78204f404a0d292b1c.svg)}.flag-icon-sk{background-image:url(/assets/flags/4x3/sk-a0bdbb7f5d6998ffe9fcbc80bbdf0e6cff3629740d2ce1b8d61025e0a8b322b5.svg)}.flag-icon-sk.flag-icon-squared{background-image:url(/assets/flags/1x1/sk-a82a813b2d81af9be1aa775f22b2c2457d11e870e072d7e23957a11d0878faed.svg)}.flag-icon-sl{background-image:url(/assets/flags/4x3/sl-be265bed24cfe0b25778201f251e52e4e721e3d319795875913805d1aea84ebb.svg)}.flag-icon-sl.flag-icon-squared{background-image:url(/assets/flags/1x1/sl-cb8bccbaa21957f006ed4ae0144da81c999e93bd8014023b16b500fdcdc397d3.svg)}.flag-icon-sm{background-image:url(/assets/flags/4x3/sm-d7818df3f8f2d5dbed27dc5a0a80b1e41cdcd6130eeff221da58f0321e925f27.svg)}.flag-icon-sm.flag-icon-squared{background-image:url(/assets/flags/1x1/sm-6f87660dcac925bbdb036c79a0e20d3b208215d327be4c4764ae1069d6464efd.svg)}.flag-icon-sn{background-image:url(/assets/flags/4x3/sn-b131b17a374bcfbd00d442d282fa52f0e4e0e448cda1cdfaac25a95ff56443c0.svg)}.flag-icon-sn.flag-icon-squared{background-image:url(/assets/flags/1x1/sn-d180d3ce9846966dee6a3d9433ede7d24801dc4311636aabd470ec5b8765d772.svg)}.flag-icon-so{background-image:url(/assets/flags/4x3/so-3b5b77b371299478144a94b60c99524fb6b99bfedb3dcc976ab70185e07f399e.svg)}.flag-icon-so.flag-icon-squared{background-image:url(/assets/flags/1x1/so-50aa941f2d2954285ef9e5ac260cdd264a73cf2e4b0c627677f04141fff2afd3.svg)}.flag-icon-sr{background-image:url(/assets/flags/4x3/sr-94d0f0aefcbdea8d7ba35648eda5037e99bf4126723ce36416582ea43b08d3e2.svg)}.flag-icon-sr.flag-icon-squared{background-image:url(/assets/flags/1x1/sr-3944d683068d437471725d22fd71ccbe6a63ae307ff9775690417d3bf262cf82.svg)}.flag-icon-ss{background-image:url(/assets/flags/4x3/ss-f391e5002cbce83f97f7d1a11c284fa2e36a7d6dc734757d733656801ab17d0a.svg)}.flag-icon-ss.flag-icon-squared{background-image:url(/assets/flags/1x1/ss-853bd9f713d2f6b1fe540a82e8bf4754912da21575b3fe756b8741767f318f7a.svg)}.flag-icon-st{background-image:url(/assets/flags/4x3/st-b52bb48a2c0800f5cb4b07bdd93c3908f77bcb6800be883ebf943bbd3d99d42c.svg)}.flag-icon-st.flag-icon-squared{background-image:url(/assets/flags/1x1/st-d8b5b1c8b9fe947086a4d277d2ac5d6b9cff188dfd37bda66c8bf5e02c5facc8.svg)}.flag-icon-sv{background-image:url(/assets/flags/4x3/sv-6d02d63c7f04c9388e98f892cc43d8daa2110fc84242758d5627fcd247bfd09b.svg)}.flag-icon-sv.flag-icon-squared{background-image:url(/assets/flags/1x1/sv-fb4c8d7eb98396a93c5b9c37195d70e809e0d71d8b8f9316e842121f95bb82ea.svg)}.flag-icon-sx{background-image:url(/assets/flags/4x3/sx-fb6a7b1cbc5b29eeeb39a5aec64ef7aad432c37bbe848d29955a3786b9763224.svg)}.flag-icon-sx.flag-icon-squared{background-image:url(/assets/flags/1x1/sx-a37b124212f8530b921aef7657cfb35c2895a731c7a06f333faee4c93f32806a.svg)}.flag-icon-sy{background-image:url(/assets/flags/4x3/sy-e35f8d88c864ed4f38edb2f9f96d5bd69f6df078b50515b8c5467bf6b1689f50.svg)}.flag-icon-sy.flag-icon-squared{background-image:url(/assets/flags/1x1/sy-5d537bd5b42b58f6e8a7e33fbe5942a16126abb639edf9cb58b88938c57ebaa9.svg)}.flag-icon-sz{background-image:url(/assets/flags/4x3/sz-c65ae592e943217787848364bdb4c57335869f4626ce705adabdc2620669c1c6.svg)}.flag-icon-sz.flag-icon-squared{background-image:url(/assets/flags/1x1/sz-dd3d1c65bdf09317553f205e588e3dc7336acec1cb9315bfbe0f5bd8ca5bba3f.svg)}.flag-icon-tc{background-image:url(/assets/flags/4x3/tc-594b6cc87040836c6d6777afb5833d565d3e5e75f404350a51443ec4588a1ccb.svg)}.flag-icon-tc.flag-icon-squared{background-image:url(/assets/flags/1x1/tc-34a37006252eea340488220585c31d047b57e3e7934c77180d930972aaceadc3.svg)}.flag-icon-td{background-image:url(/assets/flags/4x3/td-b67a1978e3badb895ff640c80bb6c0e33eac354220c08cf3fc93d62bf5d685a3.svg)}.flag-icon-td.flag-icon-squared{background-image:url(/assets/flags/1x1/td-556b3a7991c17010cb7e1ff23c4edcc2dcdb8c406a128d407fd165ea8a19d311.svg)}.flag-icon-tf{background-image:url(/assets/flags/4x3/tf-35cd83351521f3022a43e01f0c40f34663a66ac1e92045979f31d3fd65c16d02.svg)}.flag-icon-tf.flag-icon-squared{background-image:url(/assets/flags/1x1/tf-485e71f61ff577735dbc4ba1025515c22a83c48ee7f3a2ed49804766c35f6ea5.svg)}.flag-icon-tg{background-image:url(/assets/flags/4x3/tg-24b25f4c2213fe35e5f5586d7ab23abf0c25ad2049708cd52ba72e1ec7b754ff.svg)}.flag-icon-tg.flag-icon-squared{background-image:url(/assets/flags/1x1/tg-05f3d98392a5ec3e4aecf8f629d3d03f05ac55abb7d9d84187d599acfe271374.svg)}.flag-icon-th{background-image:url(/assets/flags/4x3/th-cc936bacd84dddd15454ef06bc64e357f83854af34692fc37363272d61f637d4.svg)}.flag-icon-th.flag-icon-squared{background-image:url(/assets/flags/1x1/th-de82cbd770db2be53a8e3d59d86e2b748a5d3f96eb8584f7b9364cefbd06a172.svg)}.flag-icon-tj{background-image:url(/assets/flags/4x3/tj-b90bf3e2dd63265d55b67962b160df65f021c42b6ea304e2943c10b9e2a8749d.svg)}.flag-icon-tj.flag-icon-squared{background-image:url(/assets/flags/1x1/tj-5f6571e74b1f8720f9ecc2d3aa2098ca45d2e7ad6602b2a57c206384719b9f36.svg)}.flag-icon-tk{background-image:url(/assets/flags/4x3/tk-602520b29b909c96baea17a38eb654d6c6fbc7088f46a0cb8d8fe34ff92e3cb8.svg)}.flag-icon-tk.flag-icon-squared{background-image:url(/assets/flags/1x1/tk-fe1dc8aaa0643a45a74ecec8aec09f0fe2207d104bb3c28c0b84405f1275aeba.svg)}.flag-icon-tl{background-image:url(/assets/flags/4x3/tl-ebdb862aa5ae5de1a72242571deaa70bfb222f488a93b70e304f2075b474d54b.svg)}.flag-icon-tl.flag-icon-squared{background-image:url(/assets/flags/1x1/tl-485f02183bdb192ba3ce6e5f076e184112739f883ae0a8fde33c454377b848d6.svg)}.flag-icon-tm{background-image:url(/assets/flags/4x3/tm-5ddb4128bf0becd7c60413d5418027f5f01ca4bc72561d54b94febfee7a5a24b.svg)}.flag-icon-tm.flag-icon-squared{background-image:url(/assets/flags/1x1/tm-3521ad569a4095aa8d4166d5d9094fccfdbb3ea411207ad685b6dd5814ef3392.svg)}.flag-icon-tn{background-image:url(/assets/flags/4x3/tn-ca27eb50d88b11d20b5b09e2bbecb7753267222489920c526608e5d2acd22d79.svg)}.flag-icon-tn.flag-icon-squared{background-image:url(/assets/flags/1x1/tn-222c6cd4742c558f48ebcacb47ea334057642fffa3456a1c75e0fad9e728d09b.svg)}.flag-icon-to{background-image:url(/assets/flags/4x3/to-c9c509fc24f591fbe52bbf732c44291384c787796e1fc9c703a973587c3f8ad1.svg)}.flag-icon-to.flag-icon-squared{background-image:url(/assets/flags/1x1/to-cf26dfb44b56b915b2f11896355cb778b938ed54423311d69d7cda9626887dda.svg)}.flag-icon-tr{background-image:url(/assets/flags/4x3/tr-c40f697070cf8d8358785b9203d1c8f438976e3cd644a87d9ee16fa9960deaa4.svg)}.flag-icon-tr.flag-icon-squared{background-image:url(/assets/flags/1x1/tr-627dcf91a1e5153c045e33a3459b5d56002530fddd3fc53927f4d0fb7ea004a5.svg)}.flag-icon-tt{background-image:url(/assets/flags/4x3/tt-04786ffedbde2c96a30ad1cbf4db000848f14bd700324651fc88364e5f3c2fd0.svg)}.flag-icon-tt.flag-icon-squared{background-image:url(/assets/flags/1x1/tt-6a3c73bfa7782366d95e673d847ef8f84c0475b364d359def1efd264297bac30.svg)}.flag-icon-tv{background-image:url(/assets/flags/4x3/tv-20b56e7c0a2fbaa2a0b7b1bd87afc6368440f175fb3a0589de5e34e99d163fd7.svg)}.flag-icon-tv.flag-icon-squared{background-image:url(/assets/flags/1x1/tv-8bce1d7bde2e20dcc473ed3a33c66e4bedcf1acf2d2fff6d54353a480b8cafbc.svg)}.flag-icon-tw{background-image:url(/assets/flags/4x3/tw-36070ac0a15ab1f4811478da62e7678756a9aa266b141ed0549aba1c0e04333a.svg)}.flag-icon-tw.flag-icon-squared{background-image:url(/assets/flags/1x1/tw-fd7a0db2f3808842ca99176f097356fe9e6f3c120d6aa9e8c4a9c2dd4c3943ba.svg)}.flag-icon-tz{background-image:url(/assets/flags/4x3/tz-51ad7d69f059075df61b9226468af0d78642af4ad34a7540f64c5bea82e803d7.svg)}.flag-icon-tz.flag-icon-squared{background-image:url(/assets/flags/1x1/tz-0703f29a7ae02a9a1753cb1726dd2934d75ed3a12e8d63faa9fa866e1fe61440.svg)}.flag-icon-ua{background-image:url(/assets/flags/4x3/ua-7f7db03c3b492aaacd11b0abac70d543a7c0ec5265a36d529bbb80a7c432d81a.svg)}.flag-icon-ua.flag-icon-squared{background-image:url(/assets/flags/1x1/ua-25192fa80f120edb1dd1c4757fd7b79ef38f5e1729238f4135003e6a1501bf28.svg)}.flag-icon-ug{background-image:url(/assets/flags/4x3/ug-7635df53eafdf411be0809df835bfbcffd61badd6c4df3db0909c8b3188015a0.svg)}.flag-icon-ug.flag-icon-squared{background-image:url(/assets/flags/1x1/ug-537f34f64e723fbe7cb7902ea0e61303f1ada79214197efc39ebe2c52ce24186.svg)}.flag-icon-um{background-image:url(/assets/flags/4x3/um-a0ae80e34bbf94677dd6052ea87cc0090aba747dab5440e5ca6e231f7f07c96d.svg)}.flag-icon-um.flag-icon-squared{background-image:url(/assets/flags/1x1/um-3f1bc09babe7fdcf32518bb49d1aac3a66d0204f955eacca291c58d4f4ef895a.svg)}.flag-icon-us{background-image:url(/assets/flags/4x3/us-aefd8f7e57d11f7b0416d01d9c665ab3848b10af849f35a4d772d58d24d83329.svg)}.flag-icon-us.flag-icon-squared{background-image:url(/assets/flags/1x1/us-87af45be9346e8c820312976abe332ee11f8931e29fa361328d28660a711b1e2.svg)}.flag-icon-uy{background-image:url(/assets/flags/4x3/uy-9f636c8283abf56cc930746fd427c1d1644dcf8736c537629df13f760da96ebc.svg)}.flag-icon-uy.flag-icon-squared{background-image:url(/assets/flags/1x1/uy-e216b762a93ec55bf9b4ae3d35b7febe0b192a12246fd66c45139ce77fb2095e.svg)}.flag-icon-uz{background-image:url(/assets/flags/4x3/uz-697d596705372323beddccb3626d1ce405b36249315c6b006ff1529e24909ceb.svg)}.flag-icon-uz.flag-icon-squared{background-image:url(/assets/flags/1x1/uz-aa34cbe4f6f0e4b5d890975578d28cc9b1e88ebd503d3bdca693748eb29b3353.svg)}.flag-icon-va{background-image:url(/assets/flags/4x3/va-d24d3c5bee108c396997c3d5b2bd2273433752d8c222eb531650e51551a4afd0.svg)}.flag-icon-va.flag-icon-squared{background-image:url(/assets/flags/1x1/va-01160c1bffda12f0b94554ba0c50162a88da807943617334bd4c57a030985e95.svg)}.flag-icon-vc{background-image:url(/assets/flags/4x3/vc-ddf979bee2889414e5a05ac55f39a9c93f34e0aff0d35f007605049a2d8b5afb.svg)}.flag-icon-vc.flag-icon-squared{background-image:url(/assets/flags/1x1/vc-ac776e16dec19ff2e2d9238f541dae5d977282b451a83ab3d4122efed2392be9.svg)}.flag-icon-ve{background-image:url(/assets/flags/4x3/ve-e23abd006cc75a8c4f9ec1cb122b46f9b52e26c5606532d2c868277d4ccd523b.svg)}.flag-icon-ve.flag-icon-squared{background-image:url(/assets/flags/1x1/ve-1480713f28719e0a83da2c5f1333407dbfa5bcc0de8c9ba718fcf47273ee95ef.svg)}.flag-icon-vg{background-image:url(/assets/flags/4x3/vg-7f8f24a4d6995e4dd39e3d9098dad5e14649821fa12ffc200edf0a586285ee15.svg)}.flag-icon-vg.flag-icon-squared{background-image:url(/assets/flags/1x1/vg-b464b6a78e46c29df9e4bdadc2646208f11c59168706456075f970552a24efa8.svg)}.flag-icon-vi{background-image:url(/assets/flags/4x3/vi-58311325a293b046044976d899f288ce0fbe9bfd705a23947a9b38d7991983d7.svg)}.flag-icon-vi.flag-icon-squared{background-image:url(/assets/flags/1x1/vi-1c132d2cff66cdbdb7b6acf504bb0cd9d7579595d80c3fa6604ff24ca7a0184d.svg)}.flag-icon-vn{background-image:url(/assets/flags/4x3/vn-a918d3c9cdc368b1d2ff9614d58cbcd1d43b725889b0ba18f5d4e693071e389a.svg)}.flag-icon-vn.flag-icon-squared{background-image:url(/assets/flags/1x1/vn-895e428ae3d98c99dbb02088cf8ef040bfb031df6f16c3c8fc3678505d869791.svg)}.flag-icon-vu{background-image:url(/assets/flags/4x3/vu-2c286c778a7bed03cb603ab24b68dc91868f4f054cf4f851bdd17aa16731571c.svg)}.flag-icon-vu.flag-icon-squared{background-image:url(/assets/flags/1x1/vu-51ef23121e2641ebeeac50d31c4e52b7d00d3ab1bc9fc0ad95ea86fd3631975a.svg)}.flag-icon-wf{background-image:url(/assets/flags/4x3/wf-f7e9ac5edac196ac32d7bafa04b5c0d924b89e9d7e4f3535a6a26c6c1523639c.svg)}.flag-icon-wf.flag-icon-squared{background-image:url(/assets/flags/1x1/wf-95a920a79aa32d92f8a362321aae4230e17025ac04d976593f4423d0c37c1aee.svg)}.flag-icon-ws{background-image:url(/assets/flags/4x3/ws-efc6505a802a3fa2018bc102fc2e11db8c738464c619381b6edc32d0a89341a3.svg)}.flag-icon-ws.flag-icon-squared{background-image:url(/assets/flags/1x1/ws-e3afb81c037c814620027bf61ac5e266683cab7ba5796ecf10b64c110cfcb932.svg)}.flag-icon-ye{background-image:url(/assets/flags/4x3/ye-fd88856e70d66b01b4f0f608936a61cf3b1d9dad40a2932fc5da4d01f72a447b.svg)}.flag-icon-ye.flag-icon-squared{background-image:url(/assets/flags/1x1/ye-0c0e32330871e6d83af54affb7dadbbe736f9799068508211fbae54db9bbdcc6.svg)}.flag-icon-yt{background-image:url(/assets/flags/4x3/yt-2eef17b543424082d9f9b42a67e84c20b52e7f7eae8c4326d60711158da51d5b.svg)}.flag-icon-yt.flag-icon-squared{background-image:url(/assets/flags/1x1/yt-911da8075337fd8f75ecc8a338c294cb771c6b9a08576f96c9de1437888cd2a7.svg)}.flag-icon-za{background-image:url(/assets/flags/4x3/za-45991a2aee307198510e56bf92523070aac4241cafe6c3ddb8f89b20a61d6371.svg)}.flag-icon-za.flag-icon-squared{background-image:url(/assets/flags/1x1/za-bc09a89b29311ea7e582ef60bf4e18aff7c29de6fbefe309463ca765723a0ce8.svg)}.flag-icon-zm{background-image:url(/assets/flags/4x3/zm-07c0f30d86e66d0cad9d66cd9c9384d9cce1844f159d245deff6717101fe49c2.svg)}.flag-icon-zm.flag-icon-squared{background-image:url(/assets/flags/1x1/zm-fc5bce3834c71fe36617ea5f57f0bd1dcf3880a7c6aa515dcf92ae067f796241.svg)}.flag-icon-zw{background-image:url(/assets/flags/4x3/zw-5217c74f14d9fdda244b69c5982bbabee052ac0f1cc0704926e8b1e621e50f9a.svg)}.flag-icon-zw.flag-icon-squared{background-image:url(/assets/flags/1x1/zw-a33b191c631709b9e1d85e06f5b15535fb544d4668c8bef865ede2a0b6a88ed9.svg)}.flag-icon-es-ct{background-image:url(/assets/flags/4x3/es-ct-bcbb454a50c9a647efd43dcf041445f15e8dd70654bde530bf62401d4fb7738d.svg)}.flag-icon-es-ct.flag-icon-squared{background-image:url(/assets/flags/1x1/es-ct-7f13eb2b2f5c11dccd7043286bed7540d4dad4b1a8367b0aca1b8405a351b2ef.svg)}.flag-icon-eu{background-image:url(/assets/flags/4x3/eu-5f129db64306353251b78f998d531d2f1019404cfa890ae63ed70dc316c7f240.svg)}.flag-icon-eu.flag-icon-squared{background-image:url(/assets/flags/1x1/eu-ec59ac8daf2a63ea8e299ad63a208445d68a96affe6a10a7328acb6799d44127.svg)}.flag-icon-gb-eng{background-image:url(/assets/flags/4x3/gb-eng-1895f4e35ae299f5d869da2462ffcf98df4b08dcddc531c8f175e49720001a14.svg)}.flag-icon-gb-eng.flag-icon-squared{background-image:url(/assets/flags/1x1/gb-eng-d11afb87f40f35acda435a886ea044bd5e0b6f363ba0c7319f1d0181551fecf3.svg)}.flag-icon-gb-nir{background-image:url(/assets/flags/4x3/gb-nir-b280f09c787f495c1074376cd67537b40216f672917e7d204bb12b8e7c72afaf.svg)}.flag-icon-gb-nir.flag-icon-squared{background-image:url(/assets/flags/1x1/gb-nir-2e516e72e0e8e244ef430e6608322f8c4fb276807ab033279b2a6570dd68fd41.svg)}.flag-icon-gb-sct{background-image:url(/assets/flags/4x3/gb-sct-1b9e407802ae901cf8da740c382ec2b19821837d76271a73346e0c63c2244506.svg)}.flag-icon-gb-sct.flag-icon-squared{background-image:url(/assets/flags/1x1/gb-sct-d01e8a06a340e30ce52e8a3aba7ca6207afb96fdb238a815cc6cb92df8fa5df3.svg)}.flag-icon-gb-wls{background-image:url(/assets/flags/4x3/gb-wls-5232b3e376a19866cddec8225cba242783b2a48063811957f1ce5a2c347c5bc9.svg)}.flag-icon-gb-wls.flag-icon-squared{background-image:url(/assets/flags/1x1/gb-wls-126615bc3597fda1ca4ee931ef24f6c2cf2547998c06db9c1ded69fe66c479e9.svg)}.flag-icon-un{background-image:url(/assets/flags/4x3/un-31dece22ae18c3e01e86648ef3ef45f2f5b3d9d28a1e2bbbcdb1d87c37af55af.svg)}.flag-icon-un.flag-icon-squared{background-image:url(/assets/flags/1x1/un-455b5f3173ca9ac64f2135fac4ead7217d7fbe07551d0d2cc60216f83208f798.svg)}.leaflet-pane,.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile-container,.leaflet-pane>svg,.leaflet-pane>canvas,.leaflet-zoom-box,.leaflet-image-layer,.leaflet-layer{position:absolute;left:0;top:0}.leaflet-container{overflow:hidden}.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.leaflet-safari .leaflet-tile{image-rendering:-webkit-optimize-contrast}.leaflet-safari .leaflet-tile-container{width:1600px;height:1600px;-webkit-transform-origin:0 0}.leaflet-marker-icon,.leaflet-marker-shadow{display:block}.leaflet-container .leaflet-overlay-pane svg,.leaflet-container .leaflet-marker-pane img,.leaflet-container .leaflet-shadow-pane img,.leaflet-container .leaflet-tile-pane img,.leaflet-container img.leaflet-image-layer,.leaflet-container .leaflet-tile{max-width:none !important;max-height:none !important}.leaflet-container.leaflet-touch-zoom{-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y}.leaflet-container.leaflet-touch-drag{-ms-touch-action:pinch-zoom;touch-action:none;touch-action:pinch-zoom}.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom{-ms-touch-action:none;touch-action:none}.leaflet-container{-webkit-tap-highlight-color:transparent}.leaflet-container a{-webkit-tap-highlight-color:rgba(51,181,229,0.4)}.leaflet-tile{filter:inherit;visibility:hidden}.leaflet-tile-loaded{visibility:inherit}.leaflet-zoom-box{width:0;height:0;-moz-box-sizing:border-box;box-sizing:border-box;z-index:800}.leaflet-overlay-pane svg{-moz-user-select:none}.leaflet-pane{z-index:400}.leaflet-tile-pane{z-index:200}.leaflet-overlay-pane{z-index:400}.leaflet-shadow-pane{z-index:500}.leaflet-marker-pane{z-index:600}.leaflet-tooltip-pane{z-index:650}.leaflet-popup-pane{z-index:700}.leaflet-map-pane canvas{z-index:100}.leaflet-map-pane svg{z-index:200}.leaflet-vml-shape{width:1px;height:1px}.lvml{behavior:url(#default#VML);display:inline-block;position:absolute}.leaflet-control{position:relative;z-index:800;pointer-events:visiblePainted;pointer-events:auto}.leaflet-top,.leaflet-bottom{position:absolute;z-index:1000;pointer-events:none}.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}.leaflet-control{float:left;clear:both}.leaflet-right .leaflet-control{float:right}.leaflet-top .leaflet-control{margin-top:10px}.leaflet-bottom .leaflet-control{margin-bottom:10px}.leaflet-left .leaflet-control{margin-left:10px}.leaflet-right .leaflet-control{margin-right:10px}.leaflet-fade-anim .leaflet-tile{will-change:opacity}.leaflet-fade-anim .leaflet-popup{opacity:0;-webkit-transition:opacity 0.2s linear;-moz-transition:opacity 0.2s linear;transition:opacity 0.2s linear}.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}.leaflet-zoom-animated{-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0}.leaflet-zoom-anim .leaflet-zoom-animated{will-change:transform}.leaflet-zoom-anim .leaflet-zoom-animated{-webkit-transition:-webkit-transform 0.25s cubic-bezier(0, 0, 0.25, 1);-moz-transition:-moz-transform 0.25s cubic-bezier(0, 0, 0.25, 1);transition:transform 0.25s cubic-bezier(0, 0, 0.25, 1)}.leaflet-zoom-anim .leaflet-tile,.leaflet-pan-anim .leaflet-tile{-webkit-transition:none;-moz-transition:none;transition:none}.leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}.leaflet-interactive{cursor:pointer}.leaflet-grab{cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}.leaflet-crosshair,.leaflet-crosshair .leaflet-interactive{cursor:crosshair}.leaflet-popup-pane,.leaflet-control{cursor:auto}.leaflet-dragging .leaflet-grab,.leaflet-dragging .leaflet-grab .leaflet-interactive,.leaflet-dragging .leaflet-marker-draggable{cursor:move;cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-image-layer,.leaflet-pane>svg path,.leaflet-tile-container{pointer-events:none}.leaflet-marker-icon.leaflet-interactive,.leaflet-image-layer.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive{pointer-events:visiblePainted;pointer-events:auto}.leaflet-container{background:#ddd;outline:0}.leaflet-container a{color:#0078A8}.leaflet-container a.leaflet-active{outline:2px solid orange}.leaflet-zoom-box{border:2px dotted #38f;background:rgba(255,255,255,0.5)}.leaflet-container{font:12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif}.leaflet-bar{box-shadow:0 1px 5px rgba(0,0,0,0.65);border-radius:4px}.leaflet-bar a,.leaflet-bar a:hover{background-color:#fff;border-bottom:1px solid #ccc;width:26px;height:26px;line-height:26px;display:block;text-align:center;text-decoration:none;color:black}.leaflet-bar a,.leaflet-control-layers-toggle{background-position:50% 50%;background-repeat:no-repeat;display:block}.leaflet-bar a:hover{background-color:#f4f4f4}.leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom:none}.leaflet-bar a.leaflet-disabled{cursor:default;background-color:#f4f4f4;color:#bbb}.leaflet-touch .leaflet-bar a{width:30px;height:30px;line-height:30px}.leaflet-touch .leaflet-bar a:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.leaflet-touch .leaflet-bar a:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.leaflet-control-zoom-in,.leaflet-control-zoom-out{font:bold 18px 'Lucida Console', Monaco, monospace;text-indent:1px}.leaflet-touch .leaflet-control-zoom-in,.leaflet-touch .leaflet-control-zoom-out{font-size:22px}.leaflet-control-layers{box-shadow:0 1px 5px rgba(0,0,0,0.4);background:#fff;border-radius:5px}.leaflet-control-layers-toggle{background-image:url(/assets/leaflet/dist/images/layers-1dbbe9d028e292f36fcba8f8b3a28d5e8932754fc2215b9ac69e4cdecf5107c6.png);width:36px;height:36px}.leaflet-retina .leaflet-control-layers-toggle{background-image:url(/assets/leaflet/dist/images/layers-2x-066daca850d8ffbef007af00b06eac0015728dee279c51f3cb6c716df7c42edf.png);background-size:26px 26px}.leaflet-touch .leaflet-control-layers-toggle{width:44px;height:44px}.leaflet-control-layers .leaflet-control-layers-list,.leaflet-control-layers-expanded .leaflet-control-layers-toggle{display:none}.leaflet-control-layers-expanded .leaflet-control-layers-list{display:block;position:relative}.leaflet-control-layers-expanded{padding:6px 10px 6px 6px;color:#333;background:#fff}.leaflet-control-layers-scrollbar{overflow-y:scroll;overflow-x:hidden;padding-right:5px}.leaflet-control-layers-selector{margin-top:2px;position:relative;top:1px}.leaflet-control-layers label{display:block}.leaflet-control-layers-separator{height:0;border-top:1px solid #ddd;margin:5px -10px 5px -6px}.leaflet-default-icon-path{background-image:url(/assets/leaflet/dist/images/marker-icon-574c3a5cca85f4114085b6841596d62f00d7c892c7b03f28cbfa301deb1dc437.png)}.leaflet-container .leaflet-control-attribution{background:#fff;background:rgba(255,255,255,0.7);margin:0}.leaflet-control-attribution,.leaflet-control-scale-line{padding:0 5px;color:#333}.leaflet-control-attribution a{text-decoration:none}.leaflet-control-attribution a:hover{text-decoration:underline}.leaflet-container .leaflet-control-attribution,.leaflet-container .leaflet-control-scale{font-size:11px}.leaflet-left .leaflet-control-scale{margin-left:5px}.leaflet-bottom .leaflet-control-scale{margin-bottom:5px}.leaflet-control-scale-line{border:2px solid #777;border-top:none;line-height:1.1;padding:2px 5px 1px;font-size:11px;white-space:nowrap;overflow:hidden;-moz-box-sizing:border-box;box-sizing:border-box;background:#fff;background:rgba(255,255,255,0.5)}.leaflet-control-scale-line:not(:first-child){border-top:2px solid #777;border-bottom:none;margin-top:-2px}.leaflet-control-scale-line:not(:first-child):not(:last-child){border-bottom:2px solid #777}.leaflet-touch .leaflet-control-attribution,.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{box-shadow:none}.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{border:2px solid rgba(0,0,0,0.2);background-clip:padding-box}.leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}.leaflet-popup-content-wrapper{padding:1px;text-align:left;border-radius:12px}.leaflet-popup-content{margin:13px 19px;line-height:1.4}.leaflet-popup-content p{margin:18px 0}.leaflet-popup-tip-container{width:40px;height:20px;position:absolute;left:50%;margin-left:-20px;overflow:hidden;pointer-events:none}.leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:white;color:#333;box-shadow:0 3px 14px rgba(0,0,0,0.4)}.leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;padding:4px 4px 0 0;border:none;text-align:center;width:18px;height:14px;font:16px/14px Tahoma, Verdana, sans-serif;color:#c3c3c3;text-decoration:none;font-weight:bold;background:transparent}.leaflet-container a.leaflet-popup-close-button:hover{color:#999}.leaflet-popup-scrolled{overflow:auto;border-bottom:1px solid #ddd;border-top:1px solid #ddd}.leaflet-oldie .leaflet-popup-content-wrapper{zoom:1}.leaflet-oldie .leaflet-popup-tip{width:24px;margin:0 auto;-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";filter:progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)}.leaflet-oldie .leaflet-popup-tip-container{margin-top:-1px}.leaflet-oldie .leaflet-control-zoom,.leaflet-oldie .leaflet-control-layers,.leaflet-oldie .leaflet-popup-content-wrapper,.leaflet-oldie .leaflet-popup-tip{border:1px solid #999}.leaflet-div-icon{background:#fff;border:1px solid #666}.leaflet-tooltip{position:absolute;padding:6px;background-color:#fff;border:1px solid #fff;border-radius:3px;color:#222;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;box-shadow:0 1px 3px rgba(0,0,0,0.4)}.leaflet-tooltip.leaflet-clickable{cursor:pointer;pointer-events:auto}.leaflet-tooltip-top:before,.leaflet-tooltip-bottom:before,.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{position:absolute;pointer-events:none;border:6px solid transparent;background:transparent;content:""}.leaflet-tooltip-bottom{margin-top:6px}.leaflet-tooltip-top{margin-top:-6px}.leaflet-tooltip-bottom:before,.leaflet-tooltip-top:before{left:50%;margin-left:-6px}.leaflet-tooltip-top:before{bottom:0;margin-bottom:-12px;border-top-color:#fff}.leaflet-tooltip-bottom:before{top:0;margin-top:-12px;margin-left:-6px;border-bottom-color:#fff}.leaflet-tooltip-left{margin-left:-6px}.leaflet-tooltip-right{margin-left:6px}.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{top:50%;margin-top:-6px}.leaflet-tooltip-left:before{right:0;margin-right:-12px;border-left-color:#fff}.leaflet-tooltip-right:before{left:0;margin-left:-12px;border-right-color:#fff}.leaflet-cluster-anim .leaflet-marker-icon,.leaflet-cluster-anim .leaflet-marker-shadow{-webkit-transition:-webkit-transform 0.3s ease-out, opacity 0.3s ease-in;-moz-transition:-moz-transform 0.3s ease-out, opacity 0.3s ease-in;-o-transition:-o-transform 0.3s ease-out, opacity 0.3s ease-in;transition:transform 0.3s ease-out, opacity 0.3s ease-in}.leaflet-cluster-spider-leg{-webkit-transition:-webkit-stroke-dashoffset 0.3s ease-out, -webkit-stroke-opacity 0.3s ease-in;-moz-transition:-moz-stroke-dashoffset 0.3s ease-out, -moz-stroke-opacity 0.3s ease-in;-o-transition:-o-stroke-dashoffset 0.3s ease-out, -o-stroke-opacity 0.3s ease-in;transition:stroke-dashoffset 0.3s ease-out, stroke-opacity 0.3s ease-in}.marker-cluster-small{background-color:rgba(181,226,140,0.6)}.marker-cluster-small div{background-color:rgba(110,204,57,0.6)}.marker-cluster-medium{background-color:rgba(241,211,87,0.6)}.marker-cluster-medium div{background-color:rgba(240,194,12,0.6)}.marker-cluster-large{background-color:rgba(253,156,115,0.6)}.marker-cluster-large div{background-color:rgba(241,128,23,0.6)}.leaflet-oldie .marker-cluster-small{background-color:#b5e28c}.leaflet-oldie .marker-cluster-small div{background-color:#6ecc39}.leaflet-oldie .marker-cluster-medium{background-color:#f1d357}.leaflet-oldie .marker-cluster-medium div{background-color:#f0c20c}.leaflet-oldie .marker-cluster-large{background-color:#fd9c73}.leaflet-oldie .marker-cluster-large div{background-color:#f18017}.marker-cluster{background-clip:padding-box;border-radius:20px}.marker-cluster div{width:30px;height:30px;margin-left:5px;margin-top:5px;text-align:center;border-radius:15px;font:12px "Helvetica Neue", Arial, Helvetica, sans-serif}.marker-cluster span{line-height:30px}.awesome-marker{background:url(/assets/markers-soft-e78784e4ed70aaffddd73c315fab590233cc4e7b72388d7dd47a14796fc7c739.png) no-repeat 0 0;width:35px;height:46px;position:absolute;left:0;top:0;display:block;text-align:center}.awesome-marker-shadow{background:url(/assets/markers-shadow-8703a2262710f5e3d29e65d2acdf90d6512e159e119d27b8234731d8a6208a20.png) no-repeat 0 0;width:36px;height:16px}@media (min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (-webkit-min-device-pixel-ratio: 1.5), (min-device-pixel-ratio: 1.5), (min-resolution: 1.5dppx){.awesome-marker{background-image:url(/assets/markers-soft@2x-c1e77253a8bfbe30cec24885d7046f443b76ebb66f4c961f77083b03f4a5cbaf.png);background-size:720px 46px}.awesome-marker-shadow{background-image:url(/assets/markers-shadow@2x-b21a536be27313fb504f69f5899ff0b1245b276571769ac08d6c32c35676e47a.png);background-size:35px 16px}}.awesome-marker i{color:#333;margin-top:10px;display:inline-block;font-size:14px}.awesome-marker .icon-white{color:#fff}.awesome-marker-icon-red{background-position:0 0}.awesome-marker-icon-darkred{background-position:-180px 0}.awesome-marker-icon-lightred{background-position:-360px 0}.awesome-marker-icon-orange{background-position:-36px 0}.awesome-marker-icon-beige{background-position:-396px 0}.awesome-marker-icon-green{background-position:-72px 0}.awesome-marker-icon-darkgreen{background-position:-252px 0}.awesome-marker-icon-lightgreen{background-position:-432px 0}.awesome-marker-icon-blue{background-position:-108px 0}.awesome-marker-icon-darkblue{background-position:-216px 0}.awesome-marker-icon-lightblue{background-position:-468px 0}.awesome-marker-icon-purple{background-position:-144px 0}.awesome-marker-icon-darkpurple{background-position:-288px 0}.awesome-marker-icon-pink{background-position:-504px 0}.awesome-marker-icon-cadetblue{background-position:-324px 0}.awesome-marker-icon-white{background-position:-574px 0}.awesome-marker-icon-gray{background-position:-648px 0}.awesome-marker-icon-lightgray{background-position:-612px 0}.awesome-marker-icon-black{background-position:-682px 0}body.agendadescommuns{font-family:georgia, serif}body.agendadescommuns header.top{padding-left:120px;padding-right:120px;background-image:url(agendadescommuns.png);background-repeat:no-repeat;background-position:20px top}body.agendadescommuns header.top img.logo{display:none}body.agendadescommuns ul.countries,body.agendadescommuns form#orga_search,body.agendadescommuns a#banner{display:none}body.agendadescommuns .city{text-transform:uppercase}body.agendadescommuns.events.index table tr .day_number{color:#727070}body.agendadescommuns.events.index table tr td.current-month.past,body.agendadescommuns.events.index table tr td.current-month.past .day_number{color:#FFFAEB;background-color:#7494B5}body.agendadescommuns.events.index table tr td.current-month.today{border-color:#FFFAEB;background-color:#DBEDFF}body.agendadescommuns.events.index table tr td.current-month.future{color:#444;border-color:#EAE4D3;background-color:#F0E8D1}*{height:auto;padding:0;max-width:100%;box-sizing:border-box;margin-left:auto;margin-right:auto}html{height:100%;background-color:#9CC5EE}html.iframe{background-color:transparent}html.iframe body{border:none;margin:0;padding:0;background-color:transparent}html.iframe body>header,html.iframe body>footer,html.iframe body h2,html.iframe body nav,html.iframe body .region_filter,html.iframe body .orga_search,html.iframe body #banner{display:none}html.iframe body ul{margin:0}body{border:1px solid #68A6E5;margin:0.2%;padding:1%;min-height:99.1%;text-align:center;font-family:sans-serif;background-color:white}body header *,body main *,body footer *{transition-duration:0.5s}a:link,a:visited{color:#258;text-decoration:none}a:hover,a:active,a:focus{color:#2E97FF}#flash-messages .flash{color:white;border:solid 1px #007ba0;margin:1em auto;padding:0.5em 1.1em;max-width:50em;font-size:larger;text-align:justify;box-shadow:0 0 0.3em gray;border-radius:3px;background-color:#008cba}#flash-messages .flash.notice{border-color:#3a945b;background-color:#43ac6a}#flash-messages .flash.alert{border-color:#de2b0f;background-color:#f04124}h3.warning{color:white;margin:0;padding:1em;display:inline-block;text-align:center;box-shadow:0 0 0.3em gray;border-radius:1em;background-color:orange}header.top{text-align:left}header.top img.logo{float:left;margin-right:1%}header.top h1{margin:0;padding:0}header.top h2{font-size:inherit;font-style:italic;font-weight:normal;margin-top:0.2em}main,body.mce-content-body{clear:both;position:relative}main h3,body.mce-content-body h3{text-align:left}main ul,main ol,body.mce-content-body ul,body.mce-content-body ol{text-align:left;padding-left:1em;list-style-position:inside}main p,body.mce-content-body p{text-align:left}main p.label,body.mce-content-body p.label{text-align:center}main p span.label:after,body.mce-content-body p span.label:after{content:':'}main hr,body.mce-content-body hr{margin:10px 20px}aside{float:right;border:1px solid #96CFFF;margin:0 1.2em;z-index:10;padding:5px;position:relative;max-width:20em;box-shadow:4px 4px 1em gray;margin-right:-4em;border-radius:1em;background-color:#D6ECFF}aside h2{border-bottom:1px black solid;padding-bottom:0.3em}aside ul a{padding:0.5em 1em 0.5em 0;display:block}fieldset{width:60em;border:none;margin:1em auto;padding:2%;box-shadow:1px 1px 5px gray;border-radius:0.4em}fieldset legend{color:#666;padding:0 1em;font-size:larger;background-color:white}fieldset h2{margin-top:0}footer.bottom nav{clear:both}footer.bottom nav a{padding:1.8%;display:inline-block;font-weight:bolder}footer.bottom nav a:hover{text-shadow:0 0 1em lightgray}#loading{top:45%;left:45%;color:gray;display:none;position:fixed;font-size:10vw;text-shadow:0 0 4px gray;vertical-align:baseline}.pagination span{display:none}.pagination span.next{display:block}body.digests main{padding:1em;max-width:60em;box-shadow:1px 1px 5px gray;border-radius:0.4em}body.digests main h2{margin:0;padding:0;font-size:larger;text-align:left}body.digests main .description p,body.digests main .second_part p{white-space:pre-line}body.digests main textarea{width:40em;height:20em}header.calendar-header{font-size:1.5em;margin-top:0.4em;font-weight:bolder}header.calendar-header a{font-weight:normal}header.calendar-header a:first-child,header.calendar-header a:last-child{margin:0 0.3em}em.locality.fa{color:gray}span.city:after,strong.city:after,em.city:after{content:':'}p.full_address span:after{content:','}p.full_address span:last-child:after{content:''}.calendar-header,.month{text-transform:capitalize}body.events.index table{width:100%;max-width:100%;table-layout:fixed}body.events.index table tr th{padding-bottom:0.35em;text-transform:capitalize}body.events.index table tr td{height:4.8em;border:1px solid #89B7E5;padding:1px;position:relative;vertical-align:top;background-color:#A1C3E7}body.events.index table tr td.past .event{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}body.events.index table tr td.today{border:1px solid #FFB578;background-color:#FFE0C7}body.events.index table tr td.today .day_number{color:#531}body.events.index table tr td.today .event a:link,body.events.index table tr td.today .event a:visited{color:#730}body.events.index table tr td.future{border-color:#96cfff;background-color:#C6E5FF}body.events.index table tr td.prev-month,body.events.index table tr td.next-month{border:none;background-color:#ededed}body.events.index table tr td.prev-month li,body.events.index table tr td.next-month li{color:#555}body.events.index table tr td.prev-month .event a:link,body.events.index table tr td.prev-month .event a:visited,body.events.index table tr td.next-month .event a:link,body.events.index table tr td.next-month .event a:visited{color:#444}body.events.index table tr td .day_number{float:left;color:#111;font-size:0.6em;font-weight:bolder;letter-spacing:2px}body.events.index table tr td:hover .day_number{color:black}body.events.index table tr td ul{clear:left;margin:0;padding:0}body.events.index table tr td ul li{color:#444;margin:0;padding:0}body.events.index table tr td ul li em.fa.fa-globe{color:red;font-size:smaller}body.events.index table tr td ul .event{padding-left:0.2em}body.events.index table tr td ul .event img{vertical-align:middle}body.events.index table tr td ul .event a:link,body.events.index table tr td ul .event a:visited{color:#111;font-size:smaller}body.events.index table tr td ul .event a:link:hover,body.events.index table tr td ul .event a:visited:hover{color:black;text-decoration:underline}.links{float:right}.fa-rss{color:darkorange}a#banner{float:left}body.events.show main,body.orgas.show main,body.tags.show main,body.pages main{padding:1em;max-width:60em;box-shadow:1px 1px 5px gray;border-radius:0.4em}body.events.show main h2,body.orgas.show main h2,body.tags.show main h2,body.pages main h2{margin-top:1em}#advises{border:1px solid #FFB578;padding-left:10px;padding-right:10px;margin-bottom:1.2em;background-color:#ffe0c7}#advises h1{font-size:1.9em;font-weight:normal}#advises a{color:#8F4900}.description img,body.mce-content-body img{margin-left:1%;margin-right:1%}article.event{box-shadow:-1em 1em 1em -1em gray;margin-left:1em;padding-left:1em;padding-bottom:0.4em;border-bottom-left-radius:1em}body.mce-content-body{margin:0;border:none;padding:1px 1%;font-size:inherit;min-height:100%}.mce-menubar,.mce-panel{border:none !important}.helper p{color:gray;text-align:right;margin-top:0;margin-bottom:0}legend{margin-left:0}.field{color:#666;border:none;display:flex;flex-wrap:wrap;box-shadow:0 0 2px darkgray;align-items:center;border-radius:4px}.field>label,.field .field_with_errors>label{width:10em;margin:0;padding:0.8em;text-align:right;padding-left:0}.field .helper{color:#888;padding:0.8em;font-style:italic;margin-left:0}.field input,.field textarea,.field .mce-tinymce,.field div.tagsinput,.field .field_with_errors:last-child{flex-grow:1}.field input[type=number],.field input[type=checkbox],.field textarea[type=number],.field textarea[type=checkbox],.field .mce-tinymce[type=number],.field .mce-tinymce[type=checkbox],.field div.tagsinput[type=number],.field div.tagsinput[type=checkbox],.field .field_with_errors:last-child[type=number],.field .field_with_errors:last-child[type=checkbox]{flex-grow:unset;margin-left:0;margin-right:0}.field select{margin-left:0;margin-right:0}.field .field_with_errors:first-child{width:10em}.field .field_with_errors>*{width:100%;display:block}input,textarea,select,a.button,.actions>button,.mce-tinymce,div.tagsinput,.ui-autocomplete-input{color:black;border:solid 0.25em transparent;outline:none;padding:0.25em;font-size:inherit;font-family:inherit;background-color:transparent}input:focus,textarea:focus,select:focus,a.button:focus,.actions>button:focus,.mce-tinymce:focus,div.tagsinput:focus,.ui-autocomplete-input:focus{border-color:#F0F8FF}input[type=radio],textarea[type=radio],select[type=radio],a.button[type=radio],.actions>button[type=radio],.mce-tinymce[type=radio],div.tagsinput[type=radio],.ui-autocomplete-input[type=radio]{box-shadow:none}input[type=radio]+label,textarea[type=radio]+label,select[type=radio]+label,a.button[type=radio]+label,.actions>button[type=radio]+label,.mce-tinymce[type=radio]+label,div.tagsinput[type=radio]+label,.ui-autocomplete-input[type=radio]+label{border:none}input[type=submit],input.button,textarea[type=submit],textarea.button,select[type=submit],select.button,a.button[type=submit],a.button.button,.actions>button[type=submit],.actions>button.button,.mce-tinymce[type=submit],.mce-tinymce.button,div.tagsinput[type=submit],div.tagsinput.button,.ui-autocomplete-input[type=submit],.ui-autocomplete-input.button{cursor:pointer;margin:3px 0.4em;font-size:larger;box-shadow:0 0 2px darkgray;font-weight:bolder;letter-spacing:2px;background-color:#9CC5EE}.mce-tinymce{box-shadow:none !important}.mce-top-part:before{box-shadow:0 1px lightgray !important}.field_with_errors{display:inline}.field_with_errors input,.field_with_errors textarea,.field_with_errors select,.field_with_errors a.button{background-color:pink}.radios{margin-left:0}.radios [type=radio]{display:none}.radios label{color:#258;cursor:pointer;padding:0.8em 0;display:inline-block}.radios label:hover{color:#222;box-shadow:0 0 0 4px lightgray}.radios [type=radio]:checked+label{color:black;box-shadow:0 0 0 6px lightgray}.radios [type=radio]:invalid+label{box-shadow:0 0 1px tomato}.actions{text-align:center}.actions input{font-size:x-large}.field.required>label:after,.field.required .field_with_errors>label:after,.list.required>label:after,.list.required .field_with_errors>label:after,dl.required>label:after,dl.required .field_with_errors>label:after{color:darkred;content:'*';font-size:smaller;margin-left:0.4em}.field>label:before,.field .field_with_errors>label:before,.field th:before,.field th a:before,.list>label:before,.list .field_with_errors>label:before,.list th:before,.list th a:before,dl>label:before,dl .field_with_errors>label:before,dl th:before,dl th a:before{margin-right:0.4em}.field.login label:before,.list.login label:before,dl.login label:before{content:"\f2f6"}.field.password label:before,.list.password label:before,dl.password label:before{content:"\f09c"}.field.title label:before,.list.title label:before,dl.title label:before{content:"\f1ea"}.field.start_time label:before,.list.start_time label:before,dl.start_time label:before{content:"\f205"}.field.end_time label:before,.list.end_time label:before,dl.end_time label:before{content:"\f204"}.field.repeat label:before,.list.repeat label:before,dl.repeat label:before{content:"\f01e"}.field.rule>label:before,.list.rule>label:before,dl.rule>label:before{content:"\f1ec"}.field.description label:before,.list.description label:before,dl.description label:before{content:"\f044"}.field.place_name label:before,.list.place_name label:before,dl.place_name label:before{content:"\f276"}.field.address label:before,.list.address label:before,dl.address label:before{content:"\f041"}.field.city label:before,.field th.city a:before,.list.city label:before,.list th.city a:before,dl.city label:before,dl th.city a:before{content:"\f1ad"}.field.department label:before,.field th.department a:before,.list.department label:before,.list th.department a:before,dl.department label:before,dl th.department a:before{content:"\f12e"}.field.region>label:before,.field th.region a:before,.list.region>label:before,.list th.region a:before,dl.region>label:before,dl th.region a:before{content:"\f3ed"}.field.locality>label:before,.list.locality>label:before,dl.locality>label:before{content:"\f065"}.field.contact label:before,.list.contact label:before,dl.contact label:before{content:"\f0e0"}.field.submitter label:before,.list.submitter label:before,dl.submitter label:before{content:"\f0e0"}.field.url label:before,.field th.url:before,.list.url label:before,.list th.url:before,dl.url label:before,dl th.url:before{content:"\f35d"}.field.diaspora label:after,.field td.diaspora em:before,.field dt.diaspora em:before,.list.diaspora label:after,.list td.diaspora em:before,.list dt.diaspora em:before,dl.diaspora label:after,dl td.diaspora em:before,dl dt.diaspora em:before{content:"*";font-size:22px;font-family:'Roboto', 'Helvetica', 'Arial', sans-serif;line-height:0}.field.tags label:before,.field th.tags a:before,.list.tags label:before,.list th.tags a:before,dl.tags label:before,dl th.tags a:before{content:"\f02c"}.field.active label:before,.list.active label:before,dl.active label:before{content:"\f21e"}.field.reason label:before,.list.reason label:before,dl.reason label:before{content:"\f075"}.field.kind>label:before,.field th.kind:before,.list.kind>label:before,.list th.kind:before,dl.kind>label:before,dl th.kind:before{content:"\f1b3"}.field.feed label:before,.field th.feed:before,.list.feed label:before,.list th.feed:before,dl.feed label:before,dl th.feed:before{content:"\f09e"}.field.future label:before,.list.future label:before,dl.future label:before{content:"\f04a"}.field.period_year label:before,.list.period_year label:before,dl.period_year label:before{content:"\f049"}.field.period_week label:before,.list.period_week label:before,dl.period_week label:before{content:"\f048"}.field.near_location label:before,.list.near_location label:before,dl.near_location label:before{content:"\f276"}.field.near_distance label:before,.list.near_distance label:before,dl.near_distance label:before{content:"\f337"}.field.iframe label:before,.list.iframe label:before,dl.iframe label:before{content:"\f0b2"}.finePre,.city:after,span.label:after{margin-left:0.25em}.finePost{margin-right:0.25em}.quantity{text-align:right !important;white-space:nowrap}table{clear:both;margin-top:1em;margin-bottom:1em;border-spacing:2px}table th{padding:0.3em 0.6em}table.list thead tr{background-color:#fed}table.list tbody tr:nth-child(odd){background-color:#def}table.list tbody tr:nth-child(even){background-color:#eee}table.list th{font-size:larger}table.list td{padding:0.2em;text-align:left}table.list td.updated_at{text-align:center}dl{width:40em;margin:1em auto}dl dt{clear:left;float:left;padding:0.2em 1em;min-width:50%;text-align:right}dl dd{padding:0.2em 1em;text-align:left}dl dd.quantity{padding-right:16em}dl dd h3{display:inline}dl dt+dd+dt+dd{border-top:1px solid #999}ul.counters{text-align:center}ul.counters li{display:inline}ul.counters li a:link,ul.counters li a:visited{color:white;padding:0.4em 1em;display:inline-block;font-size:x-large;box-shadow:0 0 2px black;border-radius:0.4em;background-color:#258}.edit_link:link,.delete_link:link{display:none}#map{height:60em;box-shadow:0 0 1em SteelBlue;transition:none}#map *{max-width:initial}#map.event,#map.orga{height:20em}#map li{position:relative}#map li .awesome-marker{display:inline-block !important;position:relative}.tags #map{width:40%;height:60em;margin:1.6em 2%;display:inline-block}form.leaflet-control-layers-list label{text-align:left}form.leaflet-control-layers-list label .awesome-marker{height:auto !important;display:inline-block !important;position:relative !important}html.iframe #map{width:100%;max-width:100%;box-shadow:none}@media all and (max-width: 1024px){.links,a#banner{margin:0.6em auto}table,table.list,table.dates,table.list.dates{border-spacing:1px}table tbody th,table.list tbody th,table.dates tbody th,table.list.dates tbody th{overflow:hidden;max-width:3em}}@media all and (max-width: 900px){body{border:none;margin:0;padding:1%;font-size:smaller}body main ul{margin-left:0}form#orga_search,button.search,.digest{font-size:smaller !important}table.list.dates th,table.list.dates th a,table.list.dates td,table.list.dates td a{padding:0 !important;font-size:inherit}}@media all and (max-width: 34em){body{padding:0}p{padding-left:0.4em;padding-right:0.4em}header.top nav{display:none}header.top img.logo{margin-right:0}form#orga_search{display:none}body.index table thead{display:none}body.index.events table tr td{clear:both;width:auto;height:auto;margin:1px;display:block;font-size:larger;min-height:1em;border-width:1px !important}body.index.events table tr td.prev-month,body.index.events table tr td.next-month,body.index.events table tr td.current-month.past{display:none}body.index.events table tr td .day_number{font-size:initial}body.index.events table tr td .event a{padding:0.4em 1em}body.index header:active+table tr td.current-month.past,body.index header:hover+table tr td.current-month.past{display:block}body.index.versions table tbody tr td,body.index.orgas table tbody tr td{width:auto;padding:0 0.2em;display:block}body.index.versions table tbody tr td:first-child,body.index.orgas table tbody tr td:first-child{float:left}body.index.versions table tbody td+td+td,body.index.orgas table tbody td+td+td{display:inline-block}body.index.versions table tbody td:first-child+td,body.index.orgas table tbody td:first-child+td{width:100%;display:block}dl dt{min-width:auto;text-align:left}dl dd,dl dd.quantity{padding-right:1em}aside{display:none}.links,a#banner{float:none;padding:0.4em 0}.field label{width:auto;display:block;text-align:left}.field input{width:100%;display:block}}@media all and (min-width: 1600px){body{font-size:larger}#advises{max-width:60em}}h2.warning{color:red}.moderations table.list,.notes table.list{min-width:90%;margin-top:15px}.moderations table.list td,.notes table.list td{padding-top:0.5em;padding-bottom:0.5em}.moderations table.list td.empty,.notes table.list td.empty{background-color:white}.moderations table.list td.note,.notes table.list td.note{text-align:left}.moderations table.list td pre,.notes table.list td pre{width:70%;margin:auto;padding:5px;overflow:auto;text-align:left;background-color:#eee}.moderations table.list td em.author,.notes table.list td em.author{display:block;font-size:smaller;text-align:right;font-style:italic;margin-top:15px}.moderations table.list th.actions,.notes table.list th.actions{padding:0}.moderations table.list th.actions a,.notes table.list th.actions a{padding:0.2em;display:inline-block;font-weight:normal}.fa.fa-check,.field>label.fa-check:before,.field .field_with_errors>label.fa-check:before,.field th.fa-check:before,.field th a.fa-check:before,.list>label.fa-check:before,.list .field_with_errors>label.fa-check:before,.list th.fa-check:before,.list th a.fa-check:before,dl>label.fa-check:before,dl .field_with_errors>label.fa-check:before,dl th.fa-check:before,dl th a.fa-check:before,.fa.fa-thumbs-up,.field>label.fa-thumbs-up:before,.field .field_with_errors>label.fa-thumbs-up:before,.field th.fa-thumbs-up:before,.field th a.fa-thumbs-up:before,.list>label.fa-thumbs-up:before,.list .field_with_errors>label.fa-thumbs-up:before,.list th.fa-thumbs-up:before,.list th a.fa-thumbs-up:before,dl>label.fa-thumbs-up:before,dl .field_with_errors>label.fa-thumbs-up:before,dl th.fa-thumbs-up:before,dl th a.fa-thumbs-up:before{color:green}.fa.fa-thumbs-down,.field>label.fa-thumbs-down:before,.field .field_with_errors>label.fa-thumbs-down:before,.field th.fa-thumbs-down:before,.field th a.fa-thumbs-down:before,.list>label.fa-thumbs-down:before,.list .field_with_errors>label.fa-thumbs-down:before,.list th.fa-thumbs-down:before,.list th a.fa-thumbs-down:before,dl>label.fa-thumbs-down:before,dl .field_with_errors>label.fa-thumbs-down:before,dl th.fa-thumbs-down:before,dl th a.fa-thumbs-down:before{color:red}.notes form label:after{content:':'}img.favicon{max-height:2em;border-radius:3px;vertical-align:middle}form#orga_search{clear:right;float:right;font-size:larger;margin-top:0.9em;margin-left:1em}form#orga_search label{display:none}form#orga_search em.fa{color:#258}form#orga_search input{width:14em;border:solid thin #258;padding:0;margin-left:-1.7em;margin-right:-1.3em;padding-left:1.5em;padding-right:1.2em;border-radius:0.4em}form#orga_search button.search{color:#258;border:none;padding:0;font-size:large;box-shadow:none;margin-top:-0.1em;margin-left:0;vertical-align:middle;background-color:transparent}form#orga_search button.search:hover em.fa{color:#2E97FF}form#orga_search button.search span.label{display:none}body.orgas.show main fieldset.orga{min-width:60em}body.orgas.show main dl,body.orgas.show main iframe,body.orgas.show main fieldset{display:inline-block;min-width:40em;vertical-align:top}table tr.inactive{color:gray}body.pages main h3,body.pages main h4{text-align:left}.digest{float:right;font-size:larger;margin-top:1em}.digest span{margin-left:1em}header nav{max-width:calc(99% - 91px);margin-top:-3.1em}header:hover nav{margin-top:0}.region_filter{float:right;font-size:smaller}.region_filter>ul>li{float:left}.region_filter ul{margin:0;z-index:1500;list-style:none;text-align:left;border-bottom-left-radius:0.4em;border-bottom-right-radius:0.4em}.region_filter ul ul{position:absolute;background-color:white}.region_filter ul ul li{display:none;border-top:solid thin #eee}.region_filter ul li:hover li,.region_filter ul li.selected{display:block}.region_filter li{margin:0}.region_filter li.selected{box-shadow:0 0 0 6px lightgray}.region_filter li a{padding:0.3em;display:inline-block;white-space:nowrap}.region_filter li:hover ul{box-shadow:0 4px 4px gray}.radios .radios{display:inline-block;text-align:left;background-color:white}.radios .radios label{display:none;padding:0.2em}.radios .radios input:checked+label{display:inline}.radios .region:hover .radios{z-index:1000;position:absolute;box-shadow:0 4px 4px gray}.radios .region:hover .radios label{display:block !important}.flag-icon-ca-qc{background-image:url(/assets/regions/CA-QC-70699e6a6e25c69040a3f1548b0afd829c4903ccca2760b6c10f49cc87d5d174.png)}body.stats h3{text-align:center}table.list.dates th,table.list.dates td{padding:0 0.6em}table.list.dates .sparkline{padding:0}div.field,div.actions{margin-bottom:10px}#notice{color:green}#error_explanation{width:450px;border:2px solid red;padding-bottom:0;margin-bottom:20px;background-color:#f0f0f0}#error_explanation h2{text-align:left;font-weight:bold;padding:15px;font-size:12px;background-color:#c00;color:#fff}#error_explanation p,#error_explanation ul{padding:0 1em}#error_explanation p li,#error_explanation ul li{font-size:12px;list-style:square}.sessions form{margin:6em auto}.logout{margin:2em auto}table.list.dates{width:100%}table.list.dates thead th{height:3em;padding:0 !important;font-size:initial;transform:rotate(-45deg)}table.list.dates tbody th:first-child{font-size:large;text-align:right}table.list.dates tbody td{padding:0}table.list.dates tbody td a{padding:0 1em;display:block}table.list.dates tfoot td canvas{width:100% !important;background-color:white}p.tags a:after{color:black;content:','}p.tags a:last-child:after{content:''}.css1{font-size:0.8em}.css2{font-size:1.0em}.css3{font-size:1.4em}.css4{font-size:1.8em}div.tagsinput{height:auto !important;border:none;margin:0;padding:0;display:inline-block;min-height:auto !important;vertical-align:middle}div.tagsinput span.tag{margin:0;padding:0.75em;font-size:inherit;font-family:inherit}div.tagsinput #event_tag_list_addTag,div.tagsinput #tag_addTag{float:none;text-align:left}div.tagsinput #event_tag_list_addTag:first-child #event_tag_list_tag,div.tagsinput #event_tag_list_addTag:first-child #tag_tag,div.tagsinput #tag_addTag:first-child #event_tag_list_tag,div.tagsinput #tag_addTag:first-child #tag_tag{width:100% !important}div.tagsinput input,div.tagsinput .ui-autocomplete-input{width:8em !important;border:solid 0.25em transparent !important;padding:0.6em;font-size:inherit;margin-right:0;margin-bottom:0}div.tagsinput input:focus,div.tagsinput .ui-autocomplete-input:focus{border-color:#F0F8FF !important}ul.ui-autocomplete li{text-align:left;box-shadow:0 0 2px #a5d24a;background-color:white}ul.ui-autocomplete li .ui-state-active{margin:0;background-color:#F0F8FF}body.versions td.changes{white-space:pre-wrap}
diff --git a/public/assets/application-5758a3be3fc4c726f3fa040065dd207d269a61ffaeef8e18cf7bae20669ce52d.css.gz b/public/assets/application-5758a3be3fc4c726f3fa040065dd207d269a61ffaeef8e18cf7bae20669ce52d.css.gz
new file mode 100644
index 00000000..be5be323
Binary files /dev/null and b/public/assets/application-5758a3be3fc4c726f3fa040065dd207d269a61ffaeef8e18cf7bae20669ce52d.css.gz differ
diff --git a/public/assets/application-5605ff641c9b98cb2f64836cdef985707cf326fd9b11541ef1ef2daad21c4c08.js b/public/assets/application-f586e2a35afa70504e05ea3a2dc1a9a508dadcb36c9365a3785696e4197a9348.js
similarity index 62%
rename from public/assets/application-5605ff641c9b98cb2f64836cdef985707cf326fd9b11541ef1ef2daad21c4c08.js
rename to public/assets/application-f586e2a35afa70504e05ea3a2dc1a9a508dadcb36c9365a3785696e4197a9348.js
index 5a79747d..d12f9a8e 100644
--- a/public/assets/application-5605ff641c9b98cb2f64836cdef985707cf326fd9b11541ef1ef2daad21c4c08.js
+++ b/public/assets/application-f586e2a35afa70504e05ea3a2dc1a9a508dadcb36c9365a3785696e4197a9348.js
@@ -17264,14067 +17264,13032 @@ window.tinymce = window.tinymce || {
base: '/assets/tinymce',
suffix: ''
};
-// 4.8.4 (2018-10-23)
+// 4.9.2 (2018-12-17)
(function () {
(function () {
- 'use strict';
+ 'use strict';
- var noop = function () {
- var x = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- x[_i] = arguments[_i];
- }
- };
-
- var compose = function (fa, fb) {
- return function () {
- var x = [];
+ var noop = function () {
+ var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
- x[_i] = arguments[_i];
+ args[_i] = arguments[_i];
}
- return fa(fb.apply(null, arguments));
};
- };
- var constant = function (value) {
- return function () {
- return value;
+ 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 identity = function (x) {
- return x;
- };
-
- var curry = function (f) {
- var x = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- x[_i - 1] = arguments[_i];
+ 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 args = new Array(arguments.length - 1);
- for (var i = 1; i < arguments.length; i++)
- args[i - 1] = arguments[i];
- return function () {
- var x = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- x[_i] = arguments[_i];
- }
- var newArgs = new Array(arguments.length);
- for (var j = 0; j < newArgs.length; j++)
- newArgs[j] = arguments[j];
- var all = args.concat(newArgs);
- return f.apply(null, all);
+ var not = function (f) {
+ return function () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ return !f.apply(null, args);
+ };
};
- };
+ var die = function (msg) {
+ return function () {
+ throw new Error(msg);
+ };
+ };
+ var never = constant(false);
+ var always = constant(true);
- var die = function (msg) {
- return function () {
- throw new Error(msg);
+ var never$1 = never;
+ var always$1 = always;
+ var none = function () {
+ return NONE;
};
- };
-
-
- var never = constant(false);
- var always = constant(true);
-
- var never$1 = never;
- var always$1 = always;
- var none = function () {
- return NONE;
- };
- var NONE = function () {
- var eq = function (o) {
- return o.isNone();
- };
- var call$$1 = function (thunk) {
- return thunk();
- };
- var id = function (n) {
- return n;
- };
- var noop$$1 = function () {
- };
- var nul = function () {
- return null;
- };
- var undef = function () {
- return undefined;
- };
- var me = {
- fold: function (n, s) {
- return n();
- },
- is: never$1,
- isSome: never$1,
- isNone: always$1,
- getOr: id,
- getOrThunk: call$$1,
- getOrDie: function (msg) {
- throw new Error(msg || 'error: getOrDie called on none.');
- },
- getOrNull: nul,
- getOrUndefined: undef,
- or: id,
- orThunk: call$$1,
- map: none,
- ap: none,
- each: noop$$1,
- bind: none,
- flatten: none,
- exists: never$1,
- forall: always$1,
- filter: none,
- equals: eq,
- equals_: eq,
- toArray: function () {
- return [];
- },
- toString: constant('none()')
- };
- if (Object.freeze)
- Object.freeze(me);
- return me;
- }();
- var some = function (a) {
- var constant_a = function () {
- return a;
- };
- var self = function () {
+ var NONE = function () {
+ var eq = function (o) {
+ return o.isNone();
+ };
+ var call$$1 = function (thunk) {
+ return thunk();
+ };
+ var id = function (n) {
+ return n;
+ };
+ var noop$$1 = function () {
+ };
+ var nul = function () {
+ return null;
+ };
+ var undef = function () {
+ return undefined;
+ };
+ var me = {
+ fold: function (n, s) {
+ return n();
+ },
+ is: never$1,
+ isSome: never$1,
+ isNone: always$1,
+ getOr: id,
+ getOrThunk: call$$1,
+ getOrDie: function (msg) {
+ throw new Error(msg || 'error: getOrDie called on none.');
+ },
+ getOrNull: nul,
+ getOrUndefined: undef,
+ or: id,
+ orThunk: call$$1,
+ map: none,
+ ap: none,
+ each: noop$$1,
+ bind: none,
+ flatten: none,
+ exists: never$1,
+ forall: always$1,
+ filter: none,
+ equals: eq,
+ equals_: eq,
+ toArray: function () {
+ return [];
+ },
+ toString: constant('none()')
+ };
+ if (Object.freeze)
+ Object.freeze(me);
+ return me;
+ }();
+ var some = function (a) {
+ var constant_a = function () {
+ return a;
+ };
+ var self = function () {
+ return me;
+ };
+ var map = function (f) {
+ return some(f(a));
+ };
+ var bind = function (f) {
+ return f(a);
+ };
+ var me = {
+ fold: function (n, s) {
+ return s(a);
+ },
+ is: function (v) {
+ return a === v;
+ },
+ isSome: always$1,
+ isNone: never$1,
+ getOr: constant_a,
+ getOrThunk: constant_a,
+ getOrDie: constant_a,
+ getOrNull: constant_a,
+ getOrUndefined: constant_a,
+ or: self,
+ orThunk: self,
+ map: map,
+ ap: function (optfab) {
+ return optfab.fold(none, function (fab) {
+ return some(fab(a));
+ });
+ },
+ each: function (f) {
+ f(a);
+ },
+ bind: bind,
+ flatten: constant_a,
+ exists: bind,
+ forall: bind,
+ filter: function (f) {
+ return f(a) ? me : NONE;
+ },
+ equals: function (o) {
+ return o.is(a);
+ },
+ equals_: function (o, elementEq) {
+ return o.fold(never$1, function (b) {
+ return elementEq(a, b);
+ });
+ },
+ toArray: function () {
+ return [a];
+ },
+ toString: function () {
+ return 'some(' + a + ')';
+ }
+ };
return me;
};
- var map = function (f) {
- return some(f(a));
+ var from = function (value) {
+ return value === null || value === undefined ? NONE : some(value);
};
- var bind = function (f) {
- return f(a);
+ var Option = {
+ some: some,
+ none: none,
+ from: from
};
- var me = {
- fold: function (n, s) {
- return s(a);
- },
- is: function (v) {
- return a === v;
- },
- isSome: always$1,
- isNone: never$1,
- getOr: constant_a,
- getOrThunk: constant_a,
- getOrDie: constant_a,
- getOrNull: constant_a,
- getOrUndefined: constant_a,
- or: self,
- orThunk: self,
- map: map,
- ap: function (optfab) {
- return optfab.fold(none, function (fab) {
- return some(fab(a));
- });
- },
- each: function (f) {
- f(a);
- },
- bind: bind,
- flatten: constant_a,
- exists: bind,
- forall: bind,
- filter: function (f) {
- return f(a) ? me : NONE;
- },
- equals: function (o) {
- return o.is(a);
- },
- equals_: function (o, elementEq) {
- return o.fold(never$1, function (b) {
- return elementEq(a, b);
- });
- },
- toArray: function () {
- return [a];
- },
- toString: function () {
- return 'some(' + a + ')';
- }
+
+ var typeOf = function (x) {
+ if (x === null)
+ return 'null';
+ var t = typeof x;
+ if (t === 'object' && Array.prototype.isPrototypeOf(x))
+ return 'array';
+ if (t === 'object' && String.prototype.isPrototypeOf(x))
+ return 'string';
+ return t;
};
- return me;
- };
- var from = function (value) {
- return value === null || value === undefined ? NONE : some(value);
- };
- var Option = {
- some: some,
- none: none,
- from: from
- };
-
- var typeOf = function (x) {
- if (x === null)
- return 'null';
- var t = typeof x;
- if (t === 'object' && Array.prototype.isPrototypeOf(x))
- return 'array';
- if (t === 'object' && String.prototype.isPrototypeOf(x))
- return 'string';
- return t;
- };
- var isType = function (type) {
- return function (value) {
- return typeOf(value) === type;
- };
- };
- var isString = isType('string');
- var isObject = isType('object');
- var isArray = isType('array');
- var isNull = isType('null');
- var isBoolean = isType('boolean');
-
- var isFunction = isType('function');
- var isNumber = isType('number');
-
- var rawIndexOf = function () {
- var pIndexOf = Array.prototype.indexOf;
- var fastIndex = function (xs, x) {
- return pIndexOf.call(xs, x);
- };
- var slowIndex = function (xs, x) {
- return slowIndexOf(xs, x);
- };
- return pIndexOf === undefined ? slowIndex : fastIndex;
- }();
- var indexOf = function (xs, x) {
- var r = rawIndexOf(xs, x);
- return r === -1 ? Option.none() : Option.some(r);
- };
- var contains = function (xs, x) {
- return rawIndexOf(xs, x) > -1;
- };
- var exists = function (xs, pred) {
- return findIndex(xs, pred).isSome();
- };
-
-
- 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, xs);
- }
- return r;
- };
- var each = function (xs, f) {
- for (var i = 0, len = xs.length; i < len; i++) {
- var x = xs[i];
- f(x, i, xs);
- }
- };
- var eachr = function (xs, f) {
- for (var i = xs.length - 1; i >= 0; i--) {
- var x = xs[i];
- f(x, i, xs);
- }
- };
- 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, xs) ? 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, xs)) {
- 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 find = function (xs, pred) {
- for (var i = 0, len = xs.length; i < len; i++) {
- var x = xs[i];
- if (pred(x, i, xs)) {
- return Option.some(x);
- }
- }
- return Option.none();
- };
- var findIndex = function (xs, pred) {
- for (var i = 0, len = xs.length; i < len; i++) {
- var x = xs[i];
- if (pred(x, i, xs)) {
- return Option.some(i);
- }
- }
- return Option.none();
- };
- var slowIndexOf = function (xs, x) {
- for (var i = 0, len = xs.length; i < len; ++i) {
- if (xs[i] === x) {
- return i;
- }
- }
- return -1;
- };
- var push = Array.prototype.push;
- var flatten = function (xs) {
- var r = [];
- for (var i = 0, len = xs.length; i < len; ++i) {
- if (!Array.prototype.isPrototypeOf(xs[i]))
- throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
- push.apply(r, xs[i]);
- }
- return r;
- };
- var bind = function (xs, f) {
- var output = map(xs, f);
- return flatten(output);
- };
- var forall = function (xs, pred) {
- for (var i = 0, len = xs.length; i < len; ++i) {
- var x = xs[i];
- if (pred(x, i, xs) !== true) {
- return false;
- }
- }
- return true;
- };
-
- var slice = Array.prototype.slice;
- var reverse = function (xs) {
- var r = slice.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 = function (xs, comparator) {
- var copy = slice.call(xs, 0);
- copy.sort(comparator);
- return copy;
- };
- var head = function (xs) {
- return xs.length === 0 ? Option.none() : Option.some(xs[0]);
- };
- var last = function (xs) {
- return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);
- };
- var from$1 = isFunction(Array.from) ? Array.from : function (x) {
- return slice.call(x);
- };
-
- var Global = typeof window !== 'undefined' ? window : Function('return this;')();
-
- var path = function (parts, scope) {
- var o = scope !== undefined && scope !== null ? scope : Global;
- for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i)
- o = o[parts[i]];
- return o;
- };
- var resolve = function (p, scope) {
- var parts = p.split('.');
- return path(parts, scope);
- };
-
- var unsafe = function (name, scope) {
- return resolve(name, scope);
- };
- var getOrDie = function (name, scope) {
- var actual = unsafe(name, scope);
- if (actual === undefined || actual === null)
- throw name + ' not available on this browser';
- return actual;
- };
- var $_3b2dlgcjnlpawlt = { getOrDie: getOrDie };
-
- var url = function () {
- return $_3b2dlgcjnlpawlt.getOrDie('URL');
- };
- var createObjectURL = function (blob) {
- return url().createObjectURL(blob);
- };
- var revokeObjectURL = function (u) {
- url().revokeObjectURL(u);
- };
- var $_9khkh7bjnlpawls = {
- createObjectURL: createObjectURL,
- revokeObjectURL: revokeObjectURL
- };
-
- var nav = navigator;
- var userAgent = nav.userAgent;
- var opera;
- var webkit;
- var ie;
- var ie11;
- var ie12;
- var gecko;
- var mac;
- var iDevice;
- var android;
- var fileApi;
- var phone;
- var tablet;
- var windowsPhone;
- var matchMediaQuery = function (query) {
- return 'matchMedia' in window ? matchMedia(query).matches : false;
- };
- opera = false;
- android = /Android/.test(userAgent);
- webkit = /WebKit/.test(userAgent);
- ie = !webkit && !opera && /MSIE/gi.test(userAgent) && /Explorer/gi.test(nav.appName);
- ie = ie && /MSIE (\w+)\./.exec(userAgent)[1];
- ie11 = userAgent.indexOf('Trident/') !== -1 && (userAgent.indexOf('rv:') !== -1 || nav.appName.indexOf('Netscape') !== -1) ? 11 : false;
- ie12 = userAgent.indexOf('Edge/') !== -1 && !ie && !ie11 ? 12 : false;
- ie = ie || ie11 || ie12;
- gecko = !webkit && !ie11 && /Gecko/.test(userAgent);
- mac = userAgent.indexOf('Mac') !== -1;
- iDevice = /(iPad|iPhone)/.test(userAgent);
- fileApi = 'FormData' in window && 'FileReader' in window && 'URL' in window && !!$_9khkh7bjnlpawls.createObjectURL;
- phone = matchMediaQuery('only screen and (max-device-width: 480px)') && (android || iDevice);
- tablet = matchMediaQuery('only screen and (min-width: 800px)') && (android || iDevice);
- windowsPhone = userAgent.indexOf('Windows Phone') !== -1;
- if (ie12) {
- webkit = false;
- }
- var contentEditable = !iDevice || fileApi || parseInt(userAgent.match(/AppleWebKit\/(\d*)/)[1], 10) >= 534;
- var $_cseqobajnlpawll = {
- opera: opera,
- webkit: webkit,
- ie: ie,
- gecko: gecko,
- mac: mac,
- iOS: iDevice,
- android: android,
- contentEditable: contentEditable,
- transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',
- caretAfter: ie !== 8,
- range: window.getSelection && 'Range' in window,
- documentMode: ie && !ie12 ? document.documentMode || 7 : 10,
- fileApi: fileApi,
- ceFalse: ie === false || ie > 8,
- cacheSuffix: null,
- container: null,
- overrideViewPort: null,
- experimentalShadowDom: false,
- canHaveCSP: ie === false || ie > 11,
- desktop: !phone && !tablet,
- windowsPhone: windowsPhone
- };
-
- var promise = function () {
- function bind(fn, thisArg) {
- return function () {
- fn.apply(thisArg, arguments);
+ var isType = function (type) {
+ return function (value) {
+ return typeOf(value) === type;
};
- }
- 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) {
- 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;
- }
- function doResolve(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 args = Array.prototype.slice.call(arguments.length === 1 && isArray(arguments[0]) ? arguments[0] : arguments);
- 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);
- }
- });
- };
- return Promise;
- };
- var promiseObj = window.Promise ? window.Promise : promise();
+ var isString = isType('string');
+ var isObject = isType('object');
+ var isArray = isType('array');
+ var isNull = isType('null');
+ var isBoolean = isType('boolean');
+ var isFunction = isType('function');
+ var isNumber = isType('number');
- var requestAnimationFramePromise;
- var requestAnimationFrame$$1 = function (callback, element) {
- var i, requestAnimationFrameFunc = window.requestAnimationFrame;
- var vendors = [
- 'ms',
- 'moz',
- 'webkit'
- ];
- var featurefill = function (callback) {
- window.setTimeout(callback, 0);
- };
- for (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, func;
- func = function () {
- var args = arguments;
- clearTimeout(timer);
- timer = wrappedSetTimeout(function () {
- callback.apply(this, args);
- }, time);
- };
- func.stop = function () {
- clearTimeout(timer);
- };
- return func;
- };
- var $_2nbnh1ijnlpawpi = {
- requestAnimationFrame: function (callback, element) {
- if (requestAnimationFramePromise) {
- requestAnimationFramePromise.then(callback);
- return;
- }
- requestAnimationFramePromise = new promiseObj(function (resolve) {
- if (!element) {
- element = document.body;
- }
- requestAnimationFrame$$1(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;
- timer = wrappedSetInterval(function () {
- if (!editor.removed) {
- callback();
- } else {
- clearInterval(timer);
- }
- }, time);
- return timer;
- },
- debounce: debounce,
- throttle: debounce,
- clearInterval: wrappedClearInterval,
- clearTimeout: wrappedClearTimeout
- };
-
- 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
- };
- var hasIsDefaultPrevented = function (event$$1) {
- return event$$1.isDefaultPrevented === returnTrue || event$$1.isDefaultPrevented === returnFalse;
- };
- var returnFalse = function () {
- return false;
- };
- var returnTrue = function () {
- return true;
- };
- var addEvent = function (target, name$$1, callback, capture) {
- if (target.addEventListener) {
- target.addEventListener(name$$1, callback, capture || false);
- } else if (target.attachEvent) {
- target.attachEvent('on' + name$$1, callback);
- }
- };
- var removeEvent = function (target, name$$1, callback, capture) {
- if (target.removeEventListener) {
- target.removeEventListener(name$$1, callback, capture || false);
- } else if (target.detachEvent) {
- target.detachEvent('on' + name$$1, callback);
- }
- };
- var getTargetFromShadowDom = function (event$$1, defaultTarget) {
- if (event$$1.composedPath) {
- var composedPath = event$$1.composedPath();
- if (composedPath && composedPath.length > 0) {
- return composedPath[0];
- }
- }
- return defaultTarget;
- };
- var fix = function (originalEvent, data) {
- var name$$1;
- var event$$1 = data || {};
- for (name$$1 in originalEvent) {
- if (!deprecated[name$$1]) {
- event$$1[name$$1] = originalEvent[name$$1];
- }
- }
- if (!event$$1.target) {
- event$$1.target = event$$1.srcElement || document;
- }
- if ($_cseqobajnlpawll.experimentalShadowDom) {
- event$$1.target = getTargetFromShadowDom(originalEvent, event$$1.target);
- }
- if (originalEvent && mouseEventRe.test(originalEvent.type) && originalEvent.pageX === undefined && originalEvent.clientX !== undefined) {
- var eventDoc = event$$1.target.ownerDocument || document;
- var doc = eventDoc.documentElement;
- var body = eventDoc.body;
- event$$1.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
- event$$1.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
- }
- event$$1.preventDefault = function () {
- event$$1.isDefaultPrevented = returnTrue;
- if (originalEvent) {
- if (originalEvent.preventDefault) {
- originalEvent.preventDefault();
- } else {
- originalEvent.returnValue = false;
- }
- }
- };
- event$$1.stopPropagation = function () {
- event$$1.isPropagationStopped = returnTrue;
- if (originalEvent) {
- if (originalEvent.stopPropagation) {
- originalEvent.stopPropagation();
- } else {
- originalEvent.cancelBubble = true;
- }
- }
- };
- event$$1.stopImmediatePropagation = function () {
- event$$1.isImmediatePropagationStopped = returnTrue;
- event$$1.stopPropagation();
- };
- if (hasIsDefaultPrevented(event$$1) === false) {
- event$$1.isDefaultPrevented = returnFalse;
- event$$1.isPropagationStopped = returnFalse;
- event$$1.isImmediatePropagationStopped = returnFalse;
- }
- if (typeof event$$1.metaKey === 'undefined') {
- event$$1.metaKey = false;
- }
- return event$$1;
- };
- var bindOnReady = function (win, callback, eventUtils) {
- var doc = win.document, event$$1 = { type: 'ready' };
- if (eventUtils.domLoaded) {
- callback(event$$1);
- return;
- }
- var isDocReady = function () {
- return doc.readyState === 'complete' || doc.readyState === 'interactive' && doc.body;
- };
- var readyHandler = function () {
- if (!eventUtils.domLoaded) {
- eventUtils.domLoaded = true;
- callback(event$$1);
- }
- };
- var waitForDomLoaded = function () {
- if (isDocReady()) {
- removeEvent(doc, 'readystatechange', waitForDomLoaded);
- readyHandler();
- }
- };
- var tryScroll = function () {
- try {
- doc.documentElement.doScroll('left');
- } catch (ex) {
- $_2nbnh1ijnlpawpi.setTimeout(tryScroll);
- return;
- }
- readyHandler();
- };
- if (doc.addEventListener && !($_cseqobajnlpawll.ie && $_cseqobajnlpawll.ie < 11)) {
- if (isDocReady()) {
- readyHandler();
- } else {
- addEvent(win, 'DOMContentLoaded', readyHandler);
- }
- } else {
- addEvent(doc, 'readystatechange', waitForDomLoaded);
- if (doc.documentElement.doScroll && win.self === win.top) {
- tryScroll();
- }
- }
- addEvent(win, 'load', readyHandler);
- };
- var EventUtils = function () {
- var self$$1 = this;
- var events = {}, count, expando, hasFocusIn, hasMouseEnterLeave, mouseEnterLeave;
- expando = eventExpandoPrefix + (+new Date()).toString(32);
- hasMouseEnterLeave = 'onmouseenter' in document.documentElement;
- hasFocusIn = 'onfocusin' in document.documentElement;
- mouseEnterLeave = {
- mouseenter: 'mouseover',
- mouseleave: 'mouseout'
- };
- count = 1;
- self$$1.domLoaded = false;
- self$$1.events = events;
- var executeHandlers = function (evt, id) {
- var callbackList, i, l, callback;
- var container = events[id];
- callbackList = container && container[evt.type];
- if (callbackList) {
- for (i = 0, l = callbackList.length; i < l; i++) {
- callback = callbackList[i];
- if (callback && callback.func.call(callback.scope, evt) === false) {
- evt.preventDefault();
- }
- if (evt.isImmediatePropagationStopped()) {
- return;
- }
- }
- }
- };
- self$$1.bind = function (target, names, callback, scope) {
- var id, callbackList, i, name$$1, fakeName, nativeHandler, capture;
- var win = window;
- var defaultNativeHandler = function (evt) {
- executeHandlers(fix(evt || win.event), id);
+ var rawIndexOf = function () {
+ var pIndexOf = Array.prototype.indexOf;
+ var fastIndex = function (xs, x) {
+ return pIndexOf.call(xs, x);
};
- if (!target || target.nodeType === 3 || target.nodeType === 8) {
- return;
- }
- if (!target[expando]) {
- id = count++;
- target[expando] = id;
- events[id] = {};
- } else {
- id = target[expando];
- }
- scope = scope || target;
- names = names.split(' ');
- i = names.length;
- while (i--) {
- name$$1 = names[i];
- nativeHandler = defaultNativeHandler;
- fakeName = capture = false;
- if (name$$1 === 'DOMContentLoaded') {
- name$$1 = 'ready';
- }
- if (self$$1.domLoaded && name$$1 === 'ready' && target.readyState === 'complete') {
- callback.call(scope, fix({ type: name$$1 }));
- continue;
- }
- if (!hasMouseEnterLeave) {
- fakeName = mouseEnterLeave[name$$1];
- if (fakeName) {
- nativeHandler = function (evt) {
- var current, related;
- current = evt.currentTarget;
- 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;
- executeHandlers(evt, id);
- }
- };
- }
- }
- if (!hasFocusIn && (name$$1 === 'focusin' || name$$1 === 'focusout')) {
- capture = true;
- fakeName = name$$1 === 'focusin' ? 'focus' : 'blur';
- nativeHandler = function (evt) {
- evt = fix(evt || win.event);
- evt.type = evt.type === 'focus' ? 'focusin' : 'focusout';
- executeHandlers(evt, id);
- };
- }
- callbackList = events[id][name$$1];
- if (!callbackList) {
- events[id][name$$1] = callbackList = [{
- func: callback,
- scope: scope
- }];
- callbackList.fakeName = fakeName;
- callbackList.capture = capture;
- callbackList.nativeHandler = nativeHandler;
- if (name$$1 === 'ready') {
- bindOnReady(target, nativeHandler, self$$1);
- } else {
- addEvent(target, fakeName || name$$1, nativeHandler, capture);
- }
- } else {
- if (name$$1 === 'ready' && self$$1.domLoaded) {
- callback({ type: name$$1 });
- } else {
- callbackList.push({
- func: callback,
- scope: scope
- });
- }
- }
- }
- target = callbackList = 0;
- return callback;
+ var slowIndex = function (xs, x) {
+ return slowIndexOf(xs, x);
+ };
+ return pIndexOf === undefined ? slowIndex : fastIndex;
+ }();
+ var indexOf = function (xs, x) {
+ var r = rawIndexOf(xs, x);
+ return r === -1 ? Option.none() : Option.some(r);
};
- self$$1.unbind = function (target, names, callback) {
- var id, callbackList, i, ci, name$$1, eventMap;
- if (!target || target.nodeType === 3 || target.nodeType === 8) {
- return self$$1;
+ var contains = function (xs, x) {
+ return rawIndexOf(xs, x) > -1;
+ };
+ var exists = function (xs, pred) {
+ return findIndex(xs, pred).isSome();
+ };
+ 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, xs);
}
- id = target[expando];
- if (id) {
- eventMap = events[id];
- if (names) {
- names = names.split(' ');
- i = names.length;
- while (i--) {
- name$$1 = names[i];
- callbackList = eventMap[name$$1];
- 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$$1] = callbackList;
- }
- }
- }
- if (!callback || callbackList.length === 0) {
- delete eventMap[name$$1];
- removeEvent(target, callbackList.fakeName || name$$1, callbackList.nativeHandler, callbackList.capture);
- }
- }
- }
- } else {
- for (name$$1 in eventMap) {
- callbackList = eventMap[name$$1];
- removeEvent(target, callbackList.fakeName || name$$1, callbackList.nativeHandler, callbackList.capture);
- }
- eventMap = {};
- }
- for (name$$1 in eventMap) {
- return self$$1;
- }
- delete events[id];
- try {
- delete target[expando];
- } catch (ex) {
- target[expando] = null;
+ return r;
+ };
+ var each = function (xs, f) {
+ for (var i = 0, len = xs.length; i < len; i++) {
+ var x = xs[i];
+ f(x, i, xs);
+ }
+ };
+ var eachr = function (xs, f) {
+ for (var i = xs.length - 1; i >= 0; i--) {
+ var x = xs[i];
+ f(x, i, xs);
+ }
+ };
+ 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, xs) ? 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, xs)) {
+ r.push(x);
}
}
- return self$$1;
+ return r;
};
- self$$1.fire = function (target, name$$1, args) {
- var id;
- if (!target || target.nodeType === 3 || target.nodeType === 8) {
- return self$$1;
- }
- args = fix(null, args);
- args.type = name$$1;
- args.target = target;
- do {
- id = target[expando];
- if (id) {
- executeHandlers(args, id);
- }
- target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow;
- } while (target && !args.isPropagationStopped());
- return self$$1;
+ var foldr = function (xs, f, acc) {
+ eachr(xs, function (x) {
+ acc = f(acc, x);
+ });
+ return acc;
};
- self$$1.clean = function (target) {
- var i, children;
- var unbind = self$$1.unbind;
- if (!target || target.nodeType === 3 || target.nodeType === 8) {
- return self$$1;
- }
- if (target[expando]) {
- unbind(target);
- }
- if (!target.getElementsByTagName) {
- target = target.document;
- }
- if (target && target.getElementsByTagName) {
- unbind(target);
- children = target.getElementsByTagName('*');
- i = children.length;
- while (i--) {
- target = children[i];
- if (target[expando]) {
- unbind(target);
- }
+ var foldl = function (xs, f, acc) {
+ each(xs, function (x) {
+ acc = f(acc, x);
+ });
+ return acc;
+ };
+ var find = function (xs, pred) {
+ for (var i = 0, len = xs.length; i < len; i++) {
+ var x = xs[i];
+ if (pred(x, i, xs)) {
+ return Option.some(x);
}
}
- return self$$1;
+ return Option.none();
};
- self$$1.destroy = function () {
- events = {};
- };
- self$$1.cancel = function (e) {
- if (e) {
- e.preventDefault();
- e.stopImmediatePropagation();
+ var findIndex = function (xs, pred) {
+ for (var i = 0, len = xs.length; i < len; i++) {
+ var x = xs[i];
+ if (pred(x, i, xs)) {
+ return Option.some(i);
+ }
}
- return false;
+ return Option.none();
};
- };
- EventUtils.Event = new EventUtils();
- EventUtils.Event.bind(window, 'ready', function () {
- });
-
- var i;
- var support;
- var Expr;
- var getText;
- var isXML;
- var tokenize;
- var compile;
- var select;
- var outermostContext;
- var sortInput;
- var hasDuplicate;
- var setDocument;
- var document$1;
- var docElem;
- var documentIsHTML;
- var rbuggyQSA;
- var rbuggyMatches;
- var matches;
- var contains$1;
- var expando = 'sizzle' + -new Date();
- var preferredDoc = window.document;
- var dirruns = 0;
- var done = 0;
- var classCache = createCache();
- var tokenCache = createCache();
- var compilerCache = createCache();
- var sortOrder = function (a, b) {
- if (a === b) {
- hasDuplicate = true;
- }
- return 0;
- };
- var strundefined = typeof undefined;
- var MAX_NEGATIVE = 1 << 31;
- var hasOwn = {}.hasOwnProperty;
- var arr = [];
- var pop = arr.pop;
- var push_native = arr.push;
- var push$1 = arr.push;
- var slice$1 = arr.slice;
- var indexOf$1 = arr.indexOf || function (elem) {
- var i = 0, len = this.length;
- for (; i < len; i++) {
- if (this[i] === elem) {
+ var slowIndexOf = function (xs, x) {
+ for (var i = 0, len = xs.length; i < len; ++i) {
+ if (xs[i] === x) {
return i;
}
}
return -1;
};
- var booleans = 'checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped';
- var whitespace = '[\\x20\\t\\r\\n\\f]';
- var identifier = '(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+';
- var attributes = '\\[' + whitespace + '*(' + identifier + ')(?:' + whitespace + '*([*^$|!~]?=)' + whitespace + '*(?:\'((?:\\\\.|[^\\\\\'])*)\'|"((?:\\\\.|[^\\\\"])*)"|(' + identifier + '))|)' + whitespace + '*\\]';
- var pseudos = ':(' + identifier + ')(?:\\((' + '(\'((?:\\\\.|[^\\\\\'])*)\'|"((?:\\\\.|[^\\\\"])*)")|' + '((?:\\\\.|[^\\\\()[\\]]|' + attributes + ')*)|' + '.*' + ')\\)|)';
- var rtrim = new RegExp('^' + whitespace + '+|((?:^|[^\\\\])(?:\\\\.)*)' + whitespace + '+$', 'g');
- var rcomma = new RegExp('^' + whitespace + '*,' + whitespace + '*');
- var rcombinators = new RegExp('^' + whitespace + '*([>+~]|' + whitespace + ')' + whitespace + '*');
- var rattributeQuotes = new RegExp('=' + whitespace + '*([^\\]\'"]*?)' + whitespace + '*\\]', 'g');
- var rpseudo = new RegExp(pseudos);
- var ridentifier = new RegExp('^' + identifier + '$');
- var 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')
+ var push = Array.prototype.push;
+ var flatten = function (xs) {
+ var r = [];
+ for (var i = 0, len = xs.length; i < len; ++i) {
+ if (!Array.prototype.isPrototypeOf(xs[i]))
+ throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
+ push.apply(r, xs[i]);
+ }
+ return r;
};
- var rinputs = /^(?:input|select|textarea|button)$/i;
- var rheader = /^h\d$/i;
- var rnative = /^[^{]+\{\s*\[native \w/;
- var rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/;
- var rsibling = /[+~]/;
- var rescape = /'|\\/g;
- var runescape = new RegExp('\\\\([\\da-f]{1,6}' + whitespace + '?|(' + whitespace + ')|.)', 'ig');
- var 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);
+ var bind = function (xs, f) {
+ var output = map(xs, f);
+ return flatten(output);
};
- try {
- push$1.apply(arr = slice$1.call(preferredDoc.childNodes), preferredDoc.childNodes);
- arr[preferredDoc.childNodes.length].nodeType;
- } catch (e) {
- push$1 = {
- apply: arr.length ? function (target, els) {
- push_native.apply(target, slice$1.call(els));
- } : function (target, els) {
- var j = target.length, i = 0;
- while (target[j++] = els[i++]) {
+ var forall = function (xs, pred) {
+ for (var i = 0, len = xs.length; i < len; ++i) {
+ var x = xs[i];
+ if (pred(x, i, xs) !== true) {
+ return false;
}
- target.length = j - 1;
+ }
+ return true;
+ };
+ var slice = Array.prototype.slice;
+ var reverse = function (xs) {
+ var r = slice.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 = function (xs, comparator) {
+ var copy = slice.call(xs, 0);
+ copy.sort(comparator);
+ return copy;
+ };
+ var head = function (xs) {
+ return xs.length === 0 ? Option.none() : Option.some(xs[0]);
+ };
+ var last = function (xs) {
+ return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);
+ };
+ var from$1 = isFunction(Array.from) ? Array.from : function (x) {
+ return slice.call(x);
+ };
+
+ var Global = typeof window !== 'undefined' ? window : Function('return this;')();
+
+ var path = function (parts, scope) {
+ var o = scope !== undefined && scope !== null ? scope : Global;
+ for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i)
+ o = o[parts[i]];
+ return o;
+ };
+ var resolve = function (p, scope) {
+ var parts = p.split('.');
+ return path(parts, scope);
+ };
+
+ var unsafe = function (name, scope) {
+ return resolve(name, scope);
+ };
+ var getOrDie = function (name, scope) {
+ var actual = unsafe(name, scope);
+ if (actual === undefined || actual === null)
+ throw name + ' not available on this browser';
+ return actual;
+ };
+ var Global$1 = { getOrDie: getOrDie };
+
+ var url = function () {
+ return Global$1.getOrDie('URL');
+ };
+ var createObjectURL = function (blob) {
+ return url().createObjectURL(blob);
+ };
+ var revokeObjectURL = function (u) {
+ url().revokeObjectURL(u);
+ };
+ var URL = {
+ createObjectURL: createObjectURL,
+ revokeObjectURL: revokeObjectURL
+ };
+
+ var nav = navigator, userAgent = nav.userAgent;
+ var opera, webkit, ie, ie11, ie12, gecko, mac, iDevice, android, fileApi, phone, tablet, windowsPhone;
+ var matchMediaQuery = function (query) {
+ return 'matchMedia' in window ? matchMedia(query).matches : false;
+ };
+ opera = false;
+ android = /Android/.test(userAgent);
+ webkit = /WebKit/.test(userAgent);
+ ie = !webkit && !opera && /MSIE/gi.test(userAgent) && /Explorer/gi.test(nav.appName);
+ ie = ie && /MSIE (\w+)\./.exec(userAgent)[1];
+ ie11 = userAgent.indexOf('Trident/') !== -1 && (userAgent.indexOf('rv:') !== -1 || nav.appName.indexOf('Netscape') !== -1) ? 11 : false;
+ ie12 = userAgent.indexOf('Edge/') !== -1 && !ie && !ie11 ? 12 : false;
+ ie = ie || ie11 || ie12;
+ gecko = !webkit && !ie11 && /Gecko/.test(userAgent);
+ mac = userAgent.indexOf('Mac') !== -1;
+ iDevice = /(iPad|iPhone)/.test(userAgent);
+ fileApi = 'FormData' in window && 'FileReader' in window && 'URL' in window && !!URL.createObjectURL;
+ phone = matchMediaQuery('only screen and (max-device-width: 480px)') && (android || iDevice);
+ tablet = matchMediaQuery('only screen and (min-width: 800px)') && (android || iDevice);
+ windowsPhone = userAgent.indexOf('Windows Phone') !== -1;
+ if (ie12) {
+ webkit = false;
+ }
+ var contentEditable = !iDevice || fileApi || parseInt(userAgent.match(/AppleWebKit\/(\d*)/)[1], 10) >= 534;
+ var Env = {
+ opera: opera,
+ webkit: webkit,
+ ie: ie,
+ gecko: gecko,
+ mac: mac,
+ iOS: iDevice,
+ android: android,
+ contentEditable: contentEditable,
+ transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',
+ caretAfter: ie !== 8,
+ range: window.getSelection && 'Range' in window,
+ documentMode: ie && !ie12 ? document.documentMode || 7 : 10,
+ fileApi: fileApi,
+ ceFalse: ie === false || ie > 8,
+ cacheSuffix: null,
+ container: null,
+ overrideViewPort: null,
+ experimentalShadowDom: false,
+ canHaveCSP: ie === false || ie > 11,
+ desktop: !phone && !tablet,
+ windowsPhone: windowsPhone
+ };
+
+ var promise = function () {
+ function bind(fn, thisArg) {
+ return function () {
+ fn.apply(thisArg, arguments);
+ };
+ }
+ 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) {
+ 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;
+ }
+ function doResolve(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 args = Array.prototype.slice.call(arguments.length === 1 && isArray(arguments[0]) ? arguments[0] : arguments);
+ 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);
+ }
+ });
+ };
+ return Promise;
+ };
+ var promiseObj = window.Promise ? window.Promise : promise();
+
+ var requestAnimationFramePromise;
+ var requestAnimationFrame$$1 = function (callback, element) {
+ var i, requestAnimationFrameFunc = window.requestAnimationFrame;
+ var vendors = [
+ 'ms',
+ 'moz',
+ 'webkit'
+ ];
+ var featurefill = function (callback) {
+ window.setTimeout(callback, 0);
+ };
+ for (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, func;
+ func = function () {
+ var args = arguments;
+ 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$$1(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;
+ timer = wrappedSetInterval(function () {
+ if (!editor.removed) {
+ callback();
+ } else {
+ clearInterval(timer);
+ }
+ }, time);
+ return timer;
+ },
+ debounce: debounce,
+ throttle: debounce,
+ clearInterval: wrappedClearInterval,
+ clearTimeout: wrappedClearTimeout
+ };
+
+ 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
+ };
+ var hasIsDefaultPrevented = function (event$$1) {
+ return event$$1.isDefaultPrevented === returnTrue || event$$1.isDefaultPrevented === returnFalse;
+ };
+ var returnFalse = function () {
+ return false;
+ };
+ var returnTrue = function () {
+ return true;
+ };
+ var addEvent = function (target, name$$1, callback, capture) {
+ if (target.addEventListener) {
+ target.addEventListener(name$$1, callback, capture || false);
+ } else if (target.attachEvent) {
+ target.attachEvent('on' + name$$1, callback);
}
};
- }
- 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);
+ var removeEvent = function (target, name$$1, callback, capture) {
+ if (target.removeEventListener) {
+ target.removeEventListener(name$$1, callback, capture || false);
+ } else if (target.detachEvent) {
+ target.detachEvent('on' + name$$1, callback);
+ }
+ };
+ var getTargetFromShadowDom = function (event$$1, defaultTarget) {
+ if (event$$1.composedPath) {
+ var composedPath = event$$1.composedPath();
+ if (composedPath && composedPath.length > 0) {
+ return composedPath[0];
+ }
+ }
+ return defaultTarget;
+ };
+ var fix = function (originalEvent, data) {
+ var name$$1;
+ var event$$1 = data || {};
+ for (name$$1 in originalEvent) {
+ if (!deprecated[name$$1]) {
+ event$$1[name$$1] = originalEvent[name$$1];
+ }
+ }
+ if (!event$$1.target) {
+ event$$1.target = event$$1.srcElement || document;
+ }
+ if (Env.experimentalShadowDom) {
+ event$$1.target = getTargetFromShadowDom(originalEvent, event$$1.target);
+ }
+ if (originalEvent && mouseEventRe.test(originalEvent.type) && originalEvent.pageX === undefined && originalEvent.clientX !== undefined) {
+ var eventDoc = event$$1.target.ownerDocument || document;
+ var doc = eventDoc.documentElement;
+ var body = eventDoc.body;
+ event$$1.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
+ event$$1.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
+ }
+ event$$1.preventDefault = function () {
+ event$$1.isDefaultPrevented = returnTrue;
+ if (originalEvent) {
+ if (originalEvent.preventDefault) {
+ originalEvent.preventDefault();
+ } else {
+ originalEvent.returnValue = false;
+ }
+ }
+ };
+ event$$1.stopPropagation = function () {
+ event$$1.isPropagationStopped = returnTrue;
+ if (originalEvent) {
+ if (originalEvent.stopPropagation) {
+ originalEvent.stopPropagation();
+ } else {
+ originalEvent.cancelBubble = true;
+ }
+ }
+ };
+ event$$1.stopImmediatePropagation = function () {
+ event$$1.isImmediatePropagationStopped = returnTrue;
+ event$$1.stopPropagation();
+ };
+ if (hasIsDefaultPrevented(event$$1) === false) {
+ event$$1.isDefaultPrevented = returnFalse;
+ event$$1.isPropagationStopped = returnFalse;
+ event$$1.isImmediatePropagationStopped = returnFalse;
+ }
+ if (typeof event$$1.metaKey === 'undefined') {
+ event$$1.metaKey = false;
+ }
+ return event$$1;
+ };
+ var bindOnReady = function (win, callback, eventUtils) {
+ var doc = win.document, event$$1 = { type: 'ready' };
+ if (eventUtils.domLoaded) {
+ callback(event$$1);
+ return;
+ }
+ var isDocReady = function () {
+ return doc.readyState === 'complete' || doc.readyState === 'interactive' && doc.body;
+ };
+ var readyHandler = function () {
+ if (!eventUtils.domLoaded) {
+ eventUtils.domLoaded = true;
+ callback(event$$1);
+ }
+ };
+ var waitForDomLoaded = function () {
+ if (isDocReady()) {
+ removeEvent(doc, 'readystatechange', waitForDomLoaded);
+ readyHandler();
+ }
+ };
+ var tryScroll = function () {
+ try {
+ doc.documentElement.doScroll('left');
+ } catch (ex) {
+ Delay.setTimeout(tryScroll);
+ return;
+ }
+ readyHandler();
+ };
+ if (doc.addEventListener && !(Env.ie && Env.ie < 11)) {
+ if (isDocReady()) {
+ readyHandler();
+ } else {
+ addEvent(win, 'DOMContentLoaded', readyHandler);
+ }
+ } else {
+ addEvent(doc, 'readystatechange', waitForDomLoaded);
+ if (doc.documentElement.doScroll && win.self === win.top) {
+ tryScroll();
+ }
+ }
+ addEvent(win, 'load', readyHandler);
+ };
+ var EventUtils = function () {
+ var self$$1 = this;
+ var events = {}, count, expando, hasFocusIn, hasMouseEnterLeave, mouseEnterLeave;
+ expando = eventExpandoPrefix + (+new Date()).toString(32);
+ hasMouseEnterLeave = 'onmouseenter' in document.documentElement;
+ hasFocusIn = 'onfocusin' in document.documentElement;
+ mouseEnterLeave = {
+ mouseenter: 'mouseover',
+ mouseleave: 'mouseout'
+ };
+ count = 1;
+ self$$1.domLoaded = false;
+ self$$1.events = events;
+ var executeHandlers = function (evt, id) {
+ var callbackList, i, l, callback;
+ var container = events[id];
+ callbackList = container && container[evt.type];
+ if (callbackList) {
+ for (i = 0, l = callbackList.length; i < l; i++) {
+ callback = callbackList[i];
+ if (callback && callback.func.call(callback.scope, evt) === false) {
+ evt.preventDefault();
+ }
+ if (evt.isImmediatePropagationStopped()) {
+ return;
+ }
+ }
+ }
+ };
+ self$$1.bind = function (target, names, callback, scope) {
+ var id, callbackList, i, name$$1, fakeName, nativeHandler, capture;
+ var win = window;
+ var defaultNativeHandler = function (evt) {
+ executeHandlers(fix(evt || win.event), id);
+ };
+ if (!target || target.nodeType === 3 || target.nodeType === 8) {
+ return;
+ }
+ if (!target[expando]) {
+ id = count++;
+ target[expando] = id;
+ events[id] = {};
+ } else {
+ id = target[expando];
+ }
+ scope = scope || target;
+ names = names.split(' ');
+ i = names.length;
+ while (i--) {
+ name$$1 = names[i];
+ nativeHandler = defaultNativeHandler;
+ fakeName = capture = false;
+ if (name$$1 === 'DOMContentLoaded') {
+ name$$1 = 'ready';
+ }
+ if (self$$1.domLoaded && name$$1 === 'ready' && target.readyState === 'complete') {
+ callback.call(scope, fix({ type: name$$1 }));
+ continue;
+ }
+ if (!hasMouseEnterLeave) {
+ fakeName = mouseEnterLeave[name$$1];
+ if (fakeName) {
+ nativeHandler = function (evt) {
+ var current, related;
+ current = evt.currentTarget;
+ 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;
+ executeHandlers(evt, id);
+ }
+ };
+ }
+ }
+ if (!hasFocusIn && (name$$1 === 'focusin' || name$$1 === 'focusout')) {
+ capture = true;
+ fakeName = name$$1 === 'focusin' ? 'focus' : 'blur';
+ nativeHandler = function (evt) {
+ evt = fix(evt || win.event);
+ evt.type = evt.type === 'focus' ? 'focusin' : 'focusout';
+ executeHandlers(evt, id);
+ };
+ }
+ callbackList = events[id][name$$1];
+ if (!callbackList) {
+ events[id][name$$1] = callbackList = [{
+ func: callback,
+ scope: scope
+ }];
+ callbackList.fakeName = fakeName;
+ callbackList.capture = capture;
+ callbackList.nativeHandler = nativeHandler;
+ if (name$$1 === 'ready') {
+ bindOnReady(target, nativeHandler, self$$1);
+ } else {
+ addEvent(target, fakeName || name$$1, nativeHandler, capture);
+ }
+ } else {
+ if (name$$1 === 'ready' && self$$1.domLoaded) {
+ callback({ type: name$$1 });
+ } else {
+ callbackList.push({
+ func: callback,
+ scope: scope
+ });
+ }
+ }
+ }
+ target = callbackList = 0;
+ return callback;
+ };
+ self$$1.unbind = function (target, names, callback) {
+ var id, callbackList, i, ci, name$$1, eventMap;
+ if (!target || target.nodeType === 3 || target.nodeType === 8) {
+ return self$$1;
+ }
+ id = target[expando];
+ if (id) {
+ eventMap = events[id];
+ if (names) {
+ names = names.split(' ');
+ i = names.length;
+ while (i--) {
+ name$$1 = names[i];
+ callbackList = eventMap[name$$1];
+ 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$$1] = callbackList;
+ }
+ }
+ }
+ if (!callback || callbackList.length === 0) {
+ delete eventMap[name$$1];
+ removeEvent(target, callbackList.fakeName || name$$1, callbackList.nativeHandler, callbackList.capture);
+ }
+ }
+ }
+ } else {
+ for (name$$1 in eventMap) {
+ callbackList = eventMap[name$$1];
+ removeEvent(target, callbackList.fakeName || name$$1, callbackList.nativeHandler, callbackList.capture);
+ }
+ eventMap = {};
+ }
+ for (name$$1 in eventMap) {
+ return self$$1;
+ }
+ delete events[id];
+ try {
+ delete target[expando];
+ } catch (ex) {
+ target[expando] = null;
+ }
+ }
+ return self$$1;
+ };
+ self$$1.fire = function (target, name$$1, args) {
+ var id;
+ if (!target || target.nodeType === 3 || target.nodeType === 8) {
+ return self$$1;
+ }
+ args = fix(null, args);
+ args.type = name$$1;
+ args.target = target;
+ do {
+ id = target[expando];
+ if (id) {
+ executeHandlers(args, id);
+ }
+ target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow;
+ } while (target && !args.isPropagationStopped());
+ return self$$1;
+ };
+ self$$1.clean = function (target) {
+ var i, children;
+ var unbind = self$$1.unbind;
+ if (!target || target.nodeType === 3 || target.nodeType === 8) {
+ return self$$1;
+ }
+ if (target[expando]) {
+ unbind(target);
+ }
+ if (!target.getElementsByTagName) {
+ target = target.document;
+ }
+ if (target && target.getElementsByTagName) {
+ unbind(target);
+ children = target.getElementsByTagName('*');
+ i = children.length;
+ while (i--) {
+ target = children[i];
+ if (target[expando]) {
+ unbind(target);
+ }
+ }
+ }
+ return self$$1;
+ };
+ self$$1.destroy = function () {
+ events = {};
+ };
+ self$$1.cancel = function (e) {
+ if (e) {
+ e.preventDefault();
+ e.stopImmediatePropagation();
+ }
+ return false;
+ };
+ };
+ EventUtils.Event = new EventUtils();
+ EventUtils.Event.bind(window, 'ready', function () {
+ });
+
+ var i, support, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, setDocument, document$1, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains$1, 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$1 = arr.push, slice$1 = arr.slice, indexOf$1 = 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$1.apply(arr = slice$1.call(preferredDoc.childNodes), preferredDoc.childNodes);
+ arr[preferredDoc.childNodes.length].nodeType;
+ } catch (e) {
+ push$1 = {
+ apply: arr.length ? function (target, els) {
+ push_native.apply(target, slice$1.call(els));
+ } : function (target, els) {
+ var j = target.length, i = 0;
+ while (target[j++] = els[i++]) {
+ }
+ target.length = j - 1;
+ }
+ };
}
- 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);
+ 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 {
- return results;
- }
- } else {
- if (context.ownerDocument && (elem = context.ownerDocument.getElementById(m)) && contains$1(context, elem) && elem.id === m) {
- results.push(elem);
- return results;
- }
- }
- } else if (match[2]) {
- push$1.apply(results, context.getElementsByTagName(selector));
- return results;
- } else if ((m = match[3]) && support.getElementsByClassName) {
- push$1.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$1.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$$1 = elem.nodeName.toLowerCase();
- return name$$1 === 'input' && elem.type === type;
- };
- }
- function createButtonPseudo(type) {
- return function (elem) {
- var name$$1 = elem.nodeName.toLowerCase();
- return (name$$1 === 'input' || name$$1 === '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$$1 = 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$$1 && parent$$1 !== getTop(parent$$1)) {
- if (parent$$1.addEventListener) {
- parent$$1.addEventListener('unload', function () {
- setDocument();
- }, false);
- } else if (parent$$1.attachEvent) {
- parent$$1.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$1 = 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$1(preferredDoc, a)) {
- return -1;
- }
- if (b === doc || b.ownerDocument === preferredDoc && contains$1(preferredDoc, b)) {
- return 1;
- }
- return sortInput ? indexOf$1.call(sortInput, a) - indexOf$1.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$1.call(sortInput, a) - indexOf$1.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$1(context, elem);
- };
- Sizzle.attr = function (elem, name$$1) {
- if ((elem.ownerDocument || elem) !== document$1) {
- setDocument(elem);
- }
- var fn = Expr.attrHandle[name$$1.toLowerCase()], val = fn && hasOwn.call(Expr.attrHandle, name$$1.toLowerCase()) ? fn(elem, name$$1, !documentIsHTML) : undefined;
- return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name$$1) : (val = elem.getAttributeNode(name$$1)) && 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$$1, operator, check) {
- return function (elem) {
- var result = Sizzle.attr(elem, name$$1);
- 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$$1 = elem.parentNode, name$$1 = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType;
- if (parent$$1) {
- if (simple) {
- while (dir) {
- node = elem;
- while (node = node[dir]) {
- if (ofType ? node.nodeName.toLowerCase() === name$$1 : node.nodeType === 1) {
- return false;
- }
- }
- start = dir = type === 'only' && !start && 'nextSibling';
+ if (context.ownerDocument && (elem = context.ownerDocument.getElementById(m)) && contains$1(context, elem) && elem.id === m) {
+ results.push(elem);
+ return results;
}
+ }
+ } else if (match[2]) {
+ push$1.apply(results, context.getElementsByTagName(selector));
+ return results;
+ } else if ((m = match[3]) && support.getElementsByClassName) {
+ push$1.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$1.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$$1 = elem.nodeName.toLowerCase();
+ return name$$1 === 'input' && elem.type === type;
+ };
+ }
+ function createButtonPseudo(type) {
+ return function (elem) {
+ var name$$1 = elem.nodeName.toLowerCase();
+ return (name$$1 === 'input' || name$$1 === '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$$1 = 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$$1 && parent$$1 !== getTop(parent$$1)) {
+ if (parent$$1.addEventListener) {
+ parent$$1.addEventListener('unload', function () {
+ setDocument();
+ }, false);
+ } else if (parent$$1.attachEvent) {
+ parent$$1.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$1 = 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;
}
- start = [forward ? parent$$1.firstChild : parent$$1.lastChild];
- if (forward && useCache) {
- outerCache = parent$$1[expando] || (parent$$1[expando] = {});
- cache = outerCache[type] || [];
- nodeIndex = cache[0] === dirruns && cache[1];
- diff = cache[0] === dirruns && cache[2];
- node = nodeIndex && parent$$1.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;
+ }
+ }
+ 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$1(preferredDoc, a)) {
+ return -1;
+ }
+ if (b === doc || b.ownerDocument === preferredDoc && contains$1(preferredDoc, b)) {
+ return 1;
+ }
+ return sortInput ? indexOf$1.call(sortInput, a) - indexOf$1.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$1.call(sortInput, a) - indexOf$1.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$1(context, elem);
+ };
+ Sizzle.attr = function (elem, name$$1) {
+ if ((elem.ownerDocument || elem) !== document$1) {
+ setDocument(elem);
+ }
+ var fn = Expr.attrHandle[name$$1.toLowerCase()], val = fn && hasOwn.call(Expr.attrHandle, name$$1.toLowerCase()) ? fn(elem, name$$1, !documentIsHTML) : undefined;
+ return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name$$1) : (val = elem.getAttributeNode(name$$1)) && 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$$1, operator, check) {
+ return function (elem) {
+ var result = Sizzle.attr(elem, name$$1);
+ 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$$1 = elem.parentNode, name$$1 = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType;
+ if (parent$$1) {
+ if (simple) {
+ while (dir) {
+ node = elem;
+ while (node = node[dir]) {
+ if (ofType ? node.nodeName.toLowerCase() === name$$1 : node.nodeType === 1) {
+ return false;
+ }
+ }
+ start = dir = type === 'only' && !start && 'nextSibling';
}
+ return true;
}
- } 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$$1 : node.nodeType === 1) && ++diff) {
- if (useCache) {
- (node[expando] || (node[expando] = {}))[type] = [
+ start = [forward ? parent$$1.firstChild : parent$$1.lastChild];
+ if (forward && useCache) {
+ outerCache = parent$$1[expando] || (parent$$1[expando] = {});
+ cache = outerCache[type] || [];
+ nodeIndex = cache[0] === dirruns && cache[1];
+ diff = cache[0] === dirruns && cache[2];
+ node = nodeIndex && parent$$1.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
];
- }
- if (node === elem) {
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$$1 : 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$1.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);
}
}
- 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$1.call(seed, matched[i]);
- seed[idx] = !(matches[idx] = matched[i]);
- }
- }) : function (elem) {
- return fn(elem, 0, args);
+ }) : function (elem, context, xml) {
+ input[0] = elem;
+ matcher(input, null, xml, results);
+ return !results.pop();
};
- }
- 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);
+ }),
+ 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;
}
}
- }) : function (elem, context, xml) {
- input[0] = elem;
- matcher(input, null, xml, results);
- 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);
+ 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$$1 = elem.nodeName.toLowerCase();
+ return name$$1 === 'input' && elem.type === 'button' || name$$1 === '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$$1) {
+ return [length$$1 - 1];
+ }),
+ eq: createPositionalPseudo(function (matchIndexes, length$$1, argument) {
+ return [argument < 0 ? argument + length$$1 : argument];
+ }),
+ even: createPositionalPseudo(function (matchIndexes, length$$1) {
+ var i = 0;
+ for (; i < length$$1; i += 2) {
+ matchIndexes.push(i);
+ }
+ return matchIndexes;
+ }),
+ odd: createPositionalPseudo(function (matchIndexes, length$$1) {
+ var i = 1;
+ for (; i < length$$1; i += 2) {
+ matchIndexes.push(i);
+ }
+ return matchIndexes;
+ }),
+ lt: createPositionalPseudo(function (matchIndexes, length$$1, argument) {
+ var i = argument < 0 ? argument + length$$1 : argument;
+ for (; --i >= 0;) {
+ matchIndexes.push(i);
+ }
+ return matchIndexes;
+ }),
+ gt: createPositionalPseudo(function (matchIndexes, length$$1, argument) {
+ var i = argument < 0 ? argument + length$$1 : argument;
+ for (; ++i < length$$1;) {
+ matchIndexes.push(i);
+ }
+ return matchIndexes;
+ })
+ }
+ };
+ Expr.pseudos.nth = Expr.pseudos.eq;
+ for (i in {
+ radio: true,
+ checkbox: true,
+ file: true,
+ password: true,
+ image: true
+ }) {
+ Expr.pseudos[i] = createInputPseudo(i);
+ }
+ for (i in {
+ submit: true,
+ reset: true
+ }) {
+ 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 = []);
}
- 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;
+ 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 ((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;
+ }
}
- } 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;
+ }
+ } 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;
+ }
+ }
+ }
+ }
}
- return elem.selected === true;
- },
- empty: function (elem) {
- for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
- if (elem.nodeType < 6) {
+ };
+ }
+ 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;
- },
- 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$$1 = elem.nodeName.toLowerCase();
- return name$$1 === 'input' && elem.type === 'button' || name$$1 === '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$$1) {
- return [length$$1 - 1];
- }),
- eq: createPositionalPseudo(function (matchIndexes, length$$1, argument) {
- return [argument < 0 ? argument + length$$1 : argument];
- }),
- even: createPositionalPseudo(function (matchIndexes, length$$1) {
- var i = 0;
- for (; i < length$$1; i += 2) {
- matchIndexes.push(i);
- }
- return matchIndexes;
- }),
- odd: createPositionalPseudo(function (matchIndexes, length$$1) {
- var i = 1;
- for (; i < length$$1; i += 2) {
- matchIndexes.push(i);
- }
- return matchIndexes;
- }),
- lt: createPositionalPseudo(function (matchIndexes, length$$1, argument) {
- var i = argument < 0 ? argument + length$$1 : argument;
- for (; --i >= 0;) {
- matchIndexes.push(i);
- }
- return matchIndexes;
- }),
- gt: createPositionalPseudo(function (matchIndexes, length$$1, argument) {
- var i = argument < 0 ? argument + length$$1 : argument;
- for (; ++i < length$$1;) {
- matchIndexes.push(i);
- }
- return matchIndexes;
- })
+ } : matchers[0];
}
- };
- Expr.pseudos.nth = Expr.pseudos.eq;
- for (i in {
- radio: true,
- checkbox: true,
- file: true,
- password: true,
- image: true
- }) {
- Expr.pseudos[i] = createInputPseudo(i);
- }
- for (i in {
- submit: true,
- reset: true
- }) {
- 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);
+ function multipleContexts(selector, contexts, results) {
+ var i = 0, len = contexts.length;
+ for (; i < len; i++) {
+ Sizzle(selector, contexts[i], results);
+ }
+ return results;
}
- 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 ((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;
+ 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);
}
}
}
- } 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;
+ }
+ 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);
}
- }
- }
- }
- };
- }
- 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);
+ if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf$1.call(seed, elem) : preMap[i]) > -1) {
+ seed[temp] = !(results[temp] = elem);
}
}
- postFinder(null, matcherOut = [], temp, xml);
}
- i = matcherOut.length;
- while (i--) {
- if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf$1.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$1.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$1.call(checkContext, elem) > -1;
- }, implicitRelative, true), matchers = [function (elem, context, xml) {
- return !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));
- }];
- 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;
- }
+ matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);
+ if (postFinder) {
+ postFinder(null, results, matcherOut, xml);
+ } else {
+ push$1.apply(results, matcherOut);
}
- 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);
+ 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$1.call(checkContext, elem) > -1;
+ }, implicitRelative, true), matchers = [function (elem, context, xml) {
+ return !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));
+ }];
+ 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;
}
}
- if (outermost) {
- dirruns = dirrunsUnique;
- }
- }
- if (bySet) {
- if (elem = !matcher && elem) {
- matchedCount--;
- }
- if (seed) {
- unmatched.push(elem);
- }
+ 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);
}
- matchedCount += i;
- if (bySet && i !== matchedCount) {
- j = 0;
- while (matcher = setMatchers[j++]) {
- matcher(unmatched, setMatched, context, xml);
+ }
+ 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;
}
- if (seed) {
- if (matchedCount > 0) {
- while (i--) {
- if (!(unmatched[i] || setMatched[i])) {
- setMatched[i] = pop.call(results);
+ 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);
+ }
}
- setMatched = condense(setMatched);
}
- push$1.apply(results, setMatched);
- if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {
- Sizzle.uniqueSort(results);
+ 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$1.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;
+ if (outermost) {
+ dirruns = dirrunsUnique;
+ outermostContext = contextBackup;
+ }
+ return unmatched;
+ };
+ return bySet ? markFunction(superMatcher) : superMatcher;
}
- 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;
+ compile = Sizzle.compile = function (selector, match) {
+ var i, setMatchers = [], elementMatchers = [], cached = compilerCache[selector + ' '];
+ if (!cached) {
+ if (!match) {
+ match = tokenize(selector);
}
- selector = selector.slice(tokens.shift().value.length);
+ 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;
}
- i = matchExpr.needsContext.test(selector) ? 0 : tokens.length;
- while (i--) {
- token = tokens[i];
- if (Expr.relative[type = token.type]) {
- break;
+ 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);
}
- 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$1.apply(results, seed);
- return results;
- }
+ 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$1.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;
+ (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 isArray$1 = Array.isArray;
- var toArray = function (obj) {
- var array = obj, i, l;
- if (!isArray$1(obj)) {
- array = [];
- for (i = 0, l = obj.length; i < l; i++) {
- array[i] = obj[i];
- }
- }
- return array;
- };
- var each$1 = function (o, cb, s) {
- var n, l;
- if (!o) {
- return 0;
- }
- 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 0;
+ var isArray$1 = Array.isArray;
+ var toArray = function (obj) {
+ var array = obj, i, l;
+ if (!isArray$1(obj)) {
+ array = [];
+ for (i = 0, l = obj.length; i < l; i++) {
+ array[i] = obj[i];
}
}
- } else {
- for (n in o) {
- if (o.hasOwnProperty(n)) {
+ return array;
+ };
+ var each$1 = function (o, cb, s) {
+ var n, l;
+ if (!o) {
+ return 0;
+ }
+ 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 0;
}
}
+ } else {
+ for (n in o) {
+ if (o.hasOwnProperty(n)) {
+ if (cb.call(s, o[n], n, o) === false) {
+ return 0;
+ }
+ }
+ }
}
- }
- return 1;
- };
- var map$1 = function (array, callback) {
- var out = [];
- each$1(array, function (item, index) {
- out.push(callback(item, index, array));
- });
- return out;
- };
- var filter$1 = function (a, f) {
- var o = [];
- each$1(a, function (v, index) {
- if (!f || f(v, index, a)) {
- o.push(v);
+ return 1;
+ };
+ var map$1 = function (array, callback) {
+ var out = [];
+ each$1(array, function (item, index) {
+ out.push(callback(item, index, array));
+ });
+ return out;
+ };
+ var filter$1 = function (a, f) {
+ var o = [];
+ each$1(a, function (v, index) {
+ if (!f || f(v, index, a)) {
+ o.push(v);
+ }
+ });
+ return o;
+ };
+ var indexOf$2 = function (a, v) {
+ var i, l;
+ if (a) {
+ for (i = 0, l = a.length; i < l; i++) {
+ if (a[i] === v) {
+ return i;
+ }
+ }
}
- });
- return o;
- };
- var indexOf$2 = function (a, v) {
- var i, l;
- if (a) {
- for (i = 0, l = a.length; i < l; i++) {
- if (a[i] === v) {
+ return -1;
+ };
+ var reduce = function (collection, iteratee, accumulator, thisArg) {
+ var i = 0;
+ if (arguments.length < 3) {
+ accumulator = collection[0];
+ }
+ for (; i < collection.length; i++) {
+ accumulator = iteratee.call(thisArg, accumulator, collection[i], i);
+ }
+ return accumulator;
+ };
+ 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 reduce = function (collection, iteratee, accumulator, thisArg) {
- var i = 0;
- if (arguments.length < 3) {
- accumulator = collection[0];
- }
- for (; i < collection.length; i++) {
- accumulator = iteratee.call(thisArg, accumulator, collection[i], i);
- }
- return accumulator;
- };
- 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 find$1 = function (array, predicate, thisArg) {
+ var idx = findIndex$1(array, predicate, thisArg);
+ if (idx !== -1) {
+ return array[idx];
}
- }
- return -1;
- };
- var find$1 = function (array, predicate, thisArg) {
- var idx = findIndex$1(array, predicate, thisArg);
- if (idx !== -1) {
- return array[idx];
- }
- return undefined;
- };
- var last$1 = function (collection) {
- return collection[collection.length - 1];
- };
- var $_n452lmjnlpawsj = {
- isArray: isArray$1,
- toArray: toArray,
- each: each$1,
- map: map$1,
- filter: filter$1,
- indexOf: indexOf$2,
- reduce: reduce,
- findIndex: findIndex$1,
- find: find$1,
- last: last$1
- };
+ return undefined;
+ };
+ var last$1 = function (collection) {
+ return collection[collection.length - 1];
+ };
+ var ArrUtils = {
+ isArray: isArray$1,
+ toArray: toArray,
+ each: each$1,
+ map: map$1,
+ filter: filter$1,
+ indexOf: indexOf$2,
+ reduce: reduce,
+ findIndex: findIndex$1,
+ find: find$1,
+ last: last$1
+ };
- var whiteSpaceRegExp = /^\s*|\s*$/g;
- var trim = function (str) {
- return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp, '');
- };
- var is = function (obj, type) {
- if (!type) {
- return obj !== undefined;
- }
- if (type === 'array' && $_n452lmjnlpawsj.isArray(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 = function (obj, prop) {
- return Object.prototype.hasOwnProperty.call(obj, prop);
- };
- var create = function (s, p, root) {
- var self$$1 = this;
- var sp, ns, cn, scn, c, de = 0;
- s = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(s);
- cn = s[3].match(/(^|\.)(\w+)$/i)[2];
- ns = self$$1.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]);
+ var whiteSpaceRegExp = /^\s*|\s*$/g;
+ var trim = function (str) {
+ return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp, '');
+ };
+ var is = function (obj, type) {
+ if (!type) {
+ return obj !== undefined;
}
- return;
- }
- if (!p[cn]) {
- p[cn] = function () {
- };
- de = 1;
- }
- ns[cn] = p[cn];
- self$$1.extend(ns[cn].prototype, p);
- if (s[5]) {
- sp = self$$1.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);
- };
+ if (type === 'array' && ArrUtils.isArray(obj)) {
+ return true;
}
- ns[cn].prototype[cn] = ns[cn];
- self$$1.each(sp, function (f, n) {
- ns[cn].prototype[n] = sp[n];
- });
- self$$1.each(p, function (f, n) {
- if (sp[n]) {
- ns[cn].prototype[n] = function () {
- this.parent = sp[n];
- return f.apply(this, arguments);
+ 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 = function (obj, prop) {
+ return Object.prototype.hasOwnProperty.call(obj, prop);
+ };
+ var create = function (s, p, root) {
+ var self$$1 = this;
+ var sp, ns, cn, scn, c, de = 0;
+ s = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(s);
+ cn = s[3].match(/(^|\.)(\w+)$/i)[2];
+ ns = self$$1.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$$1.extend(ns[cn].prototype, p);
+ if (s[5]) {
+ sp = self$$1.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 {
- if (n !== cn) {
- ns[cn].prototype[n] = f;
- }
+ ns[cn] = function () {
+ this.parent = sp[scn];
+ return c.apply(this, arguments);
+ };
}
+ ns[cn].prototype[cn] = ns[cn];
+ self$$1.each(sp, function (f, n) {
+ ns[cn].prototype[n] = sp[n];
+ });
+ self$$1.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$$1.each(p.static, function (f, n) {
+ ns[cn][n] = f;
});
- }
- self$$1.each(p.static, function (f, n) {
- ns[cn][n] = f;
- });
- };
- var extend = function (obj, ext) {
- var x = [];
- for (var _i = 2; _i < arguments.length; _i++) {
- x[_i - 2] = arguments[_i];
- }
- var i, l, name$$1;
- var args = arguments;
- var value;
- for (i = 1, l = args.length; i < l; i++) {
- ext = args[i];
- for (name$$1 in ext) {
- if (ext.hasOwnProperty(name$$1)) {
- value = ext[name$$1];
- if (value !== undefined) {
- obj[name$$1] = value;
+ };
+ var extend = function (obj, ext) {
+ var x = [];
+ for (var _i = 2; _i < arguments.length; _i++) {
+ x[_i - 2] = arguments[_i];
+ }
+ var i, l, name$$1;
+ var args = arguments;
+ var value;
+ for (i = 1, l = args.length; i < l; i++) {
+ ext = args[i];
+ for (name$$1 in ext) {
+ if (ext.hasOwnProperty(name$$1)) {
+ 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];
- }
- $_n452lmjnlpawsj.each(o, function (o, i) {
- if (f.call(s, o, i, n) === false) {
- return false;
+ return obj;
+ };
+ var walk = function (o, f, n, s) {
+ s = s || this;
+ if (o) {
+ if (n) {
+ o = o[n];
}
- 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] = {};
+ ArrUtils.each(o, function (o, i) {
+ if (f.call(s, o, i, n) === false) {
+ return false;
+ }
+ walk(o, f, n, s);
+ });
}
- o = o[v];
- }
- return o;
- };
- var resolve$1 = 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;
+ };
+ 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 explode = function (s, d) {
- if (!s || is(s, 'array')) {
- return s;
- }
- return $_n452lmjnlpawsj.map(s.split(d || ','), trim);
- };
- var _addCacheSuffix = function (url) {
- var cacheSuffix = $_cseqobajnlpawll.cacheSuffix;
- if (cacheSuffix) {
- url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix;
- }
- return url;
- };
- var $_1q1txeljnlpawsa = {
- trim: trim,
- isArray: $_n452lmjnlpawsj.isArray,
- is: is,
- toArray: $_n452lmjnlpawsj.toArray,
- makeMap: makeMap,
- each: $_n452lmjnlpawsj.each,
- map: $_n452lmjnlpawsj.map,
- grep: $_n452lmjnlpawsj.filter,
- inArray: $_n452lmjnlpawsj.indexOf,
- hasOwn: hasOwnProperty,
- extend: extend,
- create: create,
- walk: walk,
- createNS: createNS,
- resolve: resolve$1,
- explode: explode,
- _addCacheSuffix: _addCacheSuffix
- };
+ return o;
+ };
+ var resolve$1 = 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 ArrUtils.map(s.split(d || ','), trim);
+ };
+ var _addCacheSuffix = function (url) {
+ var cacheSuffix = Env.cacheSuffix;
+ if (cacheSuffix) {
+ url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix;
+ }
+ return url;
+ };
+ var Tools = {
+ trim: trim,
+ isArray: ArrUtils.isArray,
+ is: is,
+ toArray: ArrUtils.toArray,
+ makeMap: makeMap,
+ each: ArrUtils.each,
+ map: ArrUtils.map,
+ grep: ArrUtils.filter,
+ inArray: ArrUtils.indexOf,
+ hasOwn: hasOwnProperty,
+ extend: extend,
+ create: create,
+ walk: walk,
+ createNS: createNS,
+ resolve: resolve$1,
+ explode: explode,
+ _addCacheSuffix: _addCacheSuffix
+ };
- var doc = document;
- var push$2 = Array.prototype.push;
- var slice$2 = Array.prototype.slice;
- var rquickExpr$1 = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/;
- var Event$$1 = EventUtils.Event;
- var skipUniques = $_1q1txeljnlpawsa.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) {
- var frag, node, container;
- fragDoc = fragDoc || doc;
- container = fragDoc.createElement('div');
- frag = fragDoc.createDocumentFragment();
- container.innerHTML = html;
- 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);
+ var doc = document, push$2 = Array.prototype.push, slice$2 = Array.prototype.slice;
+ var rquickExpr$1 = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/;
+ var Event$$1 = 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) {
+ var frag, node, container;
+ fragDoc = fragDoc || doc;
+ container = fragDoc.createElement('div');
+ frag = fragDoc.createDocumentFragment();
+ container.innerHTML = html;
+ 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);
+ }
}
- } 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;
- }
- if (sourceItem.nodeType) {
- i = targetNodes.length;
+ };
+ var hasClass = function (node, className) {
+ return node && className && (' ' + node.className + ' ').indexOf(' ' + className + ' ') !== -1;
+ };
+ var wrap = function (elements, wrapper, all) {
+ var lastParent, newWrapper;
+ wrapper = DomQuery(wrapper)[0];
+ elements.each(function () {
+ var self$$1 = this;
+ if (!all || lastParent !== self$$1.parentNode) {
+ lastParent = self$$1.parentNode;
+ newWrapper = wrapper.cloneNode(false);
+ self$$1.parentNode.insertBefore(newWrapper, self$$1);
+ newWrapper.appendChild(self$$1);
+ } else {
+ newWrapper.appendChild(self$$1);
+ }
+ });
+ 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 DomQuery = function (selector, context) {
+ return new DomQuery.fn.init(selector, context);
+ };
+ var inArray = function (item, array) {
+ var i;
+ if (array.indexOf) {
+ return array.indexOf(item);
+ }
+ i = array.length;
while (i--) {
- callback.call(targetNodes[i], sourceItem);
+ if (array[i] === item) {
+ return i;
+ }
}
- }
- return targetNodes;
- };
- var hasClass = function (node, className) {
- return node && className && (' ' + node.className + ' ').indexOf(' ' + className + ' ') !== -1;
- };
- var wrap = function (elements, wrapper, all) {
- var lastParent, newWrapper;
- wrapper = DomQuery(wrapper)[0];
- elements.each(function () {
- var self$$1 = this;
- if (!all || lastParent !== self$$1.parentNode) {
- lastParent = self$$1.parentNode;
- newWrapper = wrapper.cloneNode(false);
- self$$1.parentNode.insertBefore(newWrapper, self$$1);
- newWrapper.appendChild(self$$1);
- } else {
- newWrapper.appendChild(self$$1);
- }
- });
- return elements;
- };
- var numericCssMap = $_1q1txeljnlpawsa.makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom', ' ');
- var booleanMap = $_1q1txeljnlpawsa.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 = {};
- var cssHooks = {};
- var DomQuery = function (selector, context) {
- return new DomQuery.fn.init(selector, context);
- };
- var inArray = 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$1 = /^\s*|\s*$/g;
- var trim$1 = function (str) {
- return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp$1, '');
- };
- var each$2 = function (obj, callback) {
- var length$$1, key, i, value;
- if (obj) {
- length$$1 = obj.length;
- if (length$$1 === undefined) {
- for (key in obj) {
- if (obj.hasOwnProperty(key)) {
- value = obj[key];
- if (callback.call(value, key, value) === false) {
+ return -1;
+ };
+ var whiteSpaceRegExp$1 = /^\s*|\s*$/g;
+ var trim$1 = function (str) {
+ return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp$1, '');
+ };
+ var each$2 = function (obj, callback) {
+ var length$$1, key, i, value;
+ if (obj) {
+ length$$1 = obj.length;
+ if (length$$1 === 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$$1; i++) {
+ value = obj[i];
+ if (callback.call(value, i, value) === false) {
break;
}
}
}
- } else {
- for (i = 0; i < length$$1; i++) {
- value = obj[i];
- if (callback.call(value, i, value) === false) {
- break;
- }
- }
}
- }
- return obj;
- };
- var grep = function (array, callback) {
- var out = [];
- each$2(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;
- };
- DomQuery.fn = DomQuery.prototype = {
- constructor: DomQuery,
- selector: '',
- context: null,
- length: 0,
- init: function (selector, context) {
- var self$$1 = this;
- var match, node;
- if (!selector) {
- return self$$1;
- }
- if (selector.nodeType) {
- self$$1.context = self$$1[0] = selector;
- self$$1.length = 1;
- return self$$1;
- }
- if (context && context.nodeType) {
- self$$1.context = context;
- } else {
- if (context) {
- return DomQuery(selector).attr(context);
- }
- self$$1.context = context = document;
- }
- if (isString$1(selector)) {
- self$$1.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$2.call(self$$1, node);
- node = node.nextSibling;
- }
- } else {
- node = getElementDocument(context).getElementById(match[2]);
- if (!node) {
- return self$$1;
- }
- if (node.id !== match[2]) {
- return self$$1.find(selector);
- }
- self$$1.length = 1;
- self$$1[0] = node;
- }
- } else {
- return DomQuery(context).find(selector);
- }
- } else {
- this.add(selector, false);
- }
- return self$$1;
- },
- toArray: function () {
- return $_1q1txeljnlpawsa.toArray(this);
- },
- add: function (items, sort) {
- var self$$1 = this;
- var nodes, i;
- if (isString$1(items)) {
- return self$$1.add(DomQuery(items));
- }
- if (sort !== false) {
- nodes = DomQuery.unique(self$$1.toArray().concat(DomQuery.makeArray(items)));
- self$$1.length = nodes.length;
- for (i = 0; i < nodes.length; i++) {
- self$$1[i] = nodes[i];
- }
- } else {
- push$2.apply(self$$1, DomQuery.makeArray(items));
- }
- return self$$1;
- },
- attr: function (name$$1, value) {
- var self$$1 = this;
- var hook;
- if (typeof name$$1 === 'object') {
- each$2(name$$1, function (name$$1, value) {
- self$$1.attr(name$$1, value);
- });
- } else if (isDefined(value)) {
- this.each(function () {
- var hook;
- if (this.nodeType === 1) {
- hook = attrHooks[name$$1];
- if (hook && hook.set) {
- hook.set(this, value);
- return;
- }
- if (value === null) {
- this.removeAttribute(name$$1, 2);
- } else {
- this.setAttribute(name$$1, value, 2);
- }
- }
- });
- } else {
- if (self$$1[0] && self$$1[0].nodeType === 1) {
- hook = attrHooks[name$$1];
- if (hook && hook.get) {
- return hook.get(self$$1[0], name$$1);
- }
- if (booleanMap[name$$1]) {
- return self$$1.prop(name$$1) ? name$$1 : undefined;
- }
- value = self$$1[0].getAttribute(name$$1, 2);
- if (value === null) {
- value = undefined;
- }
- }
- return value;
- }
- return self$$1;
- },
- removeAttr: function (name$$1) {
- return this.attr(name$$1, null);
- },
- prop: function (name$$1, value) {
- var self$$1 = this;
- name$$1 = propFix[name$$1] || name$$1;
- if (typeof name$$1 === 'object') {
- each$2(name$$1, function (name$$1, value) {
- self$$1.prop(name$$1, value);
- });
- } else if (isDefined(value)) {
- this.each(function () {
- if (this.nodeType === 1) {
- this[name$$1] = value;
- }
- });
- } else {
- if (self$$1[0] && self$$1[0].nodeType && name$$1 in self$$1[0]) {
- return self$$1[0][name$$1];
- }
- return value;
- }
- return self$$1;
- },
- css: function (name$$1, value) {
- var self$$1 = this;
- var elm, hook;
- var camel = function (name$$1) {
- return name$$1.replace(/-(\D)/g, function (a, b) {
- return b.toUpperCase();
- });
- };
- var dashed = function (name$$1) {
- return name$$1.replace(/[A-Z]/g, function (a) {
- return '-' + a;
- });
- };
- if (typeof name$$1 === 'object') {
- each$2(name$$1, function (name$$1, value) {
- self$$1.css(name$$1, value);
- });
- } else {
- if (isDefined(value)) {
- name$$1 = camel(name$$1);
- if (typeof value === 'number' && !numericCssMap[name$$1]) {
- value = value.toString() + 'px';
- }
- self$$1.each(function () {
- var style = this.style;
- hook = cssHooks[name$$1];
- if (hook && hook.set) {
- hook.set(this, value);
- return;
- }
- try {
- this.style[cssFix[name$$1] || name$$1] = value;
- } catch (ex) {
- }
- if (value === null || value === '') {
- if (style.removeProperty) {
- style.removeProperty(dashed(name$$1));
- } else {
- style.removeAttribute(name$$1);
- }
- }
- });
- } else {
- elm = self$$1[0];
- hook = cssHooks[name$$1];
- if (hook && hook.get) {
- return hook.get(elm);
- }
- if (elm.ownerDocument.defaultView) {
- try {
- return elm.ownerDocument.defaultView.getComputedStyle(elm, null).getPropertyValue(dashed(name$$1));
- } catch (ex) {
- return undefined;
- }
- } else if (elm.currentStyle) {
- return elm.currentStyle[camel(name$$1)];
- } else {
- return '';
- }
- }
- }
- return self$$1;
- },
- remove: function () {
- var self$$1 = this;
- var node, i = this.length;
- while (i--) {
- node = self$$1[i];
- Event$$1.clean(node);
- if (node.parentNode) {
- node.parentNode.removeChild(node);
- }
- }
- return this;
- },
- empty: function () {
- var self$$1 = this;
- var node, i = this.length;
- while (i--) {
- node = self$$1[i];
- while (node.firstChild) {
- node.removeChild(node.firstChild);
- }
- }
- return this;
- },
- html: function (value) {
- var self$$1 = this;
- var i;
- if (isDefined(value)) {
- i = self$$1.length;
- try {
- while (i--) {
- self$$1[i].innerHTML = value;
- }
- } catch (ex) {
- DomQuery(self$$1[i]).empty().append(value);
- }
- return self$$1;
- }
- return self$$1[0] ? self$$1[0].innerHTML : '';
- },
- text: function (value) {
- var self$$1 = this;
- var i;
- if (isDefined(value)) {
- i = self$$1.length;
- while (i--) {
- if ('innerText' in self$$1[i]) {
- self$$1[i].innerText = value;
- } else {
- self$$1[0].textContent = value;
- }
- }
- return self$$1;
- }
- return self$$1[0] ? self$$1[0].innerText || self$$1[0].textContent : '';
- },
- append: function () {
- return domManipulate(this, arguments, function (node) {
- if (this.nodeType === 1 || this.host && this.host.nodeType === 1) {
- this.appendChild(node);
+ return obj;
+ };
+ var grep = function (array, callback) {
+ var out = [];
+ each$2(array, function (i, item) {
+ if (callback(item, i)) {
+ out.push(item);
}
});
- },
- 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$$1 = this;
- if (self$$1[0] && self$$1[0].parentNode) {
- return domManipulate(self$$1, arguments, function (node) {
- this.parentNode.insertBefore(node, this);
- });
- }
- return self$$1;
- },
- after: function () {
- var self$$1 = this;
- if (self$$1[0] && self$$1[0].parentNode) {
- return domManipulate(self$$1, arguments, function (node) {
- this.parentNode.insertBefore(node, this.nextSibling);
- }, true);
- }
- return self$$1;
- },
- 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(this, content);
- },
- wrapAll: function (content) {
- return wrap(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$$1 = this;
- if (typeof className !== 'string') {
- return self$$1;
- }
- if (className.indexOf(' ') !== -1) {
- each$2(className.split(' '), function () {
- self$$1.toggleClass(this, state);
- });
- } else {
- self$$1.each(function (index, node) {
- var existingClassName, classState;
- classState = hasClass(node, className);
- if (classState !== state) {
- existingClassName = node.className;
- if (classState) {
- node.className = trim$1((' ' + existingClassName + ' ').replace(' ' + className + ' ', ' '));
- } else {
- node.className += existingClassName ? ' ' + className : className;
- }
- }
- });
- }
- return self$$1;
- },
- hasClass: function (className) {
- return hasClass(this[0], className);
- },
- each: function (callback) {
- return each$2(this, callback);
- },
- on: function (name$$1, callback) {
- return this.each(function () {
- Event$$1.bind(this, name$$1, callback);
- });
- },
- off: function (name$$1, callback) {
- return this.each(function () {
- Event$$1.unbind(this, name$$1, callback);
- });
- },
- trigger: function (name$$1) {
- return this.each(function () {
- if (typeof name$$1 === 'object') {
- Event$$1.fire(this, name$$1.type, name$$1);
- } else {
- Event$$1.fire(this, name$$1);
- }
- });
- },
- show: function () {
- return this.css('display', '');
- },
- hide: function () {
- return this.css('display', 'none');
- },
- slice: function () {
- return new DomQuery(slice$2.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$2,
- sort: [].sort,
- splice: [].splice
- };
- $_1q1txeljnlpawsa.extend(DomQuery, {
- extend: $_1q1txeljnlpawsa.extend,
- makeArray: function (object) {
- if (isWindow(object) || object.nodeType) {
- return [object];
- }
- return $_1q1txeljnlpawsa.toArray(object);
- },
- inArray: inArray,
- isArray: $_1q1txeljnlpawsa.isArray,
- each: each$2,
- trim: trim$1,
- 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 = 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$2({
- parent: function (node) {
- var parent$$1 = node.parentNode;
- return parent$$1 && parent$$1.nodeType !== 11 ? parent$$1 : 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(node.firstChild, 'nextSibling', 1);
- },
- contents: function (node) {
- return $_1q1txeljnlpawsa.toArray((node.nodeName === 'iframe' ? node.contentDocument || node.contentWindow.document : node).childNodes);
- }
- }, function (name$$1, fn) {
- DomQuery.fn[name$$1] = function (selector) {
- var self$$1 = this;
- var result = [];
- self$$1.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$$1]) {
- result = DomQuery.unique(result);
- }
- if (name$$1.indexOf('parents') === 0) {
- result = result.reverse();
- }
- }
- result = DomQuery(result);
- if (selector) {
- return result.filter(selector);
- }
- return result;
- };
- });
- each$2({
- parentsUntil: function (node, until) {
- return dir(node, 'parentNode', until);
- },
- nextUntil: function (node, until) {
- return sibling(node, 'nextSibling', 1, until).slice(1);
- },
- prevUntil: function (node, until) {
- return sibling(node, 'previousSibling', 1, until).slice(1);
- }
- }, function (name$$1, fn) {
- DomQuery.fn[name$$1] = function (selector, filter) {
- var self$$1 = this;
- var result = [];
- self$$1.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$$1.indexOf('parents') === 0 || name$$1 === 'prevUntil') {
- result = result.reverse();
- }
- }
- result = DomQuery(result);
- if (filter) {
- return result.filter(filter);
- }
- return result;
- };
- });
- DomQuery.fn.is = function (selector) {
- return !!selector && this.filter(selector).length > 0;
- };
- DomQuery.fn.init.prototype = DomQuery.fn;
- DomQuery.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;
- };
- var appendHooks = function (targetHooks, prop, hooks) {
- each$2(hooks, function (name$$1, func) {
- targetHooks[name$$1] = targetHooks[name$$1] || {};
- targetHooks[name$$1][prop] = func;
- });
- };
- if ($_cseqobajnlpawll.ie && $_cseqobajnlpawll.ie < 8) {
- appendHooks(attrHooks, 'get', {
- maxlength: function (elm) {
- var value = elm.maxLength;
- if (value === 2147483647) {
- return undefined;
- }
- return value;
- },
- size: function (elm) {
- var value = elm.size;
- if (value === 20) {
- return undefined;
- }
- return value;
- },
- class: function (elm) {
- return elm.className;
- },
- style: function (elm) {
- var value = elm.style.cssText;
- if (value.length === 0) {
- return undefined;
- }
- return value;
- }
- });
- appendHooks(attrHooks, 'set', {
- class: function (elm, value) {
- elm.className = value;
- },
- style: function (elm, value) {
- elm.style.cssText = value;
- }
- });
- }
- if ($_cseqobajnlpawll.ie && $_cseqobajnlpawll.ie < 9) {
- cssFix.float = 'styleFloat';
- appendHooks(cssHooks, 'set', {
- opacity: function (elm, value) {
- var style = elm.style;
- if (value === null || value === '') {
- style.removeAttribute('filter');
- } else {
- style.zoom = 1;
- style.filter = 'alpha(opacity=' + value * 100 + ')';
- }
- }
- });
- }
- DomQuery.attrHooks = attrHooks;
- DomQuery.cssHooks = cssHooks;
-
- 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 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$2 = 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$2(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 edge = 'Edge';
- var chrome = 'Chrome';
- var ie$1 = 'IE';
- var opera$1 = 'Opera';
- var firefox = 'Firefox';
- var safari = 'Safari';
- var isBrowser = function (name, current) {
- return function () {
- return current === name;
- };
- };
- 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;
- return {
- current: current,
- version: version,
- isEdge: isBrowser(edge, current),
- isChrome: isBrowser(chrome, current),
- isIE: isBrowser(ie$1, current),
- isOpera: isBrowser(opera$1, current),
- isFirefox: isBrowser(firefox, current),
- isSafari: isBrowser(safari, current)
- };
- };
- var Browser = {
- unknown: unknown$1,
- nu: nu$1,
- edge: constant(edge),
- chrome: constant(chrome),
- ie: constant(ie$1),
- opera: constant(opera$1),
- firefox: constant(firefox),
- safari: constant(safari)
- };
-
- var windows = 'Windows';
- var ios = 'iOS';
- var android$1 = 'Android';
- var linux = 'Linux';
- var osx = 'OSX';
- var solaris = 'Solaris';
- var freebsd = 'FreeBSD';
- var isOS = function (name, current) {
- return function () {
- return current === name;
- };
- };
- 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;
- return {
- current: current,
- version: version,
- isWindows: isOS(windows, current),
- isiOS: isOS(ios, current),
- isAndroid: isOS(android$1, current),
- isOSX: isOS(osx, current),
- isLinux: isOS(linux, current),
- isSolaris: isOS(solaris, current),
- isFreeBSD: isOS(freebsd, current)
+ return out;
};
- };
- var OperatingSystem = {
- unknown: unknown$2,
- nu: nu$2,
- windows: constant(windows),
- ios: constant(ios),
- android: constant(android$1),
- linux: constant(linux),
- osx: constant(osx),
- solaris: constant(solaris),
- freebsd: constant(freebsd)
- };
-
- var DeviceType = function (os, browser, userAgent) {
- var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;
- var isiPhone = os.isiOS() && !isiPad;
- var isAndroid3 = os.isAndroid() && os.version.major === 3;
- var isAndroid4 = os.isAndroid() && os.version.major === 4;
- var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;
- var isTouch = os.isiOS() || os.isAndroid();
- var isPhone = isTouch && !isTablet;
- var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;
- 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)
- };
- };
-
- 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 contains$2 = function (str, substr) {
- return str.indexOf(substr) !== -1;
- };
-
-
-
- var trim$2 = function (str) {
- return str.replace(/^\s+|\s+$/g, '');
- };
-
- var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/;
- var checkContains = function (target) {
- return function (uastring) {
- return contains$2(uastring, target);
- };
- };
- var browsers = [
- {
- name: 'Edge',
- versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
- search: function (uastring) {
- var monstrosity = contains$2(uastring, 'edge/') && contains$2(uastring, 'chrome') && contains$2(uastring, 'safari') && contains$2(uastring, 'applewebkit');
- return monstrosity;
- }
- },
- {
- name: 'Chrome',
- versionRegexes: [
- /.*?chrome\/([0-9]+)\.([0-9]+).*/,
- normalVersionRegex
- ],
- search: function (uastring) {
- return contains$2(uastring, 'chrome') && !contains$2(uastring, 'chromeframe');
- }
- },
- {
- name: 'IE',
- versionRegexes: [
- /.*?msie\ ?([0-9]+)\.([0-9]+).*/,
- /.*?rv:([0-9]+)\.([0-9]+).*/
- ],
- search: function (uastring) {
- return contains$2(uastring, 'msie') || contains$2(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$2(uastring, 'safari') || contains$2(uastring, 'mobile/')) && contains$2(uastring, 'applewebkit');
- }
- }
- ];
- var oses = [
- {
- name: 'Windows',
- search: checkContains('win'),
- versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
- },
- {
- name: 'iOS',
- search: function (uastring) {
- return contains$2(uastring, 'iphone') || contains$2(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('os x'),
- versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]
- },
- {
- name: 'Linux',
- search: checkContains('linux'),
- versionRegexes: []
- },
- {
- name: 'Solaris',
- search: checkContains('sunos'),
- versionRegexes: []
- },
- {
- name: 'FreeBSD',
- search: checkContains('freebsd'),
- versionRegexes: []
- }
- ];
- var PlatformInfo = {
- browsers: constant(browsers),
- oses: constant(oses)
- };
-
- var detect$2 = function (userAgent) {
- 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);
- return {
- browser: browser,
- os: os,
- deviceType: deviceType
- };
- };
- var PlatformDetection = { detect: detect$2 };
-
- var detect$3 = cached(function () {
- var userAgent = navigator.userAgent;
- return PlatformDetection.detect(userAgent);
- });
- var $_766rx4ojnlpawtd = { detect: detect$3 };
-
- 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 '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: constant(node) };
- };
- var fromPoint = function (docElm, x, y) {
- var doc = docElm.dom();
- return Option.from(doc.elementFromPoint(x, y)).map(fromDom);
- };
- var Element$$1 = {
- fromHtml: fromHtml,
- fromTag: fromTag,
- fromText: fromText,
- fromDom: fromDom,
- fromPoint: fromPoint
- };
-
- var $_8b12q912jnlpawv7 = {
- ATTRIBUTE: Node.ATTRIBUTE_NODE,
- CDATA_SECTION: Node.CDATA_SECTION_NODE,
- COMMENT: Node.COMMENT_NODE,
- DOCUMENT: Node.DOCUMENT_NODE,
- DOCUMENT_TYPE: Node.DOCUMENT_TYPE_NODE,
- DOCUMENT_FRAGMENT: Node.DOCUMENT_FRAGMENT_NODE,
- ELEMENT: Node.ELEMENT_NODE,
- TEXT: Node.TEXT_NODE,
- PROCESSING_INSTRUCTION: Node.PROCESSING_INSTRUCTION_NODE,
- ENTITY_REFERENCE: Node.ENTITY_REFERENCE_NODE,
- ENTITY: Node.ENTITY_NODE,
- NOTATION: Node.NOTATION_NODE
- };
-
- var name = function (element) {
- var r = element.dom().nodeName;
- return r.toLowerCase();
- };
- var type = function (element) {
- return element.dom().nodeType;
- };
- var value = function (element) {
- return element.dom().nodeValue;
- };
- var isType$1 = function (t) {
- return function (element) {
- return type(element) === t;
- };
- };
- var isComment = function (element) {
- return type(element) === $_8b12q912jnlpawv7.COMMENT || name(element) === '#comment';
- };
- var isElement = isType$1($_8b12q912jnlpawv7.ELEMENT);
- var isText = isType$1($_8b12q912jnlpawv7.TEXT);
- var isDocument = isType$1($_8b12q912jnlpawv7.DOCUMENT);
- var $_7u5fzs11jnlpawv6 = {
- name: name,
- type: type,
- value: value,
- isElement: isElement,
- isText: isText,
- isDocument: isDocument,
- isComment: isComment
- };
-
- var keys = Object.keys;
-
- var each$3 = 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, obj);
- }
- };
- var map$2 = function (obj, f) {
- return tupleMap(obj, function (x, i, obj) {
- return {
- k: i,
- v: f(x, i, obj)
- };
- });
- };
- var tupleMap = function (obj, f) {
- var r = {};
- each$3(obj, function (x, i) {
- var tuple = f(x, i, obj);
- r[tuple.k] = tuple.v;
- });
- return r;
- };
- var bifilter = function (obj, pred) {
- var t = {};
- var f = {};
- each$3(obj, function (x, i) {
- var branch = pred(x, i) ? t : f;
- branch[i] = x;
- });
- return {
- t: t,
- f: f
- };
- };
-
- var rawSet = function (dom, key, value) {
- if (isString(value) || isBoolean(value) || isNumber(value)) {
- dom.setAttribute(key, value + '');
- } else {
- console.error('Invalid call to Attr.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$3(attrs, function (v, k) {
- rawSet(dom, k, v);
- });
- };
- var get$1 = function (element, key) {
- var v = element.dom().getAttribute(key);
- return v === null ? undefined : v;
- };
- var has$1 = function (element, key) {
- var dom = element.dom();
- return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;
- };
- var remove = function (element, key) {
- element.dom().removeAttribute(key);
- };
- var hasNone = function (element) {
- var attrs = element.dom().attributes;
- return attrs === undefined || attrs === null || attrs.length === 0;
- };
- var clone = function (element) {
- return foldl(element.dom().attributes, function (acc, attr) {
- acc[attr.name] = attr.value;
- return acc;
- }, {});
- };
- var transferOne = function (source, destination, attr) {
- if (has$1(source, attr) && !has$1(destination, attr))
- set(destination, attr, get$1(source, attr));
- };
- var transfer = function (source, destination, attrs) {
- if (!$_7u5fzs11jnlpawv6.isElement(source) || !$_7u5fzs11jnlpawv6.isElement(destination))
- return;
- each(attrs, function (attr) {
- transferOne(source, destination, attr);
- });
- };
- var $_521j8z15jnlpawz7 = {
- clone: clone,
- set: set,
- setAll: setAll,
- get: get$1,
- has: has$1,
- remove: remove,
- hasNone: hasNone,
- transfer: transfer
- };
-
- var inBody = function (element) {
- var dom = $_7u5fzs11jnlpawv6.isText(element) ? element.dom().parentNode : element.dom();
- return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);
- };
- var body = cached(function () {
- return getBody(Element$$1.fromDom(document));
- });
- var getBody = function (doc) {
- var body = doc.dom().body;
- if (body === null || body === undefined)
- throw 'Body is not available yet';
- return Element$$1.fromDom(body);
- };
- var $_1lsags16jnlpawzj = {
- body: body,
- getBody: getBody,
- inBody: inBody
- };
-
- var isSupported = function (dom) {
- return dom.style !== undefined;
- };
- var $_1z4orl17jnlpawzp = { isSupported: isSupported };
-
- 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 ($_1z4orl17jnlpawzp.isSupported(dom))
- dom.style.setProperty(property, value);
- };
- var internalRemove = function (dom, property) {
- if ($_1z4orl17jnlpawzp.isSupported(dom))
- dom.style.removeProperty(property);
- };
- var set$1 = function (element, property, value) {
- var dom = element.dom();
- internalSet(dom, property, value);
- };
- var setAll$1 = function (element, css) {
- var dom = element.dom();
- each$3(css, function (v, k) {
- internalSet(dom, k, v);
- });
- };
- var setOptions = function (element, css) {
- var dom = element.dom();
- each$3(css, function (v, k) {
- v.fold(function () {
- internalRemove(dom, k);
- }, function (value) {
- internalSet(dom, k, value);
- });
- });
- };
- var get$2 = function (element, property) {
- var dom = element.dom();
- var styles = window.getComputedStyle(dom);
- var r = styles.getPropertyValue(property);
- var v = r === '' && !$_1lsags16jnlpawzj.inBody(element) ? getUnsafeProperty(dom, property) : r;
- return v === null ? undefined : v;
- };
- var getUnsafeProperty = function (dom, property) {
- return $_1z4orl17jnlpawzp.isSupported(dom) ? dom.style.getPropertyValue(property) : '';
- };
- var getRaw = function (element, property) {
- var dom = element.dom();
- var raw = getUnsafeProperty(dom, property);
- return Option.from(raw).filter(function (r) {
- return r.length > 0;
- });
- };
- var getAllRaw = function (element) {
- var css = {};
- var dom = element.dom();
- if ($_1z4orl17jnlpawzp.isSupported(dom)) {
- for (var i = 0; i < dom.style.length; i++) {
- var ruleName = dom.style.item(i);
- css[ruleName] = dom.style[ruleName];
- }
- }
- return css;
- };
- var isValidValue = function (tag, property, value) {
- var element = Element$$1.fromTag(tag);
- set$1(element, property, value);
- var style = getRaw(element, property);
- return style.isSome();
- };
- var remove$1 = function (element, property) {
- var dom = element.dom();
- internalRemove(dom, property);
- if ($_521j8z15jnlpawz7.has(element, 'style') && trim$2($_521j8z15jnlpawz7.get(element, 'style')) === '') {
- $_521j8z15jnlpawz7.remove(element, 'style');
- }
- };
- var preserve = function (element, f) {
- var oldStyles = $_521j8z15jnlpawz7.get(element, 'style');
- var result = f(element);
- var restore = oldStyles === undefined ? $_521j8z15jnlpawz7.remove : $_521j8z15jnlpawz7.set;
- restore(element, 'style', oldStyles);
- return result;
- };
- var copy = function (source, target) {
- var sourceDom = source.dom();
- var targetDom = target.dom();
- if ($_1z4orl17jnlpawzp.isSupported(sourceDom) && $_1z4orl17jnlpawzp.isSupported(targetDom)) {
- targetDom.style.cssText = sourceDom.style.cssText;
- }
- };
- var reflow = function (e) {
- return e.dom().offsetWidth;
- };
- var transferOne$1 = function (source, destination, style) {
- getRaw(source, style).each(function (value) {
- if (getRaw(destination, style).isNone())
- set$1(destination, style, value);
- });
- };
- var transfer$1 = function (source, destination, styles) {
- if (!$_7u5fzs11jnlpawv6.isElement(source) || !$_7u5fzs11jnlpawv6.isElement(destination))
- return;
- each(styles, function (style) {
- transferOne$1(source, destination, style);
- });
- };
- var $_asiuhf13jnlpawvc = {
- copy: copy,
- set: set$1,
- preserve: preserve,
- setAll: setAll$1,
- setOptions: setOptions,
- remove: remove$1,
- get: get$2,
- getRaw: getRaw,
- getAllRaw: getAllRaw,
- isValidValue: isValidValue,
- reflow: reflow,
- transfer: transfer$1
- };
-
- var Immutable = function () {
- var fields = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- fields[_i] = arguments[_i];
- }
- return function () {
- var values = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- values[_i] = arguments[_i];
+ var getElementDocument = function (element) {
+ if (!element) {
+ return doc;
}
- if (fields.length !== values.length) {
- throw new Error('Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments');
- }
- var struct = {};
- each(fields, function (name, i) {
- struct[name] = constant(values[i]);
- });
- return struct;
- };
- };
-
- 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 $_arqw5m1djnlpax0i = { toArray: toArray$1 };
-
- var node = function () {
- var f = $_3b2dlgcjnlpawlt.getOrDie('Node');
- return f;
- };
- var compareDocumentPosition = function (a, b, match) {
- return (a.compareDocumentPosition(b) & match) !== 0;
- };
- var documentPositionPreceding = function (a, b) {
- return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);
- };
- var documentPositionContainedBy = function (a, b) {
- return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);
- };
- var $_eo508y1fjnlpax0w = {
- documentPositionPreceding: documentPositionPreceding,
- documentPositionContainedBy: documentPositionContainedBy
- };
-
- var ELEMENT = $_8b12q912jnlpawv7.ELEMENT;
- var DOCUMENT = $_8b12q912jnlpawv7.DOCUMENT;
- var is$1 = function (element, selector) {
- var elem = element.dom();
- if (elem.nodeType !== ELEMENT)
- return false;
- else 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.childElementCount === 0;
- };
- var all = function (selector, scope) {
- var base = scope === undefined ? document : scope.dom();
- return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element$$1.fromDom);
- };
- var one = function (selector, scope) {
- var base = scope === undefined ? document : scope.dom();
- return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element$$1.fromDom);
- };
- var $_d8v5lf1gjnlpax0y = {
- all: all,
- is: is$1,
- one: one
- };
-
- var eq = function (e1, e2) {
- return e1.dom() === e2.dom();
- };
- var isEqualNode = function (e1, e2) {
- return e1.dom().isEqualNode(e2.dom());
- };
- var member = function (element, elements) {
- return exists(elements, curry(eq, element));
- };
- var regularContains = function (e1, e2) {
- var d1 = e1.dom(), d2 = e2.dom();
- return d1 === d2 ? false : d1.contains(d2);
- };
- var ieContains = function (e1, e2) {
- return $_eo508y1fjnlpax0w.documentPositionContainedBy(e1.dom(), e2.dom());
- };
- var browser = $_766rx4ojnlpawtd.detect().browser;
- var contains$3 = browser.isIE() ? ieContains : regularContains;
- var $_5h7cor1ejnlpax0k = {
- eq: eq,
- isEqualNode: isEqualNode,
- member: member,
- contains: contains$3,
- is: $_d8v5lf1gjnlpax0y.is
- };
-
- var owner = function (element) {
- return Element$$1.fromDom(element.dom().ownerDocument);
- };
- var documentElement = function (element) {
- return Element$$1.fromDom(element.dom().ownerDocument.documentElement);
- };
- var defaultView = function (element) {
- var el = element.dom();
- var defaultView = el.ownerDocument.defaultView;
- return Element$$1.fromDom(defaultView);
- };
- var parent = function (element) {
- var dom = element.dom();
- return Option.from(dom.parentNode).map(Element$$1.fromDom);
- };
- var findIndex$2 = function (element) {
- return parent(element).bind(function (p) {
- var kin = children(p);
- return findIndex(kin, function (elem) {
- return $_5h7cor1ejnlpax0k.eq(element, elem);
- });
- });
- };
- var parents = function (element, isRoot) {
- var stop = isFunction(isRoot) ? isRoot : constant(false);
- var dom = element.dom();
- var ret = [];
- while (dom.parentNode !== null && dom.parentNode !== undefined) {
- var rawParent = dom.parentNode;
- var parent = Element$$1.fromDom(rawParent);
- ret.push(parent);
- if (stop(parent) === true)
- break;
- else
- dom = rawParent;
- }
- return ret;
- };
- var siblings = function (element) {
- var filterSelf = function (elements) {
- return filter(elements, function (x) {
- return !$_5h7cor1ejnlpax0k.eq(element, x);
- });
- };
- return parent(element).map(children).map(filterSelf).getOr([]);
- };
- var offsetParent = function (element) {
- var dom = element.dom();
- return Option.from(dom.offsetParent).map(Element$$1.fromDom);
- };
- var prevSibling = function (element) {
- var dom = element.dom();
- return Option.from(dom.previousSibling).map(Element$$1.fromDom);
- };
- var nextSibling = function (element) {
- var dom = element.dom();
- return Option.from(dom.nextSibling).map(Element$$1.fromDom);
- };
- var prevSiblings = function (element) {
- return reverse($_arqw5m1djnlpax0i.toArray(element, prevSibling));
- };
- var nextSiblings = function (element) {
- return $_arqw5m1djnlpax0i.toArray(element, nextSibling);
- };
- var children = function (element) {
- var dom = element.dom();
- return map(dom.childNodes, Element$$1.fromDom);
- };
- var child = function (element, index) {
- var children = element.dom().childNodes;
- return Option.from(children[index]).map(Element$$1.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 hasChildNodes = function (element) {
- return element.dom().hasChildNodes();
- };
- var spot = Immutable('element', 'offset');
- var leaf = function (element, offset) {
- var cs = children(element);
- return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);
- };
- var $_dr4ybh18jnlpawzt = {
- owner: owner,
- defaultView: defaultView,
- documentElement: documentElement,
- parent: parent,
- findIndex: findIndex$2,
- parents: parents,
- siblings: siblings,
- prevSibling: prevSibling,
- offsetParent: offsetParent,
- prevSiblings: prevSiblings,
- nextSibling: nextSibling,
- nextSiblings: nextSiblings,
- children: children,
- child: child,
- firstChild: firstChild,
- lastChild: lastChild,
- childNodesCount: childNodesCount,
- hasChildNodes: hasChildNodes,
- leaf: leaf
- };
-
- var browser$1 = $_766rx4ojnlpawtd.detect().browser;
- var firstElement = function (nodes) {
- return find(nodes, $_7u5fzs11jnlpawv6.isElement);
- };
- var getTableCaptionDeltaY = function (elm) {
- if (browser$1.isFirefox() && $_7u5fzs11jnlpawv6.name(elm) === 'table') {
- return firstElement($_dr4ybh18jnlpawzt.children(elm)).filter(function (elm) {
- return $_7u5fzs11jnlpawv6.name(elm) === 'caption';
- }).bind(function (caption) {
- return firstElement($_dr4ybh18jnlpawzt.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 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 && $_asiuhf13jnlpawvc.get(Element$$1.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) {
- x += offsetParent.offsetLeft || 0;
- y += offsetParent.offsetTop || 0;
- offsetParent = offsetParent.offsetParent;
- }
- offsetParent = elm.parentNode;
- while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType) {
- x -= offsetParent.scrollLeft || 0;
- y -= offsetParent.scrollTop || 0;
- offsetParent = offsetParent.parentNode;
- }
- y += getTableCaptionDeltaY(Element$$1.fromDom(elm));
- }
- return {
- x: x,
- y: y
- };
- };
- var $_9kqe0nnjnlpawsp = { getPos: getPos };
-
- var nu$3 = function (baseFn) {
- var data = Option.none();
- var callbacks = [];
- var map$$1 = 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) {
- data = Option.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$$1,
- isReady: isReady
- };
- };
- var pure$1 = function (a) {
- return nu$3(function (callback) {
- callback(a);
- });
- };
- var LazyValue = {
- nu: nu$3,
- pure: pure$1
- };
-
- var bounce = function (f) {
- return function () {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- var me = this;
- setTimeout(function () {
- f.apply(me, args);
- }, 0);
- };
- };
-
- var nu$4 = function (baseFn) {
- var get = function (callback) {
- baseFn(bounce(callback));
- };
- var map = function (fab) {
- return nu$4(function (callback) {
- get(function (a) {
- var value = fab(a);
- callback(value);
- });
- });
- };
- var bind = function (aFutureB) {
- return nu$4(function (callback) {
- get(function (a) {
- aFutureB(a).get(callback);
- });
- });
- };
- var anonBind = function (futureB) {
- return nu$4(function (callback) {
- get(function (a) {
- futureB.get(callback);
- });
- });
- };
- var toLazy = function () {
- return LazyValue.nu(get);
- };
- var toCached = function () {
- var cache = null;
- return nu$4(function (callback) {
- if (cache === null) {
- cache = toLazy();
- }
- cache.get(callback);
- });
- };
- return {
- map: map,
- bind: bind,
- anonBind: anonBind,
- toLazy: toLazy,
- toCached: toCached,
- get: get
- };
- };
- var pure$2 = function (a) {
- return nu$4(function (callback) {
- callback(a);
- });
- };
- var Future = {
- nu: nu$4,
- pure: pure$2
- };
-
- 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$1 = function (o) {
- var is = function (v) {
- return o === v;
- };
- var or = function (opt) {
- return value$1(o);
- };
- var orThunk = function (f) {
- return value$1(o);
- };
- var map = function (f) {
- return value$1(f(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 toOption = function () {
- return Option.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,
- each: each,
- bind: bind,
- exists: exists,
- forall: forall,
- toOption: toOption
- };
- };
- 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 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,
- each: noop,
- bind: bind,
- exists: never,
- forall: always,
- toOption: Option.none
- };
- };
- var Result = {
- value: value$1,
- error: error
- };
-
- function StyleSheetLoader(document$$1, settings) {
- var idCount = 0;
- var loadedStates = {};
- var maxLoadTime;
- settings = settings || {};
- maxLoadTime = settings.maxLoadTime || 5000;
- var appendToHead = function (node) {
- document$$1.getElementsByTagName('head')[0].appendChild(node);
- };
- var load = function (url, loadedCallback, errorCallback) {
- var link, style, startTime, state;
- var passed = function () {
- var callbacks = state.passed;
- var i = callbacks.length;
- while (i--) {
- callbacks[i]();
- }
- state.status = 2;
- state.passed = [];
- state.failed = [];
- };
- var failed = function () {
- var callbacks = state.failed;
- var i = callbacks.length;
- while (i--) {
- callbacks[i]();
- }
- state.status = 3;
- state.passed = [];
- state.failed = [];
- };
- var isOldWebKit = function () {
- var webKitChunks = navigator.userAgent.match(/WebKit\/(\d*)/);
- return !!(webKitChunks && parseInt(webKitChunks[1], 10) < 536);
- };
- var wait = function (testCallback, waitCallback) {
- if (!testCallback()) {
- if (new Date().getTime() - startTime < maxLoadTime) {
- $_2nbnh1ijnlpawpi.setTimeout(waitCallback);
- } else {
- failed();
- }
- }
- };
- var waitForWebKitLinkLoaded = function () {
- wait(function () {
- var styleSheets = document$$1.styleSheets;
- var styleSheet, i = styleSheets.length, owner;
- while (i--) {
- styleSheet = styleSheets[i];
- owner = styleSheet.ownerNode ? styleSheet.ownerNode : styleSheet.owningElement;
- if (owner && owner.id === link.id) {
- passed();
- return true;
- }
- }
- }, waitForWebKitLinkLoaded);
- };
- var waitForGeckoLinkLoaded = function () {
- wait(function () {
- try {
- var cssRules = style.sheet.cssRules;
- passed();
- return !!cssRules;
- } catch (ex) {
- }
- }, waitForGeckoLinkLoaded);
- };
- url = $_1q1txeljnlpawsa._addCacheSuffix(url);
- if (!loadedStates[url]) {
- state = {
- passed: [],
- failed: []
- };
- loadedStates[url] = state;
- } else {
- state = loadedStates[url];
- }
- if (loadedCallback) {
- state.passed.push(loadedCallback);
- }
- if (errorCallback) {
- state.failed.push(errorCallback);
- }
- if (state.status === 1) {
- return;
- }
- if (state.status === 2) {
- passed();
- return;
- }
- if (state.status === 3) {
- failed();
- return;
- }
- state.status = 1;
- link = document$$1.createElement('link');
- link.rel = 'stylesheet';
- link.type = 'text/css';
- link.id = 'u' + idCount++;
- link.async = false;
- link.defer = false;
- link.crossOrigin = 'anonymous';
- startTime = new Date().getTime();
- if ('onload' in link && !isOldWebKit()) {
- link.onload = waitForWebKitLinkLoaded;
- link.onerror = failed;
- } else {
- if (navigator.userAgent.indexOf('Firefox') > 0) {
- style = document$$1.createElement('style');
- style.textContent = '@import "' + url + '"';
- waitForGeckoLinkLoaded();
- appendToHead(style);
- return;
- }
- waitForWebKitLinkLoaded();
- }
- appendToHead(link);
- link.href = url;
- };
- var loadF = function (url) {
- return Future.nu(function (resolve) {
- load(url, compose(resolve, constant(Result.value(url))), compose(resolve, constant(Result.error(url))));
- });
- };
- var unbox = function (result) {
- return result.fold(identity, identity);
- };
- 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(unbox));
- } else {
- success(parts.pass.map(unbox));
- }
- });
- };
- return {
- load: load,
- loadAll: loadAll
- };
- }
-
- function TreeWalker (startNode, rootNode) {
- var node = startNode;
- var findSibling = function (node, startName, siblingName, shallow) {
- var sibling, parent;
- if (node) {
- if (!shallow && node[startName]) {
- return node[startName];
- }
- if (node !== rootNode) {
- sibling = node[siblingName];
- if (sibling) {
- return sibling;
- }
- for (parent = node.parentNode; parent && parent !== rootNode; parent = parent.parentNode) {
- sibling = parent[siblingName];
- if (sibling) {
- return sibling;
- }
- }
- }
- }
- };
- var findPreviousNode = function (node, startName, siblingName, shallow) {
- var sibling, parent, child;
- if (node) {
- sibling = node[siblingName];
- if (rootNode && sibling === 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 !== rootNode) {
- return parent;
- }
- }
- };
- this.current = function () {
- return node;
- };
- this.next = function (shallow) {
- node = findSibling(node, 'firstChild', 'nextSibling', shallow);
- return node;
- };
- this.prev = function (shallow) {
- node = findSibling(node, 'lastChild', 'previousSibling', shallow);
- return node;
- };
- this.prev2 = function (shallow) {
- node = findPreviousNode(node, 'lastChild', 'previousSibling', shallow);
- return node;
- };
- }
-
- 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 voids = [
- 'area',
- 'base',
- 'basefont',
- 'br',
- 'col',
- 'frame',
- 'hr',
- 'img',
- 'input',
- 'isindex',
- 'link',
- 'meta',
- 'param',
- 'embed',
- 'source',
- 'wbr',
- 'track'
- ];
- 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, constant(true));
- return lookup.hasOwnProperty($_7u5fzs11jnlpawv6.name(node));
- };
- };
- var isHeading = lazyLookup(headings);
- var isBlock = lazyLookup(blocks);
- var isInline = function (node) {
- return $_7u5fzs11jnlpawv6.isElement(node) && !isBlock(node);
- };
- var isBr = function (node) {
- return $_7u5fzs11jnlpawv6.isElement(node) && $_7u5fzs11jnlpawv6.name(node) === 'br';
- };
- var isTextBlock = lazyLookup(textBlocks);
- var isList = lazyLookup(lists);
- var isListItem = lazyLookup(listItems);
- var isVoid = lazyLookup(voids);
- var isTableSection = lazyLookup(tableSections);
- var isTableCell = lazyLookup(tableCells);
- var isWsPreserveElement = lazyLookup(wsElements);
-
- var isNodeType = function (type) {
- return function (node) {
- return !!node && node.nodeType === type;
- };
- };
- var isElement$1 = isNodeType(1);
- var matchNodeNames = function (names) {
- var items = names.toLowerCase().split(' ');
- return function (node) {
- var i, name;
- if (node && node.nodeType) {
- name = node.nodeName.toLowerCase();
- for (i = 0; i < items.length; i++) {
- if (name === items[i]) {
- return true;
- }
- }
- }
- 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 hasPropValue = function (propName, propValue) {
- return function (node) {
- return isElement$1(node) && node[propName] === propValue;
- };
- };
- var hasAttribute = function (attrName, attrValue) {
- 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 isText$1 = isNodeType(3);
- var isComment$1 = isNodeType(8);
- var isDocument$1 = isNodeType(9);
- var isBr$1 = matchNodeNames('br');
- var isContentEditableTrue = hasContentEditableState('true');
- var isContentEditableFalse = hasContentEditableState('false');
- var $_fy28ei1rjnlpax2o = {
- isText: isText$1,
- isElement: isElement$1,
- isComment: isComment$1,
- isDocument: isDocument$1,
- isBr: isBr$1,
- isContentEditableTrue: isContentEditableTrue,
- isContentEditableFalse: isContentEditableFalse,
- matchNodeNames: matchNodeNames,
- hasPropValue: hasPropValue,
- hasAttribute: hasAttribute,
- hasAttributeValue: hasAttributeValue,
- matchStyleValues: matchStyleValues,
- isBogus: isBogus,
- isBogusAll: isBogusAll,
- isTable: isTable
- };
-
- var surroundedBySpans = function (node) {
- var previousIsSpan = node.previousSibling && node.previousSibling.nodeName === 'SPAN';
- var nextIsSpan = node.nextSibling && node.nextSibling.nodeName === 'SPAN';
- return previousIsSpan && nextIsSpan;
- };
- var isBookmarkNode = function (node) {
- return node && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';
- };
- var trimNode = function (dom, node) {
- var i, children = node.childNodes;
- if ($_fy28ei1rjnlpax2o.isElement(node) && isBookmarkNode(node)) {
- return;
- }
- for (i = children.length - 1; i >= 0; i--) {
- trimNode(dom, children[i]);
- }
- if ($_fy28ei1rjnlpax2o.isDocument(node) === false) {
- if ($_fy28ei1rjnlpax2o.isText(node) && node.nodeValue.length > 0) {
- var trimmedLength = $_1q1txeljnlpawsa.trim(node.nodeValue).length;
- if (dom.isBlock(node.parentNode) || trimmedLength > 0) {
- return;
- }
- if (trimmedLength === 0 && surroundedBySpans(node)) {
- return;
- }
- } else if ($_fy28ei1rjnlpax2o.isElement(node)) {
- children = node.childNodes;
- if (children.length === 1 && isBookmarkNode(children[0])) {
- node.parentNode.insertBefore(children[0], node);
- }
- if (children.length || isVoid(Element$$1.fromDom(node))) {
- return;
- }
- }
- dom.remove(node);
- }
- return node;
- };
- var $_7nxzh21pjnlpax26 = { trimNode: trimNode };
-
- var makeMap$1 = $_1q1txeljnlpawsa.makeMap;
- var namedEntities;
- var baseEntities;
- var reverseEntities;
- 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'
- };
- baseEntities = {
- '"': '"',
- '\'': ''',
- '<': '<',
- '>': '>',
- '&': '&',
- '`': '`'
- };
- reverseEntities = {
- '<': '<',
- '>': '>',
- '&': '&',
- '"': '"',
- ''': '\''
- };
- var nativeDecode = function (text) {
- var elm;
- elm = Element$$1.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;
- }
- };
- 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 $_bea7j51sjnlpax2u = {
- encodeRaw: encodeRaw,
- encodeAllRaw: encodeAllRaw,
- encodeNumeric: encodeNumeric,
- encodeNamed: encodeNamed,
- getEncodeFunc: getEncodeFunc,
- decode: decode
- };
-
- var mapCache = {};
- var dummyObj = {};
- var makeMap$2 = $_1q1txeljnlpawsa.makeMap;
- var each$4 = $_1q1txeljnlpawsa.each;
- var extend$1 = $_1q1txeljnlpawsa.extend;
- var explode$1 = $_1q1txeljnlpawsa.explode;
- var inArray$1 = $_1q1txeljnlpawsa.inArray;
- var split = function (items, delim) {
- items = $_1q1txeljnlpawsa.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);
- }
- name = split(name);
- ni = name.length;
- while (ni--) {
- attributesOrder = split([
- globalAttributes,
- attributes
- ].join(' '));
- element = {
- attributes: arrayToMap(attributesOrder),
- attributesOrder: attributesOrder,
- children: arrayToMap(children, dummyObj)
- };
- schema[name[ni]] = element;
- }
- };
- var addAttrs = function (name, attributes) {
- var ni, schemaItem, i, l;
- name = split(name);
- ni = name.length;
- attributes = split(attributes);
- while (ni--) {
- schemaItem = schema[name[ni]];
- for (i = 0, l = attributes.length; i < l; i++) {
- schemaItem.attributes[attributes[i]] = {};
- schemaItem.attributesOrder.push(attributes[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$4(split(html4PhrasingContent), function (name) {
- add(name, '', phrasingContent);
- });
- html4BlockContent = 'center dir isindex noframes';
- blockContent = [
- blockContent,
- html4BlockContent
- ].join(' ');
- flowContent = [
- blockContent,
- phrasingContent
- ].join(' ');
- each$4(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', 'onchange');
- 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('iframe', 'sandbox seamless allowfullscreen');
- }
- each$4(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$4(value, function (value, key) {
- styles[key] = styles[key.toUpperCase()] = mode === 'map' ? makeMap$2(value, /[, ]/) : explode$1(value, /[, ]/);
- });
- }
- return styles;
- };
- function Schema(settings) {
- var elements = {};
- var children = {};
- var patternElements = [];
- var validStyles;
- var invalidStyles;
- var schemaItems;
- var whiteSpaceElementsMap, selfClosingElementsMap, shortEndedElementsMap, boolAttrMap, validClasses;
- var blockElementsMap, nonEmptyElementsMap, moveCaretBeforeOnEnterElementsMap, textBlockElementsMap, textInlineElementsMap;
- 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 || {};
- schemaItems = compileSchema(settings.schema);
- if (settings.verify_html === false) {
- settings.valid_elements = '*[*]';
- }
- validStyles = compileElementMap(settings.valid_styles);
- invalidStyles = compileElementMap(settings.invalid_styles, 'map');
- validClasses = compileElementMap(settings.valid_classes, 'map');
- whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code');
- selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');
- shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track');
- boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls');
- nonEmptyElementsMap = createLookupTable('non_empty_elements', 'td th iframe video audio object ' + 'script pre code', shortEndedElementsMap);
- moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', 'table', nonEmptyElementsMap);
- 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');
- 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);
- textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font strike u var cite ' + 'dfn code mark q sup sub samp');
- each$4((settings.special || 'script noscript noframes noembed title style textarea xmp').split(' '), function (name) {
- specialElements[name] = new RegExp('' + name + '[^>]*>', '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, key, value;
- var elementRuleRegExp = /^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/, attrRuleRegExp = /^([!\-])?(\w+[\\:]:\w+|[^=:<]+)?(?:([=:<])(.*))?$/, hasPatternsRegExp = /[*?+]/;
- if (validElements) {
- validElements = split(validElements, ',');
- if (elements['@']) {
- globalAttributes = elements['@'].attributes;
- globalAttributesOrder = elements['@'].attributesOrder;
- }
- for (ei = 0, el = validElements.length; ei < el; ei++) {
- matches = elementRuleRegExp.exec(validElements[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) {
- for (key in globalAttributes) {
- attributes[key] = globalAttributes[key];
- }
- 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$1(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$4(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$4(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$4(children, function (element, elmName) {
- if (element[cloneName]) {
- children[elmName] = element = extend$1({}, children[elmName]);
- element[name] = element[cloneName];
- }
- });
- });
- }
- };
- var addValidChildren = function (validChildren) {
- var childRuleRegExp = /^([+\-]?)(\w+)\[([^\]]+)\]$/;
- mapCache[settings.schema] = null;
- if (validChildren) {
- each$4(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$4(split(matches[3], '|'), function (child) {
- if (prefix === '-') {
- delete parent[child];
- } else {
- parent[child] = {};
- }
- });
- }
- });
- }
- };
- var getElementRule = function (name) {
- var element = elements[name], i;
- if (element) {
+ if (element.nodeType === 9) {
return element;
}
- i = patternElements.length;
- while (i--) {
- element = patternElements[i];
- if (element.pattern.test(name)) {
- return element;
- }
- }
+ return element.ownerDocument;
};
- if (!settings.valid_elements) {
- each$4(schemaItems, function (element, name) {
- elements[name] = {
- attributes: element.attributes,
- attributesOrder: element.attributesOrder
- };
- children[name] = element.children;
- });
- if (settings.schema !== 'html5') {
- each$4(split('strong/b em/i'), function (item) {
- item = split(item, '/');
- elements[item[1]].outputName = item[0];
- });
- }
- each$4(split('ol ul sub sup blockquote span font a table tbody tr strong em b i'), function (name) {
- if (elements[name]) {
- elements[name].removeEmpty = true;
+ DomQuery.fn = DomQuery.prototype = {
+ constructor: DomQuery,
+ selector: '',
+ context: null,
+ length: 0,
+ init: function (selector, context) {
+ var self$$1 = this;
+ var match, node;
+ if (!selector) {
+ return self$$1;
}
- });
- each$4(split('p h1 h2 h3 h4 h5 h6 th td pre div address caption li'), function (name) {
- elements[name].paddEmpty = true;
- });
- each$4(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$4({
- 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 (selector.nodeType) {
+ self$$1.context = self$$1[0] = selector;
+ self$$1.length = 1;
+ return self$$1;
+ }
+ if (context && context.nodeType) {
+ self$$1.context = context;
+ } else {
+ if (context) {
+ return DomQuery(selector).attr(context);
+ }
+ self$$1.context = context = document;
+ }
+ if (isString$1(selector)) {
+ self$$1.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$2.call(self$$1, node);
+ node = node.nextSibling;
+ }
+ } else {
+ node = getElementDocument(context).getElementById(match[2]);
+ if (!node) {
+ return self$$1;
+ }
+ if (node.id !== match[2]) {
+ return self$$1.find(selector);
+ }
+ self$$1.length = 1;
+ self$$1[0] = node;
+ }
+ } else {
+ return DomQuery(context).find(selector);
+ }
+ } else {
+ this.add(selector, false);
+ }
+ return self$$1;
+ },
+ toArray: function () {
+ return Tools.toArray(this);
+ },
+ add: function (items, sort) {
+ var self$$1 = this;
+ var nodes, i;
+ if (isString$1(items)) {
+ return self$$1.add(DomQuery(items));
+ }
+ if (sort !== false) {
+ nodes = DomQuery.unique(self$$1.toArray().concat(DomQuery.makeArray(items)));
+ self$$1.length = nodes.length;
+ for (i = 0; i < nodes.length; i++) {
+ self$$1[i] = nodes[i];
+ }
+ } else {
+ push$2.apply(self$$1, DomQuery.makeArray(items));
+ }
+ return self$$1;
+ },
+ attr: function (name$$1, value) {
+ var self$$1 = this;
+ var hook;
+ if (typeof name$$1 === 'object') {
+ each$2(name$$1, function (name$$1, value) {
+ self$$1.attr(name$$1, value);
+ });
+ } else if (isDefined(value)) {
+ this.each(function () {
+ var hook;
+ if (this.nodeType === 1) {
+ hook = attrHooks[name$$1];
+ if (hook && hook.set) {
+ hook.set(this, value);
+ return;
+ }
+ if (value === null) {
+ this.removeAttribute(name$$1, 2);
+ } else {
+ this.setAttribute(name$$1, value, 2);
+ }
+ }
+ });
+ } else {
+ if (self$$1[0] && self$$1[0].nodeType === 1) {
+ hook = attrHooks[name$$1];
+ if (hook && hook.get) {
+ return hook.get(self$$1[0], name$$1);
+ }
+ if (booleanMap[name$$1]) {
+ return self$$1.prop(name$$1) ? name$$1 : undefined;
+ }
+ value = self$$1[0].getAttribute(name$$1, 2);
+ if (value === null) {
+ value = undefined;
+ }
+ }
+ return value;
+ }
+ return self$$1;
+ },
+ removeAttr: function (name$$1) {
+ return this.attr(name$$1, null);
+ },
+ prop: function (name$$1, value) {
+ var self$$1 = this;
+ name$$1 = propFix[name$$1] || name$$1;
+ if (typeof name$$1 === 'object') {
+ each$2(name$$1, function (name$$1, value) {
+ self$$1.prop(name$$1, value);
+ });
+ } else if (isDefined(value)) {
+ this.each(function () {
+ if (this.nodeType === 1) {
+ this[name$$1] = value;
+ }
+ });
+ } else {
+ if (self$$1[0] && self$$1[0].nodeType && name$$1 in self$$1[0]) {
+ return self$$1[0][name$$1];
+ }
+ return value;
+ }
+ return self$$1;
+ },
+ css: function (name$$1, value) {
+ var self$$1 = this;
+ var elm, hook;
+ var camel = function (name$$1) {
+ return name$$1.replace(/-(\D)/g, function (a, b) {
+ return b.toUpperCase();
+ });
+ };
+ var dashed = function (name$$1) {
+ return name$$1.replace(/[A-Z]/g, function (a) {
+ return '-' + a;
+ });
+ };
+ if (typeof name$$1 === 'object') {
+ each$2(name$$1, function (name$$1, value) {
+ self$$1.css(name$$1, value);
+ });
+ } else {
+ if (isDefined(value)) {
+ name$$1 = camel(name$$1);
+ if (typeof value === 'number' && !numericCssMap[name$$1]) {
+ value = value.toString() + 'px';
+ }
+ self$$1.each(function () {
+ var style = this.style;
+ hook = cssHooks[name$$1];
+ if (hook && hook.set) {
+ hook.set(this, value);
+ return;
+ }
+ try {
+ this.style[cssFix[name$$1] || name$$1] = value;
+ } catch (ex) {
+ }
+ if (value === null || value === '') {
+ if (style.removeProperty) {
+ style.removeProperty(dashed(name$$1));
+ } else {
+ style.removeAttribute(name$$1);
+ }
+ }
+ });
+ } else {
+ elm = self$$1[0];
+ hook = cssHooks[name$$1];
+ if (hook && hook.get) {
+ return hook.get(elm);
+ }
+ if (elm.ownerDocument.defaultView) {
+ try {
+ return elm.ownerDocument.defaultView.getComputedStyle(elm, null).getPropertyValue(dashed(name$$1));
+ } catch (ex) {
+ return undefined;
+ }
+ } else if (elm.currentStyle) {
+ return elm.currentStyle[camel(name$$1)];
+ } else {
+ return '';
+ }
+ }
+ }
+ return self$$1;
+ },
+ remove: function () {
+ var self$$1 = this;
+ var node, i = this.length;
+ while (i--) {
+ node = self$$1[i];
+ Event$$1.clean(node);
+ if (node.parentNode) {
+ node.parentNode.removeChild(node);
+ }
+ }
+ return this;
+ },
+ empty: function () {
+ var self$$1 = this;
+ var node, i = this.length;
+ while (i--) {
+ node = self$$1[i];
+ while (node.firstChild) {
+ node.removeChild(node.firstChild);
+ }
+ }
+ return this;
+ },
+ html: function (value) {
+ var self$$1 = this;
+ var i;
+ if (isDefined(value)) {
+ i = self$$1.length;
+ try {
+ while (i--) {
+ self$$1[i].innerHTML = value;
+ }
+ } catch (ex) {
+ DomQuery(self$$1[i]).empty().append(value);
+ }
+ return self$$1;
+ }
+ return self$$1[0] ? self$$1[0].innerHTML : '';
+ },
+ text: function (value) {
+ var self$$1 = this;
+ var i;
+ if (isDefined(value)) {
+ i = self$$1.length;
+ while (i--) {
+ if ('innerText' in self$$1[i]) {
+ self$$1[i].innerText = value;
+ } else {
+ self$$1[0].textContent = value;
+ }
+ }
+ return self$$1;
+ }
+ return self$$1[0] ? self$$1[0].innerText || self$$1[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$$1 = this;
+ if (self$$1[0] && self$$1[0].parentNode) {
+ return domManipulate(self$$1, arguments, function (node) {
+ this.parentNode.insertBefore(node, this);
+ });
+ }
+ return self$$1;
+ },
+ after: function () {
+ var self$$1 = this;
+ if (self$$1[0] && self$$1[0].parentNode) {
+ return domManipulate(self$$1, arguments, function (node) {
+ this.parentNode.insertBefore(node, this.nextSibling);
+ }, true);
+ }
+ return self$$1;
+ },
+ 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(this, content);
+ },
+ wrapAll: function (content) {
+ return wrap(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$$1 = this;
+ if (typeof className !== 'string') {
+ return self$$1;
+ }
+ if (className.indexOf(' ') !== -1) {
+ each$2(className.split(' '), function () {
+ self$$1.toggleClass(this, state);
+ });
+ } else {
+ self$$1.each(function (index, node) {
+ var existingClassName, classState;
+ classState = hasClass(node, className);
+ if (classState !== state) {
+ existingClassName = node.className;
+ if (classState) {
+ node.className = trim$1((' ' + existingClassName + ' ').replace(' ' + className + ' ', ' '));
+ } else {
+ node.className += existingClassName ? ' ' + className : className;
+ }
+ }
+ });
+ }
+ return self$$1;
+ },
+ hasClass: function (className) {
+ return hasClass(this[0], className);
+ },
+ each: function (callback) {
+ return each$2(this, callback);
+ },
+ on: function (name$$1, callback) {
+ return this.each(function () {
+ Event$$1.bind(this, name$$1, callback);
+ });
+ },
+ off: function (name$$1, callback) {
+ return this.each(function () {
+ Event$$1.unbind(this, name$$1, callback);
+ });
+ },
+ trigger: function (name$$1) {
+ return this.each(function () {
+ if (typeof name$$1 === 'object') {
+ Event$$1.fire(this, name$$1.type, name$$1);
+ } else {
+ Event$$1.fire(this, name$$1);
+ }
+ });
+ },
+ show: function () {
+ return this.css('display', '');
+ },
+ hide: function () {
+ return this.css('display', 'none');
+ },
+ slice: function () {
+ return new DomQuery(slice$2.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$2,
+ sort: [].sort,
+ splice: [].splice
+ };
+ Tools.extend(DomQuery, {
+ extend: Tools.extend,
+ makeArray: function (object) {
+ if (isWindow(object) || object.nodeType) {
+ return [object];
+ }
+ return Tools.toArray(object);
+ },
+ inArray: inArray,
+ isArray: Tools.isArray,
+ each: each$2,
+ trim: trim$1,
+ 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;
}
});
- if (settings.invalid_elements) {
- each$4(explode$1(settings.invalid_elements), function (item) {
- if (elements[item]) {
- delete elements[item];
+ 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 = 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$2({
+ parent: function (node) {
+ var parent$$1 = node.parentNode;
+ return parent$$1 && parent$$1.nodeType !== 11 ? parent$$1 : 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(node.firstChild, 'nextSibling', 1);
+ },
+ contents: function (node) {
+ return Tools.toArray((node.nodeName === 'iframe' ? node.contentDocument || node.contentWindow.document : node).childNodes);
+ }
+ }, function (name$$1, fn) {
+ DomQuery.fn[name$$1] = function (selector) {
+ var self$$1 = this;
+ var result = [];
+ self$$1.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$$1]) {
+ result = DomQuery.unique(result);
+ }
+ if (name$$1.indexOf('parents') === 0) {
+ result = result.reverse();
+ }
+ }
+ result = DomQuery(result);
+ if (selector) {
+ return result.filter(selector);
+ }
+ return result;
+ };
+ });
+ each$2({
+ parentsUntil: function (node, until) {
+ return dir(node, 'parentNode', until);
+ },
+ nextUntil: function (node, until) {
+ return sibling(node, 'nextSibling', 1, until).slice(1);
+ },
+ prevUntil: function (node, until) {
+ return sibling(node, 'previousSibling', 1, until).slice(1);
+ }
+ }, function (name$$1, fn) {
+ DomQuery.fn[name$$1] = function (selector, filter) {
+ var self$$1 = this;
+ var result = [];
+ self$$1.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$$1.indexOf('parents') === 0 || name$$1 === 'prevUntil') {
+ result = result.reverse();
+ }
+ }
+ result = DomQuery(result);
+ if (filter) {
+ return result.filter(filter);
+ }
+ return result;
+ };
+ });
+ DomQuery.fn.is = function (selector) {
+ return !!selector && this.filter(selector).length > 0;
+ };
+ DomQuery.fn.init.prototype = DomQuery.fn;
+ DomQuery.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;
+ };
+ var appendHooks = function (targetHooks, prop, hooks) {
+ each$2(hooks, function (name$$1, func) {
+ targetHooks[name$$1] = targetHooks[name$$1] || {};
+ targetHooks[name$$1][prop] = func;
+ });
+ };
+ if (Env.ie && Env.ie < 8) {
+ appendHooks(attrHooks, 'get', {
+ maxlength: function (elm) {
+ var value = elm.maxLength;
+ if (value === 2147483647) {
+ return undefined;
+ }
+ return value;
+ },
+ size: function (elm) {
+ var value = elm.size;
+ if (value === 20) {
+ return undefined;
+ }
+ return value;
+ },
+ class: function (elm) {
+ return elm.className;
+ },
+ style: function (elm) {
+ var value = elm.style.cssText;
+ if (value.length === 0) {
+ return undefined;
+ }
+ return value;
+ }
+ });
+ appendHooks(attrHooks, 'set', {
+ class: function (elm, value) {
+ elm.className = value;
+ },
+ style: function (elm, value) {
+ elm.style.cssText = value;
}
});
}
- 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;
+ if (Env.ie && Env.ie < 9) {
+ cssFix.float = 'styleFloat';
+ appendHooks(cssHooks, 'set', {
+ opacity: function (elm, value) {
+ var style = elm.style;
+ if (value === null || value === '') {
+ style.removeAttribute('filter');
+ } else {
+ style.zoom = 1;
+ style.filter = 'alpha(opacity=' + value * 100 + ')';
}
- attrPatterns = rule.attributePatterns;
- if (attrPatterns) {
- i = attrPatterns.length;
+ }
+ });
+ }
+ DomQuery.attrHooks = attrHooks;
+ DomQuery.cssHooks = cssHooks;
+
+ 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 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$2 = 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$2(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 edge = 'Edge';
+ var chrome = 'Chrome';
+ var ie$1 = 'IE';
+ var opera$1 = 'Opera';
+ var firefox = 'Firefox';
+ var safari = 'Safari';
+ var isBrowser = function (name, current) {
+ return function () {
+ return current === name;
+ };
+ };
+ 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;
+ return {
+ current: current,
+ version: version,
+ isEdge: isBrowser(edge, current),
+ isChrome: isBrowser(chrome, current),
+ isIE: isBrowser(ie$1, current),
+ isOpera: isBrowser(opera$1, current),
+ isFirefox: isBrowser(firefox, current),
+ isSafari: isBrowser(safari, current)
+ };
+ };
+ var Browser = {
+ unknown: unknown$1,
+ nu: nu$1,
+ edge: constant(edge),
+ chrome: constant(chrome),
+ ie: constant(ie$1),
+ opera: constant(opera$1),
+ firefox: constant(firefox),
+ safari: constant(safari)
+ };
+
+ var windows = 'Windows';
+ var ios = 'iOS';
+ var android$1 = 'Android';
+ var linux = 'Linux';
+ var osx = 'OSX';
+ var solaris = 'Solaris';
+ var freebsd = 'FreeBSD';
+ var isOS = function (name, current) {
+ return function () {
+ return current === name;
+ };
+ };
+ 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;
+ return {
+ current: current,
+ version: version,
+ isWindows: isOS(windows, current),
+ isiOS: isOS(ios, current),
+ isAndroid: isOS(android$1, current),
+ isOSX: isOS(osx, current),
+ isLinux: isOS(linux, current),
+ isSolaris: isOS(solaris, current),
+ isFreeBSD: isOS(freebsd, current)
+ };
+ };
+ var OperatingSystem = {
+ unknown: unknown$2,
+ nu: nu$2,
+ windows: constant(windows),
+ ios: constant(ios),
+ android: constant(android$1),
+ linux: constant(linux),
+ osx: constant(osx),
+ solaris: constant(solaris),
+ freebsd: constant(freebsd)
+ };
+
+ var DeviceType = function (os, browser, userAgent) {
+ var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;
+ var isiPhone = os.isiOS() && !isiPad;
+ var isAndroid3 = os.isAndroid() && os.version.major === 3;
+ var isAndroid4 = os.isAndroid() && os.version.major === 4;
+ var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;
+ var isTouch = os.isiOS() || os.isAndroid();
+ var isPhone = isTouch && !isTablet;
+ var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;
+ 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)
+ };
+ };
+
+ 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 contains$2 = function (str, substr) {
+ return str.indexOf(substr) !== -1;
+ };
+ var trim$2 = function (str) {
+ return str.replace(/^\s+|\s+$/g, '');
+ };
+ var lTrim = function (str) {
+ return str.replace(/^\s+/g, '');
+ };
+ var rTrim = function (str) {
+ return str.replace(/\s+$/g, '');
+ };
+
+ var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/;
+ var checkContains = function (target) {
+ return function (uastring) {
+ return contains$2(uastring, target);
+ };
+ };
+ var browsers = [
+ {
+ name: 'Edge',
+ versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
+ search: function (uastring) {
+ var monstrosity = contains$2(uastring, 'edge/') && contains$2(uastring, 'chrome') && contains$2(uastring, 'safari') && contains$2(uastring, 'applewebkit');
+ return monstrosity;
+ }
+ },
+ {
+ name: 'Chrome',
+ versionRegexes: [
+ /.*?chrome\/([0-9]+)\.([0-9]+).*/,
+ normalVersionRegex
+ ],
+ search: function (uastring) {
+ return contains$2(uastring, 'chrome') && !contains$2(uastring, 'chromeframe');
+ }
+ },
+ {
+ name: 'IE',
+ versionRegexes: [
+ /.*?msie\ ?([0-9]+)\.([0-9]+).*/,
+ /.*?rv:([0-9]+)\.([0-9]+).*/
+ ],
+ search: function (uastring) {
+ return contains$2(uastring, 'msie') || contains$2(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$2(uastring, 'safari') || contains$2(uastring, 'mobile/')) && contains$2(uastring, 'applewebkit');
+ }
+ }
+ ];
+ var oses = [
+ {
+ name: 'Windows',
+ search: checkContains('win'),
+ versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
+ },
+ {
+ name: 'iOS',
+ search: function (uastring) {
+ return contains$2(uastring, 'iphone') || contains$2(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('os x'),
+ versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]
+ },
+ {
+ name: 'Linux',
+ search: checkContains('linux'),
+ versionRegexes: []
+ },
+ {
+ name: 'Solaris',
+ search: checkContains('sunos'),
+ versionRegexes: []
+ },
+ {
+ name: 'FreeBSD',
+ search: checkContains('freebsd'),
+ versionRegexes: []
+ }
+ ];
+ var PlatformInfo = {
+ browsers: constant(browsers),
+ oses: constant(oses)
+ };
+
+ var detect$2 = function (userAgent) {
+ 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);
+ return {
+ browser: browser,
+ os: os,
+ deviceType: deviceType
+ };
+ };
+ var PlatformDetection = { detect: detect$2 };
+
+ var detect$3 = cached(function () {
+ var userAgent = navigator.userAgent;
+ return PlatformDetection.detect(userAgent);
+ });
+ var PlatformDetection$1 = { detect: detect$3 };
+
+ 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 '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: constant(node) };
+ };
+ var fromPoint = function (docElm, x, y) {
+ var doc = docElm.dom();
+ return Option.from(doc.elementFromPoint(x, y)).map(fromDom);
+ };
+ var Element$$1 = {
+ fromHtml: fromHtml,
+ fromTag: fromTag,
+ fromText: fromText,
+ fromDom: fromDom,
+ fromPoint: fromPoint
+ };
+
+ var ATTRIBUTE = Node.ATTRIBUTE_NODE;
+ var CDATA_SECTION = Node.CDATA_SECTION_NODE;
+ var COMMENT = Node.COMMENT_NODE;
+ var DOCUMENT = Node.DOCUMENT_NODE;
+ var DOCUMENT_TYPE = Node.DOCUMENT_TYPE_NODE;
+ var DOCUMENT_FRAGMENT = Node.DOCUMENT_FRAGMENT_NODE;
+ var ELEMENT = Node.ELEMENT_NODE;
+ var TEXT = Node.TEXT_NODE;
+ var PROCESSING_INSTRUCTION = Node.PROCESSING_INSTRUCTION_NODE;
+ var ENTITY_REFERENCE = Node.ENTITY_REFERENCE_NODE;
+ var ENTITY = Node.ENTITY_NODE;
+ var NOTATION = Node.NOTATION_NODE;
+
+ 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 isElement = isType$1(ELEMENT);
+ var isText = isType$1(TEXT);
+
+ var keys = Object.keys;
+ var hasOwnProperty$1 = Object.hasOwnProperty;
+ var each$3 = 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, obj);
+ }
+ };
+ var map$2 = function (obj, f) {
+ return tupleMap(obj, function (x, i, obj) {
+ return {
+ k: i,
+ v: f(x, i, obj)
+ };
+ });
+ };
+ var tupleMap = function (obj, f) {
+ var r = {};
+ each$3(obj, function (x, i) {
+ var tuple = f(x, i, obj);
+ r[tuple.k] = tuple.v;
+ });
+ return r;
+ };
+ var bifilter = function (obj, pred) {
+ var t = {};
+ var f = {};
+ each$3(obj, function (x, i) {
+ var branch = pred(x, i) ? t : f;
+ branch[i] = x;
+ });
+ return {
+ t: t,
+ f: f
+ };
+ };
+ var has = function (obj, key) {
+ return hasOwnProperty$1.call(obj, key);
+ };
+
+ var rawSet = function (dom, key, value$$1) {
+ if (isString(value$$1) || isBoolean(value$$1) || isNumber(value$$1)) {
+ dom.setAttribute(key, value$$1 + '');
+ } else {
+ console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value$$1, ':: Element ', dom);
+ throw new Error('Attribute value was not simple');
+ }
+ };
+ var set = function (element, key, value$$1) {
+ rawSet(element.dom(), key, value$$1);
+ };
+ var setAll = function (element, attrs) {
+ var dom = element.dom();
+ each$3(attrs, function (v, k) {
+ rawSet(dom, k, v);
+ });
+ };
+ var get$1 = function (element, key) {
+ var v = element.dom().getAttribute(key);
+ return v === null ? undefined : v;
+ };
+ var has$1 = function (element, key) {
+ var dom = element.dom();
+ return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;
+ };
+ var remove = function (element, key) {
+ element.dom().removeAttribute(key);
+ };
+
+ var inBody = function (element) {
+ var dom = isText(element) ? element.dom().parentNode : element.dom();
+ return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);
+ };
+
+ var isSupported = function (dom) {
+ return dom.style !== undefined;
+ };
+
+ var internalSet = function (dom, property, value$$1) {
+ if (!isString(value$$1)) {
+ console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value$$1, ':: Element ', dom);
+ throw new Error('CSS value must be a string: ' + value$$1);
+ }
+ if (isSupported(dom))
+ dom.style.setProperty(property, value$$1);
+ };
+ var setAll$1 = function (element, css) {
+ var dom = element.dom();
+ each$3(css, function (v, k) {
+ internalSet(dom, k, v);
+ });
+ };
+ var get$2 = function (element, property) {
+ var dom = element.dom();
+ var styles = window.getComputedStyle(dom);
+ var r = styles.getPropertyValue(property);
+ var v = r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;
+ return v === null ? undefined : v;
+ };
+ var getUnsafeProperty = function (dom, property) {
+ return isSupported(dom) ? dom.style.getPropertyValue(property) : '';
+ };
+ var getRaw = function (element, property) {
+ var dom = element.dom();
+ var raw = getUnsafeProperty(dom, property);
+ return Option.from(raw).filter(function (r) {
+ return r.length > 0;
+ });
+ };
+
+ var Immutable = function () {
+ var fields = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ fields[_i] = arguments[_i];
+ }
+ return function () {
+ var values = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ values[_i] = arguments[_i];
+ }
+ if (fields.length !== values.length) {
+ throw new Error('Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments');
+ }
+ var struct = {};
+ each(fields, function (name, i) {
+ struct[name] = constant(values[i]);
+ });
+ return struct;
+ };
+ };
+
+ 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 Recurse = { toArray: toArray$1 };
+
+ var node = function () {
+ var f = Global$1.getOrDie('Node');
+ return f;
+ };
+ var compareDocumentPosition = function (a, b, match) {
+ return (a.compareDocumentPosition(b) & match) !== 0;
+ };
+ var documentPositionPreceding = function (a, b) {
+ return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);
+ };
+ var documentPositionContainedBy = function (a, b) {
+ return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);
+ };
+ var Node$1 = {
+ documentPositionPreceding: documentPositionPreceding,
+ documentPositionContainedBy: documentPositionContainedBy
+ };
+
+ var ELEMENT$1 = ELEMENT;
+ var DOCUMENT$1 = DOCUMENT;
+ var is$1 = function (element, selector) {
+ var elem = element.dom();
+ if (elem.nodeType !== ELEMENT$1)
+ return false;
+ else 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$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;
+ };
+ var all = function (selector, scope) {
+ var base = scope === undefined ? document : scope.dom();
+ return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element$$1.fromDom);
+ };
+ var one = function (selector, scope) {
+ var base = scope === undefined ? document : scope.dom();
+ return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element$$1.fromDom);
+ };
+
+ var eq = function (e1, e2) {
+ return e1.dom() === e2.dom();
+ };
+ var regularContains = function (e1, e2) {
+ var d1 = e1.dom(), d2 = e2.dom();
+ return d1 === d2 ? false : d1.contains(d2);
+ };
+ var ieContains = function (e1, e2) {
+ return Node$1.documentPositionContainedBy(e1.dom(), e2.dom());
+ };
+ var browser = PlatformDetection$1.detect().browser;
+ var contains$3 = browser.isIE() ? ieContains : regularContains;
+
+ var owner = function (element) {
+ return Element$$1.fromDom(element.dom().ownerDocument);
+ };
+ var documentElement = function (element) {
+ return Element$$1.fromDom(element.dom().ownerDocument.documentElement);
+ };
+ var defaultView = function (element) {
+ var el = element.dom();
+ var defaultView = el.ownerDocument.defaultView;
+ return Element$$1.fromDom(defaultView);
+ };
+ var parent = function (element) {
+ var dom = element.dom();
+ return Option.from(dom.parentNode).map(Element$$1.fromDom);
+ };
+ var parents = function (element, isRoot) {
+ var stop = isFunction(isRoot) ? isRoot : constant(false);
+ var dom = element.dom();
+ var ret = [];
+ while (dom.parentNode !== null && dom.parentNode !== undefined) {
+ var rawParent = dom.parentNode;
+ var parent = Element$$1.fromDom(rawParent);
+ ret.push(parent);
+ if (stop(parent) === true)
+ break;
+ else
+ dom = rawParent;
+ }
+ return ret;
+ };
+ var prevSibling = function (element) {
+ var dom = element.dom();
+ return Option.from(dom.previousSibling).map(Element$$1.fromDom);
+ };
+ var nextSibling = function (element) {
+ var dom = element.dom();
+ return Option.from(dom.nextSibling).map(Element$$1.fromDom);
+ };
+ var prevSiblings = function (element) {
+ return reverse(Recurse.toArray(element, prevSibling));
+ };
+ var nextSiblings = function (element) {
+ return Recurse.toArray(element, nextSibling);
+ };
+ var children = function (element) {
+ var dom = element.dom();
+ return map(dom.childNodes, Element$$1.fromDom);
+ };
+ var child = function (element, index) {
+ var children = element.dom().childNodes;
+ return Option.from(children[index]).map(Element$$1.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 spot = Immutable('element', 'offset');
+
+ var browser$1 = PlatformDetection$1.detect().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 getPos = function (body, elm, rootElm) {
+ var x = 0, y = 0, offsetParent$$1;
+ var doc = body.ownerDocument;
+ var pos;
+ rootElm = rootElm ? rootElm : body;
+ if (elm) {
+ if (rootElm === body && elm.getBoundingClientRect && get$2(Element$$1.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$$1 = elm;
+ while (offsetParent$$1 && offsetParent$$1 !== rootElm && offsetParent$$1.nodeType) {
+ x += offsetParent$$1.offsetLeft || 0;
+ y += offsetParent$$1.offsetTop || 0;
+ offsetParent$$1 = offsetParent$$1.offsetParent;
+ }
+ offsetParent$$1 = elm.parentNode;
+ while (offsetParent$$1 && offsetParent$$1 !== rootElm && offsetParent$$1.nodeType) {
+ x -= offsetParent$$1.scrollLeft || 0;
+ y -= offsetParent$$1.scrollTop || 0;
+ offsetParent$$1 = offsetParent$$1.parentNode;
+ }
+ y += getTableCaptionDeltaY(Element$$1.fromDom(elm));
+ }
+ return {
+ x: x,
+ y: y
+ };
+ };
+ var Position = { getPos: getPos };
+
+ var nu$3 = function (baseFn) {
+ var data = Option.none();
+ var callbacks = [];
+ var map$$1 = 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) {
+ data = Option.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$$1,
+ isReady: isReady
+ };
+ };
+ var pure$1 = function (a) {
+ return nu$3(function (callback) {
+ callback(a);
+ });
+ };
+ var LazyValue = {
+ nu: nu$3,
+ pure: pure$1
+ };
+
+ var bounce = function (f) {
+ return function () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ var me = this;
+ setTimeout(function () {
+ f.apply(me, args);
+ }, 0);
+ };
+ };
+
+ var nu$4 = function (baseFn) {
+ var get = function (callback) {
+ baseFn(bounce(callback));
+ };
+ var map = function (fab) {
+ return nu$4(function (callback) {
+ get(function (a) {
+ var value = fab(a);
+ callback(value);
+ });
+ });
+ };
+ var bind = function (aFutureB) {
+ return nu$4(function (callback) {
+ get(function (a) {
+ aFutureB(a).get(callback);
+ });
+ });
+ };
+ var anonBind = function (futureB) {
+ return nu$4(function (callback) {
+ get(function (a) {
+ futureB.get(callback);
+ });
+ });
+ };
+ var toLazy = function () {
+ return LazyValue.nu(get);
+ };
+ var toCached = function () {
+ var cache = null;
+ return nu$4(function (callback) {
+ if (cache === null) {
+ cache = toLazy();
+ }
+ cache.get(callback);
+ });
+ };
+ return {
+ map: map,
+ bind: bind,
+ anonBind: anonBind,
+ toLazy: toLazy,
+ toCached: toCached,
+ get: get
+ };
+ };
+ var pure$2 = function (a) {
+ return nu$4(function (callback) {
+ callback(a);
+ });
+ };
+ var Future = {
+ nu: nu$4,
+ pure: pure$2
+ };
+
+ 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$1 = function (o) {
+ var is = function (v) {
+ return o === v;
+ };
+ var or = function (opt) {
+ return value$1(o);
+ };
+ var orThunk = function (f) {
+ return value$1(o);
+ };
+ var map = function (f) {
+ return value$1(f(o));
+ };
+ var mapError = function (f) {
+ return value$1(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 toOption = function () {
+ return Option.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,
+ toOption: toOption
+ };
+ };
+ 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,
+ toOption: Option.none
+ };
+ };
+ var Result = {
+ value: value$1,
+ error: error
+ };
+
+ function StyleSheetLoader(document$$1, settings) {
+ if (settings === void 0) {
+ settings = {};
+ }
+ var idCount = 0;
+ var loadedStates = {};
+ var maxLoadTime;
+ maxLoadTime = settings.maxLoadTime || 5000;
+ var appendToHead = function (node) {
+ document$$1.getElementsByTagName('head')[0].appendChild(node);
+ };
+ var load = function (url, loadedCallback, errorCallback) {
+ var link, style, startTime, state;
+ var passed = function () {
+ var callbacks = state.passed;
+ var i = callbacks.length;
+ while (i--) {
+ callbacks[i]();
+ }
+ state.status = 2;
+ state.passed = [];
+ state.failed = [];
+ };
+ var failed = function () {
+ var callbacks = state.failed;
+ var i = callbacks.length;
+ while (i--) {
+ callbacks[i]();
+ }
+ state.status = 3;
+ state.passed = [];
+ state.failed = [];
+ };
+ var isOldWebKit = function () {
+ var webKitChunks = navigator.userAgent.match(/WebKit\/(\d*)/);
+ return !!(webKitChunks && parseInt(webKitChunks[1], 10) < 536);
+ };
+ var wait = function (testCallback, waitCallback) {
+ if (!testCallback()) {
+ if (new Date().getTime() - startTime < maxLoadTime) {
+ Delay.setTimeout(waitCallback);
+ } else {
+ failed();
+ }
+ }
+ };
+ var waitForWebKitLinkLoaded = function () {
+ wait(function () {
+ var styleSheets = document$$1.styleSheets;
+ var styleSheet, i = styleSheets.length, owner;
while (i--) {
- if (attrPatterns[i].pattern.test(name)) {
+ styleSheet = styleSheets[i];
+ owner = styleSheet.ownerNode ? styleSheet.ownerNode : styleSheet.owningElement;
+ if (owner && owner.id === link.id) {
+ passed();
return true;
}
}
+ }, waitForWebKitLinkLoaded);
+ };
+ var waitForGeckoLinkLoaded = function () {
+ wait(function () {
+ try {
+ var cssRules = style.sheet.cssRules;
+ passed();
+ return !!cssRules;
+ } catch (ex) {
+ }
+ }, waitForGeckoLinkLoaded);
+ };
+ url = Tools._addCacheSuffix(url);
+ if (!loadedStates[url]) {
+ state = {
+ passed: [],
+ failed: []
+ };
+ loadedStates[url] = state;
+ } else {
+ state = loadedStates[url];
+ }
+ if (loadedCallback) {
+ state.passed.push(loadedCallback);
+ }
+ if (errorCallback) {
+ state.failed.push(errorCallback);
+ }
+ if (state.status === 1) {
+ return;
+ }
+ if (state.status === 2) {
+ passed();
+ return;
+ }
+ if (state.status === 3) {
+ failed();
+ return;
+ }
+ state.status = 1;
+ link = document$$1.createElement('link');
+ link.rel = 'stylesheet';
+ link.type = 'text/css';
+ link.id = 'u' + idCount++;
+ link.async = false;
+ link.defer = false;
+ startTime = new Date().getTime();
+ if (settings.contentCssCors) {
+ link.crossOrigin = 'anonymous';
+ }
+ if ('onload' in link && !isOldWebKit()) {
+ link.onload = waitForWebKitLinkLoaded;
+ link.onerror = failed;
+ } else {
+ if (navigator.userAgent.indexOf('Firefox') > 0) {
+ style = document$$1.createElement('style');
+ style.textContent = '@import "' + url + '"';
+ waitForGeckoLinkLoaded();
+ appendToHead(style);
+ return;
+ }
+ waitForWebKitLinkLoaded();
+ }
+ appendToHead(link);
+ link.href = url;
+ };
+ var loadF = function (url) {
+ return Future.nu(function (resolve) {
+ load(url, compose(resolve, constant(Result.value(url))), compose(resolve, constant(Result.error(url))));
+ });
+ };
+ var unbox = function (result) {
+ return result.fold(identity, identity);
+ };
+ 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(unbox));
+ } else {
+ success(parts.pass.map(unbox));
+ }
+ });
+ };
+ return {
+ load: load,
+ loadAll: loadAll
+ };
+ }
+
+ function TreeWalker (startNode, rootNode) {
+ var node = startNode;
+ var findSibling = function (node, startName, siblingName, shallow) {
+ var sibling, parent;
+ if (node) {
+ if (!shallow && node[startName]) {
+ return node[startName];
+ }
+ if (node !== rootNode) {
+ sibling = node[siblingName];
+ if (sibling) {
+ return sibling;
+ }
+ for (parent = node.parentNode; parent && parent !== rootNode; parent = parent.parentNode) {
+ sibling = parent[siblingName];
+ if (sibling) {
+ return sibling;
+ }
+ }
+ }
+ }
+ };
+ var findPreviousNode = function (node, startName, siblingName, shallow) {
+ var sibling, parent, child;
+ if (node) {
+ sibling = node[siblingName];
+ if (rootNode && sibling === 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 !== rootNode) {
+ return parent;
+ }
+ }
+ };
+ this.current = function () {
+ return node;
+ };
+ this.next = function (shallow) {
+ node = findSibling(node, 'firstChild', 'nextSibling', shallow);
+ return node;
+ };
+ this.prev = function (shallow) {
+ node = findSibling(node, 'lastChild', 'previousSibling', shallow);
+ return node;
+ };
+ this.prev2 = function (shallow) {
+ node = findPreviousNode(node, 'lastChild', 'previousSibling', shallow);
+ return node;
+ };
+ }
+
+ 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 voids = [
+ 'area',
+ 'base',
+ 'basefont',
+ 'br',
+ 'col',
+ 'frame',
+ 'hr',
+ 'img',
+ 'input',
+ 'isindex',
+ 'link',
+ 'meta',
+ 'param',
+ 'embed',
+ 'source',
+ 'wbr',
+ 'track'
+ ];
+ 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, constant(true));
+ return lookup.hasOwnProperty(name(node));
+ };
+ };
+ var isHeading = lazyLookup(headings);
+ var isBlock = lazyLookup(blocks);
+ var isInline = function (node) {
+ return isElement(node) && !isBlock(node);
+ };
+ var isBr = function (node) {
+ return isElement(node) && name(node) === 'br';
+ };
+ var isTextBlock = lazyLookup(textBlocks);
+ var isList = lazyLookup(lists);
+ var isListItem = lazyLookup(listItems);
+ var isVoid = lazyLookup(voids);
+ var isTableSection = lazyLookup(tableSections);
+ var isTableCell = lazyLookup(tableCells);
+ var isWsPreserveElement = lazyLookup(wsElements);
+
+ var isNodeType = function (type) {
+ return function (node) {
+ return !!node && node.nodeType === type;
+ };
+ };
+ var isElement$1 = isNodeType(1);
+ var matchNodeNames = function (names) {
+ var items = names.toLowerCase().split(' ');
+ return function (node) {
+ var i, name;
+ if (node && node.nodeType) {
+ name = node.nodeName.toLowerCase();
+ for (i = 0; i < items.length; i++) {
+ if (name === items[i]) {
+ return true;
+ }
+ }
+ }
+ 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 hasPropValue = function (propName, propValue) {
+ return function (node) {
+ return isElement$1(node) && node[propName] === propValue;
+ };
+ };
+ var hasAttribute = function (attrName, attrValue) {
+ 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 isText$1 = isNodeType(3);
+ var isComment$1 = isNodeType(8);
+ var isDocument$1 = isNodeType(9);
+ var isBr$1 = matchNodeNames('br');
+ var isContentEditableTrue = hasContentEditableState('true');
+ var isContentEditableFalse = hasContentEditableState('false');
+ var NodeType = {
+ isText: isText$1,
+ isElement: isElement$1,
+ isComment: isComment$1,
+ isDocument: isDocument$1,
+ isBr: isBr$1,
+ isContentEditableTrue: isContentEditableTrue,
+ isContentEditableFalse: isContentEditableFalse,
+ matchNodeNames: matchNodeNames,
+ hasPropValue: hasPropValue,
+ hasAttribute: hasAttribute,
+ hasAttributeValue: hasAttributeValue,
+ matchStyleValues: matchStyleValues,
+ isBogus: isBogus,
+ isBogusAll: isBogusAll,
+ isTable: isTable
+ };
+
+ var surroundedBySpans = function (node) {
+ var previousIsSpan = node.previousSibling && node.previousSibling.nodeName === 'SPAN';
+ var nextIsSpan = node.nextSibling && node.nextSibling.nodeName === 'SPAN';
+ return previousIsSpan && nextIsSpan;
+ };
+ var isBookmarkNode = function (node) {
+ return node && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';
+ };
+ var trimNode = function (dom, node) {
+ var i, children = node.childNodes;
+ if (NodeType.isElement(node) && isBookmarkNode(node)) {
+ return;
+ }
+ for (i = children.length - 1; i >= 0; i--) {
+ trimNode(dom, children[i]);
+ }
+ if (NodeType.isDocument(node) === false) {
+ if (NodeType.isText(node) && node.nodeValue.length > 0) {
+ var trimmedLength = Tools.trim(node.nodeValue).length;
+ if (dom.isBlock(node.parentNode) || trimmedLength > 0) {
+ return;
+ }
+ if (trimmedLength === 0 && surroundedBySpans(node)) {
+ return;
+ }
+ } else if (NodeType.isElement(node)) {
+ children = node.childNodes;
+ if (children.length === 1 && isBookmarkNode(children[0])) {
+ node.parentNode.insertBefore(children[0], node);
+ }
+ if (children.length || isVoid(Element$$1.fromDom(node))) {
+ return;
+ }
+ }
+ dom.remove(node);
+ }
+ return node;
+ };
+ var TrimNode = { trimNode: trimNode };
+
+ var makeMap$1 = Tools.makeMap;
+ var namedEntities, baseEntities, reverseEntities;
+ 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'
+ };
+ baseEntities = {
+ '"': '"',
+ '\'': ''',
+ '<': '<',
+ '>': '>',
+ '&': '&',
+ '`': '`'
+ };
+ reverseEntities = {
+ '<': '<',
+ '>': '>',
+ '&': '&',
+ '"': '"',
+ ''': '\''
+ };
+ var nativeDecode = function (text) {
+ var elm;
+ elm = Element$$1.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;
+ }
+ };
+ 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$4 = Tools.each, extend$1 = Tools.extend, explode$1 = Tools.explode, inArray$1 = 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);
+ }
+ name = split(name);
+ ni = name.length;
+ while (ni--) {
+ attributesOrder = split([
+ globalAttributes,
+ attributes
+ ].join(' '));
+ element = {
+ attributes: arrayToMap(attributesOrder),
+ attributesOrder: attributesOrder,
+ children: arrayToMap(children, dummyObj)
+ };
+ schema[name[ni]] = element;
+ }
+ };
+ var addAttrs = function (name, attributes) {
+ var ni, schemaItem, i, l;
+ name = split(name);
+ ni = name.length;
+ attributes = split(attributes);
+ while (ni--) {
+ schemaItem = schema[name[ni]];
+ for (i = 0, l = attributes.length; i < l; i++) {
+ schemaItem.attributes[attributes[i]] = {};
+ schemaItem.attributesOrder.push(attributes[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$4(split(html4PhrasingContent), function (name) {
+ add(name, '', phrasingContent);
+ });
+ html4BlockContent = 'center dir isindex noframes';
+ blockContent = [
+ blockContent,
+ html4BlockContent
+ ].join(' ');
+ flowContent = [
+ blockContent,
+ phrasingContent
+ ].join(' ');
+ each$4(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', 'onchange');
+ 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('iframe', 'sandbox seamless allowfullscreen');
+ }
+ each$4(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$4(value, function (value, key) {
+ styles[key] = styles[key.toUpperCase()] = mode === 'map' ? makeMap$2(value, /[, ]/) : explode$1(value, /[, ]/);
+ });
+ }
+ return styles;
+ };
+ function Schema(settings) {
+ var elements = {};
+ var children = {};
+ var patternElements = [];
+ var validStyles;
+ var invalidStyles;
+ var schemaItems;
+ var whiteSpaceElementsMap, selfClosingElementsMap, shortEndedElementsMap, boolAttrMap, validClasses;
+ var blockElementsMap, nonEmptyElementsMap, moveCaretBeforeOnEnterElementsMap, textBlockElementsMap, textInlineElementsMap;
+ 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 {
- return true;
+ value = makeMap$2(value, /[, ]/, makeMap$2(value.toUpperCase(), /[, ]/));
}
+ return value;
+ };
+ settings = settings || {};
+ schemaItems = compileSchema(settings.schema);
+ if (settings.verify_html === false) {
+ settings.valid_elements = '*[*]';
}
- 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);
- };
- function Styles(settings, schema) {
- 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 encodingItems;
- var validStyles;
- var invalidStyles;
- var invisibleChar = '\uFEFF';
- settings = settings || {};
- if (schema) {
- validStyles = schema.getValidStyles();
- invalidStyles = schema.getInvalidStyles();
- }
- 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, right, bottom, left;
- top = styles[prefix + '-top' + suffix];
- if (!top) {
- return;
+ validStyles = compileElementMap(settings.valid_styles);
+ invalidStyles = compileElementMap(settings.invalid_styles, 'map');
+ validClasses = compileElementMap(settings.valid_classes, 'map');
+ whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code');
+ selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');
+ shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track');
+ boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls');
+ nonEmptyElementsMap = createLookupTable('non_empty_elements', 'td th iframe video audio object ' + 'script pre code', shortEndedElementsMap);
+ moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', 'table', nonEmptyElementsMap);
+ 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');
+ 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);
+ textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font strike u var cite ' + 'dfn code mark q sup sub samp');
+ each$4((settings.special || 'script noscript noframes noembed title style textarea xmp').split(' '), function (name) {
+ specialElements[name] = new RegExp('' + name + '[^>]*>', '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, key, value;
+ var elementRuleRegExp = /^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/, attrRuleRegExp = /^([!\-])?(\w+[\\:]:\w+|[^=:<]+)?(?:([=:<])(.*))?$/, hasPatternsRegExp = /[*?+]/;
+ if (validElements) {
+ validElements = split(validElements, ',');
+ if (elements['@']) {
+ globalAttributes = elements['@'].attributes;
+ globalAttributesOrder = elements['@'].attributesOrder;
}
- right = styles[prefix + '-right' + suffix];
- if (!right) {
- return;
- }
- bottom = styles[prefix + '-bottom' + suffix];
- if (!bottom) {
- return;
- }
- 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;
+ for (ei = 0, el = validElements.length; ei < el; ei++) {
+ matches = elementRuleRegExp.exec(validElements[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) {
+ for (key in globalAttributes) {
+ attributes[key] = globalAttributes[key];
+ }
+ 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$1(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;
+ }
}
}
- if (i > -1 && noJoin) {
- return;
+ }
+ };
+ var setValidElements = function (validElements) {
+ elements = {};
+ patternElements = [];
+ addValidElements(validElements);
+ each$4(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$4(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$4(children, function (element, elmName) {
+ if (element[cloneName]) {
+ children[elmName] = element = extend$1({}, children[elmName]);
+ element[name] = element[cloneName];
+ }
+ });
+ });
+ }
+ };
+ var addValidChildren = function (validChildren) {
+ var childRuleRegExp = /^([+\-]?)(\w+)\[([^\]]+)\]$/;
+ mapCache[settings.schema] = null;
+ if (validChildren) {
+ each$4(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$4(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;
}
- 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;
+ }
+ };
+ if (!settings.valid_elements) {
+ each$4(schemaItems, function (element, name) {
+ elements[name] = {
+ attributes: element.attributes,
+ attributesOrder: element.attributesOrder
+ };
+ children[name] = element.children;
+ });
+ if (settings.schema !== 'html5') {
+ each$4(split('strong/b em/i'), function (item) {
+ item = split(item, '/');
+ elements[item[1]].outputName = item[0];
+ });
+ }
+ each$4(split('ol ul sub sup blockquote span font a table tbody tr strong em b i'), function (name) {
+ if (elements[name]) {
+ elements[name].removeEmpty = true;
}
- value = value.split(' ');
- i = value.length;
- while (i--) {
- if (value[i] !== value[0]) {
+ });
+ each$4(split('p h1 h2 h3 h4 h5 h6 th td pre div address caption li'), function (name) {
+ elements[name].paddEmpty = true;
+ });
+ each$4(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$4({
+ 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$4(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);
+ };
+ function Styles(settings, schema) {
+ 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 encodingItems;
+ var validStyles;
+ var invalidStyles;
+ var invisibleChar = '\uFEFF';
+ settings = settings || {};
+ if (schema) {
+ validStyles = schema.getValidStyles();
+ invalidStyles = schema.getInvalidStyles();
+ }
+ 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, right, bottom, left;
+ top = styles[prefix + '-top' + suffix];
+ if (!top) {
+ return;
+ }
+ right = styles[prefix + '-right' + suffix];
+ if (!right) {
+ return;
+ }
+ bottom = styles[prefix + '-bottom' + suffix];
+ if (!bottom) {
+ return;
+ }
+ 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 = '', name, value;
+ var serializeStyles = function (name) {
+ var styleList, i, l, value;
+ styleList = validStyles[name];
+ if (styleList) {
+ for (i = 0, l = styleList.length; i < l; i++) {
+ name = styleList[i];
+ value = styles[name];
+ if (value) {
+ css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';
+ }
+ }
+ }
+ };
+ var isValid = function (name, elementName) {
+ var styleMap;
+ styleMap = invalidStyles['*'];
+ if (styleMap && styleMap[name]) {
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 '';
+ styleMap = invalidStyles[elementName];
+ if (styleMap && styleMap[name]) {
+ return false;
}
- 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 = '', name, value;
- var serializeStyles = function (name) {
- var styleList, i, l, value;
- styleList = validStyles[name];
- if (styleList) {
- for (i = 0, l = styleList.length; i < l; i++) {
- name = styleList[i];
+ return true;
+ };
+ if (elementName && validStyles) {
+ serializeStyles('*');
+ serializeStyles(elementName);
+ } else {
+ for (name in styles) {
value = styles[name];
- if (value) {
+ if (value && (!invalidStyles || isValid(name, elementName))) {
css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';
}
}
}
- };
- var isValid = function (name, elementName) {
- var styleMap;
- styleMap = invalidStyles['*'];
- if (styleMap && styleMap[name]) {
- return false;
+ return css;
+ }
+ };
+ }
+
+ var each$5 = Tools.each;
+ var grep$1 = Tools.grep;
+ var isIE = Env.ie;
+ var simpleSelectorRe = /^([a-z0-9],?)+$/i;
+ var whiteSpaceRegExp$2 = /^[ \t\r\n]*$/;
+ var setupAttrHooks = function (styles, settings, getContext) {
+ var attrHooks = {};
+ var keepValues = settings.keep_values;
+ var keepUrlHook = {
+ set: function ($elm, value, name$$1) {
+ if (settings.url_converter) {
+ value = settings.url_converter.call(settings.url_converter_scope || getContext(), value, name$$1, $elm[0]);
}
- styleMap = invalidStyles[elementName];
- if (styleMap && styleMap[name]) {
- return false;
+ $elm.attr('data-mce-' + name$$1, value).attr(name$$1, value);
+ },
+ get: function ($elm, name$$1) {
+ return $elm.attr('data-mce-' + name$$1) || $elm.attr(name$$1);
+ }
+ };
+ attrHooks = {
+ style: {
+ set: function ($elm, value) {
+ if (value !== null && typeof value === 'object') {
+ $elm.css(value);
+ return;
+ }
+ if (keepValues) {
+ $elm.attr('data-mce-style', value);
+ }
+ $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;
}
- return true;
+ }
+ };
+ 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;
+ };
+ function DOMUtils(doc, settings) {
+ var _this = this;
+ if (settings === void 0) {
+ settings = {};
+ }
+ var attrHooks;
+ var addedStyles = {};
+ var win = window;
+ var files = {};
+ var counter = 0;
+ var stdMode = true;
+ var boxModel = true;
+ var styleSheetLoader = StyleSheetLoader(doc, { contentCssCors: settings.contentCssCors });
+ 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(settings.proxy) : EventUtils.Event;
+ var blockElementsMap = schema.getBlockElements();
+ var $ = DomQuery.overrideDefaults(function () {
+ return {
+ context: doc,
+ element: self$$1.getRoot()
};
- if (elementName && validStyles) {
- serializeStyles('*');
- serializeStyles(elementName);
+ });
+ 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) {
+ if (elm && doc && typeof elm === 'string') {
+ var node = doc.getElementById(elm);
+ if (node && node.id !== elm) {
+ return doc.getElementsByName(elm)[1];
+ } else {
+ return node;
+ }
+ }
+ return elm;
+ };
+ var $$ = function (elm) {
+ if (typeof elm === 'string') {
+ elm = get(elm);
+ }
+ return $(elm);
+ };
+ var getAttrib = function (elm, name$$1, defaultVal) {
+ var hook, value;
+ var $elm = $$(elm);
+ if ($elm.length) {
+ hook = attrHooks[name$$1];
+ if (hook && hook.get) {
+ value = hook.get($elm, name$$1);
+ } else {
+ value = $elm.attr(name$$1);
+ }
+ }
+ 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$$1, value) {
+ var originalValue, hook;
+ if (value === '') {
+ value = null;
+ }
+ var $elm = $$(elm);
+ originalValue = $elm.attr(name$$1);
+ if (!$elm.length) {
+ return;
+ }
+ hook = attrHooks[name$$1];
+ if (hook && hook.set) {
+ hook.set($elm, value, name$$1);
} else {
- for (name in styles) {
- value = styles[name];
- if (value && (!invalidStyles || isValid(name, elementName))) {
- css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';
+ $elm.attr(name$$1, value);
+ }
+ if (originalValue !== value && settings.onSetAttrib) {
+ settings.onSetAttrib({
+ attrElm: $elm,
+ attrName: name$$1,
+ attrValue: value
+ });
+ }
+ };
+ var clone = function (node, deep) {
+ if (!isIE || node.nodeType !== 1 || deep) {
+ return node.cloneNode(deep);
+ }
+ if (!deep) {
+ 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;
+ }
+ return null;
+ };
+ var getRoot = function () {
+ return settings.root_element || doc.body;
+ };
+ var getViewPort = function (argWin) {
+ var actWin = !argWin ? win : argWin;
+ var doc = actWin.document;
+ var rootElm = boxModel ? doc.documentElement : doc.body;
+ return {
+ x: actWin.pageXOffset || rootElm.scrollLeft,
+ y: actWin.pageYOffset || rootElm.scrollTop,
+ w: actWin.innerWidth || rootElm.clientWidth,
+ h: actWin.innerHeight || rootElm.clientHeight
+ };
+ };
+ var getPos = function (elm, rootElm) {
+ return Position.getPos(doc.body, get(elm), rootElm);
+ };
+ var setStyle = function (elm, name$$1, value) {
+ var $elm = $$(elm).css(name$$1, value);
+ 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$$1, computed) {
+ var $elm = $$(elm);
+ if (computed) {
+ return $elm.css(name$$1);
+ }
+ name$$1 = name$$1.replace(/-(\D)/g, function (a, b) {
+ return b.toUpperCase();
+ });
+ if (name$$1 === 'float') {
+ name$$1 = Env.ie && Env.ie < 12 ? 'styleFloat' : 'cssFloat';
+ }
+ return $elm[0] && $elm[0].style ? $elm[0].style[name$$1] : 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) {
+ var pos, size;
+ elm = get(elm);
+ pos = getPos(elm);
+ 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 || !node.nodeType || node.nodeType === 9) {
+ 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$$1) {
+ var func = selector;
+ if (node) {
+ if (typeof selector === 'string') {
+ func = function (node) {
+ return is(node, selector);
+ };
+ }
+ for (node = node[name$$1]; node; node = node[name$$1]) {
+ if (typeof func === 'function' && func(node)) {
+ return node;
}
}
}
- return css;
- }
- };
- }
-
- var each$5 = $_1q1txeljnlpawsa.each;
- var grep$1 = $_1q1txeljnlpawsa.grep;
- var isIE = $_cseqobajnlpawll.ie;
- var simpleSelectorRe = /^([a-z0-9],?)+$/i;
- var whiteSpaceRegExp$2 = /^[ \t\r\n]*$/;
- var setupAttrHooks = function (styles, settings, getContext) {
- var attrHooks = {};
- var keepValues = settings.keep_values;
- var keepUrlHook = {
- set: function ($elm, value, name$$1) {
- if (settings.url_converter) {
- value = settings.url_converter.call(settings.url_converter_scope || getContext(), value, name$$1, $elm[0]);
+ 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;
}
- $elm.attr('data-mce-' + name$$1, value).attr(name$$1, value);
- },
- get: function ($elm, name$$1) {
- return $elm.attr('data-mce-' + name$$1) || $elm.attr(name$$1);
- }
- };
- attrHooks = {
- style: {
- set: function ($elm, value) {
- if (value !== null && typeof value === 'object') {
- $elm.css(value);
+ if (Tools.isArray(node) && (node.length || node.length === 0)) {
+ result = [];
+ each$5(node, function (elm, i) {
+ if (elm) {
+ if (typeof elm === 'string') {
+ elm = get(elm);
+ }
+ result.push(func.call(scope, 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$$1) {
+ setAttrib(node, name$$1, 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$$1, attrs, html, create) {
+ return run(parentElm, function (parentElm) {
+ var newElm = typeof name$$1 === 'string' ? doc.createElement(name$$1) : name$$1;
+ 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$$1, attrs, html) {
+ return add(doc.createElement(name$$1), name$$1, attrs, html, true);
+ };
+ var decode = Entities.decode;
+ var encode = Entities.encodeAllRaw;
+ var createHTML = function (name$$1, attrs, html) {
+ var outHtml = '', key;
+ outHtml += '<' + name$$1;
+ 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 + '' + name$$1 + '>';
+ }
+ return outHtml + ' />';
+ };
+ var createFragment = function (html) {
+ var node;
+ var container = doc.createElement('div');
+ var frag = doc.createDocumentFragment();
+ if (html) {
+ container.innerHTML = html;
+ }
+ while (node = container.firstChild) {
+ frag.appendChild(node);
+ }
+ 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$$1) {
+ return styles.serialize(stylesArg, name$$1);
+ };
+ var addStyle = function (cssText) {
+ var head, styleElm;
+ if (self$$1 !== DOMUtils.DOM && doc === document) {
+ if (addedStyles[cssText]) {
return;
}
- if (keepValues) {
- $elm.attr('data-mce-style', value);
- }
- $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;
+ 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 (url) {
+ var head;
+ if (self$$1 !== DOMUtils.DOM && doc === document) {
+ DOMUtils.DOM.loadCSS(url);
+ return;
+ }
+ if (!url) {
+ url = '';
+ }
+ head = doc.getElementsByTagName('head')[0];
+ each$5(url.split(','), function (url) {
+ var link;
+ url = Tools._addCacheSuffix(url);
+ if (files[url]) {
+ return;
+ }
+ files[url] = true;
+ link = create('link', {
+ rel: 'stylesheet',
+ href: url
+ });
+ head.appendChild(link);
+ });
+ };
+ 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 NodeType.isElement(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$$1, nextSibling;
+ parent$$1 = referenceNode.parentNode;
+ nextSibling = referenceNode.nextSibling;
+ if (nextSibling) {
+ parent$$1.insertBefore(node, nextSibling);
+ } else {
+ parent$$1.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$$1) {
+ var newElm;
+ if (elm.nodeName !== name$$1.toUpperCase()) {
+ newElm = create(name$$1);
+ 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 isEmpty = function (node, elements) {
+ var i, attributes, type, whitespace, walker, name$$1, brCount = 0;
+ node = node.firstChild;
+ if (node) {
+ walker = new TreeWalker(node, node.parentNode);
+ elements = elements || (schema ? schema.getNonEmptyElements() : null);
+ whitespace = schema ? schema.getWhiteSpaceElements() : {};
+ do {
+ type = node.nodeType;
+ if (NodeType.isElement(node)) {
+ var bogusVal = node.getAttribute('data-mce-bogus');
+ if (bogusVal) {
+ node = walker.next(bogusVal === 'all');
+ continue;
+ }
+ name$$1 = node.nodeName.toLowerCase();
+ if (elements && elements[name$$1]) {
+ if (name$$1 === 'br') {
+ brCount++;
+ node = walker.next();
+ continue;
+ }
+ return false;
+ }
+ attributes = getAttribs(node);
+ i = attributes.length;
+ while (i--) {
+ name$$1 = attributes[i].nodeName;
+ if (name$$1 === 'name' || name$$1 === 'data-mce-bookmark') {
+ return false;
+ }
+ }
+ }
+ if (type === 8) {
+ return false;
+ }
+ if (type === 3 && !whiteSpaceRegExp$2.test(node.nodeValue)) {
+ return false;
+ }
+ if (type === 3 && node.parentNode && whitespace[node.parentNode.nodeName] && whiteSpaceRegExp$2.test(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 r = createRng(), bef, aft, pa;
+ if (parentElm && splitElm) {
+ r.setStart(parentElm.parentNode, findNodeIndex(parentElm));
+ r.setEnd(splitElm.parentNode, findNodeIndex(splitElm));
+ bef = r.extractContents();
+ r = createRng();
+ r.setStart(splitElm.parentNode, findNodeIndex(splitElm) + 1);
+ r.setEnd(parentElm.parentNode, findNodeIndex(parentElm) + 1);
+ aft = r.extractContents();
+ pa = parentElm.parentNode;
+ pa.insertBefore(TrimNode.trimNode(self$$1, bef), parentElm);
+ if (replacementElm) {
+ pa.insertBefore(replacementElm, parentElm);
+ } else {
+ pa.insertBefore(splitElm, parentElm);
+ }
+ pa.insertBefore(TrimNode.trimNode(self$$1, aft), parentElm);
+ remove(parentElm);
+ return replacementElm || splitElm;
+ }
+ };
+ var bind = function (target, name$$1, func, scope) {
+ if (Tools.isArray(target)) {
+ var i = target.length;
+ while (i--) {
+ target[i] = bind(target[i], name$$1, func, scope);
+ }
+ return target;
+ }
+ if (settings.collect && (target === doc || target === win)) {
+ boundEvents.push([
+ target,
+ name$$1,
+ func,
+ scope
+ ]);
+ }
+ return events.bind(target, name$$1, func, scope || self$$1);
+ };
+ var unbind = function (target, name$$1, func) {
+ var i;
+ if (Tools.isArray(target)) {
+ i = target.length;
+ while (i--) {
+ target[i] = unbind(target[i], name$$1, func);
+ }
+ return target;
+ }
+ if (boundEvents && (target === doc || target === win)) {
+ i = boundEvents.length;
+ while (i--) {
+ var item = boundEvents[i];
+ if (target === item[0] && (!name$$1 || name$$1 === item[1]) && (!func || func === item[2])) {
+ events.unbind(item[0], item[1], item[2]);
+ }
+ }
+ }
+ return events.unbind(target, name$$1, func);
+ };
+ var fire = function (target, name$$1, evt) {
+ return events.fire(target, name$$1, evt);
+ };
+ var getContentEditable = function (node) {
+ if (node && NodeType.isElement(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) {
+ var i = boundEvents.length;
+ while (i--) {
+ var item = boundEvents[i];
+ events.unbind(item[0], item[1], item[2]);
+ }
+ }
+ if (Sizzle.setDocument) {
+ Sizzle.setDocument();
+ }
+ };
+ var isChildOf = function (node, parent$$1) {
+ while (node) {
+ if (parent$$1 === 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$$1 = {
+ 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,
+ 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
+ };
+ attrHooks = setupAttrHooks(styles, settings, function () {
+ return self$$1;
+ });
+ return self$$1;
+ }
+ (function (DOMUtils) {
+ DOMUtils.DOM = DOMUtils(document);
+ DOMUtils.nodeIndex = findNodeIndex;
+ }(DOMUtils || (DOMUtils = {})));
+ var DOMUtils$1 = DOMUtils;
+
+ var DOM = DOMUtils$1.DOM;
+ var each$6 = Tools.each, grep$2 = Tools.grep;
+ var isFunction$1 = function (f) {
+ return typeof f === 'function';
+ };
+ var ScriptLoader = function () {
+ var QUEUED = 0;
+ var LOADING = 1;
+ var LOADED = 2;
+ var FAILED = 3;
+ var states = {};
+ var queue = [];
+ var scriptLoadedCallbacks = {};
+ var queueLoadedCallbacks = [];
+ var loading = 0;
+ var loadScript = function (url, success, failure) {
+ var dom = DOM;
+ var elm, id;
+ var done = function () {
+ dom.remove(id);
+ if (elm) {
+ elm.onreadystatechange = elm.onload = elm = null;
+ }
+ success();
+ };
+ var error = function () {
+ if (isFunction$1(failure)) {
+ failure();
+ } else {
+ if (typeof console !== 'undefined' && console.log) {
+ console.log('Failed to load script: ' + url);
+ }
+ }
+ };
+ id = dom.uniqueId();
+ elm = document.createElement('script');
+ elm.id = id;
+ elm.type = 'text/javascript';
+ elm.src = Tools._addCacheSuffix(url);
+ elm.onload = done;
+ elm.onerror = error;
+ (document.getElementsByTagName('head')[0] || document.body).appendChild(elm);
+ };
+ this.isDone = function (url) {
+ return states[url] === LOADED;
+ };
+ this.markDone = function (url) {
+ states[url] = LOADED;
+ };
+ this.add = this.load = function (url, success, scope, failure) {
+ var state = states[url];
+ if (state === undefined) {
+ queue.push(url);
+ states[url] = QUEUED;
+ }
+ if (success) {
+ if (!scriptLoadedCallbacks[url]) {
+ scriptLoadedCallbacks[url] = [];
+ }
+ scriptLoadedCallbacks[url].push({
+ success: success,
+ failure: failure,
+ scope: scope || this
+ });
+ }
+ };
+ this.remove = function (url) {
+ delete states[url];
+ delete scriptLoadedCallbacks[url];
+ };
+ this.loadQueue = function (success, scope, failure) {
+ this.loadScripts(queue, success, scope, failure);
+ };
+ this.loadScripts = function (scripts, success, scope, failure) {
+ var loadScripts;
+ var failures = [];
+ var execCallbacks = function (name$$1, url) {
+ each$6(scriptLoadedCallbacks[url], function (callback) {
+ if (isFunction$1(callback[name$$1])) {
+ callback[name$$1].call(callback.scope);
+ }
+ });
+ scriptLoadedCallbacks[url] = undefined;
+ };
+ queueLoadedCallbacks.push({
+ success: success,
+ failure: failure,
+ scope: scope || this
+ });
+ loadScripts = function () {
+ var loadingScripts = grep$2(scripts);
+ scripts.length = 0;
+ each$6(loadingScripts, function (url) {
+ if (states[url] === LOADED) {
+ execCallbacks('success', url);
+ return;
+ }
+ if (states[url] === FAILED) {
+ execCallbacks('failure', url);
+ return;
+ }
+ if (states[url] !== LOADING) {
+ states[url] = LOADING;
+ loading++;
+ loadScript(url, function () {
+ states[url] = LOADED;
+ loading--;
+ execCallbacks('success', url);
+ loadScripts();
+ }, function () {
+ states[url] = FAILED;
+ loading--;
+ failures.push(url);
+ execCallbacks('failure', url);
+ loadScripts();
+ });
+ }
+ });
+ if (!loading) {
+ var notifyCallbacks = queueLoadedCallbacks.slice(0);
+ queueLoadedCallbacks.length = 0;
+ each$6(notifyCallbacks, function (callback) {
+ if (failures.length === 0) {
+ if (isFunction$1(callback.success)) {
+ callback.success.call(callback.scope);
+ }
+ } else {
+ if (isFunction$1(callback.failure)) {
+ callback.failure.call(callback.scope, failures);
+ }
+ }
+ });
+ }
+ };
+ loadScripts();
+ };
+ };
+ ScriptLoader.ScriptLoader = new ScriptLoader();
+
+ var each$7 = Tools.each;
+ function AddOnManager() {
+ var _this = this;
+ var items = [];
+ var urls = {};
+ var lookup = {};
+ var _listeners = [];
+ 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) {
+ var language = AddOnManager.language;
+ if (language && AddOnManager.languageLoad !== false) {
+ if (languages) {
+ languages = ',' + languages + ',';
+ if (languages.indexOf(',' + language.substr(0, 2) + ',') !== -1) {
+ language = language.substr(0, 2);
+ } else if (languages.indexOf(',' + language + ',') === -1) {
+ return;
+ }
+ }
+ ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js');
+ }
+ };
+ var add = function (id, addOn, dependencies) {
+ items.push(addOn);
+ lookup[id] = {
+ instance: addOn,
+ dependencies: dependencies
+ };
+ var result = partition(_listeners, function (listener) {
+ return listener.name === id;
+ });
+ _listeners = result.fail;
+ each$7(result.pass, function (listener) {
+ listener.callback();
+ });
+ return addOn;
+ };
+ 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 = _this.urls[pluginName];
+ each$7(scripts, function (script) {
+ ScriptLoader.ScriptLoader.add(pluginUrl + '/' + script);
+ });
+ };
+ var loadDependencies = function (name, addOnUrl, success, scope) {
+ var deps = dependencies(name);
+ each$7(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('/'));
+ if (lookup[name]) {
+ loadDependencies(name, addOnUrl, success, scope);
+ } else {
+ ScriptLoader.ScriptLoader.add(urlString, function () {
+ return loadDependencies(name, addOnUrl, success, scope);
+ }, scope, failure);
+ }
+ };
+ var waitFor = function (name, callback) {
+ if (lookup.hasOwnProperty(name)) {
+ callback();
+ } else {
+ _listeners.push({
+ name: name,
+ 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
+ };
+ }
+ (function (AddOnManager) {
+ AddOnManager.PluginManager = AddOnManager();
+ AddOnManager.ThemeManager = AddOnManager();
+ }(AddOnManager || (AddOnManager = {})));
+
+ 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$$1, element) {
+ var firstChild$$1 = firstChild(parent$$1);
+ firstChild$$1.fold(function () {
+ append(parent$$1, element);
+ }, function (v) {
+ parent$$1.dom().insertBefore(element.dom(), v.dom());
+ });
+ };
+ var append = function (parent$$1, element) {
+ parent$$1.dom().appendChild(element.dom());
+ };
+ var wrap$1 = 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$2(rogue);
+ });
+ };
+ var remove$2 = 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$2(wrapper);
+ };
+
+ var first$1 = 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$3 = 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 Cell = function (initial) {
+ var value = initial;
+ var get = function () {
+ return value;
+ };
+ var set = function (v) {
+ value = v;
+ };
+ var clone = function () {
+ return Cell(get());
+ };
+ return {
+ get: get,
+ set: set,
+ clone: clone
+ };
+ };
+
+ var read = function (element, attr) {
+ var value = get$1(element, attr);
+ return value === undefined || value === '' ? [] : value.split(' ');
+ };
+ var add = function (element, attr, id) {
+ var old = read(element, attr);
+ var nu = old.concat([id]);
+ set(element, attr, nu.join(' '));
+ return true;
+ };
+ var remove$3 = 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(element, attr);
+ return false;
+ };
+
+ var supports = function (element) {
+ return element.dom().classList !== undefined;
+ };
+ var get$3 = function (element) {
+ return read(element, 'class');
+ };
+ var add$1 = function (element, clazz) {
+ return add(element, 'class', clazz);
+ };
+ var remove$4 = function (element, clazz) {
+ return remove$3(element, 'class', clazz);
+ };
+
+ var add$2 = function (element, clazz) {
+ if (supports(element))
+ element.dom().classList.add(clazz);
+ else
+ add$1(element, clazz);
+ };
+ var cleanClass = function (element) {
+ var classList = supports(element) ? element.dom().classList : get$3(element);
+ if (classList.length === 0) {
+ remove(element, 'class');
}
};
- if (keepValues) {
- attrHooks.href = attrHooks.src = keepUrlHook;
+ var remove$5 = function (element, clazz) {
+ if (supports(element)) {
+ var classList = element.dom().classList;
+ classList.remove(clazz);
+ } else
+ remove$4(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);
+ };
+
+ function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {
+ return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);
}
- 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;
+
+ var ancestor = function (scope, predicate, isRoot) {
+ var element = scope.dom();
+ var stop = isFunction(isRoot) ? isRoot : constant(false);
+ while (element.parentNode) {
+ element = element.parentNode;
+ var el = Element$$1.fromDom(element);
+ if (predicate(el))
+ return Option.some(el);
+ else if (stop(el))
+ break;
+ }
+ return Option.none();
+ };
+ var closest = function (scope, predicate, isRoot) {
+ var is = function (scope) {
+ return predicate(scope);
+ };
+ return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);
+ };
+
+ var ancestor$1 = function (scope, selector, isRoot) {
+ return ancestor(scope, function (e) {
+ return is$1(e, selector);
+ }, isRoot);
+ };
+ var descendant$1 = function (scope, selector) {
+ return one(selector, scope);
+ };
+ var closest$1 = function (scope, selector, isRoot) {
+ return ClosestOrAncestor(is$1, ancestor$1, scope, selector, isRoot);
+ };
+
+ 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 = Element$$1.fromDom(rng.startContainer);
+ var root = Element$$1.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(n, root);
+ });
+ var getAttr = function (c, property) {
+ if (has$1(c, property)) {
+ return Option.some(get$1(c, property));
+ } else {
+ return Option.none();
+ }
+ };
+ return closest.bind(function (c) {
+ return getAttr(c, '' + dataAnnotationId()).bind(function (uid) {
+ return getAttr(c, '' + dataAnnotation()).map(function (name$$1) {
+ var elements = findMarkers(editor, uid);
+ return {
+ uid: uid,
+ name: name$$1,
+ elements: elements
+ };
+ });
+ });
+ });
+ };
+ var isAnnotation = function (elem) {
+ return isElement(elem) && has$2(elem, annotation());
+ };
+ var findMarkers = function (editor, uid) {
+ var body = Element$$1.fromDom(editor.getBody());
+ return descendants$1(body, '[' + dataAnnotationId() + '="' + uid + '"]');
+ };
+ var findAll = function (editor, name$$1) {
+ var body = Element$$1.fromDom(editor.getBody());
+ var markers = descendants$1(body, '[' + dataAnnotation() + '="' + name$$1 + '"]');
+ var directory = {};
+ each(markers, function (m) {
+ var uid = get$1(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(Option.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$3(function () {
+ var callbackMap = changeCallbacks.get();
+ var annotations = sort(keys(callbackMap));
+ each(annotations, function (name) {
+ updateCallbacks(name, function (data) {
+ var prev = data.previous.get();
+ identify(editor, Option.some(name)).fold(function () {
+ if (prev.isSome()) {
+ fireNoAnnotation(name);
+ data.previous.set(Option.none());
+ }
+ }, function (_a) {
+ var uid = _a.uid, name = _a.name, elements = _a.elements;
+ if (!prev.is(uid)) {
+ fireCallbacks(name, uid, elements);
+ data.previous.set(Option.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) {
+ var optAnnotation = Option.from(span.attributes.map[dataAnnotation()]);
+ return optAnnotation.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$1 = function () {
+ var annotations = {};
+ var register = function (name, settings) {
+ annotations[name] = {
+ name: name,
+ settings: settings
+ };
+ };
+ var lookup = function (name) {
+ return annotations.hasOwnProperty(name) ? Option.from(annotations[name]).map(function (a) {
+ return a.settings;
+ }) : Option.none();
+ };
+ return {
+ register: register,
+ lookup: lookup
+ };
+ };
+
+ 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)
+ t[p[i]] = s[p[i]];
+ return t;
}
- $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;
+
+ var unique = 0;
+ var generate = 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$3 = function (element, classes) {
+ each(classes, function (x) {
+ add$2(element, x);
+ });
+ };
+
+ var clone$1 = function (original, deep) {
+ return Element$$1.fromDom(original.dom().cloneNode(deep));
+ };
+ var shallow = function (original) {
+ return clone$1(original, false);
+ };
+ var deep = function (original) {
+ return clone$1(original, true);
+ };
+
+ var fromHtml$1 = function (html, scope) {
+ var doc = scope || document;
+ var div = doc.createElement('div');
+ div.innerHTML = html;
+ return children(Element$$1.fromDom(div));
+ };
+
+ var get$5 = function (element) {
+ return element.dom().innerHTML;
+ };
+ var set$2 = function (element, content) {
+ var owner$$1 = owner(element);
+ var docDom = owner$$1.dom();
+ var fragment = Element$$1.fromDom(docDom.createDocumentFragment());
+ var contentElements = fromHtml$1(content, docDom);
+ append$1(fragment, contentElements);
+ empty(element);
+ append(element, fragment);
+ };
+
+ var ZWSP = '\uFEFF';
+ var isZwsp = function (chr) {
+ return chr === ZWSP;
+ };
+ var trim$3 = function (text) {
+ return text.replace(new RegExp(ZWSP, 'g'), '');
+ };
+ var Zwsp = {
+ isZwsp: isZwsp,
+ ZWSP: ZWSP,
+ trim: trim$3
+ };
+
+ var isElement$2 = NodeType.isElement;
+ var isText$2 = NodeType.isText;
+ 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) && Zwsp.isZwsp(node.data);
+ };
+ var isCaretContainer = function (node) {
+ return isCaretContainerBlock(node) || isCaretContainerInline(node);
+ };
+ var hasContent = function (node) {
+ return node.firstChild !== node.lastChild || !NodeType.isBr(node.firstChild);
+ };
+ var insertInline = function (node, before) {
+ var doc, sibling, textNode, parentNode;
+ doc = node.ownerDocument;
+ textNode = doc.createTextNode(Zwsp.ZWSP);
+ 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;
}
}
- idx++;
- lastNodeType = nodeType;
+ 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();
+ return pos && NodeType.isText(container) && container.data.charAt(pos.offset()) === Zwsp.ZWSP;
+ };
+ var isAfterInline = function (pos) {
+ var container = pos.container();
+ return pos && NodeType.isText(container) && container.data.charAt(pos.offset() - 1) === Zwsp.ZWSP;
+ };
+ var createBogusBr = function () {
+ var br = document.createElement('br');
+ br.setAttribute('data-mce-bogus', '1');
+ return br;
+ };
+ var insertBlock = function (blockName, node, before) {
+ var doc, blockNode, parentNode;
+ doc = node.ownerDocument;
+ blockNode = doc.createElement(blockName);
+ blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after');
+ blockNode.setAttribute('data-mce-bogus', 'all');
+ blockNode.appendChild(createBogusBr());
+ 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.ZWSP;
+ };
+ var endsWithCaretContainer = function (node) {
+ return isText$2(node) && node.data[node.data.length - 1] === Zwsp.ZWSP;
+ };
+ var trimBogusBr = function (elm) {
+ var brs = elm.getElementsByTagName('br');
+ var lastBr = brs[brs.length - 1];
+ if (NodeType.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 = NodeType.isContentEditableTrue;
+ var isContentEditableFalse$1 = NodeType.isContentEditableFalse;
+ var isBr$2 = NodeType.isBr;
+ var isText$3 = NodeType.isText;
+ var isInvalidTextElement = NodeType.matchNodeNames('script style textarea');
+ var isAtomicInline = NodeType.matchNodeNames('img input textarea hr iframe video audio object');
+ var isTable$1 = NodeType.matchNodeNames('table');
+ var isCaretContainer$1 = isCaretContainer;
+ var isCaretCandidate = function (node) {
+ if (isCaretContainer$1(node)) {
+ return false;
+ }
+ if (isText$3(node)) {
+ if (isInvalidTextElement(node.parentNode)) {
+ return false;
+ }
+ return true;
+ }
+ return isAtomicInline(node) || isBr$2(node) || isTable$1(node) || isNonUiContentEditableFalse(node);
+ };
+ var isUnselectable = function (node) {
+ return NodeType.isElement(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 round = Math.round;
+ var clone$2 = function (rect) {
+ if (!rect) {
+ return {
+ left: 0,
+ top: 0,
+ bottom: 0,
+ right: 0,
+ width: 0,
+ height: 0
+ };
}
- }
- return idx;
- };
- function DOMUtils(doc, settings) {
- var _this = this;
- if (settings === void 0) {
- settings = {};
- }
- var attrHooks;
- var addedStyles = {};
- var win = window;
- var files = {};
- var counter = 0;
- var stdMode = true;
- var boxModel = true;
- var styleSheetLoader = StyleSheetLoader(doc);
- 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(settings.proxy) : EventUtils.Event;
- var blockElementsMap = schema.getBlockElements();
- var $ = DomQuery.overrideDefaults(function () {
return {
- context: doc,
- element: self$$1.getRoot()
+ 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 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]);
+ };
+ 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) {
+ if (rect1.bottom - rect1.height / 2 < 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 overflowX = function (outer, inner) {
+ if (inner.left > outer.left && inner.right < outer.right) {
+ return 0;
+ } else {
+ return inner.left < outer.left ? inner.left - outer.left : inner.right - outer.right;
+ }
+ };
+ var overflowY = function (outer, inner) {
+ if (inner.top > outer.top && inner.bottom < outer.bottom) {
+ return 0;
+ } else {
+ return inner.top < outer.top ? inner.top - outer.top : inner.bottom - outer.bottom;
+ }
+ };
+ var getOverflow = function (outer, inner) {
+ return {
+ x: overflowX(outer, inner),
+ y: overflowY(outer, inner)
+ };
+ };
+
+ 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 liftN = function (arr, f) {
+ var r = [];
+ for (var i = 0; i < arr.length; i++) {
+ var x = arr[i];
+ if (x.isSome()) {
+ r.push(x.getOrDie());
+ } else {
+ return Option.none();
+ }
+ }
+ return Option.some(f.apply(null, r));
+ };
+
+ var slice$3 = [].slice;
+ var or = function () {
+ var x = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ x[_i] = arguments[_i];
+ }
+ var args = slice$3.call(arguments);
+ return function (x) {
+ for (var i = 0; i < args.length; i++) {
+ if (args[i](x)) {
+ return true;
+ }
+ }
+ return false;
+ };
+ };
+ var and = function () {
+ var x = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ x[_i] = arguments[_i];
+ }
+ var args = slice$3.call(arguments);
+ return function (x) {
+ for (var i = 0; i < args.length; i++) {
+ if (!args[i](x)) {
+ return false;
+ }
+ }
+ return true;
+ };
+ };
+ var Predicate = {
+ and: and,
+ or: or
+ };
+
+ var isElement$3 = NodeType.isElement;
+ var isCaretCandidate$1 = isCaretCandidate;
+ var isBlock$1 = NodeType.matchStyleValues('display', 'block table');
+ var isFloated = NodeType.matchStyleValues('float', 'left right');
+ var isValidElementCaretCandidate = Predicate.and(isElement$3, isCaretCandidate$1, not(isFloated));
+ var isNotPre = not(NodeType.matchStyleValues('white-space', 'pre pre-line pre-wrap'));
+ var isText$4 = NodeType.isText;
+ var isBr$3 = NodeType.isBr;
+ var nodeIndex = DOMUtils$1.nodeIndex;
+ var resolveIndex = getNode;
+ var createRange = function (doc) {
+ return 'createRange' in doc ? doc.createRange() : DOMUtils$1.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$$1) {
+ var container = range$$1.startContainer;
+ var offset = range$$1.startOffset;
+ var text;
+ if (isWhiteSpace(range$$1.toString()) && isNotPre(container.parentNode) && NodeType.isText(container)) {
+ text = container.data;
+ if (isWhiteSpace(text[offset - 1]) || isWhiteSpace(text[offset + 1])) {
+ return true;
}
}
return false;
};
- var get = function (elm) {
- if (elm && doc && typeof elm === 'string') {
- var node = doc.getElementById(elm);
- if (node && node.id !== elm) {
- return doc.getElementsByName(elm)[1];
+ var getBrClientRect = function (brNode) {
+ var doc = brNode.ownerDocument;
+ var rng = createRange(doc);
+ var nbsp = doc.createTextNode('\xA0');
+ var parentNode = brNode.parentNode;
+ var clientRect;
+ parentNode.insertBefore(nbsp, brNode);
+ rng.setStart(nbsp, 0);
+ rng.setEnd(nbsp, 1);
+ clientRect = clone$2(rng.getBoundingClientRect());
+ parentNode.removeChild(nbsp);
+ 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 && NodeType.isText(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, clientRects;
+ 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$$1 = createRange(container.ownerDocument);
+ if (offset < container.data.length) {
+ if (isExtendingChar(container.data[offset])) {
+ return clientRects;
+ }
+ if (isExtendingChar(container.data[offset - 1])) {
+ range$$1.setStart(container, offset);
+ range$$1.setEnd(container, offset + 1);
+ if (!isHiddenWhiteSpaceRange(range$$1)) {
+ addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range$$1), false));
+ return clientRects;
+ }
+ }
+ }
+ if (offset > 0) {
+ range$$1.setStart(container, offset - 1);
+ range$$1.setEnd(container, offset);
+ if (!isHiddenWhiteSpaceRange(range$$1)) {
+ addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range$$1), false));
+ }
+ }
+ if (offset < container.data.length) {
+ range$$1.setStart(container, offset);
+ range$$1.setEnd(container, offset + 1);
+ if (!isHiddenWhiteSpaceRange(range$$1)) {
+ addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range$$1), 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 {
- return node;
+ 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 elm;
+ return clientRects;
};
- var $$ = function (elm) {
- if (typeof elm === 'string') {
- elm = get(elm);
- }
- return $(elm);
- };
- var getAttrib = function (elm, name$$1, defaultVal) {
- var hook, value;
- var $elm = $$(elm);
- if ($elm.length) {
- hook = attrHooks[name$$1];
- if (hook && hook.get) {
- value = hook.get($elm, name$$1);
- } else {
- value = $elm.attr(name$$1);
+ function CaretPosition(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$$1;
+ range$$1 = createRange(container.ownerDocument);
+ range$$1.setStart(container, offset);
+ range$$1.setEnd(container, offset);
+ return range$$1;
+ };
+ var getClientRects = function () {
+ if (!clientRects) {
+ clientRects = getCaretPositionClientRects(CaretPosition(container, offset));
+ }
+ return clientRects;
+ };
+ var isVisible = function () {
+ return getClientRects().length > 0;
+ };
+ var isEqual$$1 = function (caretPosition) {
+ return caretPosition && container === caretPosition.container() && offset === caretPosition.offset();
+ };
+ var getNode$$1 = 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$$1,
+ getNode: getNode$$1
+ };
+ }
+ (function (CaretPosition) {
+ CaretPosition.fromRangeStart = function (range$$1) {
+ return CaretPosition(range$$1.startContainer, range$$1.startOffset);
+ };
+ CaretPosition.fromRangeEnd = function (range$$1) {
+ return CaretPosition(range$$1.endContainer, range$$1.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 liftN([
+ head(pos2.getClientRects()),
+ last(pos1.getClientRects())
+ ], isAbove).getOr(false);
+ };
+ CaretPosition.isBelow = function (pos1, pos2) {
+ return liftN([
+ 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 ? NodeType.isText(pos.container()) : false;
+ };
+ CaretPosition.isElementPosition = function (pos) {
+ return CaretPosition.isTextPosition(pos) === false;
+ };
+ }(CaretPosition || (CaretPosition = {})));
+ var CaretPosition$1 = CaretPosition;
+
+ var isText$5 = NodeType.isText;
+ var isBogus$1 = NodeType.isBogus;
+ var nodeIndex$1 = DOMUtils$1.nodeIndex;
+ var normalizedParent = function (node) {
+ var parentNode = node.parentNode;
+ if (isBogus$1(parentNode)) {
+ return normalizedParent(parentNode);
}
- if (typeof value === 'undefined') {
- value = defaultVal || '';
- }
- return value;
+ return parentNode;
};
- var getAttribs = function (elm) {
- var node = get(elm);
+ var getChildNodes = function (node) {
if (!node) {
return [];
}
- return node.attributes;
- };
- var setAttrib = function (elm, name$$1, value) {
- var originalValue, hook;
- if (value === '') {
- value = null;
- }
- var $elm = $$(elm);
- originalValue = $elm.attr(name$$1);
- if (!$elm.length) {
- return;
- }
- hook = attrHooks[name$$1];
- if (hook && hook.set) {
- hook.set($elm, value, name$$1);
- } else {
- $elm.attr(name$$1, value);
- }
- if (originalValue !== value && settings.onSetAttrib) {
- settings.onSetAttrib({
- attrElm: $elm,
- attrName: name$$1,
- attrValue: value
- });
- }
- };
- var clone = function (node, deep) {
- if (!isIE || node.nodeType !== 1 || deep) {
- return node.cloneNode(deep);
- }
- if (!deep) {
- 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;
- }
- return null;
- };
- var getRoot = function () {
- return settings.root_element || doc.body;
- };
- var getViewPort = function (argWin) {
- var actWin = !argWin ? win : argWin;
- var doc = actWin.document;
- var rootElm = boxModel ? doc.documentElement : doc.body;
- return {
- x: actWin.pageXOffset || rootElm.scrollLeft,
- y: actWin.pageYOffset || rootElm.scrollTop,
- w: actWin.innerWidth || rootElm.clientWidth,
- h: actWin.innerHeight || rootElm.clientHeight
- };
- };
- var getPos = function (elm, rootElm) {
- return $_9kqe0nnjnlpawsp.getPos(doc.body, get(elm), rootElm);
- };
- var setStyle = function (elm, name$$1, value) {
- var $elm = $$(elm).css(name$$1, value);
- 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$$1, computed) {
- var $elm = $$(elm);
- if (computed) {
- return $elm.css(name$$1);
- }
- name$$1 = name$$1.replace(/-(\D)/g, function (a, b) {
- return b.toUpperCase();
- });
- if (name$$1 === 'float') {
- name$$1 = $_cseqobajnlpawll.ie && $_cseqobajnlpawll.ie < 12 ? 'styleFloat' : 'cssFloat';
- }
- return $elm[0] && $elm[0].style ? $elm[0].style[name$$1] : 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) {
- var pos, size;
- elm = get(elm);
- pos = getPos(elm);
- 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 ($_1q1txeljnlpawsa.is(selector, 'string')) {
- selectorVal = selector;
- if (selector === '*') {
- selector = function (node) {
- return node.nodeType === 1;
- };
+ return ArrUtils.reduce(node.childNodes, function (result, node) {
+ if (isBogus$1(node) && node.nodeName !== 'BR') {
+ result = result.concat(getChildNodes(node));
} else {
- selector = function (node) {
- return is(node, selectorVal);
- };
+ result.push(node);
}
- }
- while (node) {
- if (node === root || !node.nodeType || node.nodeType === 9) {
+ return result;
+ }, []);
+ };
+ var normalizedTextOffset = function (node, offset) {
+ while (node = node.previousSibling) {
+ if (!isText$5(node)) {
break;
}
- if (!selector || typeof selector === 'function' && selector(node)) {
- if (collect) {
- result.push(node);
- } else {
- return [node];
- }
+ offset += node.data.length;
+ }
+ return offset;
+ };
+ var equal$1 = function (a) {
+ return function (b) {
+ return a === b;
+ };
+ };
+ var normalizedNodeIndex = function (node) {
+ var nodes, index, numTextFragments;
+ nodes = getChildNodes(normalizedParent(node));
+ index = ArrUtils.findIndex(nodes, equal$1(node), node);
+ nodes = nodes.slice(0, index + 1);
+ numTextFragments = ArrUtils.reduce(nodes, function (result, node, i) {
+ if (isText$5(node) && isText$5(nodes[i - 1])) {
+ result++;
+ }
+ return result;
+ }, 0);
+ nodes = ArrUtils.filter(nodes, NodeType.matchNodeNames(node.nodeName));
+ index = ArrUtils.findIndex(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$2 = 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 = ArrUtils.filter(parents, not(NodeType.isBogus));
+ path = path.concat(ArrUtils.map(parents, function (node) {
+ return createPathItem(node);
+ }));
+ return path.reverse().join('/') + ',' + outputOffset;
+ };
+ var resolvePathItem = function (node, name, index) {
+ var nodes = getChildNodes(node);
+ nodes = ArrUtils.filter(nodes, function (node, index) {
+ return !isText$5(node) || !isText$5(nodes[index - 1]);
+ });
+ nodes = ArrUtils.filter(nodes, NodeType.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$1(container, offset);
+ };
+ var resolve$2 = function (root, path) {
+ var parts, container, offset;
+ if (!path) {
+ return null;
+ }
+ parts = path.split(',');
+ path = parts[0].split('/');
+ offset = parts.length > 1 ? parts[1] : 'before';
+ container = ArrUtils.reduce(path, function (result, value) {
+ value = /([\w\-\(\)]+)\[([0-9]+)\]/.exec(value);
+ if (!value) {
+ return null;
+ }
+ if (value[1] === 'text()') {
+ value[1] = '#text';
+ }
+ return resolvePathItem(result, value[1], parseInt(value[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$1(container.parentNode, offset);
+ }
+ return findTextPosition(container, parseInt(offset, 10));
+ };
+
+ var isContentEditableFalse$2 = NodeType.isContentEditableFalse;
+ var getNormalizedTextOffset = function (trim, container, offset) {
+ var node, trimmedOffset;
+ trimmedOffset = trim(container.data.slice(0, offset)).length;
+ for (node = container.previousSibling; node && NodeType.isText(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 (NodeType.isText(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 trimEmptyTextNode = function (node) {
+ if (NodeType.isText(node) && node.data.length === 0) {
+ node.parentNode.removeChild(node);
+ }
+ };
+ var findIndex$3 = 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 (NodeType.isElement(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 (NodeType.isElement(node)) {
+ node = getNode(node, offset);
+ if (isContentEditableFalse$2(node)) {
+ return node;
+ }
+ }
+ if (isCaretContainer(node)) {
+ if (NodeType.isText(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$3(selection.dom, name, element)
+ };
+ }
+ var sibling = findAdjacentContentEditableFalseElm(rng);
+ if (sibling) {
+ name = sibling.tagName;
+ return {
+ name: name,
+ index: findIndex$3(selection.dom, name, sibling)
+ };
+ }
+ return getLocation(trim, selection, normalized, rng);
+ };
+ var getCaretBookmark = function (selection) {
+ var rng = selection.getRng();
+ return {
+ start: create$2(selection.dom.getRoot(), CaretPosition$1.fromRangeStart(rng)),
+ end: create$2(selection.dom.getRoot(), CaretPosition$1.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$3(dom, name, element)
+ };
+ }
+ var rng2 = normalizeTableCellSelection(rng.cloneRange());
+ if (!collapsed) {
+ rng2.collapse(false);
+ var endBookmarkNode = createBookmarkSpan(dom, id + '_end', filled);
+ rng2.insertNode(endBookmarkNode);
+ trimEmptyTextNode(endBookmarkNode.nextSibling);
+ }
+ rng = normalizeTableCellSelection(rng);
+ rng.collapse(true);
+ var startBookmarkNode = createBookmarkSpan(dom, id + '_start', filled);
+ rng.insertNode(startBookmarkNode);
+ trimEmptyTextNode(startBookmarkNode.previousSibling);
+ trimEmptyTextNode(startBookmarkNode.nextSibling);
+ selection.moveToBookmark({
+ id: id,
+ keep: 1
+ });
+ return { id: id };
+ };
+ var getBookmark = function (selection, type, normalized) {
+ if (type === 2) {
+ return getOffsetBookmark(Zwsp.trim, normalized, selection);
+ } else if (type === 3) {
+ return getCaretBookmark(selection);
+ } else if (type) {
+ return getRangeBookmark(selection);
+ } else {
+ return getPersistentBookmark(selection, false);
+ }
+ };
+ var GetBookmark = {
+ getBookmark: getBookmark,
+ getUndoBookmark: curry(getOffsetBookmark, identity, true),
+ getPersistentBookmark: getPersistentBookmark
+ };
+
+ var CARET_ID = '_mce_caret';
+ var isCaretNode = function (node) {
+ return NodeType.isElement(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 collect ? result : null;
+ return null;
};
- var getParent = function (node, selector, root) {
- var parents = getParents(node, selector, root, false);
- return parents && parents.length > 0 ? parents[0] : null;
+
+ var isElement$4 = NodeType.isElement;
+ var isText$6 = NodeType.isText;
+ var removeNode = function (node) {
+ var parentNode = node.parentNode;
+ if (parentNode) {
+ parentNode.removeChild(node);
+ }
};
- var _findSib = function (node, selector, name$$1) {
- var func = selector;
- if (node) {
- if (typeof selector === 'string') {
- func = function (node) {
- return is(node, selector);
- };
+ var getNodeValue = function (node) {
+ try {
+ return node.nodeValue;
+ } catch (ex) {
+ return '';
+ }
+ };
+ var setNodeValue = function (node, text) {
+ if (text.length === 0) {
+ removeNode(node);
+ } else {
+ node.nodeValue = text;
+ }
+ };
+ var trimCount = function (text) {
+ var trimmedText = Zwsp.trim(text);
+ return {
+ count: text.length - trimmedText.length,
+ text: trimmedText
+ };
+ };
+ var removeUnchanged = function (caretContainer, pos) {
+ remove$7(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) {
+ setNodeValue(caretContainer, text);
+ return CaretPosition$1(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$1(parentNode, pos.offset() - 1) : pos;
+ }).getOr(pos);
+ remove$7(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$1.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos);
+ };
+ var remove$7 = function (caretContainerNode) {
+ if (isElement$4(caretContainerNode) && isCaretContainer(caretContainerNode)) {
+ if (hasContent(caretContainerNode)) {
+ caretContainerNode.removeAttribute('data-mce-caret');
+ } else {
+ removeNode(caretContainerNode);
}
- for (node = node[name$$1]; node; node = node[name$$1]) {
- if (typeof func === 'function' && func(node)) {
+ }
+ if (isText$6(caretContainerNode)) {
+ var text = Zwsp.trim(getNodeValue(caretContainerNode));
+ setNodeValue(caretContainerNode, text);
+ }
+ };
+ var CaretContainerRemove = {
+ removeAndReposition: removeAndReposition,
+ remove: remove$7
+ };
+
+ var browser$2 = PlatformDetection$1.detect().browser;
+ var isContentEditableFalse$3 = NodeType.isContentEditableFalse;
+ var isTableCell$1 = function (node) {
+ return NodeType.isElement(node) && /^(TD|TH)$/i.test(node.tagName);
+ };
+ 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 contentEditableFalseNodes, node, sibling, i, data;
+ contentEditableFalseNodes = DomQuery('*[contentEditable=false]', root);
+ for (i = 0; i < contentEditableFalseNodes.length; i++) {
+ node = contentEditableFalseNodes[i];
+ sibling = node.previousSibling;
+ if (endsWithCaretContainer(sibling)) {
+ data = sibling.data;
+ if (data.length === 1) {
+ sibling.parentNode.removeChild(sibling);
+ } else {
+ sibling.deleteData(data.length - 1, 1);
+ }
+ }
+ sibling = node.nextSibling;
+ if (startsWithCaretContainer(sibling)) {
+ data = sibling.data;
+ if (data.length === 1) {
+ sibling.parentNode.removeChild(sibling);
+ } else {
+ sibling.deleteData(0, 1);
+ }
+ }
+ }
+ };
+ var FakeCaret = function (root, isBlock, hasFocus) {
+ var lastVisualCaret = Cell(Option.none());
+ var cursorInterval, caretContainerNode;
+ var show = function (before, element) {
+ var clientRect, rng;
+ hide();
+ if (isTableCell$1(element)) {
+ return null;
+ }
+ if (isBlock(element)) {
+ caretContainerNode = insertBlock('p', element, before);
+ clientRect = getAbsoluteClientRect(root, element, before);
+ DomQuery(caretContainerNode).css('top', clientRect.top);
+ var caret = DomQuery('').css(clientRect).appendTo(root)[0];
+ lastVisualCaret.set(Option.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 (isContentEditableFalse$3(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) {
+ CaretContainerRemove.remove(caretContainerNode);
+ caretContainerNode = null;
+ }
+ lastVisualCaret.get().each(function (caretState) {
+ DomQuery(caretState.caret).remove();
+ lastVisualCaret.set(Option.none());
+ });
+ clearInterval(cursorInterval);
+ };
+ 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(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 isFakeCaretTarget = function (node) {
+ return isContentEditableFalse$3(node) || NodeType.isTable(node) && isFakeCaretTableBrowser();
+ };
+
+ var is$3 = function (expected) {
+ return function (actual) {
+ return expected === actual;
+ };
+ };
+ var isNbsp = is$3('\xA0');
+ var isWhiteSpace$1 = function (chr) {
+ return /^[\r\n\t ]$/.test(chr);
+ };
+ var isContent = function (chr) {
+ return !isWhiteSpace$1(chr) && !isNbsp(chr);
+ };
+
+ var isContentEditableFalse$4 = NodeType.isContentEditableFalse;
+ var isBlockLike = NodeType.matchStyleValues('display', 'block table table-cell table-caption list-item');
+ var isCaretContainer$2 = isCaretContainer;
+ var isCaretContainerBlock$1 = isCaretContainerBlock;
+ var isElement$5 = NodeType.isElement;
+ 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 TreeWalker(node, rootNode);
+ if (isBackwards(direction)) {
+ if (isContentEditableFalse$4(node) || isCaretContainerBlock$1(node)) {
+ node = skipCaretContainers(walker.prev, true);
+ if (predicateFn(node)) {
+ return node;
+ }
+ }
+ while (node = skipCaretContainers(walker.prev, shallow)) {
+ if (predicateFn(node)) {
+ return node;
+ }
+ }
+ }
+ if (isForwards(direction)) {
+ if (isContentEditableFalse$4(node) || isCaretContainerBlock$1(node)) {
+ node = skipCaretContainers(walker.next, true);
+ if (predicateFn(node)) {
+ return node;
+ }
+ }
+ while (node = skipCaretContainers(walker.next, shallow)) {
+ if (predicateFn(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 ($_1q1txeljnlpawsa.isArray(node) && (node.length || node.length === 0)) {
- result = [];
- each$5(node, function (elm, i) {
- if (elm) {
- if (typeof elm === 'string') {
- elm = get(elm);
- }
- result.push(func.call(scope, 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$$1) {
- setAttrib(node, name$$1, 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$$1, attrs, html, create) {
- return run(parentElm, function (parentElm) {
- var newElm = typeof name$$1 === 'string' ? doc.createElement(name$$1) : name$$1;
- 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$$1, attrs, html) {
- return add(doc.createElement(name$$1), name$$1, attrs, html, true);
- };
- var decode = $_bea7j51sjnlpax2u.decode;
- var encode = $_bea7j51sjnlpax2u.encodeAllRaw;
- var createHTML = function (name$$1, attrs, html) {
- var outHtml = '', key;
- outHtml += '<' + name$$1;
- 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 + '' + name$$1 + '>';
- }
- return outHtml + ' />';
- };
- var createFragment = function (html) {
- var node;
- var container = doc.createElement('div');
- var frag = doc.createDocumentFragment();
- if (html) {
- container.innerHTML = html;
- }
- while (node = container.firstChild) {
- frag.appendChild(node);
- }
- 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$$1) {
- return styles.serialize(stylesArg, name$$1);
- };
- var addStyle = function (cssText) {
- var head, styleElm;
- if (self$$1 !== 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 (url) {
- var head;
- if (self$$1 !== DOMUtils.DOM && doc === document) {
- DOMUtils.DOM.loadCSS(url);
- return;
- }
- if (!url) {
- url = '';
- }
- head = doc.getElementsByTagName('head')[0];
- each$5(url.split(','), function (url) {
- var link;
- url = $_1q1txeljnlpawsa._addCacheSuffix(url);
- if (files[url]) {
- return;
- }
- files[url] = true;
- link = create('link', {
- rel: 'stylesheet',
- href: url
- });
- head.appendChild(link);
- });
- };
- 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 $_fy28ei1rjnlpax2o.isElement(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$$1, nextSibling;
- parent$$1 = referenceNode.parentNode;
- nextSibling = referenceNode.nextSibling;
- if (nextSibling) {
- parent$$1.insertBefore(node, nextSibling);
- } else {
- parent$$1.appendChild(node);
- }
- return node;
- });
- };
- var replace = function (newElm, oldElm, keepChildren) {
- return run(oldElm, function (oldElm) {
- if ($_1q1txeljnlpawsa.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$$1) {
- var newElm;
- if (elm.nodeName !== name$$1.toUpperCase()) {
- newElm = create(name$$1);
- 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($_1q1txeljnlpawsa.trim(rgbVal));
- };
- var isEmpty = function (node, elements) {
- var i, attributes, type, whitespace, walker, name$$1, brCount = 0;
- node = node.firstChild;
- if (node) {
- walker = new TreeWalker(node, node.parentNode);
- elements = elements || (schema ? schema.getNonEmptyElements() : null);
- whitespace = schema ? schema.getWhiteSpaceElements() : {};
- do {
- type = node.nodeType;
- if ($_fy28ei1rjnlpax2o.isElement(node)) {
- var bogusVal = node.getAttribute('data-mce-bogus');
- if (bogusVal) {
- node = walker.next(bogusVal === 'all');
- continue;
- }
- name$$1 = node.nodeName.toLowerCase();
- if (elements && elements[name$$1]) {
- if (name$$1 === 'br') {
- brCount++;
- node = walker.next();
- continue;
- }
- return false;
- }
- attributes = getAttribs(node);
- i = attributes.length;
- while (i--) {
- name$$1 = attributes[i].nodeName;
- if (name$$1 === 'name' || name$$1 === 'data-mce-bookmark') {
- return false;
- }
- }
- }
- if (type === 8) {
- return false;
- }
- if (type === 3 && !whiteSpaceRegExp$2.test(node.nodeValue)) {
- return false;
- }
- if (type === 3 && node.parentNode && whitespace[node.parentNode.nodeName] && whiteSpaceRegExp$2.test(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 r = createRng(), bef, aft, pa;
- if (parentElm && splitElm) {
- r.setStart(parentElm.parentNode, findNodeIndex(parentElm));
- r.setEnd(splitElm.parentNode, findNodeIndex(splitElm));
- bef = r.extractContents();
- r = createRng();
- r.setStart(splitElm.parentNode, findNodeIndex(splitElm) + 1);
- r.setEnd(parentElm.parentNode, findNodeIndex(parentElm) + 1);
- aft = r.extractContents();
- pa = parentElm.parentNode;
- pa.insertBefore($_7nxzh21pjnlpax26.trimNode(self$$1, bef), parentElm);
- if (replacementElm) {
- pa.insertBefore(replacementElm, parentElm);
- } else {
- pa.insertBefore(splitElm, parentElm);
- }
- pa.insertBefore($_7nxzh21pjnlpax26.trimNode(self$$1, aft), parentElm);
- remove(parentElm);
- return replacementElm || splitElm;
- }
- };
- var bind = function (target, name$$1, func, scope) {
- if ($_1q1txeljnlpawsa.isArray(target)) {
- var i = target.length;
- while (i--) {
- target[i] = bind(target[i], name$$1, func, scope);
- }
- return target;
- }
- if (settings.collect && (target === doc || target === win)) {
- boundEvents.push([
- target,
- name$$1,
- func,
- scope
- ]);
- }
- return events.bind(target, name$$1, func, scope || self$$1);
- };
- var unbind = function (target, name$$1, func) {
- var i;
- if ($_1q1txeljnlpawsa.isArray(target)) {
- i = target.length;
- while (i--) {
- target[i] = unbind(target[i], name$$1, func);
- }
- return target;
- }
- if (boundEvents && (target === doc || target === win)) {
- i = boundEvents.length;
- while (i--) {
- var item = boundEvents[i];
- if (target === item[0] && (!name$$1 || name$$1 === item[1]) && (!func || func === item[2])) {
- events.unbind(item[0], item[1], item[2]);
- }
- }
- }
- return events.unbind(target, name$$1, func);
- };
- var fire = function (target, name$$1, evt) {
- return events.fire(target, name$$1, evt);
- };
- var getContentEditable = function (node) {
- if (node && $_fy28ei1rjnlpax2o.isElement(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) {
- var i = boundEvents.length;
- while (i--) {
- var item = boundEvents[i];
- events.unbind(item[0], item[1], item[2]);
- }
- }
- if (Sizzle.setDocument) {
- Sizzle.setDocument();
- }
- };
- var isChildOf = function (node, parent$$1) {
- while (node) {
- if (parent$$1 === node) {
- return true;
+ var getParentBlock = function (node, rootNode) {
+ while (node && node !== rootNode) {
+ if (isBlockLike(node)) {
+ return node;
}
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$$1 = {
- 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,
- 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
- };
- attrHooks = setupAttrHooks(styles, settings, function () {
- return self$$1;
- });
- return self$$1;
- }
- (function (DOMUtils) {
- DOMUtils.DOM = DOMUtils(document);
- DOMUtils.nodeIndex = findNodeIndex;
- }(DOMUtils || (DOMUtils = {})));
- var DOMUtils$1 = DOMUtils;
-
- var DOM = DOMUtils$1.DOM;
- var each$6 = $_1q1txeljnlpawsa.each;
- var grep$2 = $_1q1txeljnlpawsa.grep;
- var isFunction$1 = function (f) {
- return typeof f === 'function';
- };
- var ScriptLoader = function () {
- var QUEUED = 0;
- var LOADING = 1;
- var LOADED = 2;
- var FAILED = 3;
- var states = {};
- var queue = [];
- var scriptLoadedCallbacks = {};
- var queueLoadedCallbacks = [];
- var loading = 0;
- var loadScript = function (url, success, failure) {
- var dom = DOM;
- var elm, id;
- var done = function () {
- dom.remove(id);
- if (elm) {
- elm.onreadystatechange = elm.onload = elm = null;
- }
- success();
- };
- var error = function () {
- if (isFunction$1(failure)) {
- failure();
- } else {
- if (typeof console !== 'undefined' && console.log) {
- console.log('Failed to load script: ' + url);
- }
- }
- };
- id = dom.uniqueId();
- elm = document.createElement('script');
- elm.id = id;
- elm.type = 'text/javascript';
- elm.src = $_1q1txeljnlpawsa._addCacheSuffix(url);
- elm.onload = done;
- elm.onerror = error;
- (document.getElementsByTagName('head')[0] || document.body).appendChild(elm);
- };
- this.isDone = function (url) {
- return states[url] === LOADED;
- };
- this.markDone = function (url) {
- states[url] = LOADED;
- };
- this.add = this.load = function (url, success, scope, failure) {
- var state = states[url];
- if (state === undefined) {
- queue.push(url);
- states[url] = QUEUED;
- }
- if (success) {
- if (!scriptLoadedCallbacks[url]) {
- scriptLoadedCallbacks[url] = [];
- }
- scriptLoadedCallbacks[url].push({
- success: success,
- failure: failure,
- scope: scope || this
- });
- }
- };
- this.remove = function (url) {
- delete states[url];
- delete scriptLoadedCallbacks[url];
- };
- this.loadQueue = function (success, scope, failure) {
- this.loadScripts(queue, success, scope, failure);
- };
- this.loadScripts = function (scripts, success, scope, failure) {
- var loadScripts;
- var failures = [];
- var execCallbacks = function (name$$1, url) {
- each$6(scriptLoadedCallbacks[url], function (callback) {
- if (isFunction$1(callback[name$$1])) {
- callback[name$$1].call(callback.scope);
- }
- });
- scriptLoadedCallbacks[url] = undefined;
- };
- queueLoadedCallbacks.push({
- success: success,
- failure: failure,
- scope: scope || this
- });
- loadScripts = function () {
- var loadingScripts = grep$2(scripts);
- scripts.length = 0;
- each$6(loadingScripts, function (url) {
- if (states[url] === LOADED) {
- execCallbacks('success', url);
- return;
- }
- if (states[url] === FAILED) {
- execCallbacks('failure', url);
- return;
- }
- if (states[url] !== LOADING) {
- states[url] = LOADING;
- loading++;
- loadScript(url, function () {
- states[url] = LOADED;
- loading--;
- execCallbacks('success', url);
- loadScripts();
- }, function () {
- states[url] = FAILED;
- loading--;
- failures.push(url);
- execCallbacks('failure', url);
- loadScripts();
- });
- }
- });
- if (!loading) {
- var notifyCallbacks = queueLoadedCallbacks.slice(0);
- queueLoadedCallbacks.length = 0;
- each$6(notifyCallbacks, function (callback) {
- if (failures.length === 0) {
- if (isFunction$1(callback.success)) {
- callback.success.call(callback.scope);
- }
- } else {
- if (isFunction$1(callback.failure)) {
- callback.failure.call(callback.scope, failures);
- }
- }
- });
- }
- };
- loadScripts();
- };
- };
- ScriptLoader.ScriptLoader = new ScriptLoader();
-
- var each$7 = $_1q1txeljnlpawsa.each;
- function AddOnManager() {
- var _this = this;
- var items = [];
- var urls = {};
- var lookup = {};
- var _listeners = [];
- 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) {
- var language = AddOnManager.language;
- if (language && AddOnManager.languageLoad !== false) {
- if (languages) {
- languages = ',' + languages + ',';
- if (languages.indexOf(',' + language.substr(0, 2) + ',') !== -1) {
- language = language.substr(0, 2);
- } else if (languages.indexOf(',' + language + ',') === -1) {
- return;
- }
- }
- ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js');
- }
- };
- var add = function (id, addOn, dependencies) {
- items.push(addOn);
- lookup[id] = {
- instance: addOn,
- dependencies: dependencies
- };
- var result = partition(_listeners, function (listener) {
- return listener.name === id;
- });
- _listeners = result.fail;
- each$7(result.pass, function (listener) {
- listener.callback();
- });
- return addOn;
- };
- 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 = _this.urls[pluginName];
- each$7(scripts, function (script) {
- ScriptLoader.ScriptLoader.add(pluginUrl + '/' + script);
- });
- };
- var loadDependencies = function (name, addOnUrl, success, scope) {
- var deps = dependencies(name);
- each$7(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('/'));
- if (lookup[name]) {
- loadDependencies(name, addOnUrl, success, scope);
- } else {
- ScriptLoader.ScriptLoader.add(urlString, function () {
- return loadDependencies(name, addOnUrl, success, scope);
- }, scope, failure);
- }
- };
- var waitFor = function (name, callback) {
- if (lookup.hasOwnProperty(name)) {
- callback();
- } else {
- _listeners.push({
- name: name,
- 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
- };
- }
- (function (AddOnManager) {
- AddOnManager.PluginManager = AddOnManager();
- AddOnManager.ThemeManager = AddOnManager();
- }(AddOnManager || (AddOnManager = {})));
-
- var before = function (marker, element) {
- var parent = $_dr4ybh18jnlpawzt.parent(marker);
- parent.each(function (v) {
- v.dom().insertBefore(element.dom(), marker.dom());
- });
- };
- var after = function (marker, element) {
- var sibling = $_dr4ybh18jnlpawzt.nextSibling(marker);
- sibling.fold(function () {
- var parent = $_dr4ybh18jnlpawzt.parent(marker);
- parent.each(function (v) {
- append(v, element);
- });
- }, function (v) {
- before(v, element);
- });
- };
- var prepend = function (parent, element) {
- var firstChild = $_dr4ybh18jnlpawzt.firstChild(parent);
- firstChild.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 appendAt = function (parent, element, index) {
- $_dr4ybh18jnlpawzt.child(parent, index).fold(function () {
- append(parent, element);
- }, function (v) {
- before(v, element);
- });
- };
- var wrap$1 = function (element, wrapper) {
- before(element, wrapper);
- append(wrapper, element);
- };
- var $_ag89ax1yjnlpax4x = {
- before: before,
- after: after,
- prepend: prepend,
- append: append,
- appendAt: appendAt,
- wrap: wrap$1
- };
-
- var before$1 = function (marker, elements) {
- each(elements, function (x) {
- $_ag89ax1yjnlpax4x.before(marker, x);
- });
- };
- var after$1 = function (marker, elements) {
- each(elements, function (x, i) {
- var e = i === 0 ? marker : elements[i - 1];
- $_ag89ax1yjnlpax4x.after(e, x);
- });
- };
- var prepend$1 = function (parent, elements) {
- each(elements.slice().reverse(), function (x) {
- $_ag89ax1yjnlpax4x.prepend(parent, x);
- });
- };
- var append$1 = function (parent, elements) {
- each(elements, function (x) {
- $_ag89ax1yjnlpax4x.append(parent, x);
- });
- };
- var $_9vd3j51xjnlpax4s = {
- before: before$1,
- after: after$1,
- prepend: prepend$1,
- append: append$1
- };
-
- var empty = function (element) {
- element.dom().textContent = '';
- each($_dr4ybh18jnlpawzt.children(element), function (rogue) {
- remove$2(rogue);
- });
- };
- var remove$2 = function (element) {
- var dom = element.dom();
- if (dom.parentNode !== null)
- dom.parentNode.removeChild(dom);
- };
- var unwrap = function (wrapper) {
- var children = $_dr4ybh18jnlpawzt.children(wrapper);
- if (children.length > 0)
- $_9vd3j51xjnlpax4s.before(wrapper, children);
- remove$2(wrapper);
- };
- var $_azq8zm1wjnlpax4n = {
- empty: empty,
- remove: remove$2,
- unwrap: unwrap
- };
-
- var first$1 = 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$3 = 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 Cell = function (initial) {
- var value = initial;
- var get = function () {
- return value;
- };
- var set = function (v) {
- value = v;
- };
- var clone = function () {
- return Cell(get());
- };
- return {
- get: get,
- set: set,
- clone: clone
- };
- };
-
- function Toggler (turnOff, turnOn, initial) {
- var active = initial || false;
- var on = function () {
- turnOn();
- active = true;
- };
- var off = function () {
- turnOff();
- active = false;
- };
- var toggle = function () {
- var f = active ? off : on;
- f();
- };
- var isOn = function () {
- return active;
- };
- return {
- on: on,
- off: off,
- toggle: toggle,
- isOn: isOn
- };
- }
-
- var read = function (element, attr) {
- var value = $_521j8z15jnlpawz7.get(element, attr);
- return value === undefined || value === '' ? [] : value.split(' ');
- };
- var add = function (element, attr, id) {
- var old = read(element, attr);
- var nu = old.concat([id]);
- $_521j8z15jnlpawz7.set(element, attr, nu.join(' '));
- return true;
- };
- var remove$3 = function (element, attr, id) {
- var nu = filter(read(element, attr), function (v) {
- return v !== id;
- });
- if (nu.length > 0)
- $_521j8z15jnlpawz7.set(element, attr, nu.join(' '));
- else
- $_521j8z15jnlpawz7.remove(element, attr);
- return false;
- };
- var $_c7tpvt26jnlpax6a = {
- read: read,
- add: add,
- remove: remove$3
- };
-
- var supports = function (element) {
- return element.dom().classList !== undefined;
- };
- var get$3 = function (element) {
- return $_c7tpvt26jnlpax6a.read(element, 'class');
- };
- var add$1 = function (element, clazz) {
- return $_c7tpvt26jnlpax6a.add(element, 'class', clazz);
- };
- var remove$4 = function (element, clazz) {
- return $_c7tpvt26jnlpax6a.remove(element, 'class', clazz);
- };
- var toggle = function (element, clazz) {
- if (contains(get$3(element), clazz)) {
- return remove$4(element, clazz);
- } else {
- return add$1(element, clazz);
- }
- };
- var $_2thj3d25jnlpax63 = {
- get: get$3,
- add: add$1,
- remove: remove$4,
- toggle: toggle,
- supports: supports
- };
-
- var add$2 = function (element, clazz) {
- if ($_2thj3d25jnlpax63.supports(element))
- element.dom().classList.add(clazz);
- else
- $_2thj3d25jnlpax63.add(element, clazz);
- };
- var cleanClass = function (element) {
- var classList = $_2thj3d25jnlpax63.supports(element) ? element.dom().classList : $_2thj3d25jnlpax63.get(element);
- if (classList.length === 0) {
- $_521j8z15jnlpawz7.remove(element, 'class');
- }
- };
- var remove$5 = function (element, clazz) {
- if ($_2thj3d25jnlpax63.supports(element)) {
- var classList = element.dom().classList;
- classList.remove(clazz);
- } else
- $_2thj3d25jnlpax63.remove(element, clazz);
- cleanClass(element);
- };
- var toggle$1 = function (element, clazz) {
- return $_2thj3d25jnlpax63.supports(element) ? element.dom().classList.toggle(clazz) : $_2thj3d25jnlpax63.toggle(element, clazz);
- };
- var toggler = function (element, clazz) {
- var hasClasslist = $_2thj3d25jnlpax63.supports(element);
- var classList = element.dom().classList;
- var off = function () {
- if (hasClasslist)
- classList.remove(clazz);
- else
- $_2thj3d25jnlpax63.remove(element, clazz);
- };
- var on = function () {
- if (hasClasslist)
- classList.add(clazz);
- else
- $_2thj3d25jnlpax63.add(element, clazz);
- };
- return Toggler(off, on, has$2(element, clazz));
- };
- var has$2 = function (element, clazz) {
- return $_2thj3d25jnlpax63.supports(element) && element.dom().classList.contains(clazz);
- };
- var $_fes8i223jnlpax5z = {
- add: add$2,
- remove: remove$5,
- toggle: toggle$1,
- toggler: toggler,
- has: has$2
- };
-
- var all$1 = function (predicate) {
- return descendants($_1lsags16jnlpawzj.body(), predicate);
- };
- var ancestors = function (scope, predicate, isRoot) {
- return filter($_dr4ybh18jnlpawzt.parents(scope, isRoot), predicate);
- };
- var siblings$1 = function (scope, predicate) {
- return filter($_dr4ybh18jnlpawzt.siblings(scope), predicate);
- };
- var children$1 = function (scope, predicate) {
- return filter($_dr4ybh18jnlpawzt.children(scope), predicate);
- };
- var descendants = function (scope, predicate) {
- var result = [];
- each($_dr4ybh18jnlpawzt.children(scope), function (x) {
- if (predicate(x)) {
- result = result.concat([x]);
- }
- result = result.concat(descendants(x, predicate));
- });
- return result;
- };
- var $_g370pf28jnlpax6n = {
- all: all$1,
- ancestors: ancestors,
- siblings: siblings$1,
- children: children$1,
- descendants: descendants
- };
-
- var all$2 = function (selector) {
- return $_d8v5lf1gjnlpax0y.all(selector);
- };
- var ancestors$1 = function (scope, selector, isRoot) {
- return $_g370pf28jnlpax6n.ancestors(scope, function (e) {
- return $_d8v5lf1gjnlpax0y.is(e, selector);
- }, isRoot);
- };
- var siblings$2 = function (scope, selector) {
- return $_g370pf28jnlpax6n.siblings(scope, function (e) {
- return $_d8v5lf1gjnlpax0y.is(e, selector);
- });
- };
- var children$2 = function (scope, selector) {
- return $_g370pf28jnlpax6n.children(scope, function (e) {
- return $_d8v5lf1gjnlpax0y.is(e, selector);
- });
- };
- var descendants$1 = function (scope, selector) {
- return $_d8v5lf1gjnlpax0y.all(selector, scope);
- };
- var $_cmitir27jnlpax6e = {
- all: all$2,
- ancestors: ancestors$1,
- siblings: siblings$2,
- children: children$2,
- descendants: descendants$1
- };
-
- function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {
- return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);
- }
-
- var first$2 = function (predicate) {
- return descendant($_1lsags16jnlpawzj.body(), predicate);
- };
- var ancestor = function (scope, predicate, isRoot) {
- var element = scope.dom();
- var stop = isFunction(isRoot) ? isRoot : constant(false);
- while (element.parentNode) {
- element = element.parentNode;
- var el = Element$$1.fromDom(element);
- if (predicate(el))
- return Option.some(el);
- else if (stop(el))
- break;
- }
- return Option.none();
- };
- var closest = function (scope, predicate, isRoot) {
- var is = function (scope) {
- return predicate(scope);
- };
- return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);
- };
- var sibling$1 = function (scope, predicate) {
- var element = scope.dom();
- if (!element.parentNode)
- return Option.none();
- return child$1(Element$$1.fromDom(element.parentNode), function (x) {
- return !$_5h7cor1ejnlpax0k.eq(scope, x) && predicate(x);
- });
- };
- var child$1 = function (scope, predicate) {
- var result = find(scope.dom().childNodes, compose(predicate, Element$$1.fromDom));
- return result.map(Element$$1.fromDom);
- };
- var descendant = function (scope, predicate) {
- var descend = function (node) {
- for (var i = 0; i < node.childNodes.length; i++) {
- if (predicate(Element$$1.fromDom(node.childNodes[i])))
- return Option.some(Element$$1.fromDom(node.childNodes[i]));
- var res = descend(node.childNodes[i]);
- if (res.isSome())
- return res;
- }
- return Option.none();
- };
- return descend(scope.dom());
- };
- var $_cs5qmd2ajnlpax6v = {
- first: first$2,
- ancestor: ancestor,
- closest: closest,
- sibling: sibling$1,
- child: child$1,
- descendant: descendant
- };
-
- var first$3 = function (selector) {
- return $_d8v5lf1gjnlpax0y.one(selector);
- };
- var ancestor$1 = function (scope, selector, isRoot) {
- return $_cs5qmd2ajnlpax6v.ancestor(scope, function (e) {
- return $_d8v5lf1gjnlpax0y.is(e, selector);
- }, isRoot);
- };
- var sibling$2 = function (scope, selector) {
- return $_cs5qmd2ajnlpax6v.sibling(scope, function (e) {
- return $_d8v5lf1gjnlpax0y.is(e, selector);
- });
- };
- var child$2 = function (scope, selector) {
- return $_cs5qmd2ajnlpax6v.child(scope, function (e) {
- return $_d8v5lf1gjnlpax0y.is(e, selector);
- });
- };
- var descendant$1 = function (scope, selector) {
- return $_d8v5lf1gjnlpax0y.one(selector, scope);
- };
- var closest$1 = function (scope, selector, isRoot) {
- return ClosestOrAncestor($_d8v5lf1gjnlpax0y.is, ancestor$1, scope, selector, isRoot);
- };
- var $_2kbu29jnlpax6t = {
- first: first$3,
- ancestor: ancestor$1,
- sibling: sibling$2,
- child: child$2,
- descendant: descendant$1,
- closest: closest$1
- };
-
- 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 = Element$$1.fromDom(rng.startContainer);
- var root = Element$$1.fromDom(editor.getBody());
- var selector = annotationName.fold(function () {
- return '.' + annotation();
- }, function (an) {
- return '[' + dataAnnotation() + '="' + an + '"]';
- });
- var newStart = $_dr4ybh18jnlpawzt.child(start, rng.startOffset).getOr(start);
- var closest = $_2kbu29jnlpax6t.closest(newStart, selector, function (n) {
- return $_5h7cor1ejnlpax0k.eq(n, root);
- });
- var getAttr = function (c, property) {
- if ($_521j8z15jnlpawz7.has(c, property)) {
- return Option.some($_521j8z15jnlpawz7.get(c, property));
- } else {
- return Option.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 $_7u5fzs11jnlpawv6.isElement(elem) && $_fes8i223jnlpax5z.has(elem, annotation());
- };
- var findMarkers = function (editor, uid) {
- var body = Element$$1.fromDom(editor.getBody());
- return $_cmitir27jnlpax6e.descendants(body, '[' + dataAnnotationId() + '="' + uid + '"]');
- };
- var findAll = function (editor, name) {
- var body = Element$$1.fromDom(editor.getBody());
- var markers = $_cmitir27jnlpax6e.descendants(body, '[' + dataAnnotation() + '="' + name + '"]');
- var directory = {};
- each(markers, function (m) {
- var uid = $_521j8z15jnlpawz7.get(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(Option.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$3(function () {
- var callbackMap = changeCallbacks.get();
- var annotations = sort(keys(callbackMap));
- each(annotations, function (name) {
- updateCallbacks(name, function (data) {
- var prev = data.previous.get();
- identify(editor, Option.some(name)).fold(function () {
- if (prev.isSome()) {
- fireNoAnnotation(name);
- data.previous.set(Option.none());
- }
- }, function (_a) {
- var uid = _a.uid, name = _a.name, elements = _a.elements;
- if (!prev.is(uid)) {
- fireCallbacks(name, uid, elements);
- data.previous.set(Option.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) {
- var optAnnotation = Option.from(span.attributes.map[dataAnnotation()]);
- return optAnnotation.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$1 = function () {
- var annotations = {};
- var register = function (name, settings) {
- annotations[name] = {
- name: name,
- settings: settings
- };
- };
- var lookup = function (name) {
- return annotations.hasOwnProperty(name) ? Option.from(annotations[name]).map(function (a) {
- return a.settings;
- }) : Option.none();
- };
- return {
- register: register,
- lookup: lookup
- };
- };
-
- var unique = 0;
- var generate = 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$3 = function (element, classes) {
- each(classes, function (x) {
- $_fes8i223jnlpax5z.add(element, x);
- });
- };
- var remove$6 = function (element, classes) {
- each(classes, function (x) {
- $_fes8i223jnlpax5z.remove(element, x);
- });
- };
- var toggle$2 = function (element, classes) {
- each(classes, function (x) {
- $_fes8i223jnlpax5z.toggle(element, x);
- });
- };
- var hasAll = function (element, classes) {
- return forall(classes, function (clazz) {
- return $_fes8i223jnlpax5z.has(element, clazz);
- });
- };
- var hasAny = function (element, classes) {
- return exists(classes, function (clazz) {
- return $_fes8i223jnlpax5z.has(element, clazz);
- });
- };
- var getNative = function (element) {
- var classList = element.dom().classList;
- var r = new Array(classList.length);
- for (var i = 0; i < classList.length; i++) {
- r[i] = classList.item(i);
- }
- return r;
- };
- var get$4 = function (element) {
- return $_2thj3d25jnlpax63.supports(element) ? getNative(element) : $_2thj3d25jnlpax63.get(element);
- };
- var $_6bet4b2hjnlpax8c = {
- add: add$3,
- remove: remove$6,
- toggle: toggle$2,
- hasAll: hasAll,
- hasAny: hasAny,
- get: get$4
- };
-
- var clone$1 = function (original, deep) {
- return Element$$1.fromDom(original.dom().cloneNode(deep));
- };
- var shallow = function (original) {
- return clone$1(original, false);
- };
- var deep = function (original) {
- return clone$1(original, true);
- };
- var shallowAs = function (original, tag) {
- var nu = Element$$1.fromTag(tag);
- var attributes = $_521j8z15jnlpawz7.clone(original);
- $_521j8z15jnlpawz7.setAll(nu, attributes);
- return nu;
- };
- var copy$1 = function (original, tag) {
- var nu = shallowAs(original, tag);
- var cloneChildren = $_dr4ybh18jnlpawzt.children(deep(original));
- $_9vd3j51xjnlpax4s.append(nu, cloneChildren);
- return nu;
- };
- var mutate = function (original, tag) {
- var nu = shallowAs(original, tag);
- $_ag89ax1yjnlpax4x.before(original, nu);
- var children = $_dr4ybh18jnlpawzt.children(original);
- $_9vd3j51xjnlpax4s.append(nu, children);
- $_azq8zm1wjnlpax4n.remove(original);
- return nu;
- };
- var $_5sdpl92ijnlpax8h = {
- shallow: shallow,
- shallowAs: shallowAs,
- deep: deep,
- copy: copy$1,
- mutate: mutate
- };
-
- var fromHtml$1 = function (html, scope) {
- var doc = scope || document;
- var div = doc.createElement('div');
- div.innerHTML = html;
- return $_dr4ybh18jnlpawzt.children(Element$$1.fromDom(div));
- };
- var fromTags = function (tags, scope) {
- return map(tags, function (x) {
- return Element$$1.fromTag(x, scope);
- });
- };
- var fromText$1 = function (texts, scope) {
- return map(texts, function (x) {
- return Element$$1.fromText(x, scope);
- });
- };
- var fromDom$1 = function (nodes) {
- return map(nodes, Element$$1.fromDom);
- };
- var $_d4cc782kjnlpax8m = {
- fromHtml: fromHtml$1,
- fromTags: fromTags,
- fromText: fromText$1,
- fromDom: fromDom$1
- };
-
- var get$5 = function (element) {
- return element.dom().innerHTML;
- };
- var set$2 = function (element, content) {
- var owner = $_dr4ybh18jnlpawzt.owner(element);
- var docDom = owner.dom();
- var fragment = Element$$1.fromDom(docDom.createDocumentFragment());
- var contentElements = $_d4cc782kjnlpax8m.fromHtml(content, docDom);
- $_9vd3j51xjnlpax4s.append(fragment, contentElements);
- $_azq8zm1wjnlpax4n.empty(element);
- $_ag89ax1yjnlpax4x.append(element, fragment);
- };
- var getOuter = function (element) {
- var container = Element$$1.fromTag('div');
- var clone = Element$$1.fromDom(element.dom().cloneNode(true));
- $_ag89ax1yjnlpax4x.append(container, clone);
- return get$5(container);
- };
- var $_am4twv2jjnlpax8k = {
- get: get$5,
- set: set$2,
- getOuter: getOuter
- };
-
- var slice$3 = [].slice;
- var constant$1 = function (value) {
- return function () {
- return value;
- };
- };
- var negate = function (predicate) {
- return function (x) {
- return !predicate(x);
- };
- };
- var compose$2 = function (f, g) {
- return function (x) {
- return f(g(x));
- };
- };
- var or = function () {
- var x = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- x[_i] = arguments[_i];
- }
- var args = slice$3.call(arguments);
- return function (x) {
- for (var i = 0; i < args.length; i++) {
- if (args[i](x)) {
- return true;
- }
- }
- return false;
- };
- };
- var and = function () {
- var x = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- x[_i] = arguments[_i];
- }
- var args = slice$3.call(arguments);
- return function (x) {
- for (var i = 0; i < args.length; i++) {
- if (!args[i](x)) {
- return false;
- }
- }
- return true;
- };
- };
- var curry$1 = function (fn) {
- var x = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- x[_i - 1] = arguments[_i];
- }
- var args = slice$3.call(arguments);
- if (args.length - 1 >= fn.length) {
- return fn.apply(this, args.slice(1));
- }
- return function () {
- var tempArgs = args.concat([].slice.call(arguments));
- return curry$1.apply(this, tempArgs);
- };
- };
- var noop$1 = function () {
- };
- var $_dv6bef2njnlpax9l = {
- constant: constant$1,
- negate: negate,
- and: and,
- or: or,
- curry: curry$1,
- compose: compose$2,
- noop: noop$1
- };
-
- var ZWSP = '\uFEFF';
- var isZwsp = function (chr) {
- return chr === ZWSP;
- };
- var trim$3 = function (text) {
- return text.replace(new RegExp(ZWSP, 'g'), '');
- };
- var $_90hfb72rjnlpaxae = {
- isZwsp: isZwsp,
- ZWSP: ZWSP,
- trim: trim$3
- };
-
- var isElement$2 = $_fy28ei1rjnlpax2o.isElement;
- var isText$2 = $_fy28ei1rjnlpax2o.isText;
- 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) && $_90hfb72rjnlpaxae.isZwsp(node.data);
- };
- var isCaretContainer = function (node) {
- return isCaretContainerBlock(node) || isCaretContainerInline(node);
- };
- var hasContent = function (node) {
- return node.firstChild !== node.lastChild || !$_fy28ei1rjnlpax2o.isBr(node.firstChild);
- };
- var insertInline = function (node, before) {
- var doc, sibling, textNode, parentNode;
- doc = node.ownerDocument;
- textNode = doc.createTextNode($_90hfb72rjnlpaxae.ZWSP);
- 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();
- return pos && $_fy28ei1rjnlpax2o.isText(container) && container.data.charAt(pos.offset()) === $_90hfb72rjnlpaxae.ZWSP;
- };
- var isAfterInline = function (pos) {
- var container = pos.container();
- return pos && $_fy28ei1rjnlpax2o.isText(container) && container.data.charAt(pos.offset() - 1) === $_90hfb72rjnlpaxae.ZWSP;
- };
- var createBogusBr = function () {
- var br = document.createElement('br');
- br.setAttribute('data-mce-bogus', '1');
- return br;
- };
- var insertBlock = function (blockName, node, before) {
- var doc, blockNode, parentNode;
- doc = node.ownerDocument;
- blockNode = doc.createElement(blockName);
- blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after');
- blockNode.setAttribute('data-mce-bogus', 'all');
- blockNode.appendChild(createBogusBr());
- 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] === $_90hfb72rjnlpaxae.ZWSP;
- };
- var endsWithCaretContainer = function (node) {
- return isText$2(node) && node.data[node.data.length - 1] === $_90hfb72rjnlpaxae.ZWSP;
- };
- var trimBogusBr = function (elm) {
- var brs = elm.getElementsByTagName('br');
- var lastBr = brs[brs.length - 1];
- if ($_fy28ei1rjnlpax2o.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 = $_fy28ei1rjnlpax2o.isContentEditableTrue;
- var isContentEditableFalse$1 = $_fy28ei1rjnlpax2o.isContentEditableFalse;
- var isBr$2 = $_fy28ei1rjnlpax2o.isBr;
- var isText$3 = $_fy28ei1rjnlpax2o.isText;
- var isInvalidTextElement = $_fy28ei1rjnlpax2o.matchNodeNames('script style textarea');
- var isAtomicInline = $_fy28ei1rjnlpax2o.matchNodeNames('img input textarea hr iframe video audio object');
- var isTable$1 = $_fy28ei1rjnlpax2o.matchNodeNames('table');
- var isCaretContainer$1 = isCaretContainer;
- var isCaretCandidate = function (node) {
- if (isCaretContainer$1(node)) {
- return false;
- }
- if (isText$3(node)) {
- if (isInvalidTextElement(node.parentNode)) {
- return false;
- }
- return true;
- }
- return isAtomicInline(node) || isBr$2(node) || isTable$1(node) || isNonUiContentEditableFalse(node);
- };
- var isUnselectable = function (node) {
- return $_fy28ei1rjnlpax2o.isElement(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 $_n452lmjnlpawsj.reduce(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 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) {
- if (rect1.bottom - rect1.height / 2 < 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 overflowX = function (outer, inner) {
- if (inner.left > outer.left && inner.right < outer.right) {
- return 0;
- } else {
- return inner.left < outer.left ? inner.left - outer.left : inner.right - outer.right;
- }
- };
- var overflowY = function (outer, inner) {
- if (inner.top > outer.top && inner.bottom < outer.bottom) {
- return 0;
- } else {
- return inner.top < outer.top ? inner.top - outer.top : inner.bottom - outer.bottom;
- }
- };
- var getOverflow = function (outer, inner) {
- return {
- x: overflowX(outer, inner),
- y: overflowY(outer, inner)
- };
- };
-
- 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 liftN = function (arr, f) {
- var r = [];
- for (var i = 0; i < arr.length; i++) {
- var x = arr[i];
- if (x.isSome()) {
- r.push(x.getOrDie());
- } else {
- return Option.none();
- }
- }
- return Option.some(f.apply(null, r));
- };
-
- var isElement$3 = $_fy28ei1rjnlpax2o.isElement;
- var isCaretCandidate$1 = isCaretCandidate;
- var isBlock$1 = $_fy28ei1rjnlpax2o.matchStyleValues('display', 'block table');
- var isFloated = $_fy28ei1rjnlpax2o.matchStyleValues('float', 'left right');
- var isValidElementCaretCandidate = $_dv6bef2njnlpax9l.and(isElement$3, isCaretCandidate$1, $_dv6bef2njnlpax9l.negate(isFloated));
- var isNotPre = $_dv6bef2njnlpax9l.negate($_fy28ei1rjnlpax2o.matchStyleValues('white-space', 'pre pre-line pre-wrap'));
- var isText$4 = $_fy28ei1rjnlpax2o.isText;
- var isBr$3 = $_fy28ei1rjnlpax2o.isBr;
- var nodeIndex = DOMUtils$1.nodeIndex;
- var resolveIndex = getNode;
- var createRange = function (doc) {
- return 'createRange' in doc ? doc.createRange() : DOMUtils$1.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$$1) {
- var container = range$$1.startContainer;
- var offset = range$$1.startOffset;
- var text;
- if (isWhiteSpace(range$$1.toString()) && isNotPre(container.parentNode) && $_fy28ei1rjnlpax2o.isText(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 = doc.createTextNode('\xA0');
- var parentNode = brNode.parentNode;
- var clientRect;
- parentNode.insertBefore(nbsp, brNode);
- rng.setStart(nbsp, 0);
- rng.setEnd(nbsp, 1);
- clientRect = clone$2(rng.getBoundingClientRect());
- parentNode.removeChild(nbsp);
- 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 && $_fy28ei1rjnlpax2o.isText(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, clientRects;
- 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$$1 = createRange(container.ownerDocument);
- if (offset < container.data.length) {
- if (isExtendingChar(container.data[offset])) {
- return clientRects;
- }
- if (isExtendingChar(container.data[offset - 1])) {
- range$$1.setStart(container, offset);
- range$$1.setEnd(container, offset + 1);
- if (!isHiddenWhiteSpaceRange(range$$1)) {
- addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range$$1), false));
- return clientRects;
- }
- }
- }
- if (offset > 0) {
- range$$1.setStart(container, offset - 1);
- range$$1.setEnd(container, offset);
- if (!isHiddenWhiteSpaceRange(range$$1)) {
- addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range$$1), false));
- }
- }
- if (offset < container.data.length) {
- range$$1.setStart(container, offset);
- range$$1.setEnd(container, offset + 1);
- if (!isHiddenWhiteSpaceRange(range$$1)) {
- addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range$$1), true));
- }
- }
+ var isInSameBlock = function (caretPosition1, caretPosition2, rootNode) {
+ return getParentBlock(caretPosition1.container(), rootNode) === getParentBlock(caretPosition2.container(), rootNode);
};
- 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;
- };
- function CaretPosition(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$$1;
- range$$1 = createRange(container.ownerDocument);
- range$$1.setStart(container, offset);
- range$$1.setEnd(container, offset);
- return range$$1;
- };
- var getClientRects = function () {
- if (!clientRects) {
- clientRects = getCaretPositionClientRects(CaretPosition(container, offset));
- }
- return clientRects;
- };
- var isVisible = function () {
- return getClientRects().length > 0;
- };
- var isEqual$$1 = function (caretPosition) {
- return caretPosition && container === caretPosition.container() && offset === caretPosition.offset();
- };
- var getNode$$1 = function (before) {
- return resolveIndex(container, before ? offset - 1 : offset);
- };
- return {
- container: $_dv6bef2njnlpax9l.constant(container),
- offset: $_dv6bef2njnlpax9l.constant(offset),
- toRange: toRange,
- getClientRects: getClientRects,
- isVisible: isVisible,
- isAtStart: isAtStart,
- isAtEnd: isAtEnd,
- isEqual: isEqual$$1,
- getNode: getNode$$1
- };
- }
- (function (CaretPosition) {
- CaretPosition.fromRangeStart = function (range$$1) {
- return CaretPosition(range$$1.startContainer, range$$1.startOffset);
- };
- CaretPosition.fromRangeEnd = function (range$$1) {
- return CaretPosition(range$$1.endContainer, range$$1.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 liftN([
- head(pos2.getClientRects()),
- last(pos1.getClientRects())
- ], isAbove).getOr(false);
- };
- CaretPosition.isBelow = function (pos1, pos2) {
- return liftN([
- 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 ? $_fy28ei1rjnlpax2o.isText(pos.container()) : false;
- };
- CaretPosition.isElementPosition = function (pos) {
- return CaretPosition.isTextPosition(pos) === false;
- };
- }(CaretPosition || (CaretPosition = {})));
- var CaretPosition$1 = CaretPosition;
-
- var isText$5 = $_fy28ei1rjnlpax2o.isText;
- var isBogus$1 = $_fy28ei1rjnlpax2o.isBogus;
- var nodeIndex$1 = DOMUtils$1.nodeIndex;
- var normalizedParent = function (node) {
- var parentNode = node.parentNode;
- if (isBogus$1(parentNode)) {
- return normalizedParent(parentNode);
- }
- return parentNode;
- };
- var getChildNodes = function (node) {
- if (!node) {
- return [];
- }
- return $_n452lmjnlpawsj.reduce(node.childNodes, function (result, node) {
- if (isBogus$1(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, numTextFragments;
- nodes = getChildNodes(normalizedParent(node));
- index = $_n452lmjnlpawsj.findIndex(nodes, equal$1(node), node);
- nodes = nodes.slice(0, index + 1);
- numTextFragments = $_n452lmjnlpawsj.reduce(nodes, function (result, node, i) {
- if (isText$5(node) && isText$5(nodes[i - 1])) {
- result++;
- }
- return result;
- }, 0);
- nodes = $_n452lmjnlpawsj.filter(nodes, $_fy28ei1rjnlpax2o.matchNodeNames(node.nodeName));
- index = $_n452lmjnlpawsj.findIndex(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$2 = 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 = $_n452lmjnlpawsj.filter(parents, $_dv6bef2njnlpax9l.negate($_fy28ei1rjnlpax2o.isBogus));
- path = path.concat($_n452lmjnlpawsj.map(parents, function (node) {
- return createPathItem(node);
- }));
- return path.reverse().join('/') + ',' + outputOffset;
- };
- var resolvePathItem = function (node, name, index) {
- var nodes = getChildNodes(node);
- nodes = $_n452lmjnlpawsj.filter(nodes, function (node, index) {
- return !isText$5(node) || !isText$5(nodes[index - 1]);
- });
- nodes = $_n452lmjnlpawsj.filter(nodes, $_fy28ei1rjnlpax2o.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$1(container, offset);
- };
- var resolve$2 = function (root, path) {
- var parts, container, offset;
- if (!path) {
- return null;
- }
- parts = path.split(',');
- path = parts[0].split('/');
- offset = parts.length > 1 ? parts[1] : 'before';
- container = $_n452lmjnlpawsj.reduce(path, function (result, value) {
- value = /([\w\-\(\)]+)\[([0-9]+)\]/.exec(value);
- if (!value) {
+ var getChildNodeAtRelativeOffset = function (relativeOffset, caretPosition) {
+ var container, offset;
+ if (!caretPosition) {
return null;
}
- if (value[1] === 'text()') {
- value[1] = '#text';
+ container = caretPosition.container();
+ offset = caretPosition.offset();
+ if (!isElement$5(container)) {
+ return null;
}
- return resolvePathItem(result, value[1], parseInt(value[2], 10));
- }, root);
- if (!container) {
- return null;
- }
- if (!isText$5(container)) {
- if (offset === 'after') {
- offset = nodeIndex$1(container) + 1;
+ return container.childNodes[offset + relativeOffset];
+ };
+ var beforeAfter = function (before, node) {
+ var range = node.ownerDocument.createRange();
+ if (before) {
+ range.setStartBefore(node);
+ range.setEndBefore(node);
} else {
- offset = nodeIndex$1(container);
+ range.setStartAfter(node);
+ range.setEndAfter(node);
}
- return CaretPosition$1(container.parentNode, offset);
- }
- return findTextPosition(container, parseInt(offset, 10));
- };
-
- var isContentEditableFalse$2 = $_fy28ei1rjnlpax2o.isContentEditableFalse;
- var getNormalizedTextOffset = function (trim, container, offset) {
- var node, trimmedOffset;
- trimmedOffset = trim(container.data.slice(0, offset)).length;
- for (node = container.previousSibling; node && $_fy28ei1rjnlpax2o.isText(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 ($_fy28ei1rjnlpax2o.isText(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 trimEmptyTextNode = function (node) {
- if ($_fy28ei1rjnlpax2o.isText(node) && node.data.length === 0) {
- node.parentNode.removeChild(node);
- }
- };
- var findIndex$3 = function (dom, name, element) {
- var count = 0;
- $_1q1txeljnlpawsa.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 ($_fy28ei1rjnlpax2o.isElement(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 ($_fy28ei1rjnlpax2o.isElement(node)) {
- node = getNode(node, offset);
- if (isContentEditableFalse$2(node)) {
- return node;
- }
- }
- if (isCaretContainer(node)) {
- if ($_fy28ei1rjnlpax2o.isText(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$3(selection.dom, name, element)
- };
- }
- var sibling = findAdjacentContentEditableFalseElm(rng);
- if (sibling) {
- name = sibling.tagName;
- return {
- name: name,
- index: findIndex$3(selection.dom, name, sibling)
- };
- }
- return getLocation(trim, selection, normalized, rng);
- };
- var getCaretBookmark = function (selection) {
- var rng = selection.getRng();
- return {
- start: create$2(selection.dom.getRoot(), CaretPosition$1.fromRangeStart(rng)),
- end: create$2(selection.dom.getRoot(), CaretPosition$1.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$3(dom, name, element)
- };
- }
- var rng2 = normalizeTableCellSelection(rng.cloneRange());
- if (!collapsed) {
- rng2.collapse(false);
- var endBookmarkNode = createBookmarkSpan(dom, id + '_end', filled);
- rng2.insertNode(endBookmarkNode);
- trimEmptyTextNode(endBookmarkNode.nextSibling);
- }
- rng = normalizeTableCellSelection(rng);
- rng.collapse(true);
- var startBookmarkNode = createBookmarkSpan(dom, id + '_start', filled);
- rng.insertNode(startBookmarkNode);
- trimEmptyTextNode(startBookmarkNode.previousSibling);
- trimEmptyTextNode(startBookmarkNode.nextSibling);
- selection.moveToBookmark({
- id: id,
- keep: 1
- });
- return { id: id };
- };
- var getBookmark = function (selection, type, normalized) {
- if (type === 2) {
- return getOffsetBookmark($_90hfb72rjnlpaxae.trim, normalized, selection);
- } else if (type === 3) {
- return getCaretBookmark(selection);
- } else if (type) {
- return getRangeBookmark(selection);
- } else {
- return getPersistentBookmark(selection, false);
- }
- };
- var $_5l0mu32ljnlpax8x = {
- getBookmark: getBookmark,
- getUndoBookmark: curry(getOffsetBookmark, identity, true),
- getPersistentBookmark: getPersistentBookmark
- };
-
- var CARET_ID = '_mce_caret';
- var isCaretNode = function (node) {
- return $_fy28ei1rjnlpax2o.isElement(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 isElement$4 = $_fy28ei1rjnlpax2o.isElement;
- var isText$6 = $_fy28ei1rjnlpax2o.isText;
- var removeNode = function (node) {
- var parentNode = node.parentNode;
- if (parentNode) {
- parentNode.removeChild(node);
- }
- };
- var getNodeValue = function (node) {
- try {
- return node.nodeValue;
- } catch (ex) {
- return '';
- }
- };
- var setNodeValue = function (node, text) {
- if (text.length === 0) {
- removeNode(node);
- } else {
- node.nodeValue = text;
- }
- };
- var trimCount = function (text) {
- var trimmedText = $_90hfb72rjnlpaxae.trim(text);
- return {
- count: text.length - trimmedText.length,
- text: trimmedText
- };
- };
- var removeUnchanged = function (caretContainer, pos) {
- remove$7(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) {
- setNodeValue(caretContainer, text);
- return CaretPosition$1(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$1(parentNode, pos.offset() - 1) : pos;
- }).getOr(pos);
- remove$7(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$1.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos);
- };
- var remove$7 = function (caretContainerNode) {
- if (isElement$4(caretContainerNode) && isCaretContainer(caretContainerNode)) {
- if (hasContent(caretContainerNode)) {
- caretContainerNode.removeAttribute('data-mce-caret');
- } else {
- removeNode(caretContainerNode);
- }
- }
- if (isText$6(caretContainerNode)) {
- var text = $_90hfb72rjnlpaxae.trim(getNodeValue(caretContainerNode));
- setNodeValue(caretContainerNode, text);
- }
- };
- var $_ctzulb33jnlpaxck = {
- removeAndReposition: removeAndReposition,
- remove: remove$7
- };
-
- var isContentEditableTrue$2 = $_fy28ei1rjnlpax2o.isContentEditableTrue;
- var isContentEditableFalse$3 = $_fy28ei1rjnlpax2o.isContentEditableFalse;
- var showCaret = function (direction, editor, node, before, scrollIntoView) {
- return 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 null;
- }
- return getNodeRange(node);
- };
- var renderCaretAtRange = function (editor, range, scrollIntoView) {
- var normalizedRange = normalizeRange(1, editor.getBody(), range);
- var caretPosition = CaretPosition$1.fromRangeStart(normalizedRange);
- var caretPositionNode = caretPosition.getNode();
- if (isContentEditableFalse$3(caretPositionNode)) {
- return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);
- }
- var caretPositionBeforeNode = caretPosition.getNode(true);
- if (isContentEditableFalse$3(caretPositionBeforeNode)) {
- return showCaret(1, editor, caretPositionBeforeNode, false, false);
- }
- var ceRoot = editor.dom.getParent(caretPosition.getNode(), function (node) {
- return isContentEditableFalse$3(node) || isContentEditableTrue$2(node);
- });
- if (isContentEditableFalse$3(ceRoot)) {
- return showCaret(1, editor, ceRoot, false, scrollIntoView);
- }
- return null;
- };
- var renderRangeCaret = function (editor, range, scrollIntoView) {
- if (!range || !range.collapsed) {
return range;
- }
- var caretRange = renderCaretAtRange(editor, range, scrollIntoView);
- if (caretRange) {
- return caretRange;
- }
- 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)) {
+ 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$2 = curry(beforeAfter, false);
+ var normalizeRange = function (direction, root, range) {
+ var node, container, offset, location;
+ var leanLeft = curry(lean, true, root);
+ var leanRight = curry(lean, false, root);
+ container = range.startContainer;
+ 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$2(node);
+ }
+ }
+ }
+ if (!range.collapsed) {
+ return range;
+ }
+ if (NodeType.isText(container)) {
+ if (isCaretContainer$2(container)) {
+ if (direction === 1) {
+ node = leanRight(container);
+ if (node) {
+ return before$2(node);
+ }
+ node = leanLeft(container);
+ if (node) {
+ return after$2(node);
+ }
+ }
+ if (direction === -1) {
+ node = leanLeft(container);
+ if (node) {
+ return after$2(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$2(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$2(node);
+ }
+ return range;
+ }
+ }
+ return range;
+ };
+ var isNextToContentEditableFalse = function (relativeOffset, caretPosition) {
+ var node = getChildNodeAtRelativeOffset(relativeOffset, caretPosition);
+ return isContentEditableFalse$4(node) && !NodeType.isBogusAll(node);
+ };
+ var isNextToTable = function (relativeOffset, caretPosition) {
+ return NodeType.isTable(getChildNodeAtRelativeOffset(relativeOffset, caretPosition));
+ };
+ var getRelativeCefElm = function (forward, caretPosition) {
+ return Option.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 isBeforeContentEditableFalse = curry(isNextToContentEditableFalse, 0);
+ var isAfterContentEditableFalse = curry(isNextToContentEditableFalse, -1);
+ var isBeforeTable = curry(isNextToTable, 0);
+ var isAfterTable = curry(isNextToTable, -1);
+ var isChar = function (forward, predicate, pos) {
+ return Option.from(pos.container()).filter(NodeType.isText).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 getElementFromPosition = function (pos) {
+ return Option.from(pos.getNode()).map(Element$$1.fromDom);
+ };
+ var getElementFromPrevPosition = function (pos) {
+ return Option.from(pos.getNode(true)).map(Element$$1.fromDom);
+ };
- var HDirection;
- (function (HDirection) {
- HDirection[HDirection['Backwards'] = -1] = 'Backwards';
- HDirection[HDirection['Forwards'] = 1] = 'Forwards';
- }(HDirection || (HDirection = {})));
- var isContentEditableFalse$4 = $_fy28ei1rjnlpax2o.isContentEditableFalse;
- var isText$7 = $_fy28ei1rjnlpax2o.isText;
- var isElement$5 = $_fy28ei1rjnlpax2o.isElement;
- var isBr$4 = $_fy28ei1rjnlpax2o.isBr;
- var isCaretCandidate$2 = 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$2(node.previousSibling) && !isText$7(node.previousSibling)) {
- return CaretPosition$1.before(node);
+ var HDirection;
+ (function (HDirection) {
+ HDirection[HDirection['Backwards'] = -1] = 'Backwards';
+ HDirection[HDirection['Forwards'] = 1] = 'Forwards';
+ }(HDirection || (HDirection = {})));
+ var isContentEditableFalse$5 = NodeType.isContentEditableFalse;
+ var isText$7 = NodeType.isText;
+ var isElement$6 = NodeType.isElement;
+ var isBr$4 = NodeType.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;
}
- if (isText$7(node)) {
- return CaretPosition$1(node, 0);
+ return parents;
+ };
+ var nodeAtIndex = function (container, offset) {
+ if (container.hasChildNodes() && offset < container.childNodes.length) {
+ return container.childNodes[offset];
}
- }
- if (isBackwards(direction)) {
- if (isCaretCandidate$2(node.nextSibling) && !isText$7(node.nextSibling)) {
+ return null;
+ };
+ var getCaretCandidatePosition = function (direction, node) {
+ if (isForwards(direction)) {
+ if (isCaretCandidate$3(node.previousSibling) && !isText$7(node.previousSibling)) {
+ return CaretPosition$1.before(node);
+ }
+ if (isText$7(node)) {
+ return CaretPosition$1(node, 0);
+ }
+ }
+ if (isBackwards(direction)) {
+ if (isCaretCandidate$3(node.nextSibling) && !isText$7(node.nextSibling)) {
+ return CaretPosition$1.after(node);
+ }
+ if (isText$7(node)) {
+ return CaretPosition$1(node, node.data.length);
+ }
+ }
+ if (isBackwards(direction)) {
+ if (isBr$4(node)) {
+ return CaretPosition$1.before(node);
+ }
return CaretPosition$1.after(node);
}
- if (isText$7(node)) {
- return CaretPosition$1(node, node.data.length);
- }
- }
- if (isBackwards(direction)) {
- if (isBr$4(node)) {
- return CaretPosition$1.before(node);
- }
- return CaretPosition$1.after(node);
- }
- return CaretPosition$1.before(node);
- };
- var isBrBeforeBlock = function (node, root) {
- var next;
- if (!$_fy28ei1rjnlpax2o.isBr(node)) {
- return false;
- }
- if (isAtomic(node.nextSibling)) {
- return false;
- }
- next = findCaretPosition(HDirection.Forwards, CaretPosition$1.after(node), root);
- if (!next) {
- return false;
- }
- return !isInSameBlock(CaretPosition$1.before(node), CaretPosition$1.before(next), root);
- };
- var findCaretPosition = function (direction, startPos, root) {
- var node, nextNode, innerNode;
- var rootContentEditableFalseElm, caretPosition;
- if (!isElement$5(root) || !startPos) {
- return null;
- }
- if (startPos.isEqual(CaretPosition$1.after(root)) && root.lastChild) {
- caretPosition = CaretPosition$1.after(root.lastChild);
- if (isBackwards(direction) && isCaretCandidate$2(root.lastChild) && isElement$5(root.lastChild)) {
- return isBr$4(root.lastChild) ? CaretPosition$1.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$1(container, --offset);
- }
- if (isForwards(direction) && offset < container.length) {
- return CaretPosition$1(container, ++offset);
- }
- node = container;
- } else {
- if (isBackwards(direction) && offset > 0) {
- nextNode = nodeAtIndex(container, offset - 1);
- if (isCaretCandidate$2(nextNode)) {
- if (!isAtomic$1(nextNode)) {
- innerNode = findNode(nextNode, direction, isEditableCaretCandidate$1, nextNode);
- if (innerNode) {
- if (isText$7(innerNode)) {
- return CaretPosition$1(innerNode, innerNode.data.length);
- }
- return CaretPosition$1.after(innerNode);
- }
- }
- if (isText$7(nextNode)) {
- return CaretPosition$1(nextNode, nextNode.data.length);
- }
- return CaretPosition$1.before(nextNode);
+ return CaretPosition$1.before(node);
+ };
+ var moveForwardFromBr = function (root, nextNode) {
+ var nextSibling = nextNode.nextSibling;
+ if (nextSibling && isCaretCandidate$3(nextSibling)) {
+ if (isText$7(nextSibling)) {
+ return CaretPosition$1(nextSibling, 0);
+ } else {
+ return CaretPosition$1.before(nextSibling);
}
- }
- if (isForwards(direction) && offset < container.childNodes.length) {
- nextNode = nodeAtIndex(container, offset);
- if (isCaretCandidate$2(nextNode)) {
- if (isBr$4(nextNode) && root.lastChild === nextNode) {
- return null;
- }
- if (isBrBeforeBlock(nextNode, root)) {
- return findCaretPosition(direction, CaretPosition$1.after(nextNode), root);
- }
- if (!isAtomic$1(nextNode)) {
- innerNode = findNode(nextNode, direction, isEditableCaretCandidate$1, nextNode);
- if (innerNode) {
- if (isText$7(innerNode)) {
- return CaretPosition$1(innerNode, 0);
- }
- return CaretPosition$1.before(innerNode);
- }
- }
- if (isText$7(nextNode)) {
- return CaretPosition$1(nextNode, 0);
- }
- return CaretPosition$1.after(nextNode);
- }
- }
- node = nextNode ? nextNode : caretPosition.getNode();
- }
- if (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart()) {
- node = findNode(node, direction, $_dv6bef2njnlpax9l.constant(true), root, true);
- if (isEditableCaretCandidate$1(node, root)) {
- return getCaretCandidatePosition(direction, node);
- }
- }
- nextNode = findNode(node, direction, isEditableCaretCandidate$1, root);
- rootContentEditableFalseElm = $_n452lmjnlpawsj.last($_n452lmjnlpawsj.filter(getParents(container, root), isContentEditableFalse$4));
- if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) {
- if (isForwards(direction)) {
- caretPosition = CaretPosition$1.after(rootContentEditableFalseElm);
} else {
- caretPosition = CaretPosition$1.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);
+ return findCaretPosition(HDirection.Forwards, CaretPosition$1.after(nextNode), root);
}
};
- };
-
- 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 ? positions.reverse() : positions;
- };
- var walk$1 = function (direction, caretWalker, pos) {
- return direction === HDirection.Forwards ? caretWalker.next(pos) : caretWalker.prev(pos);
- };
- var getBreakType = function (scope, direction, currentPos, nextPos) {
- if ($_fy28ei1rjnlpax2o.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$1(direction, caretWalker, currentPos);
- if (!nextPos) {
- break;
- }
- if ($_fy28ei1rjnlpax2o.isBr(nextPos.getNode(false))) {
- if (direction === HDirection.Forwards) {
- return {
- positions: flip(direction, positions).concat([nextPos]),
- breakType: BreakType.Br,
- breakAt: Option.some(nextPos)
- };
- } else {
- return {
- positions: flip(direction, positions),
- breakType: BreakType.Br,
- breakAt: Option.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: Option.some(nextPos)
- };
- }
- positions.push(nextPos);
- currentPos = nextPos;
- }
- return {
- positions: flip(direction, positions),
- breakType: BreakType.Eol,
- breakAt: Option.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 Option.some(newPos);
- }, function (lastPos) {
- return liftN([
- 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);
- });
- }, Option.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 getPositionsAbove = curry(getAdjacentLinePositions, -1, getPositionsUntilPreviousLine);
- var getPositionsBelow = curry(getAdjacentLinePositions, 1, getPositionsUntilNextLine);
- var getFirstLinePositions = function (scope) {
- return $_32xcvk30jnlpaxbn.firstPositionIn(scope).map(function (pos) {
- return [pos].concat(getPositionsUntilNextLine(scope, pos).positions);
- }).getOr([]);
- };
- var getLastLinePositions = function (scope) {
- return $_32xcvk30jnlpaxbn.lastPositionIn(scope).map(function (pos) {
- return getPositionsUntilPreviousLine(scope, pos).positions.concat(pos);
- }).getOr([]);
- };
-
- 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 Option.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 Option.some(newDist < oldDist ? newCorner : oldCorner);
- });
- }, Option.none());
- };
- var getClosestCell = function (getYAxisValue, isTargetCorner, table, x, y) {
- var cells = $_cmitir27jnlpax6e.descendants(Element$$1.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, getBottomValue, isAbove$1);
- var getClosestCellBelow = curry(getClosestCell, 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 getPos$1 = function (elm) {
- var x = 0, y = 0;
- var offsetParent = elm;
- while (offsetParent && offsetParent.nodeType) {
- x += offsetParent.offsetLeft || 0;
- y += offsetParent.offsetTop || 0;
- offsetParent = offsetParent.offsetParent;
- }
- return {
- x: x,
- y: y
- };
- };
- var fireScrollIntoViewEvent = function (editor, elm, alignToTop) {
- var scrollEvent = {
- elm: elm,
- alignToTop: alignToTop
- };
- editor.fire('scrollIntoView', scrollEvent);
- return scrollEvent.isDefaultPrevented();
- };
- var scrollElementIntoView = function (editor, elm, alignToTop) {
- var y, viewPort;
- var dom = editor.dom;
- var root = dom.getRoot();
- var viewPortY, viewPortH, offsetY = 0;
- if (fireScrollIntoViewEvent(editor, elm, alignToTop)) {
- return;
- }
- if (!$_fy28ei1rjnlpax2o.isElement(elm)) {
- return;
- }
- if (alignToTop === false) {
- offsetY = elm.offsetHeight;
- }
- if (root.nodeName !== 'BODY') {
- var scrollContainer = editor.selection.getScrollContainer();
- if (scrollContainer) {
- y = getPos$1(elm).y - getPos$1(scrollContainer).y + offsetY;
- viewPortH = scrollContainer.clientHeight;
- viewPortY = scrollContainer.scrollTop;
- if (y < viewPortY || y + 25 > viewPortY + viewPortH) {
- scrollContainer.scrollTop = y < viewPortY ? y : y - viewPortH + 25;
- }
- return;
- }
- }
- viewPort = dom.getViewPort(editor.getWin());
- y = dom.getPos(elm).y + offsetY;
- viewPortY = viewPort.y;
- viewPortH = viewPort.h;
- if (y < viewPort.y || y + 25 > viewPortY + viewPortH) {
- editor.getWin().scrollTo(0, y < viewPortY ? y : y - viewPortH + 25);
- }
- };
- var getViewPortRect = function (editor) {
- if (editor.inline) {
- return editor.getBody().getBoundingClientRect();
- } else {
- var win = editor.getWin();
- return {
- left: 0,
- right: win.innerWidth,
- top: 0,
- bottom: win.innerHeight,
- width: win.innerWidth,
- height: win.innerHeight
- };
- }
- };
- var scrollBy = function (editor, dx, dy) {
- if (editor.inline) {
- editor.getBody().scrollLeft += dx;
- editor.getBody().scrollTop += dy;
- } else {
- editor.getWin().scrollBy(dx, dy);
- }
- };
- var scrollRangeIntoView = function (editor, rng) {
- head(CaretPosition.fromRangeStart(rng).getClientRects()).each(function (rngRect) {
- var bodyRect = getViewPortRect(editor);
- var overflow = getOverflow(bodyRect, rngRect);
- var margin = 4;
- var dx = overflow.x > 0 ? overflow.x + margin : overflow.x - margin;
- var dy = overflow.y > 0 ? overflow.y + margin : overflow.y - margin;
- scrollBy(editor, overflow.x !== 0 ? dx : 0, overflow.y !== 0 ? dy : 0);
- });
- };
- var $_av60ug39jnlpaxee = {
- scrollElementIntoView: scrollElementIntoView,
- scrollRangeIntoView: scrollRangeIntoView
- };
-
- 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');
- return block === false ? '' : 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 $_1q1txeljnlpawsa.explode(editor.getParam('font_size_style_values', ''));
- };
- var getFontSizeClasses = function (editor) {
- return $_1q1txeljnlpawsa.explode(editor.getParam('font_size_classes', ''));
- };
- var getImagesDataImgFilter = function (editor) {
- return editor.getParam('images_dataimg_filter', constant(true), '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 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 $_c6e09z3ajnlpaxek = {
- getIframeAttrs: getIframeAttrs,
- getDocType: getDocType,
- getDocumentBaseUrl: getDocumentBaseUrl,
- getBodyId: getBodyId,
- getBodyClass: getBodyClass,
- getContentSecurityPolicy: getContentSecurityPolicy,
- shouldPutBrInPre: shouldPutBrInPre,
- getForcedRootBlock: getForcedRootBlock,
- getForcedRootBlockAttrs: getForcedRootBlockAttrs,
- getBrNewLineSelector: getBrNewLineSelector,
- getNoNewLineSelector: getNoNewLineSelector,
- shouldKeepStyles: shouldKeepStyles,
- shouldEndContainerOnEmptyBlock: shouldEndContainerOnEmptyBlock,
- getFontStyleValues: getFontStyleValues,
- getFontSizeClasses: getFontSizeClasses,
- getImagesDataImgFilter: getImagesDataImgFilter,
- isAutomaticUploadsEnabled: isAutomaticUploadsEnabled,
- shouldReuseFileName: shouldReuseFileName,
- shouldReplaceBlobUris: shouldReplaceBlobUris,
- getImageUploadUrl: getImageUploadUrl,
- getImageUploadBasePath: getImageUploadBasePath,
- getImagesUploadCredentials: getImagesUploadCredentials,
- getImagesUploadHandler: getImagesUploadHandler
- };
-
- var browser$2 = $_766rx4ojnlpawtd.detect().browser;
- var isFakeCaretTableBrowser = function () {
- return browser$2.isIE() || browser$2.isEdge() || browser$2.isFirefox();
- };
- var moveToRange = function (editor, rng) {
- editor.selection.setRng(rng);
- $_av60ug39jnlpaxee.scrollRangeIntoView(editor, rng);
- };
- var hasNextBreak = function (getPositionsUntil, scope, lineInfo) {
- return lineInfo.breakAt.map(function (breakPos) {
- return getPositionsUntil(scope, breakPos).breakAt.isSome();
- }).getOr(false);
- };
- 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) || !$_fy28ei1rjnlpax2o.isBr(pos.getNode()) && startsWithBrBreak(lineInfo)) {
- return !hasNextBreak(getPositionsUntil, scope, lineInfo);
- } else {
- return lineInfo.breakAt.isNone();
- }
- };
- var isAtFirstTableCellLine = $_dv6bef2njnlpax9l.curry(isAtTableCellLine, getPositionsUntilPreviousLine);
- var isAtLastTableCellLine = $_dv6bef2njnlpax9l.curry(isAtTableCellLine, getPositionsUntilNextLine);
- var isCaretAtStartOrEndOfTable = function (forward, rng, table) {
- var caretPos = CaretPosition$1.fromRangeStart(rng);
- return $_32xcvk30jnlpaxbn.positionIn(!forward, table).map(function (pos) {
- return pos.isEqual(caretPos);
- }).getOr(false);
- };
- var navigateHorizontally = function (editor, forward, table, td) {
- var rng = editor.selection.getRng();
- var direction = forward ? 1 : -1;
- if (isFakeCaretTableBrowser() && isCaretAtStartOrEndOfTable(forward, rng, table)) {
- var newRng = showCaret(direction, editor, table, !forward, true);
- 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$1.before(table)), rect.left);
- });
- }).getOr(CaretPosition$1.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$1.after(table)), rect.left);
- });
- }).getOr(CaretPosition$1.after(table));
- };
- var getTable = function (previous, pos) {
- var node = pos.getNode(previous);
- return $_fy28ei1rjnlpax2o.isElement(node) && node.nodeName === 'TABLE' ? Option.some(node) : Option.none();
- };
- var renderBlock = function (down, editor, table, pos) {
- var forcedRootBlock = $_c6e09z3ajnlpaxek.getForcedRootBlock(editor);
- if (forcedRootBlock) {
- editor.undoManager.transact(function () {
- var element = Element$$1.fromTag(forcedRootBlock);
- $_521j8z15jnlpawz7.setAll(element, $_c6e09z3ajnlpaxek.getForcedRootBlockAttrs(editor));
- $_ag89ax1yjnlpax4x.append(element, Element$$1.fromTag('br'));
- if (down) {
- $_ag89ax1yjnlpax4x.after(Element$$1.fromDom(table), element);
- } else {
- $_ag89ax1yjnlpax4x.before(Element$$1.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$$1 = down === false;
- table.fold(function () {
- return moveToRange(editor, pos.toRange());
- }, function (table) {
- return $_32xcvk30jnlpaxbn.positionIn(last$$1, 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$1.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 moveH = function (editor, forward) {
- return function () {
- return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {
- return Option.from(editor.dom.getParent(td, 'table')).map(function (table) {
- return navigateHorizontally(editor, forward, table, td);
- });
- }).getOr(false);
- };
- };
- var moveV = function (editor, forward) {
- return function () {
- return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {
- return Option.from(editor.dom.getParent(td, 'table')).map(function (table) {
- return navigateVertically(editor, forward, table, td);
- });
- }).getOr(false);
- };
- };
-
- var isContentEditableFalse$5 = $_fy28ei1rjnlpax2o.isContentEditableFalse;
- var isTableCell$1 = function (node) {
- return $_fy28ei1rjnlpax2o.isElement(node) && /^(TD|TH)$/i.test(node.tagName);
- };
- 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 contentEditableFalseNodes, node, sibling, i, data;
- contentEditableFalseNodes = DomQuery('*[contentEditable=false]', root);
- for (i = 0; i < contentEditableFalseNodes.length; i++) {
- node = contentEditableFalseNodes[i];
- sibling = node.previousSibling;
- if (endsWithCaretContainer(sibling)) {
- data = sibling.data;
- if (data.length === 1) {
- sibling.parentNode.removeChild(sibling);
- } else {
- sibling.deleteData(data.length - 1, 1);
- }
- }
- sibling = node.nextSibling;
- if (startsWithCaretContainer(sibling)) {
- data = sibling.data;
- if (data.length === 1) {
- sibling.parentNode.removeChild(sibling);
- } else {
- sibling.deleteData(0, 1);
- }
- }
- }
- };
- var FakeCaret = function (root, isBlock, hasFocus) {
- var lastVisualCaret = Cell(Option.none());
- var cursorInterval, caretContainerNode;
- var show = function (before, element) {
- var clientRect, rng;
- hide();
- if (isTableCell$1(element)) {
+ var findCaretPosition = function (direction, startPos, root) {
+ var node, nextNode, innerNode;
+ var rootContentEditableFalseElm, caretPosition;
+ if (!isElement$6(root) || !startPos) {
return null;
}
- if (isBlock(element)) {
- caretContainerNode = insertBlock('p', element, before);
- clientRect = getAbsoluteClientRect(root, element, before);
- DomQuery(caretContainerNode).css('top', clientRect.top);
- var caret = DomQuery('').css(clientRect).appendTo(root)[0];
- lastVisualCaret.set(Option.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 (isContentEditableFalse$5(caretContainerNode.nextSibling)) {
- rng.setStart(caretContainerNode, 0);
- rng.setEnd(caretContainerNode, 0);
- } else {
- rng.setStart(caretContainerNode, 1);
- rng.setEnd(caretContainerNode, 1);
+ if (startPos.isEqual(CaretPosition$1.after(root)) && root.lastChild) {
+ caretPosition = CaretPosition$1.after(root.lastChild);
+ if (isBackwards(direction) && isCaretCandidate$3(root.lastChild) && isElement$6(root.lastChild)) {
+ return isBr$4(root.lastChild) ? CaretPosition$1.before(root.lastChild) : caretPosition;
}
- return rng;
+ } else {
+ caretPosition = startPos;
}
+ var container = caretPosition.container();
+ var offset = caretPosition.offset();
+ if (isText$7(container)) {
+ if (isBackwards(direction) && offset > 0) {
+ return CaretPosition$1(container, --offset);
+ }
+ if (isForwards(direction) && offset < container.length) {
+ return CaretPosition$1(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$1(innerNode, innerNode.data.length);
+ }
+ return CaretPosition$1.after(innerNode);
+ }
+ }
+ if (isText$7(nextNode)) {
+ return CaretPosition$1(nextNode, nextNode.data.length);
+ }
+ return CaretPosition$1.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$1(innerNode, 0);
+ }
+ return CaretPosition$1.before(innerNode);
+ }
+ }
+ if (isText$7(nextNode)) {
+ return CaretPosition$1(nextNode, 0);
+ }
+ return CaretPosition$1.after(nextNode);
+ }
+ }
+ node = nextNode ? nextNode : caretPosition.getNode();
+ }
+ if (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart()) {
+ node = findNode(node, direction, constant(true), root, true);
+ if (isEditableCaretCandidate$1(node, root)) {
+ return getCaretCandidatePosition(direction, node);
+ }
+ }
+ nextNode = findNode(node, direction, isEditableCaretCandidate$1, root);
+ rootContentEditableFalseElm = ArrUtils.last(filter(getParents(container, root), isContentEditableFalse$5));
+ if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) {
+ if (isForwards(direction)) {
+ caretPosition = CaretPosition$1.after(rootContentEditableFalseElm);
+ } else {
+ caretPosition = CaretPosition$1.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$1.before(start) : CaretPosition$1.after(start);
+ return fromPosition(forward, root, position);
+ };
+ var afterElement = function (node) {
+ return NodeType.isBr(node) ? CaretPosition$1.before(node) : CaretPosition$1.after(node);
+ };
+ var isBeforeOrStart = function (position) {
+ if (CaretPosition$1.isTextPosition(position)) {
+ return position.offset() === 0;
+ } else {
+ return isCaretCandidate(position.getNode());
+ }
+ };
+ var isAfterOrEnd = function (position) {
+ if (CaretPosition$1.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$1.isTextPosition(from) && !CaretPosition$1.isTextPosition(to) && from.getNode() === to.getNode(true);
+ };
+ var isAtBr = function (position) {
+ return !CaretPosition$1.isTextPosition(position) && NodeType.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 Option.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 Option.some(to);
+ }
+ });
+ };
+ var positionIn = function (forward, element) {
+ var startNode = forward ? element.firstChild : element.lastChild;
+ if (NodeType.isText(startNode)) {
+ return Option.some(CaretPosition$1(startNode, forward ? 0 : startNode.data.length));
+ } else if (startNode) {
+ if (isCaretCandidate(startNode)) {
+ return Option.some(forward ? CaretPosition$1.before(startNode) : afterElement(startNode));
+ } else {
+ return walkToPositionIn(forward, element, startNode);
+ }
+ } else {
+ return Option.none();
+ }
+ };
+ var nextPosition = curry(fromPosition, true);
+ var prevPosition = curry(fromPosition, false);
+ var CaretFinder = {
+ fromPosition: fromPosition,
+ nextPosition: nextPosition,
+ prevPosition: prevPosition,
+ navigate: navigate,
+ positionIn: positionIn,
+ firstPositionIn: curry(positionIn, true),
+ lastPositionIn: curry(positionIn, false)
+ };
+
+ var isStringPathBookmark = function (bookmark) {
+ return typeof bookmark.start === 'string';
+ };
+ 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 (dom.isBlock(node) && !node.innerHTML && !Env.ie) {
+ node.innerHTML = '
';
+ }
+ return node;
+ };
+ var resolveCaretPositionBookmark = function (dom, bookmark) {
+ var rng, pos;
+ rng = dom.createRng();
+ pos = resolve$2(dom.getRoot(), bookmark.start);
+ rng.setStart(pos.container(), pos.offset());
+ pos = resolve$2(dom.getRoot(), bookmark.end);
+ rng.setEnd(pos.container(), pos.offset());
return rng;
};
- var hide = function () {
- trimInlineCaretContainers(root);
- if (caretContainerNode) {
- $_ctzulb33jnlpaxck.remove(caretContainerNode);
- caretContainerNode = null;
- }
- lastVisualCaret.get().each(function (caretState) {
- DomQuery(caretState.caret).remove();
- lastVisualCaret.set(Option.none());
- });
- clearInterval(cursorInterval);
+ var insertZwsp = function (node, rng) {
+ var textNode = node.ownerDocument.createTextNode(Zwsp.ZWSP);
+ node.appendChild(textNode);
+ rng.setStart(textNode, 0);
+ rng.setEnd(textNode, 0);
};
- var startBlink = function () {
- cursorInterval = $_2nbnh1ijnlpawpi.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 isEmpty = function (node) {
+ return node.hasChildNodes() === false;
};
- var reposition = function () {
- lastVisualCaret.get().each(function (caretState) {
- var clientRect = getAbsoluteClientRect(root, caretState.element, caretState.before);
- DomQuery(caretState.caret).css(clientRect);
+ var tryFindRangePosition = function (node, rng) {
+ return CaretFinder.lastPositionIn(node).fold(function () {
+ return false;
+ }, function (pos) {
+ rng.setStart(pos.container(), pos.offset());
+ rng.setEnd(pos.container(), pos.offset());
+ return true;
});
};
- var destroy = function () {
- return $_2nbnh1ijnlpawpi.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 isFakeCaretTarget = function (node) {
- return isContentEditableFalse$5(node) || $_fy28ei1rjnlpax2o.isTable(node) && isFakeCaretTableBrowser();
- };
-
- var isContentEditableFalse$6 = $_fy28ei1rjnlpax2o.isContentEditableFalse;
- var isBlockLike = $_fy28ei1rjnlpax2o.matchStyleValues('display', 'block table table-cell table-caption list-item');
- var isCaretContainer$2 = isCaretContainer;
- var isCaretContainerBlock$1 = isCaretContainerBlock;
- var curry$2 = $_dv6bef2njnlpax9l.curry;
- var isElement$6 = $_fy28ei1rjnlpax2o.isElement;
- var isCaretCandidate$3 = 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 TreeWalker(node, rootNode);
- if (isBackwards(direction)) {
- if (isContentEditableFalse$6(node) || isCaretContainerBlock$1(node)) {
- node = skipCaretContainers(walker.prev, true);
- if (predicateFn(node)) {
- return node;
- }
- }
- while (node = skipCaretContainers(walker.prev, shallow)) {
- if (predicateFn(node)) {
- return node;
- }
- }
- }
- if (isForwards(direction)) {
- if (isContentEditableFalse$6(node) || isCaretContainerBlock$1(node)) {
- node = skipCaretContainers(walker.next, true);
- if (predicateFn(node)) {
- return node;
- }
- }
- while (node = skipCaretContainers(walker.next, 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) {
- var container, offset;
- if (!caretPosition) {
- return null;
- }
- container = caretPosition.container();
- offset = caretPosition.offset();
- if (!isElement$6(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$6(sibling)) {
- if (isNodesInSameBlock(root, sibling, node)) {
- return sibling;
- }
- break;
- }
- if (isCaretCandidate$3(sibling)) {
- break;
- }
- node = node.parentNode;
- }
- return null;
- };
- var before$2 = curry$2(beforeAfter, true);
- var after$2 = curry$2(beforeAfter, false);
- var normalizeRange = function (direction, root, range) {
- var node, container, offset, location;
- var leanLeft = curry$2(lean, true, root);
- var leanRight = curry$2(lean, false, root);
- container = range.startContainer;
- offset = range.startOffset;
- if (isCaretContainerBlock(container)) {
- if (!isElement$6(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$2(node);
- }
- }
- }
- if (!range.collapsed) {
- return range;
- }
- if ($_fy28ei1rjnlpax2o.isText(container)) {
- if (isCaretContainer$2(container)) {
- if (direction === 1) {
- node = leanRight(container);
- if (node) {
- return before$2(node);
- }
- node = leanLeft(container);
- if (node) {
- return after$2(node);
- }
- }
- if (direction === -1) {
- node = leanLeft(container);
- if (node) {
- return after$2(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$2(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$2(node);
- }
- return range;
- }
- }
- return range;
- };
- var isNextToContentEditableFalse = function (relativeOffset, caretPosition) {
- var node = getChildNodeAtRelativeOffset(relativeOffset, caretPosition);
- return isContentEditableFalse$6(node) && !$_fy28ei1rjnlpax2o.isBogusAll(node);
- };
- var isNextToTable = function (relativeOffset, caretPosition) {
- return $_fy28ei1rjnlpax2o.isTable(getChildNodeAtRelativeOffset(relativeOffset, caretPosition));
- };
- var getRelativeCefElm = function (forward, caretPosition) {
- return Option.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, caretPosition)).filter(isContentEditableFalse$6);
- };
- var getNormalizedRangeEndPoint = function (direction, root, range) {
- var normalizedRange = normalizeRange(direction, root, range);
- if (direction === -1) {
- return CaretPosition.fromRangeStart(normalizedRange);
- }
- return CaretPosition.fromRangeEnd(normalizedRange);
- };
- var isBeforeContentEditableFalse = curry$2(isNextToContentEditableFalse, 0);
- var isAfterContentEditableFalse = curry$2(isNextToContentEditableFalse, -1);
- var isBeforeTable = curry$2(isNextToTable, 0);
- var isAfterTable = curry$2(isNextToTable, -1);
-
- var walkToPositionIn = function (forward, root, start) {
- var position = forward ? CaretPosition$1.before(start) : CaretPosition$1.after(start);
- return fromPosition(forward, root, position);
- };
- var afterElement = function (node) {
- return $_fy28ei1rjnlpax2o.isBr(node) ? CaretPosition$1.before(node) : CaretPosition$1.after(node);
- };
- var isBeforeOrStart = function (position) {
- if (CaretPosition$1.isTextPosition(position)) {
- return position.offset() === 0;
- } else {
- return isCaretCandidate(position.getNode());
- }
- };
- var isAfterOrEnd = function (position) {
- if (CaretPosition$1.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$1.isTextPosition(from) && !CaretPosition$1.isTextPosition(to) && from.getNode() === to.getNode(true);
- };
- var isAtBr = function (position) {
- return !CaretPosition$1.isTextPosition(position) && $_fy28ei1rjnlpax2o.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 Option.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);
+ var padEmptyCaretContainer = function (root, node, rng) {
+ if (isEmpty(node) && getParentCaretContainer(root, node)) {
+ insertZwsp(node, rng);
+ return true;
} else {
- return Option.some(to);
+ return false;
}
- });
- };
- var positionIn = function (forward, element) {
- var startNode = forward ? element.firstChild : element.lastChild;
- if ($_fy28ei1rjnlpax2o.isText(startNode)) {
- return Option.some(CaretPosition$1(startNode, forward ? 0 : startNode.data.length));
- } else if (startNode) {
- if (isCaretCandidate(startNode)) {
- return Option.some(forward ? CaretPosition$1.before(startNode) : afterElement(startNode));
- } else {
- return walkToPositionIn(forward, element, startNode);
- }
- } else {
- return Option.none();
- }
- };
- var $_32xcvk30jnlpaxbn = {
- fromPosition: fromPosition,
- nextPosition: curry(fromPosition, true),
- prevPosition: curry(fromPosition, false),
- navigate: navigate,
- positionIn: positionIn,
- firstPositionIn: curry(positionIn, true),
- lastPositionIn: curry(positionIn, false)
- };
-
- var isStringPathBookmark = function (bookmark) {
- return typeof bookmark.start === 'string';
- };
- 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 $_1q1txeljnlpawsa.isArray(bookmark.start);
- };
-
- var addBogus = function (dom, node) {
- if (dom.isBlock(node) && !node.innerHTML && !$_cseqobajnlpawll.ie) {
- node.innerHTML = '
';
- }
- return node;
- };
- var resolveCaretPositionBookmark = function (dom, bookmark) {
- var rng, pos;
- rng = dom.createRng();
- pos = resolve$2(dom.getRoot(), bookmark.start);
- rng.setStart(pos.container(), pos.offset());
- pos = resolve$2(dom.getRoot(), bookmark.end);
- rng.setEnd(pos.container(), pos.offset());
- return rng;
- };
- var insertZwsp = function (node, rng) {
- var textNode = node.ownerDocument.createTextNode($_90hfb72rjnlpaxae.ZWSP);
- node.appendChild(textNode);
- rng.setStart(textNode, 0);
- rng.setEnd(textNode, 0);
- };
- var isEmpty = function (node) {
- return node.hasChildNodes() === false;
- };
- var tryFindRangePosition = function (node, rng) {
- return $_32xcvk30jnlpaxbn.lastPositionIn(node).fold(function () {
- return false;
- }, function (pos) {
- rng.setStart(pos.container(), pos.offset());
- rng.setEnd(pos.container(), pos.offset());
- return true;
- });
- };
- var padEmptyCaretContainer = function (root, node, rng) {
- if (isEmpty(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) {
+ };
+ 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;
}
- 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 $_fy28ei1rjnlpax2o.isText(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;
+ if (point[i] > children.length - 1) {
+ if (padEmptyCaretContainer(root, node, rng)) {
+ return true;
+ }
+ return tryFindRangePosition(node, rng);
}
+ node = children[point[i]];
}
- container = node;
- offset = idx;
- } else {
- if (!keep) {
- idx = dom.nodeIndex(marker);
+ 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 {
- 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;
+ rng.setEnd(node, offset);
+ }
+ }
+ return true;
+ };
+ var isValidTextNode = function (node) {
+ return NodeType.isText(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);
- }
- }
- container = node;
- offset = idx;
- }
- if (!keep) {
- prev = marker.previousSibling;
- next = marker.nextSibling;
- $_1q1txeljnlpawsa.each($_1q1txeljnlpawsa.grep(marker.childNodes), function (node) {
- if ($_fy28ei1rjnlpax2o.isText(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 && $_fy28ei1rjnlpax2o.isText(prev) && !$_cseqobajnlpawll.opera) {
- idx = prev.nodeValue.length;
- prev.appendData(next.nodeValue);
- dom.remove(next);
- if (suffix === 'start') {
- container = prev;
- offset = idx;
} else {
- container = prev;
- offset = idx;
+ 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 (NodeType.isText(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 && NodeType.isText(prev) && !Env.opera) {
+ idx = prev.nodeValue.length;
+ prev.appendData(next.nodeValue);
+ dom.remove(next);
+ if (suffix === 'start') {
+ container = prev;
+ offset = idx;
+ } else {
+ container = prev;
+ offset = idx;
+ }
}
}
- }
- return Option.some(CaretPosition$1(container, offset));
- } else {
- return Option.none();
- }
- };
- var alt = function (o1, o2) {
- return o1.isSome() ? o1 : o2;
- };
- var resolvePaths = function (dom, bookmark) {
- var rng = dom.createRng();
- if (setEndPoint(dom, true, bookmark, rng) && setEndPoint(dom, false, bookmark, rng)) {
- return Option.some(rng);
- } else {
- return Option.none();
- }
- };
- var resolveId = function (dom, bookmark) {
- var startPos = restoreEndPoint(dom, 'start', bookmark);
- var endPos = restoreEndPoint(dom, 'end', bookmark);
- return liftN([
- startPos,
- alt(endPos, 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 Option.from(dom.select(bookmark.name)[bookmark.index]).map(function (elm) {
- var rng = dom.createRng();
- rng.selectNode(elm);
- return rng;
- });
- };
- var resolve$3 = function (selection, bookmark) {
- var dom = selection.dom;
- if (bookmark) {
- if (isPathBookmark(bookmark)) {
- return resolvePaths(dom, bookmark);
- } else if (isStringPathBookmark(bookmark)) {
- return Option.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 Option.some(bookmark.rng);
- }
- }
- return Option.none();
- };
- var $_6rgudt2yjnlpaxb4 = { resolve: resolve$3 };
-
- var getBookmark$1 = function (selection, type, normalized) {
- return $_5l0mu32ljnlpax8x.getBookmark(selection, type, normalized);
- };
- var moveToBookmark = function (selection, bookmark) {
- $_6rgudt2yjnlpaxb4.resolve(selection, bookmark).each(function (rng) {
- selection.setRng(rng);
- });
- };
- var isBookmarkNode$1 = function (node) {
- return $_fy28ei1rjnlpax2o.isElement(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';
- };
- var $_43l8qj2xjnlpaxb1 = {
- getBookmark: getBookmark$1,
- moveToBookmark: moveToBookmark,
- isBookmarkNode: isBookmarkNode$1
- };
-
- 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 TreeWalker(container, dom.getParent(container, dom.isBlock));
+ return Option.some(CaretPosition$1(container, offset));
} else {
- container = nodes[nodes.length - 1];
- walker = new TreeWalker(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) {
- next = next ? 'nextSibling' : 'previousSibling';
- for (node = inc ? node : node[next]; node; node = node[next]) {
- if (node.nodeType === 1 || !isWhiteSpaceNode(node)) {
- return node;
- }
- }
- }
- };
- var isTextBlock$1 = function (editor, name) {
- if (name.nodeType) {
- 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) {
- return node && node.nodeType === 3 && /^([\t \r\n]+|)$/.test(node.nodeValue);
- };
- 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 $_dlfh233cjnlpaxes = {
- isInlineBlock: isInlineBlock,
- moveStart: moveStart,
- getNonWhiteSpaceSibling: getNonWhiteSpaceSibling,
- isTextBlock: isTextBlock$1,
- isValid: isValid,
- isWhiteSpaceNode: isWhiteSpaceNode,
- replaceVars: replaceVars,
- isEq: isEq,
- normalizeStyleValue: normalizeStyleValue,
- getStyle: getStyle,
- getTextDecoration: getTextDecoration,
- getParents: getParents$1
- };
-
- var isBookmarkNode$2 = $_43l8qj2xjnlpaxb1.isBookmarkNode;
- var getParents$2 = $_dlfh233cjnlpaxes.getParents;
- var isWhiteSpaceNode$1 = $_dlfh233cjnlpaxes.isWhiteSpaceNode;
- var isTextBlock$2 = $_dlfh233cjnlpaxes.isTextBlock;
- var findLeaf = function (node, offset) {
- if (typeof offset === 'undefined') {
- offset = node.nodeType === 3 ? node.length : node.childNodes.length;
- }
- while (node && node.hasChildNodes()) {
- node = node.childNodes[offset];
- if (node) {
- offset = node.nodeType === 3 ? node.length : node.childNodes.length;
- }
- }
- return {
- node: node,
- offset: offset
- };
- };
- var excludeTrailingWhitespace = function (endContainer, endOffset) {
- var leaf = findLeaf(endContainer, endOffset);
- if (leaf.node) {
- while (leaf.node && leaf.offset === 0 && leaf.node.previousSibling) {
- leaf = findLeaf(leaf.node.previousSibling);
- }
- if (leaf.node && leaf.offset > 0 && leaf.node.nodeType === 3 && leaf.node.nodeValue.charAt(leaf.offset - 1) === ' ') {
- if (leaf.offset > 1) {
- endContainer = leaf.node;
- endContainer.splitText(leaf.offset - 1);
- }
- }
- }
- return endContainer;
- };
- var isBogusBr = function (node) {
- return node.nodeName === 'BR' && node.getAttribute('data-mce-bogus') && !node.nextSibling;
- };
- var findParentContentEditable = function (dom, node) {
- var parent = node;
- while (parent) {
- if (parent.nodeType === 1 && dom.getContentEditable(parent)) {
- return dom.getContentEditable(parent) === 'false' ? parent : node;
- }
- parent = parent.parentNode;
- }
- return node;
- };
- var findSpace = function (start, remove, node, offset) {
- var pos, pos2;
- var str = node.nodeValue;
- if (typeof offset === 'undefined') {
- offset = start ? str.length : 0;
- }
- if (start) {
- pos = str.lastIndexOf(' ', offset);
- pos2 = str.lastIndexOf('\xA0', offset);
- pos = pos > pos2 ? pos : pos2;
- if (pos !== -1 && !remove && (pos < offset || !start) && pos <= str.length) {
- pos++;
- }
- } else {
- pos = str.indexOf(' ', offset);
- pos2 = str.indexOf('\xA0', offset);
- pos = pos !== -1 && (pos2 === -1 || pos < pos2) ? pos : pos2;
- }
- return pos;
- };
- var findWordEndPoint = function (dom, body, container, offset, start, remove) {
- var walker, node, pos, lastTextNode;
- if (container.nodeType === 3) {
- pos = findSpace(start, remove, container, offset);
- if (pos !== -1) {
- return {
- container: container,
- offset: pos
- };
- }
- lastTextNode = container;
- }
- walker = new TreeWalker(container, dom.getParent(container, dom.isBlock) || body);
- while (node = walker[start ? 'prev' : 'next']()) {
- if (node.nodeType === 3 && !isBookmarkNode$2(node.parentNode)) {
- lastTextNode = node;
- pos = findSpace(start, remove, node);
- if (pos !== -1) {
- return {
- container: node,
- offset: pos
- };
- }
- } else if (dom.isBlock(node) || $_dlfh233cjnlpaxes.isEq(node, 'BR')) {
- break;
- }
- }
- if (lastTextNode) {
- if (start) {
- offset = 0;
- } else {
- offset = lastTextNode.length;
- }
- return {
- container: lastTextNode,
- offset: offset
- };
- }
- };
- var findSelectorEndPoint = function (dom, format, rng, container, siblingName) {
- var parents, i, y, curFormat;
- if (container.nodeType === 3 && container.nodeValue.length === 0 && container[siblingName]) {
- container = container[siblingName];
- }
- parents = getParents$2(dom, container);
- for (i = 0; i < parents.length; i++) {
- for (y = 0; y < format.length; y++) {
- 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(container.nodeType === 3 ? 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 ($_dlfh233cjnlpaxes.isEq(node, 'br')) {
- break;
- }
- }
- }
- return node || container;
- };
- var findParentContainer = function (dom, format, startContainer, startOffset, endContainer, endOffset, start) {
- var container, parent, sibling, siblingName, root;
- container = parent = start ? startContainer : endContainer;
- siblingName = start ? 'previousSibling' : 'nextSibling';
- root = dom.getRoot();
- if (container.nodeType === 3 && !isWhiteSpaceNode$1(container)) {
- if (start ? startOffset > 0 : endOffset < container.nodeValue.length) {
- return container;
- }
- }
- while (true) {
- if (!format[0].block_expand && dom.isBlock(parent)) {
- return parent;
- }
- for (sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {
- if (!isBookmarkNode$2(sibling) && !isWhiteSpaceNode$1(sibling) && !isBogusBr(sibling)) {
- return parent;
- }
- }
- if (parent === root || parent.parentNode === root) {
- container = parent;
- break;
- }
- parent = parent.parentNode;
- }
- return container;
- };
- var expandRng = function (editor, rng, format, remove) {
- var endPoint, startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;
- var dom = editor.dom;
- if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) {
- startContainer = getNode(startContainer, startOffset);
- if (startContainer.nodeType === 3) {
- startOffset = 0;
- }
- }
- if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) {
- endContainer = getNode(endContainer, rng.collapsed ? endOffset : endOffset - 1);
- if (endContainer.nodeType === 3) {
- endOffset = endContainer.nodeValue.length;
- }
- }
- startContainer = findParentContentEditable(dom, startContainer);
- endContainer = findParentContentEditable(dom, endContainer);
- if (isBookmarkNode$2(startContainer.parentNode) || isBookmarkNode$2(startContainer)) {
- startContainer = isBookmarkNode$2(startContainer) ? startContainer : startContainer.parentNode;
- if (rng.collapsed) {
- startContainer = startContainer.previousSibling || startContainer;
- } else {
- startContainer = startContainer.nextSibling || startContainer;
- }
- if (startContainer.nodeType === 3) {
- startOffset = rng.collapsed ? startContainer.length : 0;
- }
- }
- if (isBookmarkNode$2(endContainer.parentNode) || isBookmarkNode$2(endContainer)) {
- endContainer = isBookmarkNode$2(endContainer) ? endContainer : endContainer.parentNode;
- if (rng.collapsed) {
- endContainer = endContainer.nextSibling || endContainer;
- } else {
- endContainer = endContainer.previousSibling || endContainer;
- }
- if (endContainer.nodeType === 3) {
- endOffset = rng.collapsed ? 0 : endContainer.length;
- }
- }
- if (rng.collapsed) {
- endPoint = findWordEndPoint(dom, editor.getBody(), startContainer, startOffset, true, remove);
- if (endPoint) {
- startContainer = endPoint.container;
- startOffset = endPoint.offset;
- }
- endPoint = findWordEndPoint(dom, editor.getBody(), endContainer, endOffset, false, remove);
- if (endPoint) {
- endContainer = endPoint.container;
- endOffset = endPoint.offset;
- }
- }
- if (format[0].inline) {
- endContainer = remove ? endContainer : excludeTrailingWhitespace(endContainer, endOffset);
- }
- if (format[0].inline || format[0].block_expand) {
- if (!format[0].inline || (startContainer.nodeType !== 3 || startOffset === 0)) {
- startContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, true);
- }
- if (!format[0].inline || (endContainer.nodeType !== 3 || endOffset === endContainer.nodeValue.length)) {
- endContainer = findParentContainer(dom, format, startContainer, startOffset, 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, endContainer, endOffset, true);
- }
- if (!dom.isBlock(endContainer)) {
- endContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, false);
- }
- }
- }
- if (startContainer.nodeType === 1) {
- startOffset = dom.nodeIndex(startContainer);
- startContainer = startContainer.parentNode;
- }
- if (endContainer.nodeType === 1) {
- endOffset = dom.nodeIndex(endContainer) + 1;
- endContainer = endContainer.parentNode;
- }
- return {
- startContainer: startContainer,
- startOffset: startOffset,
- endContainer: endContainer,
- endOffset: endOffset
- };
- };
- var $_3cscnj2wjnlpaxau = { expandRng: expandRng };
-
- var each$8 = $_1q1txeljnlpawsa.each;
- var getEndChild = function (container, index) {
- var childNodes = container.childNodes;
- index--;
- if (index > childNodes.length - 1) {
- index = childNodes.length - 1;
- } else if (index < 0) {
- index = 0;
- }
- return childNodes[index] || container;
- };
- var walk$2 = function (dom, rng, callback) {
- var startContainer = rng.startContainer;
- var startOffset = rng.startOffset;
- var endContainer = rng.endContainer;
- var endOffset = rng.endOffset;
- var ancestor;
- var startPoint;
- var endPoint;
- var node;
- var parent;
- var siblings;
- var nodes;
- nodes = dom.select('td[data-mce-selected],th[data-mce-selected]');
- if (nodes.length > 0) {
- each$8(nodes, function (node) {
- callback([node]);
- });
- return;
- }
- 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 (node = startNode, parent = node.parentNode; node && node !== endNode; node = parent) {
- parent = node.parentNode;
- siblings = collectSiblings(node === startNode ? node : node[siblingName], siblingName);
- if (siblings.length) {
- if (!next) {
- siblings.reverse();
- }
- callback(exclude(siblings));
- }
- }
- };
- if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) {
- startContainer = startContainer.childNodes[startOffset];
- }
- if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) {
- endContainer = getEndChild(endContainer, endOffset);
- }
- if (startContainer === endContainer) {
- return callback(exclude([startContainer]));
- }
- ancestor = dom.findCommonAncestor(startContainer, endContainer);
- for (node = startContainer; node; node = node.parentNode) {
- if (node === endContainer) {
- return walkBoundary(startContainer, ancestor, true);
- }
- if (node === ancestor) {
- break;
- }
- }
- for (node = endContainer; node; node = node.parentNode) {
- if (node === startContainer) {
- return walkBoundary(endContainer, ancestor);
- }
- if (node === ancestor) {
- break;
- }
- }
- startPoint = findEndPoint(startContainer, ancestor) || startContainer;
- endPoint = findEndPoint(endContainer, ancestor) || endContainer;
- walkBoundary(startContainer, startPoint, true);
- siblings = collectSiblings(startPoint === startContainer ? startPoint : startPoint.nextSibling, 'nextSibling', endPoint === endContainer ? endPoint.nextSibling : endPoint);
- if (siblings.length) {
- callback(exclude(siblings));
- }
- walkBoundary(endContainer, endPoint);
- };
- var $_6wozuu3djnlpaxew = { walk: walk$2 };
-
- var zeroWidth = function () {
- return '\uFEFF';
- };
-
- function NodeValue (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 getOptionIE10 = function (element) {
- try {
- return getOptionSafe(element);
- } catch (e) {
return Option.none();
}
};
- var getOptionSafe = function (element) {
- return is(element) ? Option.from(element.dom().nodeValue) : Option.none();
+ var alt = function (o1, o2) {
+ return o1.isSome() ? o1 : o2;
};
- var browser = $_766rx4ojnlpawtd.detect().browser;
- var getOption = browser.isIE() && browser.version.major === 10 ? getOptionIE10 : getOptionSafe;
- 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($_7u5fzs11jnlpawv6.isText, 'text');
- var get$6 = function (element) {
- return api.get(element);
- };
- var getOption = function (element) {
- return api.getOption(element);
- };
- var set$3 = function (element, value) {
- api.set(element, value);
- };
- var $_dzrxgg3gjnlpaxf6 = {
- get: get$6,
- getOption: getOption,
- set: set$3
- };
-
- var isZeroWidth = function (elem) {
- return $_7u5fzs11jnlpawv6.isText(elem) && $_dzrxgg3gjnlpaxf6.get(elem) === zeroWidth();
- };
- var context = function (editor, elem, wrapName, nodeName) {
- return $_dr4ybh18jnlpawzt.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)) {
- return 'caret';
- } else if (!$_dlfh233cjnlpaxes.isValid(editor, wrapName, nodeName) || !$_dlfh233cjnlpaxes.isValid(editor, $_7u5fzs11jnlpawv6.name(parent), wrapName)) {
- return 'invalid-child';
+ var resolvePaths = function (dom, bookmark) {
+ var rng = dom.createRng();
+ if (setEndPoint(dom, true, bookmark, rng) && setEndPoint(dom, false, bookmark, rng)) {
+ return Option.some(rng);
} else {
- return 'valid';
+ return Option.none();
}
- });
- };
-
- var __rest = undefined && undefined.__rest || function (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)
- t[p[i]] = s[p[i]];
- return t;
- };
- var shouldApplyToTrailingSpaces = function (rng) {
- return rng.startContainer.nodeType === 3 && rng.startContainer.nodeValue.length >= rng.startOffset && rng.startContainer.nodeValue[rng.startOffset] === '\xA0';
- };
- var applyWordGrab = function (editor, rng) {
- var r = $_3cscnj2wjnlpaxau.expandRng(editor, rng, [{ inline: true }], shouldApplyToTrailingSpaces(rng));
- 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('mce-annotation') : _b, data = __rest(_a, ['uid']);
- var master = Element$$1.fromTag('span', eDoc);
- $_fes8i223jnlpax5z.add(master, annotation());
- $_521j8z15jnlpawz7.set(master, '' + dataAnnotationId(), uid);
- $_521j8z15jnlpawz7.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;
- $_521j8z15jnlpawz7.setAll(master, attributes);
- $_6bet4b2hjnlpax8c.add(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(Option.none());
- var finishWrapper = function () {
- wrapper.set(Option.none());
};
- var getOrOpenWrapper = function () {
- return wrapper.get().getOrThunk(function () {
- var nu = $_5sdpl92ijnlpax8h.shallow(master);
- newWrappers.push(nu);
- wrapper.set(Option.some(nu));
- return nu;
+ var resolveId = function (dom, bookmark) {
+ var startPos = restoreEndPoint(dom, 'start', bookmark);
+ var endPos = restoreEndPoint(dom, 'end', bookmark);
+ return liftN([
+ startPos,
+ alt(endPos, 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 processElements = function (elems) {
- each(elems, processElement);
+ var resolveIndex$1 = function (dom, bookmark) {
+ return Option.from(dom.select(bookmark.name)[bookmark.index]).map(function (elm) {
+ var rng = dom.createRng();
+ rng.selectNode(elm);
+ return rng;
+ });
};
- var processElement = function (elem) {
- var ctx = context(editor, elem, 'span', $_7u5fzs11jnlpawv6.name(elem));
- switch (ctx) {
- case 'invalid-child': {
- finishWrapper();
- var children = $_dr4ybh18jnlpawzt.children(elem);
- processElements(children);
- finishWrapper();
- break;
+ var resolve$3 = function (selection, bookmark) {
+ var dom = selection.dom;
+ if (bookmark) {
+ if (isPathBookmark(bookmark)) {
+ return resolvePaths(dom, bookmark);
+ } else if (isStringPathBookmark(bookmark)) {
+ return Option.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 Option.some(bookmark.rng);
}
- case 'valid': {
- var w = getOrOpenWrapper();
- $_ag89ax1yjnlpax4x.wrap(elem, w);
- break;
- }
- case 'skipping':
- case 'existing':
- case 'caret':
}
+ return Option.none();
};
- var processNodes = function (nodes) {
- var elems = map(nodes, Element$$1.fromDom);
- processElements(elems);
- };
- $_6wozuu3djnlpaxew.walk(editor.dom, rng, function (nodes) {
- finishWrapper();
- processNodes(nodes);
- });
- return newWrappers;
- };
- var annotateWithBookmark = function (editor, name, settings, data) {
- editor.undoManager.transact(function () {
- var initialRng = editor.selection.getRng();
- if (initialRng.collapsed) {
- applyWordGrab(editor, initialRng);
- }
- if (editor.selection.getRng().collapsed) {
- var wrapper = makeAnnotation(editor.getDoc(), data, name, settings.decorate);
- $_am4twv2jjnlpax8k.set(wrapper, '\xA0');
- editor.selection.getRng().insertNode(wrapper.dom());
- editor.selection.select(wrapper.dom());
- } else {
- var bookmark = $_5l0mu32ljnlpax8x.getPersistentBookmark(editor.selection, false);
- var rng = editor.selection.getRng();
- annotate(editor, rng, name, settings.decorate, data);
- editor.selection.moveToBookmark(bookmark);
- }
- });
- };
+ var ResolveBookmark = { resolve: resolve$3 };
- function Annotator (editor) {
- var registry = create$1();
- setup$1(editor, registry);
- var changes = setup(editor, registry);
- return {
- register: function (name, settings) {
- registry.register(name, settings);
- },
- annotate: function (name, data) {
- registry.lookup(name).each(function (settings) {
- annotateWithBookmark(editor, name, settings, data);
+ var getBookmark$1 = function (selection, type, normalized) {
+ return GetBookmark.getBookmark(selection, type, normalized);
+ };
+ var moveToBookmark = function (selection, bookmark) {
+ ResolveBookmark.resolve(selection, bookmark).each(function (rng) {
+ selection.setRng(rng);
+ });
+ };
+ var isBookmarkNode$1 = function (node) {
+ return NodeType.isElement(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';
+ };
+ var Bookmarks = {
+ getBookmark: getBookmark$1,
+ moveToBookmark: moveToBookmark,
+ isBookmarkNode: isBookmarkNode$1
+ };
+
+ 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 TreeWalker(container, dom.getParent(container, dom.isBlock));
+ } else {
+ container = nodes[nodes.length - 1];
+ walker = new TreeWalker(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) {
+ next = next ? 'nextSibling' : 'previousSibling';
+ for (node = inc ? node : node[next]; node; node = node[next]) {
+ if (node.nodeType === 1 || !isWhiteSpaceNode(node)) {
+ return node;
+ }
+ }
+ }
+ };
+ var isTextBlock$1 = function (editor, name) {
+ if (name.nodeType) {
+ 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) {
+ return node && node.nodeType === 3 && /^([\t \r\n]+|)$/.test(node.nodeValue);
+ };
+ 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;
});
- },
- annotationChanged: function (name, callback) {
- changes.addListener(name, callback);
- },
- remove: function (name) {
- identify(editor, Option.some(name)).each(function (_a) {
- var elements = _a.elements;
- each(elements, $_azq8zm1wjnlpax4n.unwrap);
+ }
+ 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 FormatUtils = {
+ isInlineBlock: isInlineBlock,
+ moveStart: moveStart,
+ getNonWhiteSpaceSibling: getNonWhiteSpaceSibling,
+ isTextBlock: isTextBlock$1,
+ isValid: isValid,
+ isWhiteSpaceNode: isWhiteSpaceNode,
+ replaceVars: replaceVars,
+ isEq: isEq,
+ normalizeStyleValue: normalizeStyleValue,
+ getStyle: getStyle,
+ getTextDecoration: getTextDecoration,
+ getParents: getParents$1
+ };
+
+ var isBookmarkNode$2 = Bookmarks.isBookmarkNode;
+ var getParents$2 = FormatUtils.getParents, isWhiteSpaceNode$1 = FormatUtils.isWhiteSpaceNode, isTextBlock$2 = FormatUtils.isTextBlock;
+ var findLeaf = function (node, offset) {
+ if (typeof offset === 'undefined') {
+ offset = node.nodeType === 3 ? node.length : node.childNodes.length;
+ }
+ while (node && node.hasChildNodes()) {
+ node = node.childNodes[offset];
+ if (node) {
+ offset = node.nodeType === 3 ? node.length : node.childNodes.length;
+ }
+ }
+ return {
+ node: node,
+ offset: offset
+ };
+ };
+ var excludeTrailingWhitespace = function (endContainer, endOffset) {
+ var leaf = findLeaf(endContainer, endOffset);
+ if (leaf.node) {
+ while (leaf.node && leaf.offset === 0 && leaf.node.previousSibling) {
+ leaf = findLeaf(leaf.node.previousSibling);
+ }
+ if (leaf.node && leaf.offset > 0 && leaf.node.nodeType === 3 && leaf.node.nodeValue.charAt(leaf.offset - 1) === ' ') {
+ if (leaf.offset > 1) {
+ endContainer = leaf.node;
+ endContainer.splitText(leaf.offset - 1);
+ }
+ }
+ }
+ return endContainer;
+ };
+ var isBogusBr = function (node) {
+ return node.nodeName === 'BR' && node.getAttribute('data-mce-bogus') && !node.nextSibling;
+ };
+ var findParentContentEditable = function (dom, node) {
+ var parent = node;
+ while (parent) {
+ if (parent.nodeType === 1 && dom.getContentEditable(parent)) {
+ return dom.getContentEditable(parent) === 'false' ? parent : node;
+ }
+ parent = parent.parentNode;
+ }
+ return node;
+ };
+ var findSpace = function (start, remove, node, offset) {
+ var pos, pos2;
+ var str = node.nodeValue;
+ if (typeof offset === 'undefined') {
+ offset = start ? str.length : 0;
+ }
+ if (start) {
+ pos = str.lastIndexOf(' ', offset);
+ pos2 = str.lastIndexOf('\xA0', offset);
+ pos = pos > pos2 ? pos : pos2;
+ if (pos !== -1 && !remove && (pos < offset || !start) && pos <= str.length) {
+ pos++;
+ }
+ } else {
+ pos = str.indexOf(' ', offset);
+ pos2 = str.indexOf('\xA0', offset);
+ pos = pos !== -1 && (pos2 === -1 || pos < pos2) ? pos : pos2;
+ }
+ return pos;
+ };
+ var findWordEndPoint = function (dom, body, container, offset, start, remove) {
+ var walker, node, pos, lastTextNode;
+ if (container.nodeType === 3) {
+ pos = findSpace(start, remove, container, offset);
+ if (pos !== -1) {
+ return {
+ container: container,
+ offset: pos
+ };
+ }
+ lastTextNode = container;
+ }
+ walker = new TreeWalker(container, dom.getParent(container, dom.isBlock) || body);
+ while (node = walker[start ? 'prev' : 'next']()) {
+ if (node.nodeType === 3 && !isBookmarkNode$2(node.parentNode)) {
+ lastTextNode = node;
+ pos = findSpace(start, remove, node);
+ if (pos !== -1) {
+ return {
+ container: node,
+ offset: pos
+ };
+ }
+ } else if (dom.isBlock(node) || FormatUtils.isEq(node, 'BR')) {
+ break;
+ }
+ }
+ if (lastTextNode) {
+ if (start) {
+ offset = 0;
+ } else {
+ offset = lastTextNode.length;
+ }
+ return {
+ container: lastTextNode,
+ offset: offset
+ };
+ }
+ };
+ var findSelectorEndPoint = function (dom, format, rng, container, siblingName) {
+ var parents, i, y, curFormat;
+ if (container.nodeType === 3 && container.nodeValue.length === 0 && container[siblingName]) {
+ container = container[siblingName];
+ }
+ parents = getParents$2(dom, container);
+ for (i = 0; i < parents.length; i++) {
+ for (y = 0; y < format.length; y++) {
+ 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(container.nodeType === 3 ? 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 (FormatUtils.isEq(node, 'br')) {
+ break;
+ }
+ }
+ }
+ return node || container;
+ };
+ var findParentContainer = function (dom, format, startContainer, startOffset, endContainer, endOffset, start) {
+ var container, parent, sibling, siblingName, root;
+ container = parent = start ? startContainer : endContainer;
+ siblingName = start ? 'previousSibling' : 'nextSibling';
+ root = dom.getRoot();
+ if (container.nodeType === 3 && !isWhiteSpaceNode$1(container)) {
+ if (start ? startOffset > 0 : endOffset < container.nodeValue.length) {
+ return container;
+ }
+ }
+ while (true) {
+ if (!format[0].block_expand && dom.isBlock(parent)) {
+ return parent;
+ }
+ for (sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {
+ if (!isBookmarkNode$2(sibling) && !isWhiteSpaceNode$1(sibling) && !isBogusBr(sibling)) {
+ return parent;
+ }
+ }
+ if (parent === root || parent.parentNode === root) {
+ container = parent;
+ break;
+ }
+ parent = parent.parentNode;
+ }
+ return container;
+ };
+ var expandRng = function (editor, rng, format, remove) {
+ var endPoint, startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;
+ var dom = editor.dom;
+ if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) {
+ startContainer = getNode(startContainer, startOffset);
+ if (startContainer.nodeType === 3) {
+ startOffset = 0;
+ }
+ }
+ if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) {
+ endContainer = getNode(endContainer, rng.collapsed ? endOffset : endOffset - 1);
+ if (endContainer.nodeType === 3) {
+ endOffset = endContainer.nodeValue.length;
+ }
+ }
+ startContainer = findParentContentEditable(dom, startContainer);
+ endContainer = findParentContentEditable(dom, endContainer);
+ if (isBookmarkNode$2(startContainer.parentNode) || isBookmarkNode$2(startContainer)) {
+ startContainer = isBookmarkNode$2(startContainer) ? startContainer : startContainer.parentNode;
+ if (rng.collapsed) {
+ startContainer = startContainer.previousSibling || startContainer;
+ } else {
+ startContainer = startContainer.nextSibling || startContainer;
+ }
+ if (startContainer.nodeType === 3) {
+ startOffset = rng.collapsed ? startContainer.length : 0;
+ }
+ }
+ if (isBookmarkNode$2(endContainer.parentNode) || isBookmarkNode$2(endContainer)) {
+ endContainer = isBookmarkNode$2(endContainer) ? endContainer : endContainer.parentNode;
+ if (rng.collapsed) {
+ endContainer = endContainer.nextSibling || endContainer;
+ } else {
+ endContainer = endContainer.previousSibling || endContainer;
+ }
+ if (endContainer.nodeType === 3) {
+ endOffset = rng.collapsed ? 0 : endContainer.length;
+ }
+ }
+ if (rng.collapsed) {
+ endPoint = findWordEndPoint(dom, editor.getBody(), startContainer, startOffset, true, remove);
+ if (endPoint) {
+ startContainer = endPoint.container;
+ startOffset = endPoint.offset;
+ }
+ endPoint = findWordEndPoint(dom, editor.getBody(), endContainer, endOffset, false, remove);
+ if (endPoint) {
+ endContainer = endPoint.container;
+ endOffset = endPoint.offset;
+ }
+ }
+ if (format[0].inline) {
+ endContainer = remove ? endContainer : excludeTrailingWhitespace(endContainer, endOffset);
+ }
+ if (format[0].inline || format[0].block_expand) {
+ if (!format[0].inline || (startContainer.nodeType !== 3 || startOffset === 0)) {
+ startContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, true);
+ }
+ if (!format[0].inline || (endContainer.nodeType !== 3 || endOffset === endContainer.nodeValue.length)) {
+ endContainer = findParentContainer(dom, format, startContainer, startOffset, 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, endContainer, endOffset, true);
+ }
+ if (!dom.isBlock(endContainer)) {
+ endContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, false);
+ }
+ }
+ }
+ if (startContainer.nodeType === 1) {
+ startOffset = dom.nodeIndex(startContainer);
+ startContainer = startContainer.parentNode;
+ }
+ if (endContainer.nodeType === 1) {
+ endOffset = dom.nodeIndex(endContainer) + 1;
+ endContainer = endContainer.parentNode;
+ }
+ return {
+ startContainer: startContainer,
+ startOffset: startOffset,
+ endContainer: endContainer,
+ endOffset: endOffset
+ };
+ };
+ var ExpandRange = { expandRng: expandRng };
+
+ var each$8 = Tools.each;
+ var getEndChild = function (container, index) {
+ var childNodes = container.childNodes;
+ index--;
+ if (index > childNodes.length - 1) {
+ index = childNodes.length - 1;
+ } else if (index < 0) {
+ index = 0;
+ }
+ return childNodes[index] || container;
+ };
+ var walk$1 = function (dom, rng, callback) {
+ var startContainer = rng.startContainer;
+ var startOffset = rng.startOffset;
+ var endContainer = rng.endContainer;
+ var endOffset = rng.endOffset;
+ var ancestor;
+ var startPoint;
+ var endPoint;
+ var node;
+ var parent;
+ var siblings;
+ var nodes;
+ nodes = dom.select('td[data-mce-selected],th[data-mce-selected]');
+ if (nodes.length > 0) {
+ each$8(nodes, function (node) {
+ callback([node]);
});
- },
- getAll: function (name) {
- var directory = findAll(editor, name);
- return map$2(directory, function (elems) {
- return map(elems, function (elem) {
- return elem.dom();
+ return;
+ }
+ 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 (node = startNode, parent = node.parentNode; node && node !== endNode; node = parent) {
+ parent = node.parentNode;
+ siblings = collectSiblings(node === startNode ? node : node[siblingName], siblingName);
+ if (siblings.length) {
+ if (!next) {
+ siblings.reverse();
+ }
+ callback(exclude(siblings));
+ }
+ }
+ };
+ if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) {
+ startContainer = startContainer.childNodes[startOffset];
+ }
+ if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) {
+ endContainer = getEndChild(endContainer, endOffset);
+ }
+ if (startContainer === endContainer) {
+ return callback(exclude([startContainer]));
+ }
+ ancestor = dom.findCommonAncestor(startContainer, endContainer);
+ for (node = startContainer; node; node = node.parentNode) {
+ if (node === endContainer) {
+ return walkBoundary(startContainer, ancestor, true);
+ }
+ if (node === ancestor) {
+ break;
+ }
+ }
+ for (node = endContainer; node; node = node.parentNode) {
+ if (node === startContainer) {
+ return walkBoundary(endContainer, ancestor);
+ }
+ if (node === ancestor) {
+ break;
+ }
+ }
+ startPoint = findEndPoint(startContainer, ancestor) || startContainer;
+ endPoint = findEndPoint(endContainer, ancestor) || endContainer;
+ walkBoundary(startContainer, startPoint, true);
+ siblings = collectSiblings(startPoint === startContainer ? startPoint : startPoint.nextSibling, 'nextSibling', endPoint === endContainer ? endPoint.nextSibling : endPoint);
+ if (siblings.length) {
+ callback(exclude(siblings));
+ }
+ walkBoundary(endContainer, endPoint);
+ };
+ var RangeWalk = { walk: walk$1 };
+
+ var zeroWidth = function () {
+ return '\uFEFF';
+ };
+
+ function NodeValue (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 getOptionIE10 = function (element) {
+ try {
+ return getOptionSafe(element);
+ } catch (e) {
+ return Option.none();
+ }
+ };
+ var getOptionSafe = function (element) {
+ return is(element) ? Option.from(element.dom().nodeValue) : Option.none();
+ };
+ var browser = PlatformDetection$1.detect().browser;
+ var getOption = browser.isIE() && browser.version.major === 10 ? getOptionIE10 : getOptionSafe;
+ 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$6 = function (element) {
+ return api.get(element);
+ };
+
+ var isZeroWidth = function (elem) {
+ return isText(elem) && get$6(elem) === zeroWidth();
+ };
+ var context = function (editor, elem, wrapName, nodeName) {
+ return parent(elem).fold(function () {
+ return 'skipping';
+ }, function (parent$$1) {
+ if (nodeName === 'br' || isZeroWidth(elem)) {
+ return 'valid';
+ } else if (isAnnotation(elem)) {
+ return 'existing';
+ } else if (isCaretNode(elem)) {
+ return 'caret';
+ } else if (!FormatUtils.isValid(editor, wrapName, nodeName) || !FormatUtils.isValid(editor, name(parent$$1), wrapName)) {
+ return 'invalid-child';
+ } else {
+ return 'valid';
+ }
+ });
+ };
+
+ var shouldApplyToTrailingSpaces = function (rng) {
+ return rng.startContainer.nodeType === 3 && rng.startContainer.nodeValue.length >= rng.startOffset && rng.startContainer.nodeValue[rng.startOffset] === '\xA0';
+ };
+ var applyWordGrab = function (editor, rng) {
+ var r = ExpandRange.expandRng(editor, rng, [{ inline: true }], shouldApplyToTrailingSpaces(rng));
+ 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('mce-annotation') : _b, data = __rest(_a, ['uid']);
+ var master = Element$$1.fromTag('span', eDoc);
+ add$2(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$3(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(Option.none());
+ var finishWrapper = function () {
+ wrapper.set(Option.none());
+ };
+ var getOrOpenWrapper = function () {
+ return wrapper.get().getOrThunk(function () {
+ var nu = shallow(master);
+ newWrappers.push(nu);
+ wrapper.set(Option.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$1(elem, w);
+ break;
+ }
+ case 'skipping':
+ case 'existing':
+ case 'caret':
+ }
+ };
+ var processNodes = function (nodes) {
+ var elems = map(nodes, Element$$1.fromDom);
+ processElements(elems);
+ };
+ RangeWalk.walk(editor.dom, rng, function (nodes) {
+ finishWrapper();
+ processNodes(nodes);
+ });
+ return newWrappers;
+ };
+ var annotateWithBookmark = function (editor, name$$1, settings, data) {
+ editor.undoManager.transact(function () {
+ var initialRng = editor.selection.getRng();
+ if (initialRng.collapsed) {
+ applyWordGrab(editor, initialRng);
+ }
+ if (editor.selection.getRng().collapsed) {
+ var wrapper = makeAnnotation(editor.getDoc(), data, name$$1, settings.decorate);
+ set$2(wrapper, '\xA0');
+ editor.selection.getRng().insertNode(wrapper.dom());
+ editor.selection.select(wrapper.dom());
+ } else {
+ var bookmark = GetBookmark.getPersistentBookmark(editor.selection, false);
+ var rng = editor.selection.getRng();
+ annotate(editor, rng, name$$1, settings.decorate, data);
+ editor.selection.moveToBookmark(bookmark);
+ }
+ });
+ };
+
+ function Annotator (editor) {
+ var registry = create$1();
+ setup$1(editor, registry);
+ var changes = setup(editor, registry);
+ return {
+ register: function (name, settings) {
+ registry.register(name, settings);
+ },
+ annotate: function (name, data) {
+ registry.lookup(name).each(function (settings) {
+ annotateWithBookmark(editor, name, settings, data);
});
- });
- }
- };
- }
-
- var hasOnlyOneChild = function (node) {
- return node.firstChild && node.firstChild === node.lastChild;
- };
- var isPaddingNode = function (node) {
- return node.name === 'br' || node.value === '\xA0';
- };
- 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 $_1q1txeljnlpawsa.grep(elm.childNodes, function (child) {
- return child.nodeName === 'LI';
- });
- };
- var isPadding = function (node) {
- return node.data === '\xA0' || $_fy28ei1rjnlpax2o.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$1.before(node);
- var caretWalker = CaretWalker(rootNode);
- var newCaretPos = caretWalker.next(caretPos);
- return newCaretPos ? newCaretPos.toRange() : null;
- };
- var findLastOf = function (node, rootNode) {
- var caretPos = CaretPosition$1.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);
- $_1q1txeljnlpawsa.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;
- $_1q1txeljnlpawsa.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$1.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 $_64vm3ljnlpaxgp = {
- isListFragment: isListFragment,
- insertAtCaret: insertAtCaret,
- isParentBlockLi: isParentBlockLi,
- trimListItems: trimListItems,
- listItems: listItems$1
- };
-
- var each$9 = $_1q1txeljnlpawsa.each;
- var ElementUtils = function (dom) {
- this.compare = function (node1, node2) {
- if (node1.nodeName !== node2.nodeName) {
- return false;
- }
- var getAttribs = function (node) {
- var attribs = {};
- each$9(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;
+ },
+ annotationChanged: function (name, callback) {
+ changes.addListener(name, callback);
+ },
+ remove: function (name) {
+ identify(editor, Option.some(name)).each(function (_a) {
+ var elements = _a.elements;
+ each(elements, unwrap);
+ });
+ },
+ getAll: function (name) {
+ var directory = findAll(editor, name);
+ return map$2(directory, function (elems) {
+ return map(elems, function (elem) {
+ return elem.dom();
+ });
+ });
+ }
};
- 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 !$_43l8qj2xjnlpaxb1.isBookmarkNode(node1) && !$_43l8qj2xjnlpaxb1.isBookmarkNode(node2);
- };
- };
+ }
- var getLastChildren = function (elm) {
- var children = [];
- var rawNode = elm.dom();
- while (rawNode) {
- children.push(Element$$1.fromDom(rawNode));
- rawNode = rawNode.lastChild;
- }
- return children;
- };
- var removeTrailingBr = function (elm) {
- var allBrs = $_cmitir27jnlpax6e.descendants(elm, 'br');
- var brs = filter(getLastChildren(elm).slice(-1), isBr);
- if (allBrs.length === brs.length) {
- each(brs, $_azq8zm1wjnlpax4n.remove);
- }
- };
- var fillWithPaddingBr = function (elm) {
- $_azq8zm1wjnlpax4n.empty(elm);
- $_ag89ax1yjnlpax4x.append(elm, Element$$1.fromHtml('
'));
- };
- var isPaddingContents = function (elm) {
- return $_7u5fzs11jnlpawv6.isText(elm) ? $_dzrxgg3gjnlpaxf6.get(elm) === '\xA0' : isBr(elm);
- };
- var isPaddedElement = function (elm) {
- return filter($_dr4ybh18jnlpawzt.children(elm), isPaddingContents).length === 1;
- };
- var trimBlockTrailingBr = function (elm) {
- $_dr4ybh18jnlpawzt.lastChild(elm).each(function (lastChild) {
- $_dr4ybh18jnlpawzt.prevSibling(lastChild).each(function (lastChildPrevSibling) {
- if (isBlock(elm) && isBr(lastChild) && isBlock(lastChildPrevSibling)) {
- $_azq8zm1wjnlpax4n.remove(lastChild);
- }
+ var hasOnlyOneChild = function (node) {
+ return node.firstChild && node.firstChild === node.lastChild;
+ };
+ var isPaddingNode = function (node) {
+ return node.name === 'br' || node.value === '\xA0';
+ };
+ 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 $_azhpc63njnlpaxgw = {
- removeTrailingBr: removeTrailingBr,
- fillWithPaddingBr: fillWithPaddingBr,
- isPaddedElement: isPaddedElement,
- trimBlockTrailingBr: trimBlockTrailingBr
- };
-
- var makeMap$3 = $_1q1txeljnlpawsa.makeMap;
- function Writer (settings) {
- var html = [];
- var indent, indentBefore, indentAfter, encode, htmlOutput;
- settings = settings || {};
- indent = settings.indent;
- indentBefore = makeMap$3(settings.indent_before || '');
- indentAfter = makeMap$3(settings.indent_after || '');
- encode = $_bea7j51sjnlpax2u.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);
- 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('', name, '>');
- 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('', name, ' ', encode(text), '?>');
- } else {
- html.push('', name, '?>');
- }
- if (indent) {
- html.push('\n');
- }
- },
- doctype: function (text) {
- html.push('', indent ? '\n' : '');
- },
- reset: function () {
- html.length = 0;
- },
- getContent: function () {
- return html.join('').replace(/\n$/, '');
- }
};
- }
-
- function HtmlSerializer (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 handlers, validate;
- validate = settings.validate;
- 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);
- }
- }
+ var isPadding = function (node) {
+ return node.data === '\xA0' || NodeType.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$1.before(node);
+ var caretWalker = CaretWalker(rootNode);
+ var newCaretPos = caretWalker.next(caretPos);
+ return newCaretPos ? newCaretPos.toRange() : null;
+ };
+ var findLastOf = function (node, rootNode) {
+ var caretPos = CaretPosition$1.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$1.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;
};
- 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
- });
- }
+ 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 InsertList = {
+ isListFragment: isListFragment,
+ insertAtCaret: insertAtCaret,
+ isParentBlockLi: isParentBlockLi,
+ trimListItems: trimListItems,
+ listItems: listItems$1
+ };
+
+ var each$9 = Tools.each;
+ var ElementUtils = function (dom) {
+ this.compare = function (node1, node2) {
+ if (node1.nodeName !== node2.nodeName) {
+ return false;
+ }
+ var getAttribs = function (node) {
+ var attribs = {};
+ each$9(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;
}
- 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
- });
- }
+ if (obj1[name] !== value) {
+ return false;
}
- attrs = sortedAttrs;
+ delete obj2[name];
}
}
- writer.start(node.name, attrs, isEmpty);
- if (!isEmpty) {
+ 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 !Bookmarks.isBookmarkNode(node1) && !Bookmarks.isBookmarkNode(node2);
+ };
+ };
+
+ var getLastChildren = function (elm) {
+ var children$$1 = [];
+ var rawNode = elm.dom();
+ while (rawNode) {
+ children$$1.push(Element$$1.fromDom(rawNode));
+ rawNode = rawNode.lastChild;
+ }
+ return children$$1;
+ };
+ var removeTrailingBr = function (elm) {
+ var allBrs = descendants$1(elm, 'br');
+ var brs = filter(getLastChildren(elm).slice(-1), isBr);
+ if (allBrs.length === brs.length) {
+ each(brs, remove$2);
+ }
+ };
+ var fillWithPaddingBr = function (elm) {
+ empty(elm);
+ append(elm, Element$$1.fromHtml('
'));
+ };
+ var isPaddingContents = function (elm) {
+ return isText(elm) ? get$6(elm) === '\xA0' : isBr(elm);
+ };
+ var isPaddedElement = function (elm) {
+ return filter(children(elm), isPaddingContents).length === 1;
+ };
+ var trimBlockTrailingBr = function (elm) {
+ lastChild(elm).each(function (lastChild$$1) {
+ prevSibling(lastChild$$1).each(function (lastChildPrevSibling) {
+ if (isBlock(elm) && isBr(lastChild$$1) && isBlock(lastChildPrevSibling)) {
+ remove$2(lastChild$$1);
+ }
+ });
+ });
+ };
+ var PaddingBr = {
+ removeTrailingBr: removeTrailingBr,
+ fillWithPaddingBr: fillWithPaddingBr,
+ isPaddedElement: isPaddedElement,
+ trimBlockTrailingBr: trimBlockTrailingBr
+ };
+
+ var makeMap$3 = Tools.makeMap;
+ function Writer (settings) {
+ var html = [];
+ var indent, indentBefore, indentAfter, encode, htmlOutput;
+ settings = settings || {};
+ indent = settings.indent;
+ indentBefore = makeMap$3(settings.indent_before || '');
+ indentAfter = makeMap$3(settings.indent_after || '');
+ encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);
+ 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('', name, '>');
+ 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('', name, ' ', encode(text), '?>');
+ } else {
+ html.push('', name, '?>');
+ }
+ if (indent) {
+ html.push('\n');
+ }
+ },
+ doctype: function (text) {
+ html.push('', indent ? '\n' : '');
+ },
+ reset: function () {
+ html.length = 0;
+ },
+ getContent: function () {
+ return html.join('').replace(/\n$/, '');
+ }
+ };
+ }
+
+ function Serializer (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 handlers, validate;
+ validate = settings.validate;
+ 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.end(name);
}
+ };
+ 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 {
- handler(node);
+ handlers[11](node);
+ }
+ return writer.getContent();
+ };
+ return { serialize: serialize };
+ }
+
+ 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$1.fromRangeStart(rng);
+ var endPos = CaretPosition$1.fromRangeEnd(rng);
+ var rootNode = rng.commonAncestorContainer;
+ return CaretFinder.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 = function (rng) {
+ return rng.collapsed ? rng : normalizeBlockSelectionRange(rng);
+ };
+ var RangeNormalizer = { normalize: normalize };
+
+ var isAfterNbsp = function (container, offset) {
+ return NodeType.isText(container) && container.nodeValue[offset - 1] === '\xA0';
+ };
+ var trimOrPadLeftRight = function (rng, html) {
+ var container, offset;
+ container = rng.startContainer;
+ offset = rng.startOffset;
+ var hasSiblingText = function (siblingName) {
+ return container[siblingName] && container[siblingName].nodeType === 3;
+ };
+ if (container.nodeType === 3) {
+ if (offset > 0) {
+ html = html.replace(/^ /, ' ');
+ } else if (!hasSiblingText('previousSibling')) {
+ html = html.replace(/^ /, ' ');
+ }
+ if (offset < container.length) {
+ html = html.replace(/ (
|)$/, ' ');
+ } else if (!hasSiblingText('nextSibling')) {
+ html = html.replace(/( | )(
|)$/, ' ');
+ }
+ }
+ return html;
+ };
+ var trimNbspAfterDeleteAndPadValue = function (rng, value) {
+ var container, offset;
+ container = rng.startContainer;
+ offset = rng.startOffset;
+ if (container.nodeType === 3 && rng.collapsed) {
+ if (container.data[offset] === '\xA0') {
+ container.deleteData(offset, 1);
+ if (!/[\u00a0| ]$/.test(value)) {
+ value += ' ';
+ }
+ } else if (container.data[offset - 1] === '\xA0') {
+ container.deleteData(offset - 1, 1);
+ if (!/[\u00a0| ]$/.test(value)) {
+ value = ' ' + value;
+ }
+ }
+ }
+ return value;
+ };
+
+ var isTableCell$2 = NodeType.matchNodeNames('td th');
+ var selectionSetContent = function (editor, content) {
+ var rng = editor.selection.getRng();
+ var container = rng.startContainer;
+ var offset = rng.startOffset;
+ if (rng.collapsed && isAfterNbsp(container, offset) && NodeType.isText(container)) {
+ container.insertData(offset - 1, ' ');
+ container.deleteData(offset, 1);
+ rng.setStart(container, offset);
+ rng.setEnd(container, offset);
+ editor.selection.setRng(rng);
+ }
+ editor.selection.setContent(content);
+ };
+ 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 {
+ selectionSetContent(editor, value);
+ }
+ }
+ };
+ var trimBrsFromTableCell = function (dom, elm) {
+ Option.from(dom.getParent(elm, 'td,th')).map(Element$$1.fromDom).each(PaddingBr.trimBlockTrailingBr);
+ };
+ var reduceInlineTextElements = function (editor, merge) {
+ var textInlineElements = editor.schema.getTextInlineElements();
+ var dom = editor.dom;
+ if (merge) {
+ var root_1 = editor.getBody(), elementUtils_1 = new ElementUtils(dom);
+ Tools.each(dom.select('*[data-mce-fragment]'), function (node) {
+ for (var testNode = node.parentNode; testNode && testNode !== root_1; testNode = testNode.parentNode) {
+ if (textInlineElements[node.nodeName.toLowerCase()] && elementUtils_1.compare(testNode, node)) {
+ dom.remove(node, true);
+ }
+ }
+ });
+ }
+ };
+ var markFragmentElements = function (fragment) {
+ var node = fragment;
+ while (node = node.walk()) {
+ if (node.type === 1) {
+ node.attr('data-mce-fragment', '1');
+ }
+ }
+ };
+ var umarkFragmentElements = 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 parentEditableFalseElm, parentBlock, nextRng;
+ var dom = editor.dom, selection = editor.selection;
+ var node, node2;
+ var getContentEditableFalseParent = function (node) {
+ var root = editor.getBody();
+ for (; node && node !== root; node = node.parentNode) {
+ if (editor.dom.getContentEditable(node) === 'false') {
+ return node;
+ }
+ }
+ return null;
+ };
+ if (!marker) {
+ return;
+ }
+ editor.selection.scrollIntoView(marker);
+ parentEditableFalseElm = getContentEditableFalseParent(marker);
+ if (parentEditableFalseElm) {
+ dom.remove(marker);
+ selection.select(parentEditableFalseElm);
+ return;
+ }
+ var rng = dom.createRng();
+ 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$1.fromRangeStart(rng);
+ var caretWalker = CaretWalker(editor.getBody());
+ caretPos = caretWalker.next(caretPos);
+ if (caretPos) {
+ return caretPos.toRange();
}
};
- if (node.type === 1 && !settings.inner) {
- walk(node);
- } else {
- handlers[11](node);
- }
- return writer.getContent();
- };
- return { serialize: serialize };
- }
-
- 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$1.fromRangeStart(rng);
- var endPos = CaretPosition$1.fromRangeEnd(rng);
- var rootNode = rng.commonAncestorContainer;
- return $_32xcvk30jnlpaxbn.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 = function (rng) {
- return rng.collapsed ? rng : normalizeBlockSelectionRange(rng);
- };
- var $_4fmn0j3qjnlpaxhi = { normalize: normalize };
-
- var isAfterNbsp = function (container, offset) {
- return $_fy28ei1rjnlpax2o.isText(container) && container.nodeValue[offset - 1] === '\xA0';
- };
- var trimOrPadLeftRight = function (rng, html) {
- var container, offset;
- container = rng.startContainer;
- offset = rng.startOffset;
- var hasSiblingText = function (siblingName) {
- return container[siblingName] && container[siblingName].nodeType === 3;
- };
- if (container.nodeType === 3) {
- if (offset > 0) {
- html = html.replace(/^ /, ' ');
- } else if (!hasSiblingText('previousSibling')) {
- html = html.replace(/^ /, ' ');
- }
- if (offset < container.length) {
- html = html.replace(/ (
|)$/, ' ');
- } else if (!hasSiblingText('nextSibling')) {
- html = html.replace(/( | )(
|)$/, ' ');
- }
- }
- return html;
- };
- var trimNbspAfterDeleteAndPadValue = function (rng, value) {
- var container, offset;
- container = rng.startContainer;
- offset = rng.startOffset;
- if (container.nodeType === 3 && rng.collapsed) {
- if (container.data[offset] === '\xA0') {
- container.deleteData(offset, 1);
- if (!/[\u00a0| ]$/.test(value)) {
- value += ' ';
- }
- } else if (container.data[offset - 1] === '\xA0') {
- container.deleteData(offset - 1, 1);
- if (!/[\u00a0| ]$/.test(value)) {
- value = ' ' + value;
- }
- }
- }
- return value;
- };
-
- var isTableCell$2 = $_fy28ei1rjnlpax2o.matchNodeNames('td th');
- var selectionSetContent = function (editor, content) {
- var rng = editor.selection.getRng();
- var container = rng.startContainer;
- var offset = rng.startOffset;
- if (rng.collapsed && isAfterNbsp(container, offset) && $_fy28ei1rjnlpax2o.isText(container)) {
- container.insertData(offset - 1, ' ');
- container.deleteData(offset, 1);
- rng.setStart(container, offset);
- rng.setEnd(container, offset);
- editor.selection.setRng(rng);
- }
- editor.selection.setContent(content);
- };
- 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 {
- selectionSetContent(editor, value);
- }
- }
- };
- var trimBrsFromTableCell = function (dom, elm) {
- Option.from(dom.getParent(elm, 'td,th')).map(Element$$1.fromDom).each($_azhpc63njnlpaxgw.trimBlockTrailingBr);
- };
- var reduceInlineTextElements = function (editor, merge) {
- var textInlineElements = editor.schema.getTextInlineElements();
- var dom = editor.dom;
- if (merge) {
- var root_1 = editor.getBody(), elementUtils_1 = new ElementUtils(dom);
- $_1q1txeljnlpawsa.each(dom.select('*[data-mce-fragment]'), function (node) {
- for (var testNode = node.parentNode; testNode && testNode !== root_1; testNode = testNode.parentNode) {
- if (textInlineElements[node.nodeName.toLowerCase()] && elementUtils_1.compare(testNode, node)) {
- dom.remove(node, true);
- }
- }
- });
- }
- };
- var markFragmentElements = function (fragment) {
- var node = fragment;
- while (node = node.walk()) {
- if (node.type === 1) {
- node.attr('data-mce-fragment', '1');
- }
- }
- };
- var umarkFragmentElements = function (elm) {
- $_1q1txeljnlpawsa.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 parentEditableFalseElm, parentBlock, nextRng;
- var dom = editor.dom, selection = editor.selection;
- var node, node2;
- var getContentEditableFalseParent = function (node) {
- var root = editor.getBody();
- for (; node && node !== root; node = node.parentNode) {
- if (editor.dom.getContentEditable(node) === 'false') {
- return node;
- }
- }
- return null;
- };
- if (!marker) {
- return;
- }
- editor.selection.scrollIntoView(marker);
- parentEditableFalseElm = getContentEditableFalseParent(marker);
- if (parentEditableFalseElm) {
+ parentBlock = dom.getParent(marker, dom.isBlock);
dom.remove(marker);
- selection.select(parentEditableFalseElm);
- return;
- }
- var rng = dom.createRng();
- node = marker.previousSibling;
- if (node && node.nodeType === 3) {
- rng.setStart(node, node.nodeValue.length);
- if (!$_cseqobajnlpawll.ie) {
- node2 = marker.nextSibling;
- if (node2 && node2.nodeType === 3) {
- node.appendData(node2.data);
- node2.parentNode.removeChild(node2);
+ if (parentBlock && dom.isEmpty(parentBlock)) {
+ editor.$(parentBlock).empty();
+ rng.setStart(parentBlock, 0);
+ rng.setEnd(parentBlock, 0);
+ if (!isTableCell$2(parentBlock) && !isPartOfFragment(parentBlock) && (nextRng = findNextCaretRng(rng))) {
+ rng = nextRng;
+ dom.remove(parentBlock);
+ } else {
+ dom.add(parentBlock, dom.create('br', { 'data-mce-bogus': '1' }));
}
}
- } else {
- rng.setStartBefore(marker);
- rng.setEndBefore(marker);
- }
- var findNextCaretRng = function (rng) {
- var caretPos = CaretPosition$1.fromRangeStart(rng);
- var caretWalker = CaretWalker(editor.getBody());
- caretPos = caretWalker.next(caretPos);
- if (caretPos) {
- return caretPos.toRange();
- }
+ selection.setRng(rng);
};
- 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$2(parentBlock) && !isPartOfFragment(parentBlock) && (nextRng = findNextCaretRng(rng))) {
- rng = nextRng;
- dom.remove(parentBlock);
- } else {
- dom.add(parentBlock, dom.create('br', { 'data-mce-bogus': '1' }));
+ var insertHtmlAtCaret = function (editor, value, details) {
+ var parser, serializer, parentNode, rootNode, fragment, args;
+ var marker, rng, node, bookmarkHtml, merge;
+ var selection = editor.selection, dom = editor.dom;
+ if (/^ | $/.test(value)) {
+ value = trimOrPadLeftRight(selection.getRng(), value);
}
- }
- selection.setRng(rng);
- };
- var insertHtmlAtCaret = function (editor, value, details) {
- var parser, serializer, parentNode, rootNode, fragment, args;
- var marker, rng, node, bookmarkHtml, merge;
- var selection = editor.selection, dom = editor.dom;
- if (/^ | $/.test(value)) {
- value = trimOrPadLeftRight(selection.getRng(), value);
- }
- parser = editor.parser;
- merge = details.merge;
- serializer = HtmlSerializer({ validate: editor.settings.validate }, editor.schema);
- 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,
+ parser = editor.parser;
+ merge = details.merge;
+ serializer = Serializer({ validate: editor.settings.validate }, editor.schema);
+ bookmarkHtml = '';
+ args = {
+ content: value,
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()) {
- editor.selection.setRng($_4fmn0j3qjnlpaxhi.normalize(editor.selection.getRng()));
- editor.getDoc().execCommand('Delete', false, null);
- value = trimNbspAfterDeleteAndPadValue(editor.selection.getRng(), value);
- }
- parentNode = selection.getNode();
- var parserArgs = {
- context: parentNode.nodeName.toLowerCase(),
- data: details.data,
- insert: true
- };
- fragment = parser.parse(value, parserArgs);
- if (details.paste === true && $_64vm3ljnlpaxgp.isListFragment(editor.schema, fragment) && $_64vm3ljnlpaxgp.isParentBlockLi(dom, parentNode)) {
- rng = $_64vm3ljnlpaxgp.insertAtCaret(serializer, dom, editor.selection.getRng(), fragment);
- editor.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 {
- selectionSetContent(editor, 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'));
- umarkFragmentElements(editor.getBody());
- trimBrsFromTableCell(editor.dom, editor.selection.getStart());
- editor.fire('SetContent', args);
- editor.addVisual();
- };
- var processValue = function (value) {
- var details;
- if (typeof value !== 'string') {
- details = $_1q1txeljnlpawsa.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);
- insertHtmlAtCaret(editor, result.content, result.details);
- };
- var $_f55bk53kjnlpaxge = { insertAtCaret: insertAtCaret$1 };
-
- var sectionResult = Immutable('sections', 'settings');
- var detection = $_766rx4ojnlpawtd.detect();
- var isTouch = detection.deviceType.isTouch();
- var mobilePlugins = [
- 'lists',
- 'autolink',
- 'autosave'
- ];
- var defaultMobileSettings = { theme: 'mobile' };
- var normalizePlugins = function (plugins) {
- var pluginNames = isArray(plugins) ? plugins.join(' ') : plugins;
- var trimmedPlugins = map(isString(pluginNames) ? pluginNames.split(' ') : [], trim$2);
- return filter(trimmedPlugins, function (item) {
- return item.length > 0;
- });
- };
- var filterMobilePlugins = function (plugins) {
- return filter(plugins, curry(contains, mobilePlugins));
- };
- var extractSections = function (keys$$1, settings) {
- var result = bifilter(settings, function (value, key) {
- return contains(keys$$1, key);
- });
- return sectionResult(result.t, result.f);
- };
- var getSection = function (sectionResult, name, defaults) {
- var sections = sectionResult.sections();
- var sectionSettings = sections.hasOwnProperty(name) ? sections[name] : {};
- return $_1q1txeljnlpawsa.extend({}, defaults, sectionSettings);
- };
- var hasSection = function (sectionResult, name) {
- return sectionResult.sections().hasOwnProperty(name);
- };
- var getDefaultSettings = function (id, documentBaseUrl, editor) {
- return {
- id: id,
- theme: 'modern',
- delta_width: 0,
- delta_height: 0,
- popup_css: '',
- 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_style_values: 'xx-small,x-small,small,medium,large,x-large,xx-large',
- font_size_legacy_values: 'xx-small,small,medium,large,x-large,xx-large,300%',
- forced_root_block: 'p',
- hidden_input: true,
- render_ui: true,
- indentation: '30px',
- inline_styles: true,
- convert_fonts_to_spans: true,
- indent: 'simple',
- 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,
- ie7_compat: true
- };
- };
- var getExternalPlugins = function (overrideSettings, settings) {
- var userDefinedExternalPlugins = settings.external_plugins ? settings.external_plugins : {};
- if (overrideSettings && overrideSettings.external_plugins) {
- return $_1q1txeljnlpawsa.extend({}, overrideSettings.external_plugins, userDefinedExternalPlugins);
- } else {
- return userDefinedExternalPlugins;
- }
- };
- var combinePlugins = function (forcedPlugins, plugins) {
- return [].concat(normalizePlugins(forcedPlugins)).concat(normalizePlugins(plugins));
- };
- var processPlugins = function (isTouchDevice, sectionResult, defaultOverrideSettings, settings) {
- var forcedPlugins = normalizePlugins(defaultOverrideSettings.forced_plugins);
- var plugins = normalizePlugins(settings.plugins);
- var platformPlugins = isTouchDevice && hasSection(sectionResult, 'mobile') ? filterMobilePlugins(plugins) : plugins;
- var combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);
- return $_1q1txeljnlpawsa.extend(settings, { plugins: combinedPlugins.join(' ') });
- };
- var isOnMobile = function (isTouchDevice, sectionResult) {
- var isInline = sectionResult.settings().inline;
- return isTouchDevice && hasSection(sectionResult, 'mobile') && !isInline;
- };
- var combineSettings = function (isTouchDevice, defaultSettings, defaultOverrideSettings, settings) {
- var sectionResult = extractSections(['mobile'], settings);
- var extendedSettings = $_1q1txeljnlpawsa.extend(defaultSettings, defaultOverrideSettings, sectionResult.settings(), isOnMobile(isTouchDevice, sectionResult) ? getSection(sectionResult, 'mobile', defaultMobileSettings) : {}, {
- validate: true,
- content_editable: sectionResult.settings().inline,
- external_plugins: getExternalPlugins(defaultOverrideSettings, sectionResult.settings())
- });
- return processPlugins(isTouchDevice, sectionResult, defaultOverrideSettings, extendedSettings);
- };
- var getEditorSettings = function (editor, id, documentBaseUrl, defaultOverrideSettings, settings) {
- var defaultSettings = getDefaultSettings(id, documentBaseUrl, editor);
- return combineSettings(isTouch, defaultSettings, defaultOverrideSettings, settings);
- };
- var getFiltered = function (predicate, editor, name) {
- return Option.from(editor.settings[name]).filter(predicate);
- };
- var getString = curry(getFiltered, isString);
- 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[$_1q1txeljnlpawsa.trim(arr[0])] = $_1q1txeljnlpawsa.trim(arr[1]);
- } else {
- output[$_1q1txeljnlpawsa.trim(arr[0])] = $_1q1txeljnlpawsa.trim(arr);
+ 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()) {
+ editor.selection.setRng(RangeNormalizer.normalize(editor.selection.getRng()));
+ editor.getDoc().execCommand('Delete', false, null);
+ value = trimNbspAfterDeleteAndPadValue(editor.selection.getRng(), value);
+ }
+ parentNode = selection.getNode();
+ var parserArgs = {
+ context: parentNode.nodeName.toLowerCase(),
+ data: details.data,
+ insert: true
+ };
+ fragment = parser.parse(value, parserArgs);
+ if (details.paste === true && InsertList.isListFragment(editor.schema, fragment) && InsertList.isParentBlockLi(dom, parentNode)) {
+ rng = InsertList.insertAtCaret(serializer, dom, editor.selection.getRng(), fragment);
+ editor.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 {
+ selectionSetContent(editor, 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'));
+ umarkFragmentElements(editor.getBody());
+ trimBrsFromTableCell(editor.dom, editor.selection.getStart());
+ editor.fire('SetContent', args);
+ editor.addVisual();
+ };
+ 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);
+ insertHtmlAtCaret(editor, result.content, result.details);
+ };
+ var InsertContent = { insertAtCaret: insertAtCaret$1 };
+
+ var sectionResult = Immutable('sections', 'settings');
+ var detection = PlatformDetection$1.detect();
+ var isTouch = detection.deviceType.isTouch();
+ var mobilePlugins = [
+ 'lists',
+ 'autolink',
+ 'autosave'
+ ];
+ var defaultMobileSettings = { theme: 'mobile' };
+ var normalizePlugins = function (plugins) {
+ var pluginNames = isArray(plugins) ? plugins.join(' ') : plugins;
+ var trimmedPlugins = map(isString(pluginNames) ? pluginNames.split(' ') : [], trim$2);
+ return filter(trimmedPlugins, function (item) {
+ return item.length > 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 strongRtl = /[\u0591-\u07FF\uFB1D-\uFDFF\uFE70-\uFEFC]/;
- var hasStrongRtl = function (text) {
- return strongRtl.test(text);
- };
-
- var isInlineTarget = function (editor, elm) {
- var selector = getString(editor, 'inline_boundaries_selector').getOr('a[href],code');
- return $_d8v5lf1gjnlpax0y.is(Element$$1.fromDom(elm), selector);
- };
- var isRtl = function (element) {
- return DOMUtils$1.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl(element.textContent);
- };
- var findInlineParents = function (isInlineTarget, rootNode, pos) {
- return filter(DOMUtils$1.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget);
- };
- var findRootInline = function (isInlineTarget, rootNode, pos) {
- var parents = findInlineParents(isInlineTarget, rootNode, pos);
- return Option.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) {
- var container = pos.container(), offset = pos.offset();
- if (forward) {
- if (isCaretContainerInline(container)) {
- if ($_fy28ei1rjnlpax2o.isText(container.nextSibling)) {
- return CaretPosition$1(container.nextSibling, 0);
- } else {
- return CaretPosition$1.after(container);
- }
- } else {
- return isBeforeInline(pos) ? CaretPosition$1(container, offset + 1) : pos;
- }
- } else {
- if (isCaretContainerInline(container)) {
- if ($_fy28ei1rjnlpax2o.isText(container.previousSibling)) {
- return CaretPosition$1(container.previousSibling, container.previousSibling.data.length);
- } else {
- return CaretPosition$1.before(container);
- }
- } else {
- return isAfterInline(pos) ? CaretPosition$1(container, offset - 1) : pos;
- }
- }
- };
- var normalizeForwards = curry(normalizePosition, true);
- var normalizeBackwards = curry(normalizePosition, false);
- var $_955v2u3wjnlpaxit = {
- isInlineTarget: isInlineTarget,
- findRootInline: findRootInline,
- isRtl: isRtl,
- isAtZwsp: isAtZwsp,
- normalizePosition: normalizePosition,
- normalizeForwards: normalizeForwards,
- normalizeBackwards: normalizeBackwards,
- hasSameParentBlock: hasSameParentBlock
- };
-
- var isBeforeRoot = function (rootNode) {
- return function (elm) {
- return $_5h7cor1ejnlpax0k.eq(rootNode, Element$$1.fromDom(elm.dom().parentNode));
+ var filterMobilePlugins = function (plugins) {
+ return filter(plugins, curry(contains, mobilePlugins));
};
- };
- var getParentBlock$1 = function (rootNode, elm) {
- return $_5h7cor1ejnlpax0k.contains(rootNode, elm) ? $_cs5qmd2ajnlpax6v.closest(elm, function (element) {
- return isTextBlock(element) || isListItem(element);
- }, isBeforeRoot(rootNode)) : Option.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 liftN([
- $_32xcvk30jnlpaxbn.firstPositionIn(elm),
- $_32xcvk30jnlpaxbn.lastPositionIn(elm)
- ], function (firstPos, lastPos) {
- var normalizedFirstPos = $_955v2u3wjnlpaxit.normalizePosition(true, firstPos);
- var normalizedLastPos = $_955v2u3wjnlpaxit.normalizePosition(false, lastPos);
- var normalizedFromPos = $_955v2u3wjnlpaxit.normalizePosition(false, fromPos);
+ var extractSections = function (keys$$1, settings) {
+ var result = bifilter(settings, function (value, key) {
+ return contains(keys$$1, key);
+ });
+ return sectionResult(result.t, result.f);
+ };
+ var getSection = function (sectionResult, name, 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 getDefaultSettings = function (id, documentBaseUrl, editor) {
+ return {
+ id: id,
+ theme: 'modern',
+ delta_width: 0,
+ delta_height: 0,
+ popup_css: '',
+ 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_style_values: 'xx-small,x-small,small,medium,large,x-large,xx-large',
+ font_size_legacy_values: 'xx-small,small,medium,large,x-large,xx-large,300%',
+ forced_root_block: 'p',
+ hidden_input: true,
+ render_ui: true,
+ indentation: '40px',
+ inline_styles: true,
+ convert_fonts_to_spans: true,
+ indent: 'simple',
+ 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,
+ ie7_compat: true
+ };
+ };
+ var getExternalPlugins = 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 processPlugins = function (isTouchDevice, sectionResult, defaultOverrideSettings, settings) {
+ var forcedPlugins = normalizePlugins(defaultOverrideSettings.forced_plugins);
+ var plugins = normalizePlugins(settings.plugins);
+ var platformPlugins = isTouchDevice && hasSection(sectionResult, 'mobile') ? filterMobilePlugins(plugins) : plugins;
+ var combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);
+ return Tools.extend(settings, { plugins: combinedPlugins.join(' ') });
+ };
+ var isOnMobile = function (isTouchDevice, sectionResult) {
+ var isInline = sectionResult.settings().inline;
+ return isTouchDevice && hasSection(sectionResult, 'mobile') && !isInline;
+ };
+ var combineSettings = function (isTouchDevice, defaultSettings, defaultOverrideSettings, settings) {
+ var sectionResult = extractSections(['mobile'], settings);
+ var extendedSettings = Tools.extend(defaultSettings, defaultOverrideSettings, sectionResult.settings(), isOnMobile(isTouchDevice, sectionResult) ? getSection(sectionResult, 'mobile', defaultMobileSettings) : {}, {
+ validate: true,
+ content_editable: sectionResult.settings().inline,
+ external_plugins: getExternalPlugins(defaultOverrideSettings, sectionResult.settings())
+ });
+ return processPlugins(isTouchDevice, sectionResult, defaultOverrideSettings, extendedSettings);
+ };
+ var getEditorSettings = function (editor, id, documentBaseUrl, defaultOverrideSettings, settings) {
+ var defaultSettings = getDefaultSettings(id, documentBaseUrl, editor);
+ return combineSettings(isTouch, defaultSettings, defaultOverrideSettings, settings);
+ };
+ var getFiltered = function (predicate, editor, name) {
+ return Option.from(editor.settings[name]).filter(predicate);
+ };
+ var getString = curry(getFiltered, isString);
+ 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);
+ }
+ });
+ } 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 strongRtl = /[\u0591-\u07FF\uFB1D-\uFDFF\uFE70-\uFEFC]/;
+ var hasStrongRtl = function (text) {
+ return strongRtl.test(text);
+ };
+
+ var isInlineTarget = function (editor, elm) {
+ var selector = getString(editor, 'inline_boundaries_selector').getOr('a[href],code');
+ return is$1(Element$$1.fromDom(elm), selector);
+ };
+ var isRtl = function (element) {
+ return DOMUtils$1.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl(element.textContent);
+ };
+ var findInlineParents = function (isInlineTarget, rootNode, pos) {
+ return filter(DOMUtils$1.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget);
+ };
+ var findRootInline = function (isInlineTarget, rootNode, pos) {
+ var parents = findInlineParents(isInlineTarget, rootNode, pos);
+ return Option.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) {
+ var container = pos.container(), offset = pos.offset();
if (forward) {
- return $_32xcvk30jnlpaxbn.nextPosition(elm, normalizedFromPos).map(function (nextPos) {
- return nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos);
- }).getOr(false);
+ if (isCaretContainerInline(container)) {
+ if (NodeType.isText(container.nextSibling)) {
+ return CaretPosition$1(container.nextSibling, 0);
+ } else {
+ return CaretPosition$1.after(container);
+ }
+ } else {
+ return isBeforeInline(pos) ? CaretPosition$1(container, offset + 1) : pos;
+ }
} else {
- return $_32xcvk30jnlpaxbn.prevPosition(elm, normalizedFromPos).map(function (prevPos) {
- return prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos);
- }).getOr(false);
+ if (isCaretContainerInline(container)) {
+ if (NodeType.isText(container.previousSibling)) {
+ return CaretPosition$1(container.previousSibling, container.previousSibling.data.length);
+ } else {
+ return CaretPosition$1.before(container);
+ }
+ } else {
+ return isAfterInline(pos) ? CaretPosition$1(container, offset - 1) : pos;
+ }
}
- }).getOr(true);
- };
- var $_dfzzw73vjnlpaxik = {
- getParentBlock: getParentBlock$1,
- paddEmptyBody: paddEmptyBody,
- willDeleteLastPositionInElement: willDeleteLastPositionInElement
- };
+ };
+ var normalizeForwards = curry(normalizePosition, true);
+ var normalizeBackwards = curry(normalizePosition, false);
+ var InlineUtils = {
+ isInlineTarget: isInlineTarget,
+ findRootInline: findRootInline,
+ isRtl: isRtl,
+ isAtZwsp: isAtZwsp,
+ normalizePosition: normalizePosition,
+ normalizeForwards: normalizeForwards,
+ normalizeBackwards: normalizeBackwards,
+ hasSameParentBlock: hasSameParentBlock
+ };
- var any = function (selector) {
- return $_2kbu29jnlpax6t.first(selector).isSome();
- };
- var ancestor$2 = function (scope, selector, isRoot) {
- return $_2kbu29jnlpax6t.ancestor(scope, selector, isRoot).isSome();
- };
- var sibling$3 = function (scope, selector) {
- return $_2kbu29jnlpax6t.sibling(scope, selector).isSome();
- };
- var child$3 = function (scope, selector) {
- return $_2kbu29jnlpax6t.child(scope, selector).isSome();
- };
- var descendant$2 = function (scope, selector) {
- return $_2kbu29jnlpax6t.descendant(scope, selector).isSome();
- };
- var closest$2 = function (scope, selector, isRoot) {
- return $_2kbu29jnlpax6t.closest(scope, selector, isRoot).isSome();
- };
- var $_1kxnjb40jnlpaxjq = {
- any: any,
- ancestor: ancestor$2,
- sibling: sibling$3,
- child: child$3,
- descendant: descendant$2,
- closest: closest$2
- };
-
- var hasWhitespacePreserveParent = function (rootNode, node) {
- var rootElement = Element$$1.fromDom(rootNode);
- var startNode = Element$$1.fromDom(node);
- return $_1kxnjb40jnlpaxjq.ancestor(startNode, 'pre,code', curry($_5h7cor1ejnlpax0k.eq, rootElement));
- };
- var isWhitespace = function (rootNode, node) {
- return $_fy28ei1rjnlpax2o.isText(node) && /^[ \t\r\n]*$/.test(node.data) && hasWhitespacePreserveParent(rootNode, node) === false;
- };
- var isNamedAnchor = function (node) {
- return $_fy28ei1rjnlpax2o.isElement(node) && node.nodeName === 'A' && node.hasAttribute('name');
- };
- var isContent = function (rootNode, node) {
- return isCaretCandidate(node) && isWhitespace(rootNode, node) === false || isNamedAnchor(node) || isBookmark(node);
- };
- var isBookmark = $_fy28ei1rjnlpax2o.hasAttribute('data-mce-bookmark');
- var isBogus$2 = $_fy28ei1rjnlpax2o.hasAttribute('data-mce-bogus');
- var isBogusAll$1 = $_fy28ei1rjnlpax2o.hasAttributeValue('data-mce-bogus', 'all');
- var isEmptyNode = function (targetNode) {
- var walker, node, brCount = 0;
- if (isContent(targetNode, targetNode)) {
- return false;
- } else {
- node = targetNode.firstChild;
- if (!node) {
- return true;
+ var isBeforeRoot = function (rootNode) {
+ return function (elm) {
+ return eq(rootNode, Element$$1.fromDom(elm.dom().parentNode));
+ };
+ };
+ var getParentBlock$1 = function (rootNode, elm) {
+ return contains$3(rootNode, elm) ? closest(elm, function (element) {
+ return isTextBlock(element) || isListItem(element);
+ }, isBeforeRoot(rootNode)) : Option.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);
}
- walker = new TreeWalker(node, targetNode);
- do {
- if (isBogusAll$1(node)) {
- node = walker.next(true);
- continue;
+ };
+ var willDeleteLastPositionInElement = function (forward, fromPos, elm) {
+ return liftN([
+ CaretFinder.firstPositionIn(elm),
+ CaretFinder.lastPositionIn(elm)
+ ], function (firstPos, lastPos) {
+ var normalizedFirstPos = InlineUtils.normalizePosition(true, firstPos);
+ var normalizedLastPos = InlineUtils.normalizePosition(false, lastPos);
+ var normalizedFromPos = InlineUtils.normalizePosition(false, fromPos);
+ if (forward) {
+ return CaretFinder.nextPosition(elm, normalizedFromPos).map(function (nextPos) {
+ return nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos);
+ }).getOr(false);
+ } else {
+ return CaretFinder.prevPosition(elm, normalizedFromPos).map(function (prevPos) {
+ return prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos);
+ }).getOr(false);
}
- if (isBogus$2(node)) {
+ }).getOr(true);
+ };
+ var DeleteUtils = {
+ getParentBlock: getParentBlock$1,
+ paddEmptyBody: paddEmptyBody,
+ willDeleteLastPositionInElement: willDeleteLastPositionInElement
+ };
+
+ var ancestor$2 = function (scope, selector, isRoot) {
+ return ancestor$1(scope, selector, isRoot).isSome();
+ };
+
+ var hasWhitespacePreserveParent = function (rootNode, node) {
+ var rootElement = Element$$1.fromDom(rootNode);
+ var startNode = Element$$1.fromDom(node);
+ return ancestor$2(startNode, 'pre,code', curry(eq, rootElement));
+ };
+ var isWhitespace = function (rootNode, node) {
+ return NodeType.isText(node) && /^[ \t\r\n]*$/.test(node.data) && hasWhitespacePreserveParent(rootNode, node) === false;
+ };
+ var isNamedAnchor = function (node) {
+ return NodeType.isElement(node) && node.nodeName === 'A' && node.hasAttribute('name');
+ };
+ var isContent$1 = function (rootNode, node) {
+ return isCaretCandidate(node) && isWhitespace(rootNode, node) === false || isNamedAnchor(node) || isBookmark(node);
+ };
+ var isBookmark = NodeType.hasAttribute('data-mce-bookmark');
+ var isBogus$2 = NodeType.hasAttribute('data-mce-bogus');
+ var isBogusAll$1 = NodeType.hasAttributeValue('data-mce-bogus', 'all');
+ var isEmptyNode = function (targetNode) {
+ var walker, node, brCount = 0;
+ if (isContent$1(targetNode, targetNode)) {
+ return false;
+ } else {
+ node = targetNode.firstChild;
+ if (!node) {
+ return true;
+ }
+ walker = new TreeWalker(node, targetNode);
+ do {
+ if (isBogusAll$1(node)) {
+ node = walker.next(true);
+ continue;
+ }
+ if (isBogus$2(node)) {
+ node = walker.next();
+ continue;
+ }
+ if (NodeType.isBr(node)) {
+ brCount++;
+ node = walker.next();
+ continue;
+ }
+ if (isContent$1(targetNode, node)) {
+ return false;
+ }
node = walker.next();
- continue;
+ } while (node);
+ return brCount <= 1;
+ }
+ };
+ var isEmpty$1 = function (elm) {
+ return isEmptyNode(elm.dom());
+ };
+ var Empty = { isEmpty: isEmpty$1 };
+
+ var BlockPosition = Immutable('block', 'position');
+ var BlockBoundary = Immutable('from', 'to');
+ var getBlockPosition = function (rootNode, pos) {
+ var rootElm = Element$$1.fromDom(rootNode);
+ var containerElm = Element$$1.fromDom(pos.container());
+ return DeleteUtils.getParentBlock(rootElm, containerElm).map(function (block) {
+ return BlockPosition(block, pos);
+ });
+ };
+ var isDifferentBlocks = function (blockBoundary) {
+ return eq(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(parent1, parent2);
+ });
+ }).isSome();
+ };
+ var isEditable = function (blockBoundary) {
+ return NodeType.isContentEditableFalse(blockBoundary.from().block()) === false && NodeType.isContentEditableFalse(blockBoundary.to().block()) === false;
+ };
+ var skipLastBr = function (rootNode, forward, blockPosition) {
+ if (NodeType.isBr(blockPosition.position().getNode()) && Empty.isEmpty(blockPosition.block()) === false) {
+ return CaretFinder.positionIn(false, blockPosition.block().dom()).bind(function (lastPositionInBlock) {
+ if (lastPositionInBlock.isEqual(blockPosition.position())) {
+ return CaretFinder.fromPosition(forward, rootNode, lastPositionInBlock).bind(function (to) {
+ return getBlockPosition(rootNode, to);
+ });
+ } else {
+ return Option.some(blockPosition);
+ }
+ }).getOr(blockPosition);
+ } else {
+ return blockPosition;
+ }
+ };
+ var readFromRange = function (rootNode, forward, rng) {
+ var fromBlockPos = getBlockPosition(rootNode, CaretPosition$1.fromRangeStart(rng));
+ var toBlockPos = fromBlockPos.bind(function (blockPos) {
+ return CaretFinder.fromPosition(forward, rootNode, blockPos.position()).bind(function (to) {
+ return getBlockPosition(rootNode, to).map(function (blockPos) {
+ return skipLastBr(rootNode, forward, blockPos);
+ });
+ });
+ });
+ return liftN([
+ fromBlockPos,
+ toBlockPos
+ ], BlockBoundary).filter(function (blockBoundary) {
+ return isDifferentBlocks(blockBoundary) && hasSameParent(blockBoundary) && isEditable(blockBoundary);
+ });
+ };
+ var read$1 = function (rootNode, forward, rng) {
+ return rng.collapsed ? readFromRange(rootNode, forward, rng) : Option.none();
+ };
+ var BlockMergeBoundary = { read: read$1 };
+
+ var dropLast = function (xs) {
+ return xs.slice(0, -1);
+ };
+ var parentsUntil$1 = function (start, root, predicate) {
+ if (contains$3(root, start)) {
+ return dropLast(parents(start, function (elm) {
+ return predicate(elm) || eq(elm, root);
+ }));
+ } else {
+ return [];
+ }
+ };
+ var parents$1 = function (start, root) {
+ return parentsUntil$1(start, root, constant(false));
+ };
+ var parentsAndSelf = function (start, root) {
+ return [start].concat(parents$1(start, root));
+ };
+ var Parents = {
+ parentsUntil: parentsUntil$1,
+ parents: parents$1,
+ parentsAndSelf: parentsAndSelf
+ };
+
+ 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$$1 = getChildrenUntilBlockBoundary(block);
+ each(children$$1, remove$2);
+ return children$$1;
+ };
+ var removeEmptyRoot = function (rootNode, block) {
+ var parents$$1 = Parents.parentsAndSelf(block, rootNode);
+ return find(parents$$1.reverse(), Empty.isEmpty).each(remove$2);
+ };
+ var isEmptyBefore = function (el) {
+ return filter(prevSiblings(el), function (el) {
+ return !Empty.isEmpty(el);
+ }).length === 0;
+ };
+ var nestedBlockMerge = function (rootNode, fromBlock, toBlock, insertionPoint) {
+ if (Empty.isEmpty(toBlock)) {
+ PaddingBr.fillWithPaddingBr(toBlock);
+ return CaretFinder.firstPositionIn(toBlock.dom());
+ }
+ if (isEmptyBefore(insertionPoint) && Empty.isEmpty(fromBlock)) {
+ before(insertionPoint, Element$$1.fromTag('br'));
+ }
+ var position = CaretFinder.prevPosition(toBlock.dom(), CaretPosition$1.before(insertionPoint.dom()));
+ each(extractChildren(fromBlock), function (child$$1) {
+ before(insertionPoint, child$$1);
+ });
+ removeEmptyRoot(rootNode, fromBlock);
+ return position;
+ };
+ var sidelongBlockMerge = function (rootNode, fromBlock, toBlock) {
+ if (Empty.isEmpty(toBlock)) {
+ remove$2(toBlock);
+ if (Empty.isEmpty(fromBlock)) {
+ PaddingBr.fillWithPaddingBr(fromBlock);
}
- if ($_fy28ei1rjnlpax2o.isBr(node)) {
- brCount++;
- node = walker.next();
- continue;
- }
- if (isContent(targetNode, node)) {
+ return CaretFinder.firstPositionIn(fromBlock.dom());
+ }
+ var position = CaretFinder.lastPositionIn(toBlock.dom());
+ each(extractChildren(fromBlock), function (child$$1) {
+ append(toBlock, child$$1);
+ });
+ removeEmptyRoot(rootNode, fromBlock);
+ return position;
+ };
+ var findInsertionPoint = function (toBlock, block) {
+ var parentsAndSelf = Parents.parentsAndSelf(block, toBlock);
+ return Option.from(parentsAndSelf[parentsAndSelf.length - 1]);
+ };
+ var getInsertionPoint = function (fromBlock, toBlock) {
+ return contains$3(toBlock, fromBlock) ? findInsertionPoint(toBlock, fromBlock) : Option.none();
+ };
+ var trimBr = function (first, block) {
+ CaretFinder.positionIn(first, block.dom()).map(function (position) {
+ return position.getNode();
+ }).map(Element$$1.fromDom).filter(isBr).each(remove$2);
+ };
+ 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 MergeBlocks = { mergeBlocks: mergeBlocks };
+
+ var backspaceDelete = function (editor, forward) {
+ var position;
+ var rootNode = Element$$1.fromDom(editor.getBody());
+ position = BlockMergeBoundary.read(rootNode.dom(), forward, editor.selection.getRng()).bind(function (blockBoundary) {
+ return MergeBlocks.mergeBlocks(rootNode, forward, blockBoundary.from().block(), blockBoundary.to().block());
+ });
+ position.each(function (pos) {
+ editor.selection.setRng(pos.toRange());
+ });
+ return position.isSome();
+ };
+ var BlockBoundaryDelete = { backspaceDelete: backspaceDelete };
+
+ var deleteRangeMergeBlocks = function (rootNode, selection) {
+ var rng = selection.getRng();
+ return liftN([
+ DeleteUtils.getParentBlock(rootNode, Element$$1.fromDom(rng.startContainer)),
+ DeleteUtils.getParentBlock(rootNode, Element$$1.fromDom(rng.endContainer))
+ ], function (block1, block2) {
+ if (eq(block1, block2) === false) {
+ rng.deleteContents();
+ MergeBlocks.mergeBlocks(rootNode, true, block1, block2).each(function (pos) {
+ selection.setRng(pos.toRange());
+ });
+ return true;
+ } else {
return false;
}
- node = walker.next();
- } while (node);
- return brCount <= 1;
- }
- };
- var isEmpty$1 = function (elm) {
- return isEmptyNode(elm.dom());
- };
- var $_czpaaj3zjnlpaxjj = { isEmpty: isEmpty$1 };
+ }).getOr(false);
+ };
+ var isRawNodeInTable = function (root, rawNode) {
+ var node = Element$$1.fromDom(rawNode);
+ var isRoot = curry(eq, root);
+ return ancestor(node, isTableCell, isRoot).isSome();
+ };
+ var isSelectionInTable = function (root, rng) {
+ return isRawNodeInTable(root, rng.startContainer) || isRawNodeInTable(root, rng.endContainer);
+ };
+ var isEverythingSelected = function (root, rng) {
+ var noPrevious = CaretFinder.prevPosition(root.dom(), CaretPosition$1.fromRangeStart(rng)).isNone();
+ var noNext = CaretFinder.nextPosition(root.dom(), CaretPosition$1.fromRangeEnd(rng)).isNone();
+ return !isSelectionInTable(root, rng) && noPrevious && noNext;
+ };
+ var emptyEditor = function (editor) {
+ editor.setContent('');
+ editor.selection.setCursorLocation();
+ return true;
+ };
+ var deleteRange = function (editor) {
+ var rootNode = Element$$1.fromDom(editor.getBody());
+ var rng = editor.selection.getRng();
+ return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection);
+ };
+ var backspaceDelete$1 = function (editor, forward) {
+ return editor.selection.isCollapsed() ? false : deleteRange(editor);
+ };
+ var BlockRangeDelete = { backspaceDelete: backspaceDelete$1 };
- var BlockPosition = Immutable('block', 'position');
- var BlockBoundary = Immutable('from', 'to');
- var getBlockPosition = function (rootNode, pos) {
- var rootElm = Element$$1.fromDom(rootNode);
- var containerElm = Element$$1.fromDom(pos.container());
- return $_dfzzw73vjnlpaxik.getParentBlock(rootElm, containerElm).map(function (block) {
- return BlockPosition(block, pos);
- });
- };
- var isDifferentBlocks = function (blockBoundary) {
- return $_5h7cor1ejnlpax0k.eq(blockBoundary.from().block(), blockBoundary.to().block()) === false;
- };
- var hasSameParent = function (blockBoundary) {
- return $_dr4ybh18jnlpawzt.parent(blockBoundary.from().block()).bind(function (parent1) {
- return $_dr4ybh18jnlpawzt.parent(blockBoundary.to().block()).filter(function (parent2) {
- return $_5h7cor1ejnlpax0k.eq(parent1, parent2);
- });
- }).isSome();
- };
- var isEditable = function (blockBoundary) {
- return $_fy28ei1rjnlpax2o.isContentEditableFalse(blockBoundary.from().block()) === false && $_fy28ei1rjnlpax2o.isContentEditableFalse(blockBoundary.to().block()) === false;
- };
- var skipLastBr = function (rootNode, forward, blockPosition) {
- if ($_fy28ei1rjnlpax2o.isBr(blockPosition.position().getNode()) && $_czpaaj3zjnlpaxjj.isEmpty(blockPosition.block()) === false) {
- return $_32xcvk30jnlpaxbn.positionIn(false, blockPosition.block().dom()).bind(function (lastPositionInBlock) {
- if (lastPositionInBlock.isEqual(blockPosition.position())) {
- return $_32xcvk30jnlpaxbn.fromPosition(forward, rootNode, lastPositionInBlock).bind(function (to) {
- return getBlockPosition(rootNode, to);
- });
- } else {
- return Option.some(blockPosition);
- }
- }).getOr(blockPosition);
- } else {
- return blockPosition;
- }
- };
- var readFromRange = function (rootNode, forward, rng) {
- var fromBlockPos = getBlockPosition(rootNode, CaretPosition$1.fromRangeStart(rng));
- var toBlockPos = fromBlockPos.bind(function (blockPos) {
- return $_32xcvk30jnlpaxbn.fromPosition(forward, rootNode, blockPos.position()).bind(function (to) {
- return getBlockPosition(rootNode, to).map(function (blockPos) {
- return skipLastBr(rootNode, forward, blockPos);
- });
- });
- });
- return liftN([
- fromBlockPos,
- toBlockPos
- ], BlockBoundary).filter(function (blockBoundary) {
- return isDifferentBlocks(blockBoundary) && hasSameParent(blockBoundary) && isEditable(blockBoundary);
- });
- };
- var read$1 = function (rootNode, forward, rng) {
- return rng.collapsed ? readFromRange(rootNode, forward, rng) : Option.none();
- };
- var $_5nfp373ujnlpaxi8 = { read: read$1 };
-
- var dropLast = function (xs) {
- return xs.slice(0, -1);
- };
- var parentsUntil$1 = function (startNode, rootElm, predicate) {
- if ($_5h7cor1ejnlpax0k.contains(rootElm, startNode)) {
- return dropLast($_dr4ybh18jnlpawzt.parents(startNode, function (elm) {
- return predicate(elm) || $_5h7cor1ejnlpax0k.eq(elm, rootElm);
- }));
- } else {
- return [];
- }
- };
- var parents$1 = function (startNode, rootElm) {
- return parentsUntil$1(startNode, rootElm, constant(false));
- };
- var parentsAndSelf = function (startNode, rootElm) {
- return [startNode].concat(parents$1(startNode, rootElm));
- };
- var $_4b88sj42jnlpaxkd = {
- parentsUntil: parentsUntil$1,
- parents: parents$1,
- parentsAndSelf: parentsAndSelf
- };
-
- var getChildrenUntilBlockBoundary = function (block) {
- var children = $_dr4ybh18jnlpawzt.children(block);
- return findIndex(children, isBlock).fold(function () {
- return children;
- }, function (index) {
- return children.slice(0, index);
- });
- };
- var extractChildren = function (block) {
- var children = getChildrenUntilBlockBoundary(block);
- each(children, $_azq8zm1wjnlpax4n.remove);
- return children;
- };
- var removeEmptyRoot = function (rootNode, block) {
- var parents = $_4b88sj42jnlpaxkd.parentsAndSelf(block, rootNode);
- return find(parents.reverse(), $_czpaaj3zjnlpaxjj.isEmpty).each($_azq8zm1wjnlpax4n.remove);
- };
- var isEmptyBefore = function (el) {
- return filter($_dr4ybh18jnlpawzt.prevSiblings(el), function (el) {
- return !$_czpaaj3zjnlpaxjj.isEmpty(el);
- }).length === 0;
- };
- var nestedBlockMerge = function (rootNode, fromBlock, toBlock, insertionPoint) {
- if ($_czpaaj3zjnlpaxjj.isEmpty(toBlock)) {
- $_azhpc63njnlpaxgw.fillWithPaddingBr(toBlock);
- return $_32xcvk30jnlpaxbn.firstPositionIn(toBlock.dom());
- }
- if (isEmptyBefore(insertionPoint) && $_czpaaj3zjnlpaxjj.isEmpty(fromBlock)) {
- $_ag89ax1yjnlpax4x.before(insertionPoint, Element$$1.fromTag('br'));
- }
- var position = $_32xcvk30jnlpaxbn.prevPosition(toBlock.dom(), CaretPosition$1.before(insertionPoint.dom()));
- each(extractChildren(fromBlock), function (child) {
- $_ag89ax1yjnlpax4x.before(insertionPoint, child);
- });
- removeEmptyRoot(rootNode, fromBlock);
- return position;
- };
- var sidelongBlockMerge = function (rootNode, fromBlock, toBlock) {
- if ($_czpaaj3zjnlpaxjj.isEmpty(toBlock)) {
- $_azq8zm1wjnlpax4n.remove(toBlock);
- if ($_czpaaj3zjnlpaxjj.isEmpty(fromBlock)) {
- $_azhpc63njnlpaxgw.fillWithPaddingBr(fromBlock);
+ var generate$1 = function (cases) {
+ if (!isArray(cases)) {
+ throw new Error('cases must be an array');
}
- return $_32xcvk30jnlpaxbn.firstPositionIn(fromBlock.dom());
- }
- var position = $_32xcvk30jnlpaxbn.lastPositionIn(toBlock.dom());
- each(extractChildren(fromBlock), function (child) {
- $_ag89ax1yjnlpax4x.append(toBlock, child);
- });
- removeEmptyRoot(rootNode, fromBlock);
- return position;
- };
- var findInsertionPoint = function (toBlock, block) {
- var parentsAndSelf = $_4b88sj42jnlpaxkd.parentsAndSelf(block, toBlock);
- return Option.from(parentsAndSelf[parentsAndSelf.length - 1]);
- };
- var getInsertionPoint = function (fromBlock, toBlock) {
- return $_5h7cor1ejnlpax0k.contains(toBlock, fromBlock) ? findInsertionPoint(toBlock, fromBlock) : Option.none();
- };
- var trimBr = function (first, block) {
- $_32xcvk30jnlpaxbn.positionIn(first, block.dom()).map(function (position) {
- return position.getNode();
- }).map(Element$$1.fromDom).filter(isBr).each($_azq8zm1wjnlpax4n.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 $_dkwg7o41jnlpaxk0 = { mergeBlocks: mergeBlocks };
+ 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 argLength = arguments.length;
+ if (argLength !== value.length) {
+ throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);
+ }
+ var args = new Array(argLength);
+ for (var i = 0; i < args.length; i++)
+ args[i] = arguments[i];
+ 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 () {
+ if (arguments.length !== cases.length) {
+ throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);
+ }
+ var target = arguments[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$1 };
- var backspaceDelete = function (editor, forward) {
- var position;
- var rootNode = Element$$1.fromDom(editor.getBody());
- position = $_5nfp373ujnlpaxi8.read(rootNode.dom(), forward, editor.selection.getRng()).bind(function (blockBoundary) {
- return $_dkwg7o41jnlpaxk0.mergeBlocks(rootNode, forward, blockBoundary.from().block(), blockBoundary.to().block());
- });
- position.each(function (pos) {
- editor.selection.setRng(pos.toRange());
- });
- return position.isSome();
- };
- var $_3n8adg3tjnlpaxi5 = { backspaceDelete: backspaceDelete };
+ var isBr$5 = function (pos) {
+ return getElementFromPosition(pos).exists(isBr);
+ };
+ var findBr = function (forward, root, pos) {
+ var parentBlocks = filter(Parents.parentsAndSelf(Element$$1.fromDom(pos.container()), root), isBlock);
+ var scope = head(parentBlocks).getOr(root);
+ return CaretFinder.fromPosition(forward, scope.dom(), pos).filter(isBr$5);
+ };
+ var isBeforeBr = function (root, pos) {
+ return getElementFromPosition(pos).exists(isBr) || findBr(true, root, pos).isSome();
+ };
+ var isAfterBr = function (root, pos) {
+ return getElementFromPrevPosition(pos).exists(isBr) || findBr(false, root, pos).isSome();
+ };
+ var findPreviousBr = curry(findBr, false);
+ var findNextBr = curry(findBr, true);
- var deleteRangeMergeBlocks = function (rootNode, selection) {
- var rng = selection.getRng();
- return liftN([
- $_dfzzw73vjnlpaxik.getParentBlock(rootNode, Element$$1.fromDom(rng.startContainer)),
- $_dfzzw73vjnlpaxik.getParentBlock(rootNode, Element$$1.fromDom(rng.endContainer))
- ], function (block1, block2) {
- if ($_5h7cor1ejnlpax0k.eq(block1, block2) === false) {
- rng.deleteContents();
- $_dkwg7o41jnlpaxk0.mergeBlocks(rootNode, true, block1, block2).each(function (pos) {
- selection.setRng(pos.toRange());
+ var isCompoundElement = function (node) {
+ return isTableCell(Element$$1.fromDom(node)) || isListItem(Element$$1.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 NodeType.isElement(elm) && elm.getAttribute('data-mce-caret') === caretLocation;
+ };
+ var isDeleteFromCefDifferentBlocks = function (root, forward, from, to) {
+ var inSameBlock = function (elm) {
+ return isInline(Element$$1.fromDom(elm)) && !isInSameBlock(from, to, root);
+ };
+ return getRelativeCefElm(!forward, from).fold(function () {
+ return getRelativeCefElm(forward, to).fold(constant(false), inSameBlock);
+ }, inSameBlock);
+ };
+ var deleteEmptyBlockOrMoveToCef = function (root, forward, from, to) {
+ var toCefElm = to.getNode(forward === false);
+ return DeleteUtils.getParentBlock(Element$$1.fromDom(root), Element$$1.fromDom(from.getNode())).map(function (blockElm) {
+ return Empty.isEmpty(blockElm) ? DeleteAction.remove(blockElm.dom()) : DeleteAction.moveToElement(toCefElm);
+ }).orThunk(function () {
+ return Option.some(DeleteAction.moveToElement(toCefElm));
+ });
+ };
+ var findCefPosition = function (root, forward, from) {
+ return CaretFinder.fromPosition(forward, root, from).bind(function (to) {
+ if (isCompoundElement(to.getNode())) {
+ return Option.none();
+ } else if (isDeleteFromCefDifferentBlocks(root, forward, from, to)) {
+ return Option.none();
+ } else if (forward && NodeType.isContentEditableFalse(to.getNode())) {
+ return deleteEmptyBlockOrMoveToCef(root, forward, from, to);
+ } else if (forward === false && NodeType.isContentEditableFalse(to.getNode(true))) {
+ return deleteEmptyBlockOrMoveToCef(root, forward, from, to);
+ } else if (forward && isAfterContentEditableFalse(from)) {
+ return Option.some(DeleteAction.moveToPosition(to));
+ } else if (forward === false && isBeforeContentEditableFalse(from)) {
+ return Option.some(DeleteAction.moveToPosition(to));
+ } else {
+ return Option.none();
+ }
+ });
+ };
+ var getContentEditableBlockAction = function (forward, elm) {
+ if (forward && NodeType.isContentEditableFalse(elm.nextSibling)) {
+ return Option.some(DeleteAction.moveToElement(elm.nextSibling));
+ } else if (forward === false && NodeType.isContentEditableFalse(elm.previousSibling)) {
+ return Option.some(DeleteAction.moveToElement(elm.previousSibling));
+ } else {
+ return Option.none();
+ }
+ };
+ var skipMoveToActionFromInlineCefToContent = function (root, from, deleteAction) {
+ return deleteAction.fold(function (elm) {
+ return Option.some(DeleteAction.remove(elm));
+ }, function (elm) {
+ return Option.some(DeleteAction.moveToElement(elm));
+ }, function (to) {
+ if (isInSameBlock(from, to, root)) {
+ return Option.none();
+ } else {
+ return Option.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);
+ }, Option.some);
+ } else {
+ return findCefPosition(root, forward, from).bind(function (deleteAction) {
+ return skipMoveToActionFromInlineCefToContent(root, from, deleteAction);
});
+ }
+ };
+ var read$2 = function (root, forward, rng) {
+ var normalizedRange = normalizeRange(forward ? 1 : -1, root, rng);
+ var from = CaretPosition$1.fromRangeStart(normalizedRange);
+ var rootElement = Element$$1.fromDom(root);
+ if (forward === false && isAfterContentEditableFalse(from)) {
+ return Option.some(DeleteAction.remove(from.getNode(true)));
+ } else if (forward && isBeforeContentEditableFalse(from)) {
+ return Option.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 isCollapsibleWhitespace = function (c) {
+ return ' \f\n\r\t\x0B'.indexOf(c) !== -1;
+ };
+ var normalizeContent = function (content, isStartOfContent, isEndOfContent) {
+ var result = foldl(content.split(''), function (acc, c) {
+ if (isCollapsibleWhitespace(c) || c === '\xA0') {
+ if (acc.previousCharIsSpace || acc.str === '' && isStartOfContent || acc.str.length === content.length - 1 && isEndOfContent) {
+ return {
+ previousCharIsSpace: false,
+ str: acc.str + '\xA0'
+ };
+ } 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 whitespace = node.data.slice(offset, offset + count);
+ var isEndOfContent = offset + count >= node.data.length;
+ var isStartOfContent = offset === 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) {
+ var whitespaceOffset = rTrim(prevNode.data).length;
+ prevNode.appendData(nextNode.data);
+ remove$2(Element$$1.fromDom(nextNode));
+ if (normalizeWhitespace) {
+ normalizeWhitespaceAfter(prevNode, whitespaceOffset);
+ }
+ return prevNode;
+ };
+
+ var needsReposition = function (pos, elm) {
+ var container = pos.container();
+ var offset = pos.offset();
+ return CaretPosition$1.isTextPosition(pos) === false && container === elm.parentNode && offset > CaretPosition$1.before(elm).offset();
+ };
+ var reposition = function (elm, pos) {
+ return needsReposition(pos, elm) ? CaretPosition$1(pos.container(), pos.offset() - 1) : pos;
+ };
+ var beforeOrStartOf = function (node) {
+ return NodeType.isText(node) ? CaretPosition$1(node, 0) : CaretPosition$1.before(node);
+ };
+ var afterOrEndOf = function (node) {
+ return NodeType.isText(node) ? CaretPosition$1(node, node.data.length) : CaretPosition$1.after(node);
+ };
+ var getPreviousSiblingCaretPosition = function (elm) {
+ if (isCaretCandidate(elm.previousSibling)) {
+ return Option.some(afterOrEndOf(elm.previousSibling));
+ } else {
+ return elm.previousSibling ? CaretFinder.lastPositionIn(elm.previousSibling) : Option.none();
+ }
+ };
+ var getNextSiblingCaretPosition = function (elm) {
+ if (isCaretCandidate(elm.nextSibling)) {
+ return Option.some(beforeOrStartOf(elm.nextSibling));
+ } else {
+ return elm.nextSibling ? CaretFinder.firstPositionIn(elm.nextSibling) : Option.none();
+ }
+ };
+ var findCaretPositionBackwardsFromElm = function (rootElement, elm) {
+ var startPosition = CaretPosition$1.before(elm.previousSibling ? elm.previousSibling : elm.parentNode);
+ return CaretFinder.prevPosition(rootElement, startPosition).fold(function () {
+ return CaretFinder.nextPosition(rootElement, CaretPosition$1.after(elm));
+ }, Option.some);
+ };
+ var findCaretPositionForwardsFromElm = function (rootElement, elm) {
+ return CaretFinder.nextPosition(rootElement, CaretPosition$1.after(elm)).fold(function () {
+ return CaretFinder.prevPosition(rootElement, CaretPosition$1.before(elm));
+ }, Option.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 && editor.schema.getBlockElements().hasOwnProperty(name(elm));
+ };
+ var paddEmptyBlock = function (elm) {
+ if (Empty.isEmpty(elm)) {
+ var br = Element$$1.fromHtml('
');
+ empty(elm);
+ append(elm, br);
+ return Option.some(CaretPosition$1.before(br.dom()));
+ } else {
+ return Option.none();
+ }
+ };
+ var deleteNormalized = function (elm, afterDeletePosOpt, normalizeWhitespace) {
+ var prevTextOpt = prevSibling(elm).filter(function (e) {
+ return NodeType.isText(e.dom());
+ });
+ var nextTextOpt = nextSibling(elm).filter(function (e) {
+ return NodeType.isText(e.dom());
+ });
+ remove$2(elm);
+ return liftN([
+ 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$1(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, Option.some(paddPos));
+ }
+ });
+ }
+ };
+ var DeleteElement = { deleteElement: deleteElement };
+
+ var deleteElement$1 = function (editor, forward) {
+ return function (element) {
+ editor._selectionOverrides.hideFakeCaret();
+ DeleteElement.deleteElement(editor, forward, Element$$1.fromDom(element));
+ return true;
+ };
+ };
+ var moveToElement = function (editor, forward) {
+ return function (element) {
+ var pos = forward ? CaretPosition$1.before(element) : CaretPosition$1.after(element);
+ editor.selection.setRng(pos.toRange());
+ return true;
+ };
+ };
+ var moveToPosition = function (editor) {
+ return function (pos) {
+ editor.selection.setRng(pos.toRange());
+ return true;
+ };
+ };
+ var backspaceDeleteCaret = function (editor, forward) {
+ var result = read$2(editor.getBody(), forward, editor.selection.getRng()).map(function (deleteAction) {
+ return deleteAction.fold(deleteElement$1(editor, forward), moveToElement(editor, forward), moveToPosition(editor));
+ });
+ return result.getOr(false);
+ };
+ var deleteOffscreenSelection = function (rootElement) {
+ each(descendants$1(rootElement, '.mce-offscreen-selection'), remove$2);
+ };
+ var backspaceDeleteRange = function (editor, forward) {
+ var selectedElement = editor.selection.getNode();
+ if (NodeType.isContentEditableFalse(selectedElement)) {
+ deleteOffscreenSelection(Element$$1.fromDom(editor.getBody()));
+ DeleteElement.deleteElement(editor, forward, Element$$1.fromDom(editor.selection.getNode()));
+ DeleteUtils.paddEmptyBody(editor);
return true;
} else {
return false;
}
- }).getOr(false);
- };
- var isRawNodeInTable = function (root, rawNode) {
- var node = Element$$1.fromDom(rawNode);
- var isRoot = curry($_5h7cor1ejnlpax0k.eq, root);
- return $_cs5qmd2ajnlpax6v.ancestor(node, isTableCell, isRoot).isSome();
- };
- var isSelectionInTable = function (root, rng) {
- return isRawNodeInTable(root, rng.startContainer) || isRawNodeInTable(root, rng.endContainer);
- };
- var isEverythingSelected = function (root, rng) {
- var noPrevious = $_32xcvk30jnlpaxbn.prevPosition(root.dom(), CaretPosition$1.fromRangeStart(rng)).isNone();
- var noNext = $_32xcvk30jnlpaxbn.nextPosition(root.dom(), CaretPosition$1.fromRangeEnd(rng)).isNone();
- return !isSelectionInTable(root, rng) && noPrevious && noNext;
- };
- var emptyEditor = function (editor) {
- editor.setContent('');
- editor.selection.setCursorLocation();
- return true;
- };
- var deleteRange = function (editor) {
- var rootNode = Element$$1.fromDom(editor.getBody());
- var rng = editor.selection.getRng();
- return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection);
- };
- var backspaceDelete$1 = function (editor, forward) {
- return editor.selection.isCollapsed() ? false : deleteRange(editor);
- };
- var $_f5evyu43jnlpaxki = { backspaceDelete: backspaceDelete$1 };
-
- var generate$1 = 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 argLength = arguments.length;
- if (argLength !== value.length) {
- throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);
+ };
+ var getContentEditableRoot = function (root, node) {
+ while (node && node !== root) {
+ if (NodeType.isContentEditableTrue(node) || NodeType.isContentEditableFalse(node)) {
+ return node;
}
- var args = new Array(argLength);
- for (var i = 0; i < args.length; i++)
- args[i] = arguments[i];
- 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(','));
+ node = node.parentNode;
+ }
+ return null;
+ };
+ var paddEmptyElement = function (editor) {
+ var br;
+ var ceRoot = getContentEditableRoot(editor.getBody(), editor.selection.getNode());
+ if (NodeType.isContentEditableTrue(ceRoot) && editor.dom.isBlock(ceRoot) && editor.dom.isEmpty(ceRoot)) {
+ br = editor.dom.create('br', { 'data-mce-bogus': '1' });
+ editor.dom.setHTML(ceRoot, '');
+ ceRoot.appendChild(br);
+ editor.selection.setRng(CaretPosition$1.before(br).toRange());
+ }
+ return true;
+ };
+ var backspaceDelete$2 = function (editor, forward) {
+ if (editor.selection.isCollapsed()) {
+ return backspaceDeleteCaret(editor, forward);
+ } else {
+ return backspaceDeleteRange(editor, forward);
+ }
+ };
+ var CefDelete = {
+ backspaceDelete: backspaceDelete$2,
+ paddEmptyElement: paddEmptyElement
+ };
+
+ var isText$8 = NodeType.isText;
+ var startsWithCaretContainer$1 = function (node) {
+ return isText$8(node) && node.data[0] === Zwsp.ZWSP;
+ };
+ var endsWithCaretContainer$1 = function (node) {
+ return isText$8(node) && node.data[node.data.length - 1] === Zwsp.ZWSP;
+ };
+ var createZwsp = function (node) {
+ return node.ownerDocument.createTextNode(Zwsp.ZWSP);
+ };
+ var insertBefore$1 = function (node) {
+ if (isText$8(node.previousSibling)) {
+ if (endsWithCaretContainer$1(node.previousSibling)) {
+ return node.previousSibling;
+ } else {
+ node.previousSibling.appendData(Zwsp.ZWSP);
+ return node.previousSibling;
+ }
+ } else if (isText$8(node)) {
+ if (startsWithCaretContainer$1(node)) {
+ return node;
+ } else {
+ node.insertData(0, Zwsp.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.ZWSP);
+ return node.nextSibling;
+ }
+ } else if (isText$8(node)) {
+ if (endsWithCaretContainer$1(node)) {
+ return node;
+ } else {
+ node.appendData(Zwsp.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 (NodeType.isText(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) {
+ CaretContainerRemove.remove(caret.get());
+ var text = insertInlineBefore(element);
+ caret.set(text);
+ return Option.some(CaretPosition$1(text, text.length - 1));
+ }, function (element) {
+ return CaretFinder.firstPositionIn(element).map(function (pos) {
+ if (!isPosCaretContainer(pos, caret)) {
+ CaretContainerRemove.remove(caret.get());
+ var text = insertInlinePos(pos, true);
+ caret.set(text);
+ return CaretPosition$1(text, 1);
+ } else {
+ return CaretPosition$1(caret.get(), 1);
}
- 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 () {
- if (arguments.length !== cases.length) {
- throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);
- }
- var target = arguments[count];
- return target.apply(null, args);
- },
- match: match,
- log: function (label) {
- console.log(label, {
- constructors: constructors,
- constructor: key,
- params: args
- });
+ });
+ }, function (element) {
+ return CaretFinder.lastPositionIn(element).map(function (pos) {
+ if (!isPosCaretContainer(pos, caret)) {
+ CaretContainerRemove.remove(caret.get());
+ var text = insertInlinePos(pos, false);
+ caret.set(text);
+ return CaretPosition$1(text, text.length - 1);
+ } else {
+ return CaretPosition$1(caret.get(), caret.get().length - 1);
}
- };
- };
- });
- return adt;
- };
- var Adt = { generate: generate$1 };
-
- var isCompoundElement = function (node) {
- return isTableCell(Element$$1.fromDom(node)) || isListItem(Element$$1.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 $_fy28ei1rjnlpax2o.isElement(elm) && elm.getAttribute('data-mce-caret') === caretLocation;
- };
- var isDeleteFromCefDifferentBlocks = function (root, forward, from, to) {
- var inSameBlock = function (elm) {
- return isInline(Element$$1.fromDom(elm)) && !isInSameBlock(from, to, root);
+ });
+ }, function (element) {
+ CaretContainerRemove.remove(caret.get());
+ var text = insertInlineAfter(element);
+ caret.set(text);
+ return Option.some(CaretPosition$1(text, 1));
+ });
};
- return getRelativeCefElm(!forward, from).fold(function () {
- return getRelativeCefElm(forward, to).fold(constant(false), inSameBlock);
- }, inSameBlock);
- };
- var deleteEmptyBlockOrMoveToCef = function (root, forward, from, to) {
- var toCefElm = to.getNode(forward === false);
- return $_dfzzw73vjnlpaxik.getParentBlock(Element$$1.fromDom(root), Element$$1.fromDom(from.getNode())).map(function (blockElm) {
- return $_czpaaj3zjnlpaxjj.isEmpty(blockElm) ? DeleteAction.remove(blockElm.dom()) : DeleteAction.moveToElement(toCefElm);
- }).orThunk(function () {
- return Option.some(DeleteAction.moveToElement(toCefElm));
- });
- };
- var findCefPosition = function (root, forward, from) {
- return $_32xcvk30jnlpaxbn.fromPosition(forward, root, from).bind(function (to) {
- if (isCompoundElement(to.getNode())) {
- return Option.none();
- } else if (isDeleteFromCefDifferentBlocks(root, forward, from, to)) {
- return Option.none();
- } else if (forward && $_fy28ei1rjnlpax2o.isContentEditableFalse(to.getNode())) {
- return deleteEmptyBlockOrMoveToCef(root, forward, from, to);
- } else if (forward === false && $_fy28ei1rjnlpax2o.isContentEditableFalse(to.getNode(true))) {
- return deleteEmptyBlockOrMoveToCef(root, forward, from, to);
- } else if (forward && isAfterContentEditableFalse(from)) {
- return Option.some(DeleteAction.moveToPosition(to));
- } else if (forward === false && isBeforeContentEditableFalse(from)) {
- return Option.some(DeleteAction.moveToPosition(to));
- } else {
- return Option.none();
+ var BoundaryCaret = { renderCaret: renderCaret };
+
+ 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;
+ }
}
- });
- };
- var getContentEditableBlockAction = function (forward, elm) {
- if (forward && $_fy28ei1rjnlpax2o.isContentEditableFalse(elm.nextSibling)) {
- return Option.some(DeleteAction.moveToElement(elm.nextSibling));
- } else if (forward === false && $_fy28ei1rjnlpax2o.isContentEditableFalse(elm.previousSibling)) {
- return Option.some(DeleteAction.moveToElement(elm.previousSibling));
- } else {
return Option.none();
- }
- };
- var skipMoveToActionFromInlineCefToContent = function (root, from, deleteAction) {
- return deleteAction.fold(function (elm) {
- return Option.some(DeleteAction.remove(elm));
- }, function (elm) {
- return Option.some(DeleteAction.moveToElement(elm));
- }, function (to) {
- if (isInSameBlock(from, to, root)) {
- return Option.none();
- } else {
- return Option.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);
- }, Option.some);
- } else {
- return findCefPosition(root, forward, from).bind(function (deleteAction) {
- return skipMoveToActionFromInlineCefToContent(root, from, deleteAction);
- });
- }
- };
- var read$2 = function (root, forward, rng) {
- var normalizedRange = normalizeRange(forward ? 1 : -1, root, rng);
- var from = CaretPosition$1.fromRangeStart(normalizedRange);
- if (forward === false && isAfterContentEditableFalse(from)) {
- return Option.some(DeleteAction.remove(from.getNode(true)));
- } else if (forward && isBeforeContentEditableFalse(from)) {
- return Option.some(DeleteAction.remove(from.getNode()));
- } else {
- return getContentEditableAction(root, forward, from);
- }
- };
-
- var needsReposition = function (pos, elm) {
- var container = pos.container();
- var offset = pos.offset();
- return CaretPosition$1.isTextPosition(pos) === false && container === elm.parentNode && offset > CaretPosition$1.before(elm).offset();
- };
- var reposition = function (elm, pos) {
- return needsReposition(pos, elm) ? CaretPosition$1(pos.container(), pos.offset() - 1) : pos;
- };
- var beforeOrStartOf = function (node) {
- return $_fy28ei1rjnlpax2o.isText(node) ? CaretPosition$1(node, 0) : CaretPosition$1.before(node);
- };
- var afterOrEndOf = function (node) {
- return $_fy28ei1rjnlpax2o.isText(node) ? CaretPosition$1(node, node.data.length) : CaretPosition$1.after(node);
- };
- var getPreviousSiblingCaretPosition = function (elm) {
- if (isCaretCandidate(elm.previousSibling)) {
- return Option.some(afterOrEndOf(elm.previousSibling));
- } else {
- return elm.previousSibling ? $_32xcvk30jnlpaxbn.lastPositionIn(elm.previousSibling) : Option.none();
- }
- };
- var getNextSiblingCaretPosition = function (elm) {
- if (isCaretCandidate(elm.nextSibling)) {
- return Option.some(beforeOrStartOf(elm.nextSibling));
- } else {
- return elm.nextSibling ? $_32xcvk30jnlpaxbn.firstPositionIn(elm.nextSibling) : Option.none();
- }
- };
- var findCaretPositionBackwardsFromElm = function (rootElement, elm) {
- var startPosition = CaretPosition$1.before(elm.previousSibling ? elm.previousSibling : elm.parentNode);
- return $_32xcvk30jnlpaxbn.prevPosition(rootElement, startPosition).fold(function () {
- return $_32xcvk30jnlpaxbn.nextPosition(rootElement, CaretPosition$1.after(elm));
- }, Option.some);
- };
- var findCaretPositionForwardsFromElm = function (rootElement, elm) {
- return $_32xcvk30jnlpaxbn.nextPosition(rootElement, CaretPosition$1.after(elm)).fold(function () {
- return $_32xcvk30jnlpaxbn.prevPosition(rootElement, CaretPosition$1.before(elm));
- }, Option.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 && editor.schema.getBlockElements().hasOwnProperty($_7u5fzs11jnlpawv6.name(elm));
- };
- var paddEmptyBlock = function (elm) {
- if ($_czpaaj3zjnlpaxjj.isEmpty(elm)) {
- var br = Element$$1.fromHtml('
');
- $_azq8zm1wjnlpax4n.empty(elm);
- $_ag89ax1yjnlpax4x.append(elm, br);
- return Option.some(CaretPosition$1.before(br.dom()));
- } else {
- return Option.none();
- }
- };
- var deleteNormalized = function (elm, afterDeletePosOpt) {
- return liftN([
- $_dr4ybh18jnlpawzt.prevSibling(elm),
- $_dr4ybh18jnlpawzt.nextSibling(elm),
- afterDeletePosOpt
- ], function (prev, next, afterDeletePos) {
- var offset;
- var prevNode = prev.dom();
- var nextNode = next.dom();
- if ($_fy28ei1rjnlpax2o.isText(prevNode) && $_fy28ei1rjnlpax2o.isText(nextNode)) {
- offset = prevNode.data.length;
- prevNode.appendData(nextNode.data);
- $_azq8zm1wjnlpax4n.remove(next);
- $_azq8zm1wjnlpax4n.remove(elm);
- if (afterDeletePos.container() === nextNode) {
- return CaretPosition$1(prevNode, offset);
- } else {
- return afterDeletePos;
- }
- } else {
- $_azq8zm1wjnlpax4n.remove(elm);
- return afterDeletePos;
- }
- }).orThunk(function () {
- $_azq8zm1wjnlpax4n.remove(elm);
- return afterDeletePosOpt;
- });
- };
- var deleteElement = function (editor, forward, elm) {
- var afterDeletePos = findCaretPosOutsideElmAfterDelete(forward, editor.getBody(), elm.dom());
- var parentBlock = $_cs5qmd2ajnlpax6v.ancestor(elm, curry(isBlock$2, editor), eqRawNode(editor.getBody()));
- var normalizedAfterDeletePos = deleteNormalized(elm, afterDeletePos);
- if (editor.dom.isEmpty(editor.getBody())) {
- editor.setContent('');
- editor.selection.setCursorLocation();
- } else {
- parentBlock.bind(paddEmptyBlock).fold(function () {
- setSelection(editor, forward, normalizedAfterDeletePos);
- }, function (paddPos) {
- setSelection(editor, forward, Option.some(paddPos));
- });
- }
- };
- var $_ezizyx47jnlpaxle = { deleteElement: deleteElement };
+ var LazyEvaluator = { evaluateUntil: evaluateUntil };
- var deleteElement$1 = function (editor, forward) {
- return function (element) {
- editor._selectionOverrides.hideFakeCaret();
- $_ezizyx47jnlpaxle.deleteElement(editor, forward, Element$$1.fromDom(element));
- return true;
- };
- };
- var moveToElement = function (editor, forward) {
- return function (element) {
- var pos = forward ? CaretPosition$1.before(element) : CaretPosition$1.after(element);
- editor.selection.setRng(pos.toRange());
- return true;
- };
- };
- var moveToPosition = function (editor) {
- return function (pos) {
- editor.selection.setRng(pos.toRange());
- return true;
- };
- };
- var backspaceDeleteCaret = function (editor, forward) {
- var result = read$2(editor.getBody(), forward, editor.selection.getRng()).map(function (deleteAction) {
- return deleteAction.fold(deleteElement$1(editor, forward), moveToElement(editor, forward), moveToPosition(editor));
- });
- return result.getOr(false);
- };
- var deleteOffscreenSelection = function (rootElement) {
- each($_cmitir27jnlpax6e.descendants(rootElement, '.mce-offscreen-selection'), $_azq8zm1wjnlpax4n.remove);
- };
- var backspaceDeleteRange = function (editor, forward) {
- var selectedElement = editor.selection.getNode();
- if ($_fy28ei1rjnlpax2o.isContentEditableFalse(selectedElement)) {
- deleteOffscreenSelection(Element$$1.fromDom(editor.getBody()));
- $_ezizyx47jnlpaxle.deleteElement(editor, forward, Element$$1.fromDom(editor.selection.getNode()));
- $_dfzzw73vjnlpaxik.paddEmptyBody(editor);
- return true;
- } else {
- return false;
- }
- };
- var getContentEditableRoot = function (root, node) {
- while (node && node !== root) {
- if ($_fy28ei1rjnlpax2o.isContentEditableTrue(node) || $_fy28ei1rjnlpax2o.isContentEditableFalse(node)) {
- return node;
- }
- node = node.parentNode;
- }
- return null;
- };
- var paddEmptyElement = function (editor) {
- var br;
- var ceRoot = getContentEditableRoot(editor.getBody(), editor.selection.getNode());
- if ($_fy28ei1rjnlpax2o.isContentEditableTrue(ceRoot) && editor.dom.isBlock(ceRoot) && editor.dom.isEmpty(ceRoot)) {
- br = editor.dom.create('br', { 'data-mce-bogus': '1' });
- editor.dom.setHTML(ceRoot, '');
- ceRoot.appendChild(br);
- editor.selection.setRng(CaretPosition$1.before(br).toRange());
- }
- return true;
- };
- var backspaceDelete$2 = function (editor, forward) {
- if (editor.selection.isCollapsed()) {
- return backspaceDeleteCaret(editor, forward);
- } else {
- return backspaceDeleteRange(editor, forward);
- }
- };
- var $_jcgv344jnlpaxks = {
- backspaceDelete: backspaceDelete$2,
- paddEmptyElement: paddEmptyElement
- };
-
- var isText$8 = $_fy28ei1rjnlpax2o.isText;
- var startsWithCaretContainer$1 = function (node) {
- return isText$8(node) && node.data[0] === $_90hfb72rjnlpaxae.ZWSP;
- };
- var endsWithCaretContainer$1 = function (node) {
- return isText$8(node) && node.data[node.data.length - 1] === $_90hfb72rjnlpaxae.ZWSP;
- };
- var createZwsp = function (node) {
- return node.ownerDocument.createTextNode($_90hfb72rjnlpaxae.ZWSP);
- };
- var insertBefore$1 = function (node) {
- if (isText$8(node.previousSibling)) {
- if (endsWithCaretContainer$1(node.previousSibling)) {
- return node.previousSibling;
- } else {
- node.previousSibling.appendData($_90hfb72rjnlpaxae.ZWSP);
- return node.previousSibling;
- }
- } else if (isText$8(node)) {
- if (startsWithCaretContainer$1(node)) {
- return node;
- } else {
- node.insertData(0, $_90hfb72rjnlpaxae.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, $_90hfb72rjnlpaxae.ZWSP);
- return node.nextSibling;
- }
- } else if (isText$8(node)) {
- if (endsWithCaretContainer$1(node)) {
- return node;
- } else {
- node.appendData($_90hfb72rjnlpaxae.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 ($_fy28ei1rjnlpax2o.isText(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) {
- $_ctzulb33jnlpaxck.remove(caret.get());
- var text = insertInlineBefore(element);
- caret.set(text);
- return Option.some(CaretPosition$1(text, text.length - 1));
- }, function (element) {
- return $_32xcvk30jnlpaxbn.firstPositionIn(element).map(function (pos) {
- if (!isPosCaretContainer(pos, caret)) {
- $_ctzulb33jnlpaxck.remove(caret.get());
- var text = insertInlinePos(pos, true);
- caret.set(text);
- return CaretPosition$1(text, 1);
- } else {
- return CaretPosition$1(caret.get(), 1);
- }
- });
- }, function (element) {
- return $_32xcvk30jnlpaxbn.lastPositionIn(element).map(function (pos) {
- if (!isPosCaretContainer(pos, caret)) {
- $_ctzulb33jnlpaxck.remove(caret.get());
- var text = insertInlinePos(pos, false);
- caret.set(text);
- return CaretPosition$1(text, text.length - 1);
- } else {
- return CaretPosition$1(caret.get(), caret.get().length - 1);
- }
- });
- }, function (element) {
- $_ctzulb33jnlpaxck.remove(caret.get());
- var text = insertInlineAfter(element);
- caret.set(text);
- return Option.some(CaretPosition$1(text, 1));
- });
- };
- var $_7h17zm49jnlpaxma = { renderCaret: renderCaret };
-
- 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 Option.none();
- };
- var $_3eehvl4cjnlpaxms = { evaluateUntil: evaluateUntil };
-
- 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$3 = function (isInlineTarget, rootNode, pos) {
- var nPos = $_955v2u3wjnlpaxit.normalizeForwards(pos);
- var scope = rescope(rootNode, nPos.container());
- return $_955v2u3wjnlpaxit.findRootInline(isInlineTarget, scope, nPos).fold(function () {
- return $_32xcvk30jnlpaxbn.nextPosition(scope, nPos).bind(curry($_955v2u3wjnlpaxit.findRootInline, isInlineTarget, scope)).map(function (inline) {
- return Location.before(inline);
- });
- }, Option.none);
- };
- var isNotInsideFormatCaretContainer = function (rootNode, elm) {
- return getParentCaretContainer(rootNode, elm) === null;
- };
- var findInsideRootInline = function (isInlineTarget, rootNode, pos) {
- return $_955v2u3wjnlpaxit.findRootInline(isInlineTarget, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode));
- };
- var start = function (isInlineTarget, rootNode, pos) {
- var nPos = $_955v2u3wjnlpaxit.normalizeBackwards(pos);
- return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {
- var prevPos = $_32xcvk30jnlpaxbn.prevPosition(inline, nPos);
- return prevPos.isNone() ? Option.some(Location.start(inline)) : Option.none();
- });
- };
- var end = function (isInlineTarget, rootNode, pos) {
- var nPos = $_955v2u3wjnlpaxit.normalizeForwards(pos);
- return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {
- var nextPos = $_32xcvk30jnlpaxbn.nextPosition(inline, nPos);
- return nextPos.isNone() ? Option.some(Location.end(inline)) : Option.none();
- });
- };
- var after$3 = function (isInlineTarget, rootNode, pos) {
- var nPos = $_955v2u3wjnlpaxit.normalizeBackwards(pos);
- var scope = rescope(rootNode, nPos.container());
- return $_955v2u3wjnlpaxit.findRootInline(isInlineTarget, scope, nPos).fold(function () {
- return $_32xcvk30jnlpaxbn.prevPosition(scope, nPos).bind(curry($_955v2u3wjnlpaxit.findRootInline, isInlineTarget, scope)).map(function (inline) {
- return Location.after(inline);
- });
- }, Option.none);
- };
- var isValidLocation = function (location) {
- return $_955v2u3wjnlpaxit.isRtl(getElement(location)) === false;
- };
- var readLocation = function (isInlineTarget, rootNode, pos) {
- var location = $_3eehvl4cjnlpaxms.evaluateUntil([
- before$3,
- start,
- end,
- after$3
- ], [
- isInlineTarget,
- rootNode,
- pos
+ var Location = Adt.generate([
+ { before: ['element'] },
+ { start: ['element'] },
+ { end: ['element'] },
+ { after: ['element'] }
]);
- 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$1 = function (location1, location2) {
- return getName(location1) === getName(location2) && getElement(location1) === getElement(location2);
- };
- var betweenInlines = function (forward, isInlineTarget, rootNode, from, to, location) {
- return liftN([
- $_955v2u3wjnlpaxit.findRootInline(isInlineTarget, rootNode, from),
- $_955v2u3wjnlpaxit.findRootInline(isInlineTarget, rootNode, to)
- ], function (fromInline, toInline) {
- if (fromInline !== toInline && $_955v2u3wjnlpaxit.hasSameParentBlock(rootNode, fromInline, toInline)) {
- return Location.after(forward ? fromInline : toInline);
+ var rescope = function (rootNode, node) {
+ var parentBlock = getParentBlock(node, rootNode);
+ return parentBlock ? parentBlock : rootNode;
+ };
+ var before$3 = function (isInlineTarget, rootNode, pos) {
+ var nPos = InlineUtils.normalizeForwards(pos);
+ var scope = rescope(rootNode, nPos.container());
+ return InlineUtils.findRootInline(isInlineTarget, scope, nPos).fold(function () {
+ return CaretFinder.nextPosition(scope, nPos).bind(curry(InlineUtils.findRootInline, isInlineTarget, scope)).map(function (inline) {
+ return Location.before(inline);
+ });
+ }, Option.none);
+ };
+ var isNotInsideFormatCaretContainer = function (rootNode, elm) {
+ return getParentCaretContainer(rootNode, elm) === null;
+ };
+ var findInsideRootInline = function (isInlineTarget, rootNode, pos) {
+ return InlineUtils.findRootInline(isInlineTarget, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode));
+ };
+ var start = function (isInlineTarget, rootNode, pos) {
+ var nPos = InlineUtils.normalizeBackwards(pos);
+ return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {
+ var prevPos = CaretFinder.prevPosition(inline, nPos);
+ return prevPos.isNone() ? Option.some(Location.start(inline)) : Option.none();
+ });
+ };
+ var end = function (isInlineTarget, rootNode, pos) {
+ var nPos = InlineUtils.normalizeForwards(pos);
+ return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {
+ var nextPos = CaretFinder.nextPosition(inline, nPos);
+ return nextPos.isNone() ? Option.some(Location.end(inline)) : Option.none();
+ });
+ };
+ var after$3 = function (isInlineTarget, rootNode, pos) {
+ var nPos = InlineUtils.normalizeBackwards(pos);
+ var scope = rescope(rootNode, nPos.container());
+ return InlineUtils.findRootInline(isInlineTarget, scope, nPos).fold(function () {
+ return CaretFinder.prevPosition(scope, nPos).bind(curry(InlineUtils.findRootInline, isInlineTarget, scope)).map(function (inline) {
+ return Location.after(inline);
+ });
+ }, Option.none);
+ };
+ var isValidLocation = function (location) {
+ return InlineUtils.isRtl(getElement(location)) === false;
+ };
+ var readLocation = function (isInlineTarget, rootNode, pos) {
+ var location = LazyEvaluator.evaluateUntil([
+ before$3,
+ 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$1 = function (location1, location2) {
+ return getName(location1) === getName(location2) && getElement(location1) === getElement(location2);
+ };
+ var betweenInlines = function (forward, isInlineTarget, rootNode, from, to, location) {
+ return liftN([
+ InlineUtils.findRootInline(isInlineTarget, rootNode, from),
+ InlineUtils.findRootInline(isInlineTarget, rootNode, to)
+ ], function (fromInline, toInline) {
+ if (fromInline !== toInline && InlineUtils.hasSameParentBlock(rootNode, fromInline, toInline)) {
+ return Location.after(forward ? fromInline : toInline);
+ } else {
+ return location;
+ }
+ }).getOr(location);
+ };
+ var skipNoMovement = function (fromLocation, toLocation) {
+ return fromLocation.fold(constant(true), function (fromLocation) {
+ return !isEq$1(fromLocation, toLocation);
+ });
+ };
+ var findLocationTraverse = function (forward, isInlineTarget, rootNode, fromLocation, pos) {
+ var from = InlineUtils.normalizePosition(forward, pos);
+ var to = CaretFinder.fromPosition(forward, rootNode, from).map(curry(InlineUtils.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(Option.some, Location.start), Option.none, compose(Option.some, Location.after), Option.none);
} else {
+ return location.fold(Option.none, compose(Option.some, Location.before), Option.none, compose(Option.some, Location.end));
+ }
+ };
+ var findLocation = function (forward, isInlineTarget, rootNode, pos) {
+ var from = InlineUtils.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 BoundaryLocation = {
+ readLocation: readLocation,
+ findLocation: findLocation,
+ prevLocation: curry(findLocation, false),
+ nextLocation: curry(findLocation, true),
+ getElement: getElement,
+ outside: outside,
+ inside: inside
+ };
+
+ var hasSelectionModifyApi = function (editor) {
+ return isFunction(editor.selection.getSel().modify);
+ };
+ var moveRel = function (forward, selection, pos) {
+ var delta = forward ? 1 : -1;
+ selection.setRng(CaretPosition$1(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$1.fromRangeEnd(rng) : CaretPosition$1.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 WordSelection = {
+ hasSelectionModifyApi: hasSelectionModifyApi,
+ moveByWord: moveByWord
+ };
+
+ 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 isFeatureEnabled = function (editor) {
+ return editor.settings.inline_boundaries !== false;
+ };
+ 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 BoundaryCaret.renderCaret(caret, location).map(function (pos) {
+ setCaretPosition(editor, pos);
return location;
- }
- }).getOr(location);
- };
- var skipNoMovement = function (fromLocation, toLocation) {
- return fromLocation.fold(constant(true), function (fromLocation) {
- return !isEq$1(fromLocation, toLocation);
- });
- };
- var findLocationTraverse = function (forward, isInlineTarget, rootNode, fromLocation, pos) {
- var from = $_955v2u3wjnlpaxit.normalizePosition(forward, pos);
- var to = $_32xcvk30jnlpaxbn.fromPosition(forward, rootNode, from).map(curry($_955v2u3wjnlpaxit.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(Option.some, Location.start), Option.none, compose(Option.some, Location.after), Option.none);
- } else {
- return location.fold(Option.none, compose(Option.some, Location.before), Option.none, compose(Option.some, Location.end));
- }
- };
- var findLocation = function (forward, isInlineTarget, rootNode, pos) {
- var from = $_955v2u3wjnlpaxit.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 $_1wxx4j4bjnlpaxmj = {
- readLocation: readLocation,
- findLocation: findLocation,
- prevLocation: curry(findLocation, false),
- nextLocation: curry(findLocation, true),
- getElement: getElement,
- outside: outside,
- inside: inside
- };
-
- var hasSelectionModifyApi = function (editor) {
- return isFunction(editor.selection.getSel().modify);
- };
- var moveRel = function (forward, selection, pos) {
- var delta = forward ? 1 : -1;
- selection.setRng(CaretPosition$1(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$1.fromRangeEnd(rng) : CaretPosition$1.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 $_8umecq4ejnlpaxn3 = {
- hasSelectionModifyApi: hasSelectionModifyApi,
- moveByWord: moveByWord
- };
-
- 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 isFeatureEnabled = function (editor) {
- return editor.settings.inline_boundaries !== false;
- };
- 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 $_7h17zm49jnlpaxma.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$1.fromRangeStart(editor.selection.getRng());
- var isInlineTarget = curry($_955v2u3wjnlpaxit.isInlineTarget, editor);
- var location = $_1wxx4j4bjnlpaxmj.findLocation(forward, isInlineTarget, rootNode, from);
- return location.bind(function (location) {
- return renderCaretLocation(editor, caret, location);
- });
- };
- var toggleInlines = function (isInlineTarget, dom, elms) {
- var selectedInlines = filter(dom.select('*[data-mce-selected="inline-boundary"]'), 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$1.fromRangeStart(editor.selection.getRng());
- if (CaretPosition$1.isTextPosition(pos) && $_955v2u3wjnlpaxit.isAtZwsp(pos) === false) {
- setCaretPosition(editor, $_ctzulb33jnlpaxck.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 findLocation$1 = function (editor, caret, forward) {
+ var rootNode = editor.getBody();
+ var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());
+ var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);
+ var location = BoundaryLocation.findLocation(forward, isInlineTarget, rootNode, from);
+ return location.bind(function (location) {
+ return renderCaretLocation(editor, caret, location);
+ });
+ };
+ var toggleInlines = function (isInlineTarget, dom, elms) {
+ var selectedInlines = filter(dom.select('*[data-mce-selected="inline-boundary"]'), 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$1.fromRangeStart(editor.selection.getRng());
- $_1wxx4j4bjnlpaxmj.readLocation(isInlineTarget, editor.getBody(), pos).bind(function (location) {
- return renderCaretLocation(editor, caret, location);
+ if (CaretPosition$1.isTextPosition(pos) && InlineUtils.isAtZwsp(pos) === false) {
+ setCaretPosition(editor, CaretContainerRemove.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$1.fromRangeStart(editor.selection.getRng());
+ BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), pos).bind(function (location) {
+ return renderCaretLocation(editor, caret, location);
+ });
+ });
+ }
+ };
+ var move = function (editor, caret, forward) {
+ return function () {
+ return isFeatureEnabled(editor) ? findLocation$1(editor, caret, forward).isSome() : false;
+ };
+ };
+ var moveWord = function (forward, editor, caret) {
+ return function () {
+ return isFeatureEnabled(editor) ? WordSelection.moveByWord(forward, editor) : false;
+ };
+ };
+ var setupSelectedState = function (editor) {
+ var caret = Cell(null);
+ var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);
+ editor.on('NodeChange', function (e) {
+ if (isFeatureEnabled(editor)) {
+ toggleInlines(isInlineTarget, editor.dom, e.parents);
+ safeRemoveCaretContainer(editor, caret);
+ renderInsideInlineCaret(isInlineTarget, editor, caret, e.parents);
+ }
+ });
+ return caret;
+ };
+ var moveNextWord = curry(moveWord, true);
+ var movePrevWord = curry(moveWord, false);
+ var BoundarySelection = {
+ move: move,
+ moveNextWord: moveNextWord,
+ movePrevWord: movePrevWord,
+ setupSelectedState: setupSelectedState,
+ setCaretPosition: setCaretPosition
+ };
+
+ var isFeatureEnabled$1 = function (editor) {
+ return editor.settings.inline_boundaries !== 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 liftN([
+ CaretFinder.firstPositionIn(elm),
+ CaretFinder.lastPositionIn(elm)
+ ], function (firstPos, lastPos) {
+ var normalizedFirstPos = InlineUtils.normalizePosition(true, firstPos);
+ var normalizedLastPos = InlineUtils.normalizePosition(false, lastPos);
+ return CaretFinder.nextPosition(elm, normalizedFirstPos).map(function (pos) {
+ return pos.isEqual(normalizedLastPos);
+ }).getOr(true);
+ }).getOr(true);
+ };
+ var setCaretLocation = function (editor, caret) {
+ return function (location$$1) {
+ return BoundaryCaret.renderCaret(caret, location$$1).map(function (pos) {
+ BoundarySelection.setCaretPosition(editor, pos);
+ return true;
+ }).getOr(false);
+ };
+ };
+ var deleteFromTo = function (editor, caret, from, to) {
+ var rootNode = editor.getBody();
+ var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);
+ editor.undoManager.ignore(function () {
+ editor.selection.setRng(rangeFromPositions(from, to));
+ editor.execCommand('Delete');
+ BoundaryLocation.readLocation(isInlineTarget, rootNode, CaretPosition$1.fromRangeStart(editor.selection.getRng())).map(BoundaryLocation.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 = curry(InlineUtils.isInlineTarget, editor);
+ var fromLocation = BoundaryLocation.readLocation(isInlineTarget, rootNode, from);
+ return fromLocation.bind(function (location$$1) {
+ if (forward) {
+ return location$$1.fold(constant(Option.some(BoundaryLocation.inside(location$$1))), Option.none, constant(Option.some(BoundaryLocation.outside(location$$1))), Option.none);
+ } else {
+ return location$$1.fold(Option.none, constant(Option.some(BoundaryLocation.outside(location$$1))), Option.none, constant(Option.some(BoundaryLocation.inside(location$$1))));
+ }
+ }).map(setCaretLocation(editor, caret)).getOrThunk(function () {
+ var toPosition = CaretFinder.navigate(forward, rootNode, from);
+ var toLocation = toPosition.bind(function (pos) {
+ return BoundaryLocation.readLocation(isInlineTarget, rootNode, pos);
+ });
+ if (fromLocation.isSome() && toLocation.isSome()) {
+ return InlineUtils.findRootInline(isInlineTarget, rootNode, from).map(function (elm) {
+ if (hasOnlyTwoOrLessPositionsLeft(elm)) {
+ DeleteElement.deleteElement(editor, forward, Element$$1.fromDom(elm));
+ return true;
+ } else {
+ return false;
+ }
+ }).getOr(false);
+ } else {
+ 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$3 = function (editor, caret, forward) {
+ if (editor.selection.isCollapsed() && isFeatureEnabled$1(editor)) {
+ var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());
+ return backspaceDeleteCollapsed(editor, caret, forward, from);
+ }
+ return false;
+ };
+ var InlineBoundaryDelete = { backspaceDelete: backspaceDelete$3 };
+
+ var tableCellRng = Immutable('start', 'end');
+ var tableSelection = Immutable('rng', 'table', 'cells');
+ var deleteAction = Adt.generate([
+ { removeTable: ['element'] },
+ { emptyCells: ['cells'] }
+ ]);
+ var isRootFromElement = function (root) {
+ return curry(eq, root);
+ };
+ var getClosestCell = function (container, isRoot) {
+ return closest$1(Element$$1.fromDom(container), 'td,th', isRoot);
+ };
+ var getClosestTable = function (cell, isRoot) {
+ return ancestor$1(cell, 'table', isRoot);
+ };
+ var isExpandedCellRng = function (cellRng) {
+ return eq(cellRng.start(), cellRng.end()) === false;
+ };
+ var getTableFromCellRng = function (cellRng, isRoot) {
+ return getClosestTable(cellRng.start(), isRoot).bind(function (startParentTable) {
+ return getClosestTable(cellRng.end(), isRoot).bind(function (endParentTable) {
+ return eq(startParentTable, endParentTable) ? Option.some(startParentTable) : Option.none();
});
});
- }
- };
- var move = function (editor, caret, forward) {
- return function () {
- return isFeatureEnabled(editor) ? findLocation$1(editor, caret, forward).isSome() : false;
};
- };
- var moveWord = function (forward, editor, caret) {
- return function () {
- return isFeatureEnabled(editor) ? $_8umecq4ejnlpaxn3.moveByWord(forward, editor) : false;
+ var getTableCells = function (table) {
+ return descendants$1(table, 'td,th');
};
- };
- var setupSelectedState = function (editor) {
- var caret = Cell(null);
- var isInlineTarget = curry($_955v2u3wjnlpaxit.isInlineTarget, editor);
- editor.on('NodeChange', function (e) {
- if (isFeatureEnabled(editor)) {
- toggleInlines(isInlineTarget, editor.dom, e.parents);
- safeRemoveCaretContainer(editor, caret);
- renderInsideInlineCaret(isInlineTarget, editor, caret, e.parents);
- }
- });
- return caret;
- };
- var moveNextWord = curry(moveWord, true);
- var movePrevWord = curry(moveWord, false);
- var $_1971nm4djnlpaxmv = {
- move: move,
- moveNextWord: moveNextWord,
- movePrevWord: movePrevWord,
- setupSelectedState: setupSelectedState,
- setCaretPosition: setCaretPosition
- };
-
- var isFeatureEnabled$1 = function (editor) {
- return editor.settings.inline_boundaries !== 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 liftN([
- $_32xcvk30jnlpaxbn.firstPositionIn(elm),
- $_32xcvk30jnlpaxbn.lastPositionIn(elm)
- ], function (firstPos, lastPos) {
- var normalizedFirstPos = $_955v2u3wjnlpaxit.normalizePosition(true, firstPos);
- var normalizedLastPos = $_955v2u3wjnlpaxit.normalizePosition(false, lastPos);
- return $_32xcvk30jnlpaxbn.nextPosition(elm, normalizedFirstPos).map(function (pos) {
- return pos.isEqual(normalizedLastPos);
- }).getOr(true);
- }).getOr(true);
- };
- var setCaretLocation = function (editor, caret) {
- return function (location$$1) {
- return $_7h17zm49jnlpaxma.renderCaret(caret, location$$1).map(function (pos) {
- $_1971nm4djnlpaxmv.setCaretPosition(editor, pos);
- return true;
- }).getOr(false);
- };
- };
- var deleteFromTo = function (editor, caret, from, to) {
- var rootNode = editor.getBody();
- var isInlineTarget = curry($_955v2u3wjnlpaxit.isInlineTarget, editor);
- editor.undoManager.ignore(function () {
- editor.selection.setRng(rangeFromPositions(from, to));
- editor.execCommand('Delete');
- $_1wxx4j4bjnlpaxmj.readLocation(isInlineTarget, rootNode, CaretPosition$1.fromRangeStart(editor.selection.getRng())).map($_1wxx4j4bjnlpaxmj.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 = curry($_955v2u3wjnlpaxit.isInlineTarget, editor);
- var fromLocation = $_1wxx4j4bjnlpaxmj.readLocation(isInlineTarget, rootNode, from);
- return fromLocation.bind(function (location$$1) {
- if (forward) {
- return location$$1.fold(constant(Option.some($_1wxx4j4bjnlpaxmj.inside(location$$1))), Option.none, constant(Option.some($_1wxx4j4bjnlpaxmj.outside(location$$1))), Option.none);
- } else {
- return location$$1.fold(Option.none, constant(Option.some($_1wxx4j4bjnlpaxmj.outside(location$$1))), Option.none, constant(Option.some($_1wxx4j4bjnlpaxmj.inside(location$$1))));
- }
- }).map(setCaretLocation(editor, caret)).getOrThunk(function () {
- var toPosition = $_32xcvk30jnlpaxbn.navigate(forward, rootNode, from);
- var toLocation = toPosition.bind(function (pos) {
- return $_1wxx4j4bjnlpaxmj.readLocation(isInlineTarget, rootNode, pos);
+ 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);
+ });
});
- if (fromLocation.isSome() && toLocation.isSome()) {
- return $_955v2u3wjnlpaxit.findRootInline(isInlineTarget, rootNode, from).map(function (elm) {
- if (hasOnlyTwoOrLessPositionsLeft(elm)) {
- $_ezizyx47jnlpaxle.deleteElement(editor, forward, Element$$1.fromDom(elm));
- return true;
- } else {
- return false;
- }
- }).getOr(false);
- } else {
- return toLocation.bind(function (_) {
- return toPosition.map(function (to) {
- if (forward) {
- deleteFromTo(editor, caret, from, to);
- } else {
- deleteFromTo(editor, caret, to, from);
- }
- return true;
+ };
+ var partialSelection = function (isRoot, rng) {
+ var startCell = getClosestCell(rng.startContainer, isRoot);
+ var endCell = getClosestCell(rng.endContainer, isRoot);
+ return rng.collapsed ? Option.none() : liftN([
+ 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);
+ });
+ });
});
- }).getOr(false);
- }
- });
- };
- var backspaceDelete$3 = function (editor, caret, forward) {
- if (editor.selection.isCollapsed() && isFeatureEnabled$1(editor)) {
- var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());
- return backspaceDeleteCollapsed(editor, caret, forward, from);
- }
- return false;
- };
- var $_5d7kmb48jnlpaxm1 = { backspaceDelete: backspaceDelete$3 };
-
- var tableCellRng = Immutable('start', 'end');
- var tableSelection = Immutable('rng', 'table', 'cells');
- var deleteAction = Adt.generate([
- { removeTable: ['element'] },
- { emptyCells: ['cells'] }
- ]);
- var isRootFromElement = function (root) {
- return curry($_5h7cor1ejnlpax0k.eq, root);
- };
- var getClosestCell$1 = function (container, isRoot) {
- return $_2kbu29jnlpax6t.closest(Element$$1.fromDom(container), 'td,th', isRoot);
- };
- var getClosestTable = function (cell, isRoot) {
- return $_2kbu29jnlpax6t.ancestor(cell, 'table', isRoot);
- };
- var isExpandedCellRng = function (cellRng) {
- return $_5h7cor1ejnlpax0k.eq(cellRng.start(), cellRng.end()) === false;
- };
- var getTableFromCellRng = function (cellRng, isRoot) {
- return getClosestTable(cellRng.start(), isRoot).bind(function (startParentTable) {
- return getClosestTable(cellRng.end(), isRoot).bind(function (endParentTable) {
- return $_5h7cor1ejnlpax0k.eq(startParentTable, endParentTable) ? Option.some(startParentTable) : Option.none();
- });
- });
- };
- var getTableCells = function (table) {
- return $_cmitir27jnlpax6e.descendants(table, 'td,th');
- };
- 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$1(rng.startContainer, isRoot);
- var endCell = getClosestCell$1(rng.endContainer, isRoot);
- return rng.collapsed ? Option.none() : liftN([
- 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) {
+ }, function (startCell) {
+ return getClosestTable(startCell, isRoot).bind(function (table) {
+ return last(getTableCells(table)).map(function (endCell) {
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) ? Option.none() : getCellRangeFromStartTable(cellRng, isRoot);
+ });
+ };
+ var isWithinSameTable = function (isRoot, cellRng) {
+ return getTableFromCellRng(cellRng, isRoot).isSome();
+ };
+ var getCellRng = function (rng, isRoot) {
+ var startCell = getClosestCell(rng.startContainer, isRoot);
+ var endCell = getClosestCell(rng.endContainer, isRoot);
+ return liftN([
+ startCell,
+ endCell
+ ], tableCellRng).filter(isExpandedCellRng).filter(function (cellRng) {
+ return isWithinSameTable(isRoot, cellRng);
+ }).orThunk(function () {
+ return partialSelection(isRoot, rng);
+ });
+ };
+ var getTableSelectionFromCellRng = function (cellRng, isRoot) {
+ return getTableFromCellRng(cellRng, isRoot).map(function (table) {
+ return tableSelection(cellRng, table, getTableCells(table));
+ });
+ };
+ var getTableSelectionFromRng = function (root, rng) {
+ var isRoot = isRootFromElement(root);
+ return getCellRng(rng, isRoot).bind(function (cellRng) {
+ return getTableSelectionFromCellRng(cellRng, isRoot);
+ });
+ };
+ var getCellIndex = function (cells, cell) {
+ return findIndex(cells, function (x) {
+ return eq(x, cell);
+ });
+ };
+ var getSelectedCells = function (tableSelection) {
+ return liftN([
+ getCellIndex(tableSelection.cells(), tableSelection.rng().start()),
+ getCellIndex(tableSelection.cells(), tableSelection.rng().end())
+ ], function (startIndex, endIndex) {
+ return tableSelection.cells().slice(startIndex, endIndex + 1);
+ });
+ };
+ 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 getActionFromCells = function (cells) {
+ return deleteAction.emptyCells(cells);
+ };
+ var getActionFromRange = function (root, rng) {
+ return getTableSelectionFromRng(root, rng).bind(getAction);
+ };
+ var TableDeleteAction = {
+ getActionFromRange: getActionFromRange,
+ getActionFromCells: getActionFromCells
+ };
+
+ 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$$1) {
+ var node = getSelectedNode(range$$1);
+ return node ? [Element$$1.fromDom(node)] : [];
+ });
+ };
+ var hasMultipleRanges = function (selection) {
+ return getRanges(selection).length > 1;
+ };
+ var MultiRange = {
+ getRanges: getRanges,
+ getSelectedNodes: getSelectedNodes,
+ hasMultipleRanges: hasMultipleRanges
+ };
+
+ var getCellsFromRanges = function (ranges) {
+ return filter(MultiRange.getSelectedNodes(ranges), isTableCell);
+ };
+ var getCellsFromElement = function (elm) {
+ var selectedCells = descendants$1(elm, 'td[data-mce-selected],th[data-mce-selected]');
+ return selectedCells;
+ };
+ var getCellsFromElementOrRanges = function (ranges, element) {
+ var selectedCells = getCellsFromElement(element);
+ var rangeCells = getCellsFromRanges(ranges);
+ return selectedCells.length > 0 ? selectedCells : rangeCells;
+ };
+ var getCellsFromEditor = function (editor) {
+ return getCellsFromElementOrRanges(MultiRange.getRanges(editor.selection.getSel()), Element$$1.fromDom(editor.getBody()));
+ };
+ var TableCellSelection = {
+ getCellsFromRanges: getCellsFromRanges,
+ getCellsFromElement: getCellsFromElement,
+ getCellsFromElementOrRanges: getCellsFromElementOrRanges,
+ getCellsFromEditor: getCellsFromEditor
+ };
+
+ var emptyCells = function (editor, cells) {
+ each(cells, PaddingBr.fillWithPaddingBr);
+ editor.selection.setCursorLocation(cells[0].dom(), 0);
+ return true;
+ };
+ var deleteTableElement = function (editor, table) {
+ DeleteElement.deleteElement(editor, false, table);
+ return true;
+ };
+ var deleteCellRange = function (editor, rootElm, rng) {
+ return TableDeleteAction.getActionFromRange(rootElm, rng).map(function (action) {
+ return action.fold(curry(deleteTableElement, editor), curry(emptyCells, 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$1 = function (editor, startElm) {
+ var rootNode = Element$$1.fromDom(editor.getBody());
+ var rng = editor.selection.getRng();
+ var selectedCells = TableCellSelection.getCellsFromEditor(editor);
+ return selectedCells.length !== 0 ? emptyCells(editor, selectedCells) : deleteTableRange(editor, rootNode, rng, startElm);
+ };
+ var getParentCell = function (rootElm, elm) {
+ return find(Parents.parentsAndSelf(elm, rootElm), isTableCell);
+ };
+ var getParentCaption = function (rootElm, elm) {
+ return find(Parents.parentsAndSelf(elm, rootElm), function (elm) {
+ return name(elm) === 'caption';
+ });
+ };
+ var deleteBetweenCells = function (editor, rootElm, forward, fromCell, from) {
+ return CaretFinder.navigate(forward, editor.getBody(), from).bind(function (to) {
+ return getParentCell(rootElm, Element$$1.fromDom(to.getNode())).map(function (toCell) {
+ return eq(toCell, fromCell) === false;
});
});
- }, function (cellRng) {
- return isWithinSameTable(isRoot, cellRng) ? Option.none() : getCellRangeFromStartTable(cellRng, isRoot);
- });
- };
- var isWithinSameTable = function (isRoot, cellRng) {
- return getTableFromCellRng(cellRng, isRoot).isSome();
- };
- var getCellRng = function (rng, isRoot) {
- var startCell = getClosestCell$1(rng.startContainer, isRoot);
- var endCell = getClosestCell$1(rng.endContainer, isRoot);
- return liftN([
- startCell,
- endCell
- ], tableCellRng).filter(isExpandedCellRng).filter(function (cellRng) {
- return isWithinSameTable(isRoot, cellRng);
- }).orThunk(function () {
- return partialSelection(isRoot, rng);
- });
- };
- var getTableSelectionFromCellRng = function (cellRng, isRoot) {
- return getTableFromCellRng(cellRng, isRoot).map(function (table) {
- return tableSelection(cellRng, table, getTableCells(table));
- });
- };
- var getTableSelectionFromRng = function (root, rng) {
- var isRoot = isRootFromElement(root);
- return getCellRng(rng, isRoot).bind(function (cellRng) {
- return getTableSelectionFromCellRng(cellRng, isRoot);
- });
- };
- var getCellIndex = function (cells, cell) {
- return findIndex(cells, function (x) {
- return $_5h7cor1ejnlpax0k.eq(x, cell);
- });
- };
- var getSelectedCells = function (tableSelection) {
- return liftN([
- getCellIndex(tableSelection.cells(), tableSelection.rng().start()),
- getCellIndex(tableSelection.cells(), tableSelection.rng().end())
- ], function (startIndex, endIndex) {
- return tableSelection.cells().slice(startIndex, endIndex + 1);
- });
- };
- 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 getActionFromCells = function (cells) {
- return deleteAction.emptyCells(cells);
- };
- var getActionFromRange = function (root, rng) {
- return getTableSelectionFromRng(root, rng).bind(getAction);
- };
- var $_baassw4gjnlpaxnk = {
- getActionFromRange: getActionFromRange,
- getActionFromCells: getActionFromCells
- };
+ };
+ var emptyElement = function (editor, elm) {
+ PaddingBr.fillWithPaddingBr(elm);
+ editor.selection.setCursorLocation(elm.dom(), 0);
+ return Option.some(true);
+ };
+ var isDeleteOfLastCharPos = function (fromCaption, forward, from, to) {
+ return CaretFinder.firstPositionIn(fromCaption.dom()).bind(function (first) {
+ return CaretFinder.lastPositionIn(fromCaption.dom()).map(function (last$$1) {
+ return forward ? from.isEqual(first) && to.isEqual(last$$1) : from.isEqual(last$$1) && to.isEqual(first);
+ });
+ }).getOr(true);
+ };
+ var emptyCaretCaption = function (editor, elm) {
+ return emptyElement(editor, elm);
+ };
+ var validateCaretCaption = function (rootElm, fromCaption, to) {
+ return getParentCaption(rootElm, Element$$1.fromDom(to.getNode())).map(function (toCaption) {
+ return eq(toCaption, fromCaption) === false;
+ });
+ };
+ var deleteCaretInsideCaption = function (editor, rootElm, forward, fromCaption, from) {
+ return CaretFinder.navigate(forward, editor.getBody(), from).bind(function (to) {
+ return isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to);
+ }).or(Option.some(true));
+ };
+ var deleteCaretCells = function (editor, forward, rootElm, startElm) {
+ var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());
+ return getParentCell(rootElm, startElm).bind(function (fromCell) {
+ return Empty.isEmpty(fromCell) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from);
+ });
+ };
+ var deleteCaretCaption = function (editor, forward, rootElm, fromCaption) {
+ var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());
+ return Empty.isEmpty(fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from);
+ };
+ var deleteCaret = function (editor, forward, startElm) {
+ var rootElm = Element$$1.fromDom(editor.getBody());
+ return getParentCaption(rootElm, startElm).fold(function () {
+ return deleteCaretCells(editor, forward, rootElm, startElm);
+ }, function (fromCaption) {
+ return deleteCaretCaption(editor, forward, rootElm, fromCaption);
+ }).getOr(false);
+ };
+ var backspaceDelete$4 = function (editor, forward) {
+ var startElm = Element$$1.fromDom(editor.selection.getStart(true));
+ var cells = TableCellSelection.getCellsFromEditor(editor);
+ return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret(editor, forward, startElm) : deleteRange$1(editor, startElm);
+ };
+ var TableDelete = { backspaceDelete: backspaceDelete$4 };
- var getRanges = function (selection) {
- var ranges = [];
- if (selection) {
- for (var i = 0; i < selection.rangeCount; i++) {
- ranges.push(selection.getRangeAt(i));
+ var nativeCommand = function (editor, command) {
+ editor.getDoc().execCommand(command, false, null);
+ };
+ var deleteCommand = function (editor) {
+ if (CefDelete.backspaceDelete(editor, false)) {
+ return;
+ } else if (InlineBoundaryDelete.backspaceDelete(editor, false)) {
+ return;
+ } else if (BlockBoundaryDelete.backspaceDelete(editor, false)) {
+ return;
+ } else if (TableDelete.backspaceDelete(editor)) {
+ return;
+ } else if (BlockRangeDelete.backspaceDelete(editor, false)) {
+ return;
+ } else {
+ nativeCommand(editor, 'Delete');
+ DeleteUtils.paddEmptyBody(editor);
}
- }
- return ranges;
- };
- var getSelectedNodes = function (ranges) {
- return bind(ranges, function (range$$1) {
- var node = getSelectedNode(range$$1);
- return node ? [Element$$1.fromDom(node)] : [];
- });
- };
- var hasMultipleRanges = function (selection) {
- return getRanges(selection).length > 1;
- };
- var $_533sn84ijnlpaxoe = {
- getRanges: getRanges,
- getSelectedNodes: getSelectedNodes,
- hasMultipleRanges: hasMultipleRanges
- };
+ };
+ var forwardDeleteCommand = function (editor) {
+ if (CefDelete.backspaceDelete(editor, true)) {
+ return;
+ } else if (InlineBoundaryDelete.backspaceDelete(editor, true)) {
+ return;
+ } else if (BlockBoundaryDelete.backspaceDelete(editor, true)) {
+ return;
+ } else if (TableDelete.backspaceDelete(editor)) {
+ return;
+ } else if (BlockRangeDelete.backspaceDelete(editor, true)) {
+ return;
+ } else {
+ nativeCommand(editor, 'ForwardDelete');
+ }
+ };
+ var DeleteCommands = {
+ deleteCommand: deleteCommand,
+ forwardDeleteCommand: forwardDeleteCommand
+ };
- var getCellsFromRanges = function (ranges) {
- return filter($_533sn84ijnlpaxoe.getSelectedNodes(ranges), isTableCell);
- };
- var getCellsFromElement = function (elm) {
- var selectedCells = $_cmitir27jnlpax6e.descendants(elm, 'td[data-mce-selected],th[data-mce-selected]');
- return selectedCells;
- };
- var getCellsFromElementOrRanges = function (ranges, element) {
- var selectedCells = getCellsFromElement(element);
- var rangeCells = getCellsFromRanges(ranges);
- return selectedCells.length > 0 ? selectedCells : rangeCells;
- };
- var getCellsFromEditor = function (editor) {
- return getCellsFromElementOrRanges($_533sn84ijnlpaxoe.getRanges(editor.selection.getSel()), Element$$1.fromDom(editor.getBody()));
- };
- var $_1yq8wz4hjnlpaxo7 = {
- getCellsFromRanges: getCellsFromRanges,
- getCellsFromElement: getCellsFromElement,
- getCellsFromElementOrRanges: getCellsFromElementOrRanges,
- getCellsFromEditor: getCellsFromEditor
- };
+ 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');
+ return block === false ? '' : 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', ''));
+ };
+ var getFontSizeClasses = function (editor) {
+ return Tools.explode(editor.getParam('font_size_classes', ''));
+ };
+ var getImagesDataImgFilter = function (editor) {
+ return editor.getParam('images_dataimg_filter', constant(true), '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 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 Settings = {
+ getIframeAttrs: getIframeAttrs,
+ getDocType: getDocType,
+ getDocumentBaseUrl: getDocumentBaseUrl,
+ getBodyId: getBodyId,
+ getBodyClass: getBodyClass,
+ getContentSecurityPolicy: getContentSecurityPolicy,
+ shouldPutBrInPre: shouldPutBrInPre,
+ getForcedRootBlock: getForcedRootBlock,
+ getForcedRootBlockAttrs: getForcedRootBlockAttrs,
+ getBrNewLineSelector: getBrNewLineSelector,
+ getNoNewLineSelector: getNoNewLineSelector,
+ shouldKeepStyles: shouldKeepStyles,
+ shouldEndContainerOnEmptyBlock: shouldEndContainerOnEmptyBlock,
+ getFontStyleValues: getFontStyleValues,
+ getFontSizeClasses: getFontSizeClasses,
+ getImagesDataImgFilter: getImagesDataImgFilter,
+ isAutomaticUploadsEnabled: isAutomaticUploadsEnabled,
+ shouldReuseFileName: shouldReuseFileName,
+ shouldReplaceBlobUris: shouldReplaceBlobUris,
+ getImageUploadUrl: getImageUploadUrl,
+ getImageUploadBasePath: getImageUploadBasePath,
+ getImagesUploadCredentials: getImagesUploadCredentials,
+ getImagesUploadHandler: getImagesUploadHandler,
+ shouldUseContentCssCors: shouldUseContentCssCors
+ };
- var emptyCells = function (editor, cells) {
- each(cells, $_azhpc63njnlpaxgw.fillWithPaddingBr);
- editor.selection.setCursorLocation(cells[0].dom(), 0);
- return true;
- };
- var deleteTableElement = function (editor, table) {
- $_ezizyx47jnlpaxle.deleteElement(editor, false, table);
- return true;
- };
- var deleteCellRange = function (editor, rootElm, rng) {
- return $_baassw4gjnlpaxnk.getActionFromRange(rootElm, rng).map(function (action) {
- return action.fold(curry(deleteTableElement, editor), curry(emptyCells, 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$1 = function (editor, startElm) {
- var rootNode = Element$$1.fromDom(editor.getBody());
- var rng = editor.selection.getRng();
- var selectedCells = $_1yq8wz4hjnlpaxo7.getCellsFromEditor(editor);
- return selectedCells.length !== 0 ? emptyCells(editor, selectedCells) : deleteTableRange(editor, rootNode, rng, startElm);
- };
- var getParentCell = function (rootElm, elm) {
- return find($_4b88sj42jnlpaxkd.parentsAndSelf(elm, rootElm), isTableCell);
- };
- var getParentCaption = function (rootElm, elm) {
- return find($_4b88sj42jnlpaxkd.parentsAndSelf(elm, rootElm), function (elm) {
- return $_7u5fzs11jnlpawv6.name(elm) === 'caption';
- });
- };
- var deleteBetweenCells = function (editor, rootElm, forward, fromCell, from) {
- return $_32xcvk30jnlpaxbn.navigate(forward, editor.getBody(), from).bind(function (to) {
- return getParentCell(rootElm, Element$$1.fromDom(to.getNode())).map(function (toCell) {
- return $_5h7cor1ejnlpax0k.eq(toCell, fromCell) === false;
+ var getSpecifiedFontProp = function (propName, rootElm, elm) {
+ var getProperty = function (elm) {
+ return getRaw(elm, propName);
+ };
+ var isRoot = function (elm) {
+ return eq(Element$$1.fromDom(rootElm), elm);
+ };
+ return closest(Element$$1.fromDom(elm), function (elm) {
+ return getProperty(elm).isSome();
+ }, isRoot).bind(getProperty);
+ };
+ var round$1 = function (number, precision) {
+ var factor = Math.pow(10, precision);
+ return Math.round(number * factor) / factor;
+ };
+ var toPt = function (fontSize, precision) {
+ if (/[0-9.]+px$/.test(fontSize)) {
+ return round$1(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';
+ }
+ return fontSize;
+ };
+ var normalizeFontFamily = function (fontFamily) {
+ return fontFamily.replace(/[\'\"\\]/g, '').replace(/,\s+/g, ',');
+ };
+ var getComputedFontProp = function (propName, elm) {
+ return Option.from(DOMUtils$1.DOM.getStyle(elm, propName, true));
+ };
+ var getFontProp = function (propName) {
+ return function (rootElm, elm) {
+ return Option.from(elm).map(Element$$1.fromDom).filter(isElement).bind(function (element) {
+ return getSpecifiedFontProp(propName, rootElm, element.dom()).or(getComputedFontProp(propName, element.dom()));
+ }).getOr('');
+ };
+ };
+ var FontInfo = {
+ getFontSize: getFontProp('font-size'),
+ getFontFamily: compose(normalizeFontFamily, getFontProp('font-family')),
+ toPt: toPt
+ };
+
+ var findFirstCaretElement = function (editor) {
+ return CaretFinder.firstPositionIn(editor.getBody()).map(function (caret) {
+ var container = caret.container();
+ return NodeType.isText(container) ? container.parentNode : container;
});
- });
- };
- var emptyElement = function (editor, elm) {
- $_azhpc63njnlpaxgw.fillWithPaddingBr(elm);
- editor.selection.setCursorLocation(elm.dom(), 0);
- return Option.some(true);
- };
- var isDeleteOfLastCharPos = function (fromCaption, forward, from, to) {
- return $_32xcvk30jnlpaxbn.firstPositionIn(fromCaption.dom()).bind(function (first) {
- return $_32xcvk30jnlpaxbn.lastPositionIn(fromCaption.dom()).map(function (last$$1) {
- return forward ? from.isEqual(first) && to.isEqual(last$$1) : from.isEqual(last$$1) && to.isEqual(first);
+ };
+ var isRangeAtStartOfNode = function (rng, root) {
+ return rng.startContainer === root && rng.startOffset === 0;
+ };
+ var getCaretElement = function (editor) {
+ return Option.from(editor.selection.getRng()).bind(function (rng) {
+ var root = editor.getBody();
+ return isRangeAtStartOfNode(rng, root) ? Option.none() : Option.from(editor.selection.getStart(true));
});
- }).getOr(true);
- };
- var emptyCaretCaption = function (editor, elm) {
- return emptyElement(editor, elm);
- };
- var validateCaretCaption = function (rootElm, fromCaption, to) {
- return getParentCaption(rootElm, Element$$1.fromDom(to.getNode())).map(function (toCaption) {
- return $_5h7cor1ejnlpax0k.eq(toCaption, fromCaption) === false;
- });
- };
- var deleteCaretInsideCaption = function (editor, rootElm, forward, fromCaption, from) {
- return $_32xcvk30jnlpaxbn.navigate(forward, editor.getBody(), from).bind(function (to) {
- return isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to);
- }).or(Option.some(true));
- };
- var deleteCaretCells = function (editor, forward, rootElm, startElm) {
- var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());
- return getParentCell(rootElm, startElm).bind(function (fromCell) {
- return $_czpaaj3zjnlpaxjj.isEmpty(fromCell) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from);
- });
- };
- var deleteCaretCaption = function (editor, forward, rootElm, fromCaption) {
- var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());
- return $_czpaaj3zjnlpaxjj.isEmpty(fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from);
- };
- var deleteCaret = function (editor, forward, startElm) {
- var rootElm = Element$$1.fromDom(editor.getBody());
- return getParentCaption(rootElm, startElm).fold(function () {
- return deleteCaretCells(editor, forward, rootElm, startElm);
- }, function (fromCaption) {
- return deleteCaretCaption(editor, forward, rootElm, fromCaption);
- }).getOr(false);
- };
- var backspaceDelete$4 = function (editor, forward) {
- var startElm = Element$$1.fromDom(editor.selection.getStart(true));
- var cells = $_1yq8wz4hjnlpaxo7.getCellsFromEditor(editor);
- return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret(editor, forward, startElm) : deleteRange$1(editor, startElm);
- };
- var $_3apnm14fjnlpaxn8 = { backspaceDelete: backspaceDelete$4 };
-
- var nativeCommand = function (editor, command) {
- editor.getDoc().execCommand(command, false, null);
- };
- var deleteCommand = function (editor) {
- if ($_jcgv344jnlpaxks.backspaceDelete(editor, false)) {
- return;
- } else if ($_5d7kmb48jnlpaxm1.backspaceDelete(editor, false)) {
- return;
- } else if ($_3n8adg3tjnlpaxi5.backspaceDelete(editor, false)) {
- return;
- } else if ($_3apnm14fjnlpaxn8.backspaceDelete(editor)) {
- return;
- } else if ($_f5evyu43jnlpaxki.backspaceDelete(editor, false)) {
- return;
- } else {
- nativeCommand(editor, 'Delete');
- $_dfzzw73vjnlpaxik.paddEmptyBody(editor);
- }
- };
- var forwardDeleteCommand = function (editor) {
- if ($_jcgv344jnlpaxks.backspaceDelete(editor, true)) {
- return;
- } else if ($_5d7kmb48jnlpaxm1.backspaceDelete(editor, true)) {
- return;
- } else if ($_3n8adg3tjnlpaxi5.backspaceDelete(editor, true)) {
- return;
- } else if ($_3apnm14fjnlpaxn8.backspaceDelete(editor)) {
- return;
- } else if ($_f5evyu43jnlpaxki.backspaceDelete(editor, true)) {
- return;
- } else {
- nativeCommand(editor, 'ForwardDelete');
- }
- };
- var $_7ms0593sjnlpaxht = {
- deleteCommand: deleteCommand,
- forwardDeleteCommand: forwardDeleteCommand
- };
-
- var getSpecifiedFontProp = function (propName, rootElm, elm) {
- var getProperty = function (elm) {
- return $_asiuhf13jnlpawvc.getRaw(elm, propName);
};
- var isRoot = function (elm) {
- return $_5h7cor1ejnlpax0k.eq(Element$$1.fromDom(rootElm), elm);
- };
- return $_cs5qmd2ajnlpax6v.closest(Element$$1.fromDom(elm), function (elm) {
- return getProperty(elm).isSome();
- }, isRoot).bind(getProperty);
- };
- var round$1 = function (number, precision) {
- var factor = Math.pow(10, precision);
- return Math.round(number * factor) / factor;
- };
- var toPt = function (fontSize, precision) {
- if (/[0-9.]+px$/.test(fontSize)) {
- return round$1(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';
- }
- return fontSize;
- };
- var normalizeFontFamily = function (fontFamily) {
- return fontFamily.replace(/[\'\"\\]/g, '').replace(/,\s+/g, ',');
- };
- var getComputedFontProp = function (propName, elm) {
- return Option.from(DOMUtils$1.DOM.getStyle(elm, propName, true));
- };
- var getFontProp = function (propName) {
- return function (rootElm, elm) {
- return Option.from(elm).map(Element$$1.fromDom).filter($_7u5fzs11jnlpawv6.isElement).bind(function (element) {
- return getSpecifiedFontProp(propName, rootElm, element.dom()).or(getComputedFontProp(propName, element.dom()));
- }).getOr('');
- };
- };
- var $_ar9b8r4kjnlpaxov = {
- getFontSize: getFontProp('font-size'),
- getFontFamily: compose(normalizeFontFamily, getFontProp('font-family')),
- toPt: toPt
- };
-
- var findFirstCaretElement = function (editor) {
- return $_32xcvk30jnlpaxbn.firstPositionIn(editor.getBody()).map(function (caret) {
- var container = caret.container();
- return $_fy28ei1rjnlpax2o.isText(container) ? container.parentNode : container;
- });
- };
- var isRangeAtStartOfNode = function (rng, root) {
- return rng.startContainer === root && rng.startOffset === 0;
- };
- var getCaretElement = function (editor) {
- return Option.from(editor.selection.getRng()).bind(function (rng) {
- var root = editor.getBody();
- return isRangeAtStartOfNode(rng, root) ? Option.none() : Option.from(editor.selection.getStart(true));
- });
- };
- var fromFontSizeNumber = function (editor, value) {
- if (/^[0-9\.]+$/.test(value)) {
- var fontSizeNumber = parseInt(value, 10);
- if (fontSizeNumber >= 1 && fontSizeNumber <= 7) {
- var fontSizes = $_c6e09z3ajnlpaxek.getFontStyleValues(editor);
- var fontClasses = $_c6e09z3ajnlpaxek.getFontSizeClasses(editor);
- if (fontClasses) {
- return fontClasses[fontSizeNumber - 1] || value;
+ var fromFontSizeNumber = function (editor, value) {
+ if (/^[0-9\.]+$/.test(value)) {
+ var fontSizeNumber = parseInt(value, 10);
+ if (fontSizeNumber >= 1 && fontSizeNumber <= 7) {
+ var fontSizes = Settings.getFontStyleValues(editor);
+ var fontClasses = Settings.getFontSizeClasses(editor);
+ if (fontClasses) {
+ return fontClasses[fontSizeNumber - 1] || value;
+ } else {
+ return fontSizes[fontSizeNumber - 1] || value;
+ }
} else {
- return fontSizes[fontSizeNumber - 1] || value;
+ return value;
}
} else {
return value;
}
- } else {
- return value;
- }
- };
- var fontNameAction = function (editor, value) {
- editor.formatter.toggle('fontname', { value: fromFontSizeNumber(editor, value) });
- editor.nodeChanged();
- };
- var fontNameQuery = function (editor) {
- return getCaretElement(editor).fold(function () {
- return findFirstCaretElement(editor).map(function (caretElement) {
- return $_ar9b8r4kjnlpaxov.getFontFamily(editor.getBody(), caretElement);
- }).getOr('');
- }, function (caretElement) {
- return $_ar9b8r4kjnlpaxov.getFontFamily(editor.getBody(), caretElement);
- });
- };
- var fontSizeAction = function (editor, value) {
- editor.formatter.toggle('fontsize', { value: fromFontSizeNumber(editor, value) });
- editor.nodeChanged();
- };
- var fontSizeQuery = function (editor) {
- return getCaretElement(editor).fold(function () {
- return findFirstCaretElement(editor).map(function (caretElement) {
- return $_ar9b8r4kjnlpaxov.getFontSize(editor.getBody(), caretElement);
- }).getOr('');
- }, function (caretElement) {
- return $_ar9b8r4kjnlpaxov.getFontSize(editor.getBody(), caretElement);
- });
- };
+ };
+ var fontNameAction = function (editor, value) {
+ editor.formatter.toggle('fontname', { value: fromFontSizeNumber(editor, value) });
+ editor.nodeChanged();
+ };
+ var fontNameQuery = function (editor) {
+ return getCaretElement(editor).fold(function () {
+ return findFirstCaretElement(editor).map(function (caretElement) {
+ return FontInfo.getFontFamily(editor.getBody(), caretElement);
+ }).getOr('');
+ }, function (caretElement) {
+ return FontInfo.getFontFamily(editor.getBody(), caretElement);
+ });
+ };
+ var fontSizeAction = function (editor, value) {
+ editor.formatter.toggle('fontsize', { value: fromFontSizeNumber(editor, value) });
+ editor.nodeChanged();
+ };
+ var fontSizeQuery = function (editor) {
+ return getCaretElement(editor).fold(function () {
+ return findFirstCaretElement(editor).map(function (caretElement) {
+ return FontInfo.getFontSize(editor.getBody(), caretElement);
+ }).getOr('');
+ }, function (caretElement) {
+ return FontInfo.getFontSize(editor.getBody(), caretElement);
+ });
+ };
- var isEq$2 = function (rng1, rng2) {
- return rng1 && rng2 && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset);
- };
- var $_3s8g9y4njnlpaxqj = { isEq: isEq$2 };
+ var isEq$2 = function (rng1, rng2) {
+ return rng1 && rng2 && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset);
+ };
+ var RangeCompare = { isEq: isEq$2 };
- var findParent = 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(node, rootNode, predicate) !== null;
- };
- var hasParentWithName = function (node, rootNode, name) {
- return hasParent(node, rootNode, function (node) {
- return node.nodeName === name;
- });
- };
- var isTable$2 = 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 TreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || dom.getRoot());
- while (node = walker[left ? 'prev' : 'next']()) {
- if ($_fy28ei1rjnlpax2o.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 ($_fy28ei1rjnlpax2o.isContentEditableFalse(node)) {
- return true;
- }
- node = node.parentNode;
- }
- return false;
- };
- var findTextNodeRelative = function (dom, isAfterNode, collapsed, left, startNode) {
- var walker, lastInlineElement, parentBlockContainer;
- var body = dom.getRoot();
- var node;
- var nonEmptyElementsMap = dom.schema.getNonEmptyElements();
- parentBlockContainer = dom.getParent(startNode.parentNode, dom.isBlock) || body;
- if (left && $_fy28ei1rjnlpax2o.isBr(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) {
- return Option.some(CaretPosition(startNode.parentNode, dom.nodeIndex(startNode)));
- }
- walker = new TreeWalker(startNode, parentBlockContainer);
- while (node = walker[left ? 'prev' : 'next']()) {
- if (dom.getContentEditableParent(node) === 'false' || isCeFalseCaretContainer(node, body)) {
- return Option.none();
- }
- if ($_fy28ei1rjnlpax2o.isText(node) && node.nodeValue.length > 0) {
- if (hasParentWithName(node, body, 'A') === false) {
- return Option.some(CaretPosition(node, left ? node.nodeValue.length : 0));
+ var findParent = function (node, rootNode, predicate) {
+ while (node && node !== rootNode) {
+ if (predicate(node)) {
+ return node;
}
- return Option.none();
+ node = node.parentNode;
}
- if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) {
- return Option.none();
+ return null;
+ };
+ var hasParent = function (node, rootNode, predicate) {
+ return findParent(node, rootNode, predicate) !== null;
+ };
+ var hasParentWithName = function (node, rootNode, name) {
+ return hasParent(node, rootNode, function (node) {
+ return node.nodeName === name;
+ });
+ };
+ var isTable$2 = 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 TreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || dom.getRoot());
+ while (node = walker[left ? 'prev' : 'next']()) {
+ if (NodeType.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 (NodeType.isContentEditableFalse(node)) {
+ return true;
+ }
+ node = node.parentNode;
+ }
+ return false;
+ };
+ var findTextNodeRelative = function (dom, isAfterNode, collapsed, left, startNode) {
+ var walker, lastInlineElement, parentBlockContainer;
+ var body = dom.getRoot();
+ var node;
+ var nonEmptyElementsMap = dom.schema.getNonEmptyElements();
+ parentBlockContainer = dom.getParent(startNode.parentNode, dom.isBlock) || body;
+ if (left && NodeType.isBr(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) {
+ return Option.some(CaretPosition(startNode.parentNode, dom.nodeIndex(startNode)));
+ }
+ walker = new TreeWalker(startNode, parentBlockContainer);
+ while (node = walker[left ? 'prev' : 'next']()) {
+ if (dom.getContentEditableParent(node) === 'false' || isCeFalseCaretContainer(node, body)) {
+ return Option.none();
+ }
+ if (NodeType.isText(node) && node.nodeValue.length > 0) {
+ if (hasParentWithName(node, body, 'A') === false) {
+ return Option.some(CaretPosition(node, left ? node.nodeValue.length : 0));
+ }
+ return Option.none();
+ }
+ if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) {
+ return Option.none();
+ }
+ lastInlineElement = node;
+ }
+ if (collapsed && lastInlineElement) {
+ return Option.some(CaretPosition(lastInlineElement, 0));
}
- lastInlineElement = node;
- }
- if (collapsed && lastInlineElement) {
- return Option.some(CaretPosition(lastInlineElement, 0));
- }
- return Option.none();
- };
- var normalizeEndPoint = function (dom, collapsed, start, rng) {
- var container, offset, walker;
- var body = dom.getRoot();
- var node, nonEmptyElementsMap;
- var directionLeft, isAfterNode, normalized = false;
- container = rng[(start ? 'start' : 'end') + 'Container'];
- offset = rng[(start ? 'start' : 'end') + 'Offset'];
- isAfterNode = $_fy28ei1rjnlpax2o.isElement(container) && offset === container.childNodes.length;
- nonEmptyElementsMap = dom.schema.getNonEmptyElements();
- directionLeft = start;
- if (isCaretContainer(container)) {
return Option.none();
- }
- if ($_fy28ei1rjnlpax2o.isElement(container) && offset > container.childNodes.length - 1) {
- directionLeft = false;
- }
- if ($_fy28ei1rjnlpax2o.isDocument(container)) {
- container = body;
- offset = 0;
- }
- if (container === body) {
- if (directionLeft) {
- node = container.childNodes[offset > 0 ? offset - 1 : 0];
- if (node) {
- if (isCaretContainer(node)) {
- return Option.none();
- }
- if (nonEmptyElementsMap[node.nodeName] || isTable$2(node)) {
- return Option.none();
- }
- }
+ };
+ var normalizeEndPoint = function (dom, collapsed, start, rng) {
+ var container, offset, walker;
+ var body = dom.getRoot();
+ var node, nonEmptyElementsMap;
+ var directionLeft, isAfterNode, normalized = false;
+ container = rng[(start ? 'start' : 'end') + 'Container'];
+ offset = rng[(start ? 'start' : 'end') + 'Offset'];
+ isAfterNode = NodeType.isElement(container) && offset === container.childNodes.length;
+ nonEmptyElementsMap = dom.schema.getNonEmptyElements();
+ directionLeft = start;
+ if (isCaretContainer(container)) {
+ return Option.none();
}
- if (container.hasChildNodes()) {
- offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1);
- container = container.childNodes[offset];
- offset = $_fy28ei1rjnlpax2o.isText(container) && isAfterNode ? container.data.length : 0;
- if (!collapsed && container === body.lastChild && isTable$2(container)) {
- return Option.none();
- }
- if (hasContentEditableFalseParent(body, container) || isCaretContainer(container)) {
- return Option.none();
- }
- if (container.hasChildNodes() && isTable$2(container) === false) {
- node = container;
- walker = new TreeWalker(container, body);
- do {
- if ($_fy28ei1rjnlpax2o.isContentEditableFalse(node) || isCaretContainer(node)) {
- normalized = false;
- break;
+ if (NodeType.isElement(container) && offset > container.childNodes.length - 1) {
+ directionLeft = false;
+ }
+ if (NodeType.isDocument(container)) {
+ container = body;
+ offset = 0;
+ }
+ if (container === body) {
+ if (directionLeft) {
+ node = container.childNodes[offset > 0 ? offset - 1 : 0];
+ if (node) {
+ if (isCaretContainer(node)) {
+ return Option.none();
}
- if ($_fy28ei1rjnlpax2o.isText(node) && node.nodeValue.length > 0) {
- offset = directionLeft ? 0 : node.nodeValue.length;
- container = node;
- normalized = true;
- break;
+ if (nonEmptyElementsMap[node.nodeName] || isTable$2(node)) {
+ return Option.none();
}
- if (nonEmptyElementsMap[node.nodeName.toLowerCase()] && !isTableCell$3(node)) {
- offset = dom.nodeIndex(node);
- container = node.parentNode;
- if (!directionLeft) {
- offset++;
+ }
+ }
+ if (container.hasChildNodes()) {
+ offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1);
+ container = container.childNodes[offset];
+ offset = NodeType.isText(container) && isAfterNode ? container.data.length : 0;
+ if (!collapsed && container === body.lastChild && isTable$2(container)) {
+ return Option.none();
+ }
+ if (hasContentEditableFalseParent(body, container) || isCaretContainer(container)) {
+ return Option.none();
+ }
+ if (container.hasChildNodes() && isTable$2(container) === false) {
+ node = container;
+ walker = new TreeWalker(container, body);
+ do {
+ if (NodeType.isContentEditableFalse(node) || isCaretContainer(node)) {
+ normalized = false;
+ break;
}
- normalized = true;
- break;
- }
- } while (node = directionLeft ? walker.next() : walker.prev());
+ if (NodeType.isText(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 ($_fy28ei1rjnlpax2o.isText(container) && offset === 0) {
- findTextNodeRelative(dom, isAfterNode, collapsed, true, container).each(function (pos) {
- container = pos.container();
- offset = pos.offset();
- normalized = true;
- });
- }
- if ($_fy28ei1rjnlpax2o.isElement(container)) {
- node = container.childNodes[offset];
- if (!node) {
- node = container.childNodes[offset - 1];
- }
- if (node && $_fy28ei1rjnlpax2o.isBr(node) && !isPrevNode(node, 'A') && !hasBrBeforeAfter(dom, node, false) && !hasBrBeforeAfter(dom, node, true)) {
- findTextNodeRelative(dom, isAfterNode, collapsed, true, node).each(function (pos) {
+ if (collapsed) {
+ if (NodeType.isText(container) && offset === 0) {
+ findTextNodeRelative(dom, isAfterNode, collapsed, true, container).each(function (pos) {
container = pos.container();
offset = pos.offset();
normalized = true;
});
}
+ if (NodeType.isElement(container)) {
+ node = container.childNodes[offset];
+ if (!node) {
+ node = container.childNodes[offset - 1];
+ }
+ if (node && NodeType.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 && $_fy28ei1rjnlpax2o.isText(container) && offset === container.nodeValue.length) {
- findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(function (pos) {
- container = pos.container();
- offset = pos.offset();
- normalized = true;
- });
- }
- return normalized ? Option.some(CaretPosition(container, offset)) : Option.none();
- };
- var normalize$1 = 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 (directionLeft && !collapsed && NodeType.isText(container) && offset === container.nodeValue.length) {
+ findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(function (pos) {
+ container = pos.container();
+ offset = pos.offset();
+ normalized = true;
+ });
}
- });
- if (!collapsed) {
- normalizeEndPoint(dom, collapsed, false, normRng).each(function (pos) {
- normRng.setEnd(pos.container(), pos.offset());
+ return normalized ? Option.some(CaretPosition(container, offset)) : Option.none();
+ };
+ var normalize$2 = 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) {
- normRng.collapse(true);
- }
- return $_3s8g9y4njnlpaxqj.isEq(rng, normRng) ? Option.none() : Option.some(normRng);
- };
- var $_afh56j4mjnlpaxpx = { normalize: normalize$1 };
+ if (!collapsed) {
+ normalizeEndPoint(dom, collapsed, false, normRng).each(function (pos) {
+ normRng.setEnd(pos.container(), pos.offset());
+ });
+ }
+ if (collapsed) {
+ normRng.collapse(true);
+ }
+ return RangeCompare.isEq(rng, normRng) ? Option.none() : Option.some(normRng);
+ };
+ var NormalizeRange = { normalize: normalize$2 };
- var hasRightSideContent = function (schema, container, parentBlock) {
- var walker = new TreeWalker(container, parentBlock);
- var node;
- var nonEmptyElementsMap = schema.getNonEmptyElements();
- while (node = walker.next()) {
- if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || node.length > 0) {
- return true;
+ var hasRightSideContent = function (schema, container, parentBlock) {
+ var walker = new TreeWalker(container, parentBlock);
+ var node;
+ var nonEmptyElementsMap = schema.getNonEmptyElements();
+ while (node = walker.next()) {
+ if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || node.length > 0) {
+ return true;
+ }
}
- }
- };
- var scrollToBr = function (dom, selection, brElm) {
- var marker = dom.create('span', {}, ' ');
- brElm.parentNode.insertBefore(marker, brElm);
- selection.scrollIntoView(marker);
- dom.remove(marker);
- };
- var moveSelectionToBr = function (dom, selection, brElm, extraBr) {
- var rng = dom.createRng();
- if (!extraBr) {
- rng.setStartAfter(brElm);
- rng.setEndAfter(brElm);
- } else {
- rng.setStartBefore(brElm);
- rng.setEndBefore(brElm);
- }
- selection.setRng(rng);
- };
- var insertBrAtCaret = function (editor, evt) {
- var selection = editor.selection, dom = editor.dom;
- var brElm, extraBr;
- var rng = selection.getRng();
- $_afh56j4mjnlpaxpx.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);
+ };
+ var scrollToBr = function (dom, selection, brElm) {
+ var marker = dom.create('span', {}, ' ');
+ brElm.parentNode.insertBefore(marker, brElm);
+ selection.scrollIntoView(marker);
+ dom.remove(marker);
+ };
+ var moveSelectionToBr = function (dom, selection, brElm, extraBr) {
+ var rng = dom.createRng();
+ if (!extraBr) {
rng.setStartAfter(brElm);
rng.setEndAfter(brElm);
- extraBr = true;
+ } else {
+ rng.setStartBefore(brElm);
+ rng.setEndBefore(brElm);
}
- }
- brElm = dom.create('br');
- rng.insertNode(brElm);
- scrollToBr(dom, selection, brElm);
- moveSelectionToBr(dom, selection, brElm, extraBr);
- editor.undoManager.add();
- };
- var insertBrBefore = function (editor, inline) {
- var br = Element$$1.fromTag('br');
- $_ag89ax1yjnlpax4x.before(Element$$1.fromDom(inline), br);
- editor.undoManager.add();
- };
- var insertBrAfter = function (editor, inline) {
- if (!hasBrAfter(editor.getBody(), inline)) {
- $_ag89ax1yjnlpax4x.after(Element$$1.fromDom(inline), Element$$1.fromTag('br'));
- }
- var br = Element$$1.fromTag('br');
- $_ag89ax1yjnlpax4x.after(Element$$1.fromDom(inline), br);
- scrollToBr(editor.dom, editor.selection, br.dom());
- moveSelectionToBr(editor.dom, editor.selection, br.dom(), false);
- editor.undoManager.add();
- };
- var isBeforeBr = function (pos) {
- return $_fy28ei1rjnlpax2o.isBr(pos.getNode());
- };
- var hasBrAfter = function (rootNode, startNode) {
- if (isBeforeBr(CaretPosition$1.after(startNode))) {
- return true;
- } else {
- return $_32xcvk30jnlpaxbn.nextPosition(rootNode, CaretPosition$1.after(startNode)).map(function (pos) {
- return $_fy28ei1rjnlpax2o.isBr(pos.getNode());
- }).getOr(false);
- }
- };
- var isAnchorLink = function (elm) {
- return elm && elm.nodeName === 'A' && 'href' in elm;
- };
- var isInsideAnchor = function (location) {
- return location.fold(constant(false), isAnchorLink, isAnchorLink, constant(false));
- };
- var readInlineAnchorLocation = function (editor) {
- var isInlineTarget = curry($_955v2u3wjnlpaxit.isInlineTarget, editor);
- var position = CaretPosition$1.fromRangeStart(editor.selection.getRng());
- return $_1wxx4j4bjnlpaxmj.readLocation(isInlineTarget, editor.getBody(), position).filter(isInsideAnchor);
- };
- var insertBrOutsideAnchor = function (editor, location) {
- location.fold(noop, curry(insertBrBefore, editor), curry(insertBrAfter, editor), noop);
- };
- var insert = function (editor, evt) {
- var anchorLocation = readInlineAnchorLocation(editor);
- if (anchorLocation.isSome()) {
- anchorLocation.each(curry(insertBrOutsideAnchor, editor));
- } else {
- insertBrAtCaret(editor, evt);
- }
- };
- var $_ejrlhl4ljnlpaxpg = { insert: insert };
-
- 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 $_64es4o4qjnlpaxri = {
- before: adt.before,
- on: adt.on,
- after: adt.after,
- cata: cata,
- getStart: getStart
- };
-
- var type$1 = Adt.generate([
- { domRange: ['rng'] },
- {
- relative: [
- 'startSitu',
- 'finishSitu'
- ]
- },
- {
- exact: [
- 'start',
- 'soffset',
- 'finish',
- 'foffset'
- ]
- }
- ]);
- var range$1 = Immutable('start', 'soffset', 'finish', 'foffset');
- var exactFromRange = function (simRange) {
- return type$1.exact(simRange.start(), simRange.soffset(), simRange.finish(), simRange.foffset());
- };
- var getStart$1 = function (selection) {
- return selection.match({
- domRange: function (rng) {
- return Element$$1.fromDom(rng.startContainer);
- },
- relative: function (startSitu, finishSitu) {
- return $_64es4o4qjnlpaxri.getStart(startSitu);
- },
- exact: function (start, soffset, finish, foffset) {
- return start;
- }
- });
- };
- var getWin = function (selection) {
- var start = getStart$1(selection);
- return $_dr4ybh18jnlpawzt.defaultView(start);
- };
- var $_f9vlzb4pjnlpaxrd = {
- domRange: type$1.domRange,
- relative: type$1.relative,
- exact: type$1.exact,
- exactFromRange: exactFromRange,
- range: range$1,
- getWin: getWin
- };
-
- var browser$3 = $_766rx4ojnlpawtd.detect().browser;
- var clamp = function (offset, element) {
- var max = $_7u5fzs11jnlpawv6.isText(element) ? $_dzrxgg3gjnlpaxf6.get(element).length : $_dr4ybh18jnlpawzt.children(element).length + 1;
- if (offset > max) {
- return max;
- } else if (offset < 0) {
- return 0;
- }
- return offset;
- };
- var normalizeRng = function (rng) {
- return $_f9vlzb4pjnlpaxrd.range(rng.start(), clamp(rng.soffset(), rng.start()), rng.finish(), clamp(rng.foffset(), rng.finish()));
- };
- var isOrContains = function (root, elm) {
- return $_5h7cor1ejnlpax0k.contains(root, elm) || $_5h7cor1ejnlpax0k.eq(root, elm);
- };
- var isRngInRoot = function (root) {
- return function (rng) {
- return isOrContains(root, rng.start()) && isOrContains(root, rng.finish());
+ selection.setRng(rng);
};
- };
- var shouldStore = function (editor) {
- return editor.inline === true || browser$3.isIE();
- };
- var nativeRangeToSelectionRange = function (r) {
- return $_f9vlzb4pjnlpaxrd.range(Element$$1.fromDom(r.startContainer), r.startOffset, Element$$1.fromDom(r.endContainer), r.endOffset);
- };
- var readRange = function (win) {
- var selection = win.getSelection();
- var rng = !selection || selection.rangeCount === 0 ? Option.none() : Option.from(selection.getRangeAt(0));
- return rng.map(nativeRangeToSelectionRange);
- };
- var getBookmark$2 = function (root) {
- var win = $_dr4ybh18jnlpawzt.defaultView(root);
- return readRange(win.dom()).filter(isRngInRoot(root));
- };
- var validate = function (root, bookmark) {
- return Option.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 Option.some(rng);
- } catch (_) {
- return Option.none();
- }
- };
- var store = function (editor) {
- var newBookmark = shouldStore(editor) ? getBookmark$2(Element$$1.fromDom(editor.getBody())) : Option.none();
- editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;
- };
- var storeNative = function (editor, rng) {
- var root = Element$$1.fromDom(editor.getBody());
- var range = shouldStore(editor) ? Option.from(rng) : Option.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 : Option.none();
- return bookmark.bind(curry(validate, Element$$1.fromDom(editor.getBody()))).bind(bookmarkToNativeRng);
- };
- var restore = function (editor) {
- getRng(editor).each(function (rng) {
- editor.selection.setRng(rng);
- });
- };
- var $_13pqgk4ojnlpaxqr = {
- store: store,
- storeNative: storeNative,
- readRange: readRange,
- restore: restore,
- getRng: getRng,
- getBookmark: getBookmark$2,
- validate: validate
- };
+ var insertBrAtCaret = function (editor, evt) {
+ var selection = editor.selection, dom = editor.dom;
+ var brElm, extraBr;
+ var rng = selection.getRng();
+ NormalizeRange.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');
+ rng.insertNode(brElm);
+ scrollToBr(dom, selection, brElm);
+ moveSelectionToBr(dom, selection, brElm, extraBr);
+ editor.undoManager.add();
+ };
+ var insertBrBefore = function (editor, inline) {
+ var br = Element$$1.fromTag('br');
+ before(Element$$1.fromDom(inline), br);
+ editor.undoManager.add();
+ };
+ var insertBrAfter = function (editor, inline) {
+ if (!hasBrAfter(editor.getBody(), inline)) {
+ after(Element$$1.fromDom(inline), Element$$1.fromTag('br'));
+ }
+ var br = Element$$1.fromTag('br');
+ after(Element$$1.fromDom(inline), br);
+ scrollToBr(editor.dom, editor.selection, br.dom());
+ moveSelectionToBr(editor.dom, editor.selection, br.dom(), false);
+ editor.undoManager.add();
+ };
+ var isBeforeBr$1 = function (pos) {
+ return NodeType.isBr(pos.getNode());
+ };
+ var hasBrAfter = function (rootNode, startNode) {
+ if (isBeforeBr$1(CaretPosition$1.after(startNode))) {
+ return true;
+ } else {
+ return CaretFinder.nextPosition(rootNode, CaretPosition$1.after(startNode)).map(function (pos) {
+ return NodeType.isBr(pos.getNode());
+ }).getOr(false);
+ }
+ };
+ var isAnchorLink = function (elm) {
+ return elm && elm.nodeName === 'A' && 'href' in elm;
+ };
+ var isInsideAnchor = function (location) {
+ return location.fold(constant(false), isAnchorLink, isAnchorLink, constant(false));
+ };
+ var readInlineAnchorLocation = function (editor) {
+ var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);
+ var position = CaretPosition$1.fromRangeStart(editor.selection.getRng());
+ return BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), position).filter(isInsideAnchor);
+ };
+ var insertBrOutsideAnchor = function (editor, location) {
+ location.fold(noop, curry(insertBrBefore, editor), curry(insertBrAfter, editor), noop);
+ };
+ var insert = function (editor, evt) {
+ var anchorLocation = readInlineAnchorLocation(editor);
+ if (anchorLocation.isSome()) {
+ anchorLocation.each(curry(insertBrOutsideAnchor, editor));
+ } else {
+ insertBrAtCaret(editor, evt);
+ }
+ };
+ var InsertBr = { insert: insert };
- var indentElement = function (dom, command, useMargin, value, unit, element) {
- if (dom.getContentEditable(element) === 'false') {
- return;
- }
- if (element.nodeName !== 'LI') {
+ var adt = Adt.generate([
+ { 'before': ['element'] },
+ {
+ 'on': [
+ 'element',
+ 'offset'
+ ]
+ },
+ { after: ['element'] }
+ ]);
+
+ var type$1 = Adt.generate([
+ { domRange: ['rng'] },
+ {
+ relative: [
+ 'startSitu',
+ 'finishSitu'
+ ]
+ },
+ {
+ exact: [
+ 'start',
+ 'soffset',
+ 'finish',
+ 'foffset'
+ ]
+ }
+ ]);
+ var range$1 = Immutable('start', 'soffset', 'finish', 'foffset');
+ var domRange = type$1.domRange;
+ var relative = type$1.relative;
+ var exact = type$1.exact;
+
+ var browser$3 = PlatformDetection$1.detect().browser;
+ var clamp = function (offset, element) {
+ var max = isText(element) ? get$6(element).length : children(element).length + 1;
+ if (offset > max) {
+ return max;
+ } else if (offset < 0) {
+ return 0;
+ }
+ return offset;
+ };
+ var normalizeRng = function (rng) {
+ return range$1(rng.start(), clamp(rng.soffset(), rng.start()), rng.finish(), clamp(rng.foffset(), rng.finish()));
+ };
+ var isOrContains = function (root, elm) {
+ return contains$3(root, elm) || eq(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 range$1(Element$$1.fromDom(r.startContainer), r.startOffset, Element$$1.fromDom(r.endContainer), r.endOffset);
+ };
+ var readRange = function (win) {
+ var selection = win.getSelection();
+ var rng = !selection || selection.rangeCount === 0 ? Option.none() : Option.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 Option.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 Option.some(rng);
+ } catch (_) {
+ return Option.none();
+ }
+ };
+ var store = function (editor) {
+ var newBookmark = shouldStore(editor) ? getBookmark$2(Element$$1.fromDom(editor.getBody())) : Option.none();
+ editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;
+ };
+ var storeNative = function (editor, rng) {
+ var root = Element$$1.fromDom(editor.getBody());
+ var range = shouldStore(editor) ? Option.from(rng) : Option.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 : Option.none();
+ return bookmark.bind(curry(validate, Element$$1.fromDom(editor.getBody()))).bind(bookmarkToNativeRng);
+ };
+ var restore = function (editor) {
+ getRng(editor).each(function (rng) {
+ editor.selection.setRng(rng);
+ });
+ };
+ var SelectionBookmark = {
+ store: store,
+ storeNative: storeNative,
+ readRange: readRange,
+ restore: restore,
+ getRng: getRng,
+ getBookmark: getBookmark$2,
+ validate: validate
+ };
+
+ var indentElement = function (dom, command, useMargin, value, unit, element) {
+ if (dom.getContentEditable(element) === 'false') {
+ return;
+ }
var indentStyleName = useMargin ? 'margin' : 'padding';
indentStyleName = element.nodeName === 'TABLE' ? 'margin' : indentStyleName;
indentStyleName += dom.getStyle(element, 'direction', true) === 'rtl' ? 'Right' : 'Left';
@@ -31335,3487 +30300,3472 @@ window.tinymce = window.tinymce || {
var styleValue = parseInt(element.style[indentStyleName] || 0, 10) + value + unit;
dom.setStyle(element, indentStyleName, styleValue);
}
- }
- };
- var handle = function (editor, command) {
- var settings = editor.settings, dom = editor.dom, selection = editor.selection, formatter = editor.formatter;
- var indentUnit = /[a-z%]+$/i.exec(settings.indentation)[0];
- var indentValue = parseInt(settings.indentation, 10);
- var useMargin = editor.getParam('indent_use_margin', false);
- if (!editor.queryCommandState('InsertUnorderedList') && !editor.queryCommandState('InsertOrderedList')) {
- if (!settings.forced_root_block && !dom.getParent(selection.getNode(), dom.isBlock)) {
- formatter.apply('div');
- }
- each(selection.getSelectedBlocks(), function (element) {
- return indentElement(dom, command, useMargin, indentValue, indentUnit, element);
- });
- }
- };
-
- var each$10 = $_1q1txeljnlpawsa.each;
- var extend$2 = $_1q1txeljnlpawsa.extend;
- var map$3 = $_1q1txeljnlpawsa.map;
- var inArray$2 = $_1q1txeljnlpawsa.inArray;
- function EditorCommands (editor) {
- var dom, selection, formatter;
- var commands = {
- state: {},
- exec: {},
- value: {}
};
- var settings = editor.settings, bookmark;
- editor.on('PreInit', function () {
- dom = editor.dom;
- selection = editor.selection;
- settings = editor.settings;
- formatter = editor.formatter;
- });
- var execCommand = function (command, ui, value, args) {
- var func, customCommand, state = false;
- if (editor.removed) {
- return;
- }
- if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(command) && (!args || !args.skip_focus)) {
- editor.focus();
- } else {
- $_13pqgk4ojnlpaxqr.restore(editor);
- }
- args = editor.fire('BeforeExecCommand', {
- command: command,
- ui: ui,
- value: value
+ 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(), Element$$1.fromDom), function (el) {
+ return !isListComponent(el) && !parentIsListComponent(el);
});
- if (args.isDefaultPrevented()) {
- return false;
+ };
+ var handle = function (editor, command) {
+ var settings = editor.settings, dom = editor.dom, selection = editor.selection, formatter = editor.formatter;
+ var indentUnit = /[a-z%]+$/i.exec(settings.indentation)[0];
+ var indentValue = parseInt(settings.indentation, 10);
+ var useMargin = editor.getParam('indent_use_margin', false);
+ if (!editor.queryCommandState('InsertUnorderedList') && !editor.queryCommandState('InsertOrderedList')) {
+ if (!settings.forced_root_block && !dom.getParent(selection.getNode(), dom.isBlock)) {
+ formatter.apply('div');
+ }
}
- customCommand = command.toLowerCase();
- if (func = commands.exec[customCommand]) {
- func(customCommand, ui, value);
- editor.fire('ExecCommand', {
+ each(getBlocksToIndent(editor), function (block) {
+ indentElement(dom, command, useMargin, indentValue, indentUnit, block.dom());
+ });
+ };
+
+ var each$a = Tools.each, extend$2 = Tools.extend;
+ var map$3 = Tools.map, inArray$2 = Tools.inArray;
+ function EditorCommands (editor) {
+ var dom, selection, formatter;
+ var commands = {
+ state: {},
+ exec: {},
+ value: {}
+ };
+ var settings = editor.settings, bookmark;
+ editor.on('PreInit', function () {
+ dom = editor.dom;
+ selection = editor.selection;
+ settings = editor.settings;
+ formatter = editor.formatter;
+ });
+ var execCommand = function (command, ui, value, args) {
+ var func, customCommand, state = false;
+ if (editor.removed) {
+ return;
+ }
+ if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(command) && (!args || !args.skip_focus)) {
+ editor.focus();
+ } else {
+ SelectionBookmark.restore(editor);
+ }
+ args = editor.fire('BeforeExecCommand', {
command: command,
ui: ui,
value: value
});
- return true;
- }
- each$10(editor.plugins, function (p) {
- if (p.execCommand && p.execCommand(command, ui, value)) {
+ if (args.isDefaultPrevented()) {
+ return false;
+ }
+ customCommand = command.toLowerCase();
+ if (func = commands.exec[customCommand]) {
+ func(customCommand, ui, value);
editor.fire('ExecCommand', {
command: command,
ui: ui,
value: value
});
- state = true;
- return false;
+ return true;
}
- });
- if (state) {
- return state;
- }
- if (editor.theme && editor.theme.execCommand && editor.theme.execCommand(command, ui, value)) {
- editor.fire('ExecCommand', {
- command: command,
- ui: ui,
- value: value
- });
- return true;
- }
- try {
- state = editor.getDoc().execCommand(command, ui, value);
- } catch (ex) {
- }
- if (state) {
- editor.fire('ExecCommand', {
- command: command,
- ui: ui,
- value: value
- });
- return true;
- }
- return false;
- };
- var queryCommandState = function (command) {
- var func;
- if (editor.quirks.isHidden() || editor.removed) {
- return;
- }
- command = command.toLowerCase();
- if (func = commands.state[command]) {
- return func(command);
- }
- try {
- return editor.getDoc().queryCommandState(command);
- } catch (ex) {
- }
- return false;
- };
- var queryCommandValue = function (command) {
- var func;
- if (editor.quirks.isHidden() || editor.removed) {
- return;
- }
- command = command.toLowerCase();
- if (func = commands.value[command]) {
- return func(command);
- }
- try {
- return editor.getDoc().queryCommandValue(command);
- } catch (ex) {
- }
- };
- var addCommands = function (commandList, type) {
- type = type || 'exec';
- each$10(commandList, function (callback, command) {
- each$10(command.toLowerCase().split(','), function (command) {
- commands[type][command] = callback;
- });
- });
- };
- var addCommand = function (command, callback, scope) {
- command = command.toLowerCase();
- commands.exec[command] = function (command, ui, value, args) {
- return callback.call(scope || editor, ui, value, args);
- };
- };
- var queryCommandSupported = function (command) {
- command = command.toLowerCase();
- if (commands.exec[command]) {
- return true;
- }
- try {
- return editor.getDoc().queryCommandSupported(command);
- } catch (ex) {
- }
- return false;
- };
- var addQueryStateHandler = function (command, callback, scope) {
- command = command.toLowerCase();
- commands.state[command] = function () {
- return callback.call(scope || editor);
- };
- };
- var addQueryValueHandler = function (command, callback, scope) {
- command = command.toLowerCase();
- commands.value[command] = function () {
- return callback.call(scope || editor);
- };
- };
- var hasCustomCommand = function (command) {
- command = command.toLowerCase();
- return !!commands.exec[command];
- };
- extend$2(this, {
- execCommand: execCommand,
- queryCommandState: queryCommandState,
- queryCommandValue: queryCommandValue,
- queryCommandSupported: queryCommandSupported,
- addCommands: addCommands,
- addCommand: addCommand,
- addQueryStateHandler: addQueryStateHandler,
- addQueryValueHandler: addQueryValueHandler,
- hasCustomCommand: hasCustomCommand
- });
- var execNativeCommand = function (command, ui, value) {
- if (ui === undefined) {
- ui = false;
- }
- if (value === undefined) {
- value = null;
- }
- return editor.getDoc().execCommand(command, ui, value);
- };
- var isFormatMatch = function (name) {
- return formatter.match(name);
- };
- var toggleFormat = function (name, value) {
- formatter.toggle(name, value ? { value: value } : undefined);
- editor.nodeChanged();
- };
- var storeSelection = function (type) {
- bookmark = selection.getBookmark(type);
- };
- var restoreSelection = function () {
- selection.moveToBookmark(bookmark);
- };
- addCommands({
- 'mceResetDesignMode,mceBeginUndoLevel': function () {
- },
- 'mceEndUndoLevel,mceAddUndoLevel': function () {
- editor.undoManager.add();
- },
- 'Cut,Copy,Paste': function (command) {
- var doc = editor.getDoc();
- var failed;
- try {
- 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 ($_cseqobajnlpawll.mac) {
- msg = msg.replace(/Ctrl\+/g, '\u2318+');
- }
- editor.notificationManager.open({
- text: msg,
- type: 'error'
- });
- }
- },
- 'unlink': function () {
- if (selection.isCollapsed()) {
- var elm = editor.dom.getParent(editor.selection.getStart(), 'a');
- if (elm) {
- editor.dom.remove(elm, true);
- }
- return;
- }
- formatter.remove('link');
- },
- 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone': function (command) {
- var align = command.substring(7);
- if (align === 'full') {
- align = 'justify';
- }
- each$10('left,center,right,justify'.split(','), function (name) {
- if (align !== name) {
- formatter.remove('align' + name);
- }
- });
- if (align !== 'none') {
- toggleFormat('align' + align);
- }
- },
- 'InsertUnorderedList,InsertOrderedList': function (command) {
- var listElm, listParent;
- execNativeCommand(command);
- listElm = dom.getParent(selection.getNode(), 'ol,ul');
- if (listElm) {
- listParent = listElm.parentNode;
- if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {
- storeSelection();
- dom.split(listParent, listElm);
- restoreSelection();
- }
- }
- },
- 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {
- toggleFormat(command);
- },
- 'ForeColor,HiliteColor': function (command, ui, value) {
- toggleFormat(command, value);
- },
- 'FontName': function (command, ui, value) {
- fontNameAction(editor, value);
- },
- 'FontSize': function (command, ui, value) {
- fontSizeAction(editor, value);
- },
- 'RemoveFormat': function (command) {
- formatter.remove(command);
- },
- 'mceBlockQuote': function () {
- toggleFormat('blockquote');
- },
- 'FormatBlock': function (command, ui, value) {
- return toggleFormat(value || 'p');
- },
- 'mceCleanup': function () {
- var bookmark = selection.getBookmark();
- editor.setContent(editor.getContent());
- selection.moveToBookmark(bookmark);
- },
- 'mceRemoveNode': function (command, ui, value) {
- var node = value || selection.getNode();
- if (node !== editor.getBody()) {
- storeSelection();
- editor.dom.remove(node, true);
- restoreSelection();
- }
- },
- 'mceSelectNodeDepth': function (command, ui, value) {
- var counter = 0;
- dom.getParent(selection.getNode(), function (node) {
- if (node.nodeType === 1 && counter++ === value) {
- selection.select(node);
+ each$a(editor.plugins, function (p) {
+ if (p.execCommand && p.execCommand(command, ui, value)) {
+ editor.fire('ExecCommand', {
+ command: command,
+ ui: ui,
+ value: value
+ });
+ state = true;
return false;
}
- }, editor.getBody());
- },
- 'mceSelectNode': function (command, ui, value) {
- selection.select(value);
- },
- 'mceInsertContent': function (command, ui, value) {
- $_f55bk53kjnlpaxge.insertAtCaret(editor, value);
- },
- 'mceInsertRawHTML': function (command, ui, value) {
- selection.setContent('tiny_mce_marker');
- var content = editor.getContent();
- editor.setContent(content.replace(/tiny_mce_marker/g, function () {
- return value;
- }));
- },
- 'mceToggleFormat': function (command, ui, value) {
- toggleFormat(value);
- },
- 'mceSetContent': function (command, ui, value) {
- editor.setContent(value);
- },
- 'Indent,Outdent': function (command) {
- handle(editor, command);
- },
- 'mceRepaint': function () {
- },
- '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, selection.getContent({ format: 'text' })));
- },
- 'mceInsertLink': function (command, ui, value) {
- var anchor;
- if (typeof value === 'string') {
- value = { href: value };
- }
- anchor = dom.getParent(selection.getNode(), 'a');
- value.href = value.href.replace(' ', '%20');
- if (!anchor || !value.href) {
- formatter.remove('link');
- }
- if (value.href) {
- formatter.apply('link', value, anchor);
- }
- },
- 'selectAll': function () {
- var editingHost = dom.getParent(selection.getStart(), $_fy28ei1rjnlpax2o.isContentEditableTrue);
- if (editingHost) {
- var rng = dom.createRng();
- rng.selectNodeContents(editingHost);
- selection.setRng(rng);
- }
- },
- 'delete': function () {
- $_7ms0593sjnlpaxht.deleteCommand(editor);
- },
- 'forwardDelete': function () {
- $_7ms0593sjnlpaxht.forwardDeleteCommand(editor);
- },
- 'mceNewDocument': function () {
- editor.setContent('');
- },
- 'InsertLineBreak': function (command, ui, value) {
- $_ejrlhl4ljnlpaxpg.insert(editor, value);
- return true;
- }
- });
- var alignStates = function (name) {
- return function () {
- var nodes = selection.isCollapsed() ? [dom.getParent(selection.getNode(), dom.isBlock)] : selection.getSelectedBlocks();
- var matches = map$3(nodes, function (node) {
- return !!formatter.matchNode(node, name);
});
- return inArray$2(matches, true) !== -1;
+ if (state) {
+ return state;
+ }
+ if (editor.theme && editor.theme.execCommand && editor.theme.execCommand(command, ui, value)) {
+ editor.fire('ExecCommand', {
+ command: command,
+ ui: ui,
+ value: value
+ });
+ return true;
+ }
+ try {
+ state = editor.getDoc().execCommand(command, ui, value);
+ } catch (ex) {
+ }
+ if (state) {
+ editor.fire('ExecCommand', {
+ command: command,
+ ui: ui,
+ value: value
+ });
+ return true;
+ }
+ return false;
};
- };
- addCommands({
- 'JustifyLeft': alignStates('alignleft'),
- 'JustifyCenter': alignStates('aligncenter'),
- 'JustifyRight': alignStates('alignright'),
- 'JustifyFull': alignStates('alignjustify'),
- 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {
- return isFormatMatch(command);
- },
- 'mceBlockQuote': function () {
- return isFormatMatch('blockquote');
- },
- 'Outdent': function () {
- var node;
- if (settings.inline_styles) {
- if ((node = dom.getParent(selection.getStart(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) {
- return true;
- }
- if ((node = dom.getParent(selection.getEnd(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) {
- return true;
- }
+ var queryCommandState = function (command) {
+ var func;
+ if (editor.quirks.isHidden() || editor.removed) {
+ return;
}
- return queryCommandState('InsertUnorderedList') || queryCommandState('InsertOrderedList') || !settings.inline_styles && !!dom.getParent(selection.getNode(), 'BLOCKQUOTE');
- },
- 'InsertUnorderedList,InsertOrderedList': function (command) {
- var list = dom.getParent(selection.getNode(), 'ul,ol');
- return list && (command === 'insertunorderedlist' && list.tagName === 'UL' || command === 'insertorderedlist' && list.tagName === 'OL');
- }
- }, 'state');
- addCommands({
- Undo: function () {
- editor.undoManager.undo();
- },
- Redo: function () {
- editor.undoManager.redo();
- }
- });
- addQueryValueHandler('FontName', function () {
- return fontNameQuery(editor);
- }, this);
- addQueryValueHandler('FontSize', function () {
- return fontSizeQuery(editor);
- }, this);
- }
-
- var nativeEvents = $_1q1txeljnlpawsa.makeMap('focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange ' + 'mouseout mouseenter mouseleave wheel keydown keypress keyup input contextmenu dragstart dragend dragover ' + 'draggesture dragdrop drop drag submit ' + 'compositionstart compositionend compositionupdate touchstart touchmove touchend', ' ');
- var Dispatcher = function (settings) {
- var self = this;
- var scope, bindings = {}, toggleEvent;
- var returnFalse = function () {
- return false;
- };
- var returnTrue = function () {
- return true;
- };
- settings = settings || {};
- scope = settings.scope || self;
- toggleEvent = settings.toggleEvent || returnFalse;
- var fire = function (name, args) {
- var handlers, i, l, callback;
- name = name.toLowerCase();
- args = args || {};
- args.type = name;
- if (!args.target) {
- args.target = scope;
- }
- if (!args.preventDefault) {
- args.preventDefault = function () {
- args.isDefaultPrevented = returnTrue;
+ command = command.toLowerCase();
+ if (func = commands.state[command]) {
+ return func(command);
+ }
+ try {
+ return editor.getDoc().queryCommandState(command);
+ } catch (ex) {
+ }
+ return false;
+ };
+ var queryCommandValue = function (command) {
+ var func;
+ if (editor.quirks.isHidden() || editor.removed) {
+ return;
+ }
+ command = command.toLowerCase();
+ if (func = commands.value[command]) {
+ return func(command);
+ }
+ try {
+ return editor.getDoc().queryCommandValue(command);
+ } catch (ex) {
+ }
+ };
+ var addCommands = function (commandList, type) {
+ type = type || 'exec';
+ each$a(commandList, function (callback, command) {
+ each$a(command.toLowerCase().split(','), function (command) {
+ commands[type][command] = callback;
+ });
+ });
+ };
+ var addCommand = function (command, callback, scope) {
+ command = command.toLowerCase();
+ commands.exec[command] = function (command, ui, value, args) {
+ return callback.call(scope || editor, ui, value, args);
};
- args.stopPropagation = function () {
- args.isPropagationStopped = returnTrue;
+ };
+ var queryCommandSupported = function (command) {
+ command = command.toLowerCase();
+ if (commands.exec[command]) {
+ return true;
+ }
+ try {
+ return editor.getDoc().queryCommandSupported(command);
+ } catch (ex) {
+ }
+ return false;
+ };
+ var addQueryStateHandler = function (command, callback, scope) {
+ command = command.toLowerCase();
+ commands.state[command] = function () {
+ return callback.call(scope || editor);
};
- args.stopImmediatePropagation = function () {
- args.isImmediatePropagationStopped = returnTrue;
+ };
+ var addQueryValueHandler = function (command, callback, scope) {
+ command = command.toLowerCase();
+ commands.value[command] = function () {
+ return callback.call(scope || editor);
};
- args.isDefaultPrevented = returnFalse;
- args.isPropagationStopped = returnFalse;
- args.isImmediatePropagationStopped = returnFalse;
- }
- if (settings.beforeFire) {
- settings.beforeFire(args);
- }
- handlers = bindings[name];
- if (handlers) {
- for (i = 0, l = handlers.length; i < l; i++) {
- callback = handlers[i];
- if (callback.once) {
- off(name, callback.func);
- }
- if (args.isImmediatePropagationStopped()) {
- args.stopPropagation();
- return args;
- }
- if (callback.func.call(scope, args) === false) {
- args.preventDefault();
- return args;
- }
+ };
+ var hasCustomCommand = function (command) {
+ command = command.toLowerCase();
+ return !!commands.exec[command];
+ };
+ extend$2(this, {
+ execCommand: execCommand,
+ queryCommandState: queryCommandState,
+ queryCommandValue: queryCommandValue,
+ queryCommandSupported: queryCommandSupported,
+ addCommands: addCommands,
+ addCommand: addCommand,
+ addQueryStateHandler: addQueryStateHandler,
+ addQueryValueHandler: addQueryValueHandler,
+ hasCustomCommand: hasCustomCommand
+ });
+ var execNativeCommand = function (command, ui, value) {
+ if (ui === undefined) {
+ ui = false;
}
- }
- return args;
- };
- var on = function (name, callback, prepend, extra) {
- var handlers, names, i;
- if (callback === false) {
- callback = returnFalse;
- }
- if (callback) {
- callback = { func: callback };
- if (extra) {
- $_1q1txeljnlpawsa.extend(callback, extra);
+ if (value === undefined) {
+ value = null;
}
- names = name.toLowerCase().split(' ');
- i = names.length;
- while (i--) {
- name = names[i];
- handlers = bindings[name];
- if (!handlers) {
- handlers = bindings[name] = [];
- toggleEvent(name, true);
+ return editor.getDoc().execCommand(command, ui, value);
+ };
+ var isFormatMatch = function (name) {
+ return formatter.match(name);
+ };
+ var toggleFormat = function (name, value) {
+ formatter.toggle(name, value ? { value: value } : undefined);
+ editor.nodeChanged();
+ };
+ var storeSelection = function (type) {
+ bookmark = selection.getBookmark(type);
+ };
+ var restoreSelection = function () {
+ selection.moveToBookmark(bookmark);
+ };
+ addCommands({
+ 'mceResetDesignMode,mceBeginUndoLevel': function () {
+ },
+ 'mceEndUndoLevel,mceAddUndoLevel': function () {
+ editor.undoManager.add();
+ },
+ 'Cut,Copy,Paste': function (command) {
+ var doc = editor.getDoc();
+ var failed;
+ try {
+ execNativeCommand(command);
+ } catch (ex) {
+ failed = true;
}
- if (prepend) {
- handlers.unshift(callback);
- } else {
- handlers.push(callback);
+ if (command === 'paste' && !doc.queryCommandEnabled(command)) {
+ failed = true;
}
- }
- }
- return self;
- };
- var off = function (name, callback) {
- var i, handlers, bindingName, names, hi;
- if (name) {
- names = name.toLowerCase().split(' ');
- i = names.length;
- while (i--) {
- name = names[i];
- handlers = bindings[name];
- if (!name) {
- for (bindingName in bindings) {
- toggleEvent(bindingName, false);
- delete bindings[bindingName];
+ 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+');
}
- return self;
+ editor.notificationManager.open({
+ text: msg,
+ type: 'error'
+ });
}
- if (handlers) {
- if (!callback) {
- handlers.length = 0;
+ },
+ 'unlink': function () {
+ if (selection.isCollapsed()) {
+ var elm = editor.dom.getParent(editor.selection.getStart(), 'a');
+ if (elm) {
+ editor.dom.remove(elm, true);
+ }
+ return;
+ }
+ formatter.remove('link');
+ },
+ 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone': function (command) {
+ var align = command.substring(7);
+ if (align === 'full') {
+ align = 'justify';
+ }
+ each$a('left,center,right,justify'.split(','), function (name) {
+ if (align !== name) {
+ formatter.remove('align' + name);
+ }
+ });
+ if (align !== 'none') {
+ toggleFormat('align' + align);
+ }
+ },
+ 'InsertUnorderedList,InsertOrderedList': function (command) {
+ var listElm, listParent;
+ execNativeCommand(command);
+ listElm = dom.getParent(selection.getNode(), 'ol,ul');
+ if (listElm) {
+ listParent = listElm.parentNode;
+ if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {
+ storeSelection();
+ dom.split(listParent, listElm);
+ restoreSelection();
+ }
+ }
+ },
+ 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {
+ toggleFormat(command);
+ },
+ 'ForeColor,HiliteColor': function (command, ui, value) {
+ toggleFormat(command, value);
+ },
+ 'FontName': function (command, ui, value) {
+ fontNameAction(editor, value);
+ },
+ 'FontSize': function (command, ui, value) {
+ fontSizeAction(editor, value);
+ },
+ 'RemoveFormat': function (command) {
+ formatter.remove(command);
+ },
+ 'mceBlockQuote': function () {
+ toggleFormat('blockquote');
+ },
+ 'FormatBlock': function (command, ui, value) {
+ return toggleFormat(value || 'p');
+ },
+ 'mceCleanup': function () {
+ var bookmark = selection.getBookmark();
+ editor.setContent(editor.getContent());
+ selection.moveToBookmark(bookmark);
+ },
+ 'mceRemoveNode': function (command, ui, value) {
+ var node = value || selection.getNode();
+ if (node !== editor.getBody()) {
+ storeSelection();
+ editor.dom.remove(node, true);
+ restoreSelection();
+ }
+ },
+ 'mceSelectNodeDepth': function (command, ui, value) {
+ var counter = 0;
+ dom.getParent(selection.getNode(), function (node) {
+ if (node.nodeType === 1 && counter++ === value) {
+ selection.select(node);
+ return false;
+ }
+ }, editor.getBody());
+ },
+ 'mceSelectNode': function (command, ui, value) {
+ selection.select(value);
+ },
+ 'mceInsertContent': function (command, ui, value) {
+ InsertContent.insertAtCaret(editor, value);
+ },
+ 'mceInsertRawHTML': function (command, ui, value) {
+ selection.setContent('tiny_mce_marker');
+ var content = editor.getContent();
+ editor.setContent(content.replace(/tiny_mce_marker/g, function () {
+ return value;
+ }));
+ },
+ 'mceToggleFormat': function (command, ui, value) {
+ toggleFormat(value);
+ },
+ 'mceSetContent': function (command, ui, value) {
+ editor.setContent(value);
+ },
+ 'Indent,Outdent': function (command) {
+ handle(editor, command);
+ },
+ 'mceRepaint': function () {
+ },
+ '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, selection.getContent({ format: 'text' })));
+ },
+ 'mceInsertLink': function (command, ui, value) {
+ var anchor;
+ if (typeof value === 'string') {
+ value = { href: value };
+ }
+ anchor = dom.getParent(selection.getNode(), 'a');
+ value.href = value.href.replace(' ', '%20');
+ if (!anchor || !value.href) {
+ formatter.remove('link');
+ }
+ if (value.href) {
+ formatter.apply('link', value, anchor);
+ }
+ },
+ 'selectAll': function () {
+ var editingHost = dom.getParent(selection.getStart(), NodeType.isContentEditableTrue);
+ if (editingHost) {
+ var rng = dom.createRng();
+ rng.selectNodeContents(editingHost);
+ selection.setRng(rng);
+ }
+ },
+ 'delete': function () {
+ DeleteCommands.deleteCommand(editor);
+ },
+ 'forwardDelete': function () {
+ DeleteCommands.forwardDeleteCommand(editor);
+ },
+ 'mceNewDocument': function () {
+ editor.setContent('');
+ },
+ 'InsertLineBreak': function (command, ui, value) {
+ InsertBr.insert(editor, value);
+ return true;
+ }
+ });
+ var alignStates = function (name) {
+ return function () {
+ var nodes = selection.isCollapsed() ? [dom.getParent(selection.getNode(), dom.isBlock)] : selection.getSelectedBlocks();
+ var matches = map$3(nodes, function (node) {
+ return !!formatter.matchNode(node, name);
+ });
+ return inArray$2(matches, true) !== -1;
+ };
+ };
+ addCommands({
+ 'JustifyLeft': alignStates('alignleft'),
+ 'JustifyCenter': alignStates('aligncenter'),
+ 'JustifyRight': alignStates('alignright'),
+ 'JustifyFull': alignStates('alignjustify'),
+ 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {
+ return isFormatMatch(command);
+ },
+ 'mceBlockQuote': function () {
+ return isFormatMatch('blockquote');
+ },
+ 'Outdent': function () {
+ var node;
+ if (settings.inline_styles) {
+ if ((node = dom.getParent(selection.getStart(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) {
+ return true;
+ }
+ if ((node = dom.getParent(selection.getEnd(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) {
+ return true;
+ }
+ }
+ return queryCommandState('InsertUnorderedList') || queryCommandState('InsertOrderedList') || !settings.inline_styles && !!dom.getParent(selection.getNode(), 'BLOCKQUOTE');
+ },
+ 'InsertUnorderedList,InsertOrderedList': function (command) {
+ var list = dom.getParent(selection.getNode(), 'ul,ol');
+ return list && (command === 'insertunorderedlist' && list.tagName === 'UL' || command === 'insertorderedlist' && list.tagName === 'OL');
+ }
+ }, 'state');
+ addCommands({
+ Undo: function () {
+ editor.undoManager.undo();
+ },
+ Redo: function () {
+ editor.undoManager.redo();
+ }
+ });
+ addQueryValueHandler('FontName', function () {
+ return fontNameQuery(editor);
+ }, this);
+ addQueryValueHandler('FontSize', function () {
+ return fontSizeQuery(editor);
+ }, this);
+ }
+
+ 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 contextmenu dragstart dragend dragover ' + 'draggesture dragdrop drop drag submit ' + 'compositionstart compositionend compositionupdate touchstart touchmove touchend', ' ');
+ var Dispatcher = function (settings) {
+ var self = this;
+ var scope, bindings = {}, toggleEvent;
+ var returnFalse = function () {
+ return false;
+ };
+ var returnTrue = function () {
+ return true;
+ };
+ settings = settings || {};
+ scope = settings.scope || self;
+ toggleEvent = settings.toggleEvent || returnFalse;
+ var fire = function (name, args) {
+ var handlers, i, l, callback;
+ name = name.toLowerCase();
+ args = args || {};
+ args.type = name;
+ if (!args.target) {
+ args.target = scope;
+ }
+ if (!args.preventDefault) {
+ args.preventDefault = function () {
+ args.isDefaultPrevented = returnTrue;
+ };
+ args.stopPropagation = function () {
+ args.isPropagationStopped = returnTrue;
+ };
+ args.stopImmediatePropagation = function () {
+ args.isImmediatePropagationStopped = returnTrue;
+ };
+ args.isDefaultPrevented = returnFalse;
+ args.isPropagationStopped = returnFalse;
+ args.isImmediatePropagationStopped = returnFalse;
+ }
+ if (settings.beforeFire) {
+ settings.beforeFire(args);
+ }
+ handlers = bindings[name];
+ if (handlers) {
+ for (i = 0, l = handlers.length; i < l; i++) {
+ callback = handlers[i];
+ if (callback.once) {
+ off(name, callback.func);
+ }
+ if (args.isImmediatePropagationStopped()) {
+ args.stopPropagation();
+ return args;
+ }
+ if (callback.func.call(scope, args) === false) {
+ args.preventDefault();
+ return args;
+ }
+ }
+ }
+ return args;
+ };
+ var on = function (name, callback, prepend, extra) {
+ var handlers, names, i;
+ if (callback === false) {
+ callback = returnFalse;
+ }
+ if (callback) {
+ callback = { func: callback };
+ if (extra) {
+ Tools.extend(callback, extra);
+ }
+ names = name.toLowerCase().split(' ');
+ i = names.length;
+ while (i--) {
+ name = names[i];
+ handlers = bindings[name];
+ if (!handlers) {
+ handlers = bindings[name] = [];
+ toggleEvent(name, true);
+ }
+ if (prepend) {
+ handlers.unshift(callback);
} else {
- hi = handlers.length;
- while (hi--) {
- if (handlers[hi].func === callback) {
- handlers = handlers.slice(0, hi).concat(handlers.slice(hi + 1));
- bindings[name] = handlers;
+ handlers.push(callback);
+ }
+ }
+ }
+ return self;
+ };
+ var off = function (name, callback) {
+ var i, handlers, bindingName, names, hi;
+ if (name) {
+ names = name.toLowerCase().split(' ');
+ i = names.length;
+ while (i--) {
+ name = names[i];
+ handlers = bindings[name];
+ if (!name) {
+ for (bindingName in bindings) {
+ toggleEvent(bindingName, false);
+ delete bindings[bindingName];
+ }
+ return self;
+ }
+ if (handlers) {
+ if (!callback) {
+ handlers.length = 0;
+ } else {
+ hi = handlers.length;
+ while (hi--) {
+ if (handlers[hi].func === callback) {
+ handlers = handlers.slice(0, hi).concat(handlers.slice(hi + 1));
+ bindings[name] = handlers;
+ }
}
}
- }
- if (!handlers.length) {
- toggleEvent(name, false);
- delete bindings[name];
- }
- }
- }
- } else {
- for (name in bindings) {
- toggleEvent(name, false);
- }
- bindings = {};
- }
- return self;
- };
- var once = function (name, callback, prepend) {
- return on(name, callback, prepend, { once: true });
- };
- var has = function (name) {
- name = name.toLowerCase();
- return !(!bindings[name] || bindings[name].length === 0);
- };
- self.fire = fire;
- self.on = on;
- self.off = off;
- self.once = once;
- self.has = has;
- };
- Dispatcher.isNative = function (name) {
- return !!nativeEvents[name.toLowerCase()];
- };
-
- var getEventDispatcher = function (obj) {
- if (!obj._eventDispatcher) {
- obj._eventDispatcher = new Dispatcher({
- scope: obj,
- toggleEvent: function (name, state) {
- if (Dispatcher.isNative(name) && obj.toggleNativeEvent) {
- obj.toggleNativeEvent(name, state);
- }
- }
- });
- }
- return obj._eventDispatcher;
- };
- var $_c8v03c4tjnlpaxrw = {
- fire: function (name, args, bubble) {
- var self = this;
- if (self.removed && name !== 'remove') {
- return args;
- }
- args = getEventDispatcher(self).fire(name, args, bubble);
- if (bubble !== false && self.parent) {
- var parent = self.parent();
- while (parent && !args.isPropagationStopped()) {
- parent.fire(name, args, false);
- parent = parent.parent();
- }
- }
- return args;
- },
- 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 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 fireSwitchMode = function (editor, mode) {
- return editor.fire('SwitchMode', { mode: mode });
- };
- var fireObjectResizeStart = function (editor, target, width, height) {
- editor.fire('ObjectResizeStart', {
- target: target,
- width: width,
- height: height
- });
- };
- var fireObjectResized = function (editor, target, width, height) {
- editor.fire('ObjectResized', {
- target: target,
- width: width,
- height: height
- });
- };
- var $_5atig84wjnlpaxs7 = {
- firePreProcess: firePreProcess,
- firePostProcess: firePostProcess,
- fireRemove: fireRemove,
- fireSwitchMode: fireSwitchMode,
- fireObjectResizeStart: fireObjectResizeStart,
- fireObjectResized: fireObjectResized
- };
-
- var setEditorCommandState = function (editor, cmd, state) {
- try {
- editor.getDoc().execCommand(cmd, false, state);
- } catch (ex) {
- }
- };
- var toggleClass = function (elm, cls, state) {
- if ($_fes8i223jnlpax5z.has(elm, cls) && state === false) {
- $_fes8i223jnlpax5z.remove(elm, cls);
- } else if (state) {
- $_fes8i223jnlpax5z.add(elm, cls);
- }
- };
- var toggleReadOnly = function (editor, state) {
- toggleClass(Element$$1.fromDom(editor.getBody()), 'mce-content-readonly', state);
- if (state) {
- editor.selection.controlSelection.hideResizeRect();
- editor.readonly = true;
- editor.getBody().contentEditable = 'false';
- } else {
- editor.readonly = false;
- editor.getBody().contentEditable = 'true';
- setEditorCommandState(editor, 'StyleWithCSS', false);
- setEditorCommandState(editor, 'enableInlineTableEditing', false);
- setEditorCommandState(editor, 'enableObjectResizing', false);
- editor.focus();
- editor.nodeChanged();
- }
- };
- var setMode = function (editor, mode) {
- if (mode === getMode(editor)) {
- return;
- }
- if (editor.initialized) {
- toggleReadOnly(editor, mode === 'readonly');
- } else {
- editor.on('init', function () {
- toggleReadOnly(editor, mode === 'readonly');
- });
- }
- $_5atig84wjnlpaxs7.fireSwitchMode(editor, mode);
- };
- var getMode = function (editor) {
- return editor.readonly ? 'readonly' : 'design';
- };
- var isReadOnly = function (editor) {
- return editor.readonly === true;
- };
-
- var DOM$1 = DOMUtils$1.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;
- }
- if (editor.settings.event_root) {
- if (!editor.eventRoot) {
- editor.eventRoot = DOM$1.select(editor.settings.event_root)[0];
- }
- return editor.eventRoot;
- }
- return editor.getBody();
- };
- var isListening = function (editor) {
- return !editor.hidden && !editor.readonly;
- };
- var fireEvent = function (editor, eventName, e) {
- if (isListening(editor)) {
- editor.fire(eventName, e);
- } else if (isReadOnly(editor)) {
- e.preventDefault();
- }
- };
- var bindEventDelegate = function (editor, eventName) {
- var eventRootElm, delegate;
- if (!editor.delegates) {
- editor.delegates = {};
- }
- if (editor.delegates[eventName] || editor.removed) {
- return;
- }
- eventRootElm = getEventTarget(editor, eventName);
- if (editor.settings.event_root) {
- if (!customEventRootDelegates) {
- customEventRootDelegates = {};
- editor.editorManager.on('removeEditor', function () {
- var name;
- if (!editor.editorManager.activeEditor) {
- if (customEventRootDelegates) {
- for (name in customEventRootDelegates) {
- editor.dom.unbind(getEventTarget(editor, name));
+ if (!handlers.length) {
+ toggleEvent(name, false);
+ delete bindings[name];
}
- customEventRootDelegates = null;
+ }
+ }
+ } else {
+ for (name in bindings) {
+ toggleEvent(name, false);
+ }
+ bindings = {};
+ }
+ return self;
+ };
+ var once = function (name, callback, prepend) {
+ return on(name, callback, prepend, { once: true });
+ };
+ var has = function (name) {
+ name = name.toLowerCase();
+ return !(!bindings[name] || bindings[name].length === 0);
+ };
+ self.fire = fire;
+ self.on = on;
+ self.off = off;
+ self.once = once;
+ self.has = has;
+ };
+ Dispatcher.isNative = function (name) {
+ return !!nativeEvents[name.toLowerCase()];
+ };
+
+ var getEventDispatcher = function (obj) {
+ if (!obj._eventDispatcher) {
+ obj._eventDispatcher = new Dispatcher({
+ scope: obj,
+ toggleEvent: function (name, state) {
+ if (Dispatcher.isNative(name) && obj.toggleNativeEvent) {
+ obj.toggleNativeEvent(name, state);
}
}
});
}
- 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$1.isChildOf(target, body)) {
- fireEvent(editors[i], eventName, e);
+ return obj._eventDispatcher;
+ };
+ var Observable = {
+ fire: function (name, args, bubble) {
+ var self = this;
+ if (self.removed && name !== 'remove') {
+ return args;
+ }
+ args = getEventDispatcher(self).fire(name, args, bubble);
+ if (bubble !== false && self.parent) {
+ var parent = self.parent();
+ while (parent && !args.isPropagationStopped()) {
+ parent.fire(name, args, false);
+ parent = parent.parent();
}
}
- };
- customEventRootDelegates[eventName] = delegate;
- DOM$1.bind(eventRootElm, eventName, delegate);
- } else {
- delegate = function (e) {
- fireEvent(editor, eventName, e);
- };
- DOM$1.bind(eventRootElm, eventName, delegate);
- editor.delegates[eventName] = delegate;
- }
- };
- var EditorObservable = {
- bindPendingEventDelegates: function () {
- var self = this;
- $_1q1txeljnlpawsa.each(self._pendingNativeEvents, function (name) {
- bindEventDelegate(self, name);
- });
- },
- toggleNativeEvent: function (name, state) {
- var self = this;
- if (name === 'focus' || name === 'blur') {
- return;
+ return args;
+ },
+ 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);
}
- 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;
- var name;
- if (self.delegates) {
- for (name in self.delegates) {
- self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);
- }
- 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());
- }
- }
- };
- EditorObservable = $_1q1txeljnlpawsa.extend({}, $_c8v03c4tjnlpaxrw, EditorObservable);
- var EditorObservable$1 = EditorObservable;
+ };
- var each$11 = $_1q1txeljnlpawsa.each;
- var explode$2 = $_1q1txeljnlpawsa.explode;
- var keyCodeLookup = {
- f9: 120,
- f10: 121,
- f11: 122
- };
- var modifierNames = $_1q1txeljnlpawsa.makeMap('alt,ctrl,shift,meta,access');
- function Shortcuts (editor) {
- var self = this;
- var shortcuts = {};
- var pendingPatterns = [];
- var parseShortcut = function (pattern) {
- var id, key;
- var shortcut = {};
- each$11(explode$2(pattern, '+'), 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);
- }
- }
- });
- 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 ($_cseqobajnlpawll.mac) {
- shortcut.ctrl = true;
- } else {
- shortcut.shift = true;
- }
- }
- if (shortcut.meta) {
- if ($_cseqobajnlpawll.mac) {
- shortcut.meta = true;
- } else {
- shortcut.ctrl = true;
- shortcut.meta = false;
- }
- }
- return shortcut;
+ var firePreProcess = function (editor, args) {
+ return editor.fire('PreProcess', args);
};
- var createShortcut = function (pattern, desc, cmdFunc, scope) {
- var shortcuts;
- shortcuts = $_1q1txeljnlpawsa.map(explode$2(pattern, '>'), parseShortcut);
- shortcuts[shortcuts.length - 1] = $_1q1txeljnlpawsa.extend(shortcuts[shortcuts.length - 1], {
- func: cmdFunc,
- scope: scope || editor
- });
- return $_1q1txeljnlpawsa.extend(shortcuts[0], {
- desc: editor.translate(desc),
- subpatterns: shortcuts.slice(1)
+ var firePostProcess = function (editor, args) {
+ return editor.fire('PostProcess', args);
+ };
+ var fireRemove = function (editor) {
+ return editor.fire('remove');
+ };
+ var fireSwitchMode = function (editor, mode) {
+ return editor.fire('SwitchMode', { mode: mode });
+ };
+ var fireObjectResizeStart = function (editor, target, width, height) {
+ editor.fire('ObjectResizeStart', {
+ target: target,
+ width: width,
+ height: height
});
};
- var hasModifier = function (e) {
- return e.altKey || e.ctrlKey || e.metaKey;
- };
- var isFunctionKey = function (e) {
- return e.type === 'keydown' && e.keyCode >= 112 && e.keyCode <= 123;
- };
- var 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;
- };
- var executeShortcutAction = function (shortcut) {
- return shortcut.func ? shortcut.func.call(shortcut.scope) : null;
- };
- editor.on('keyup keypress keydown', function (e) {
- if ((hasModifier(e) || isFunctionKey(e)) && !e.isDefaultPrevented()) {
- each$11(shortcuts, function (shortcut) {
- if (matchShortcut(e, shortcut)) {
- pendingPatterns = shortcut.subpatterns.slice(0);
- if (e.type === 'keydown') {
- executeShortcutAction(shortcut);
- }
- return true;
- }
- });
- if (matchShortcut(e, pendingPatterns[0])) {
- if (pendingPatterns.length === 1) {
- if (e.type === 'keydown') {
- executeShortcutAction(pendingPatterns[0]);
- }
- }
- pendingPatterns.shift();
- }
- }
- });
- self.add = function (pattern, desc, cmdFunc, scope) {
- var cmd;
- cmd = cmdFunc;
- if (typeof cmdFunc === 'string') {
- cmdFunc = function () {
- editor.execCommand(cmd, false, null);
- };
- } else if ($_1q1txeljnlpawsa.isArray(cmd)) {
- cmdFunc = function () {
- editor.execCommand(cmd[0], cmd[1], cmd[2]);
- };
- }
- each$11(explode$2($_1q1txeljnlpawsa.trim(pattern.toLowerCase())), function (pattern) {
- var shortcut = createShortcut(pattern, desc, cmdFunc, scope);
- shortcuts[shortcut.id] = shortcut;
+ var fireObjectResized = function (editor, target, width, height) {
+ editor.fire('ObjectResized', {
+ target: target,
+ width: width,
+ height: height
});
- return true;
};
- self.remove = function (pattern) {
- var shortcut = createShortcut(pattern);
- if (shortcuts[shortcut.id]) {
- delete shortcuts[shortcut.id];
- return true;
- }
- return false;
+ var Events = {
+ firePreProcess: firePreProcess,
+ firePostProcess: firePostProcess,
+ fireRemove: fireRemove,
+ fireSwitchMode: fireSwitchMode,
+ fireObjectResizeStart: fireObjectResizeStart,
+ fireObjectResized: fireObjectResized
};
- }
- var any$1 = function (predicate) {
- return $_cs5qmd2ajnlpax6v.first(predicate).isSome();
- };
- var ancestor$3 = function (scope, predicate, isRoot) {
- return $_cs5qmd2ajnlpax6v.ancestor(scope, predicate, isRoot).isSome();
- };
- var closest$3 = function (scope, predicate, isRoot) {
- return $_cs5qmd2ajnlpax6v.closest(scope, predicate, isRoot).isSome();
- };
- var sibling$4 = function (scope, predicate) {
- return $_cs5qmd2ajnlpax6v.sibling(scope, predicate).isSome();
- };
- var child$4 = function (scope, predicate) {
- return $_cs5qmd2ajnlpax6v.child(scope, predicate).isSome();
- };
- var descendant$3 = function (scope, predicate) {
- return $_cs5qmd2ajnlpax6v.descendant(scope, predicate).isSome();
- };
- var $_f7rq0y50jnlpaxt3 = {
- any: any$1,
- ancestor: ancestor$3,
- closest: closest$3,
- sibling: sibling$4,
- child: child$4,
- descendant: descendant$3
- };
-
- var focus$$1 = function (element) {
- element.dom().focus();
- };
- var blur$$1 = function (element) {
- element.dom().blur();
- };
- var hasFocus = function (element) {
- var doc = $_dr4ybh18jnlpawzt.owner(element).dom();
- return element.dom() === doc.activeElement;
- };
- var active = function (_doc) {
- var doc = _doc !== undefined ? _doc.dom() : document;
- return Option.from(doc.activeElement).map(Element$$1.fromDom);
- };
- var focusInside = function (element) {
- var doc = $_dr4ybh18jnlpawzt.owner(element);
- var inside = active(doc).filter(function (a) {
- return $_f7rq0y50jnlpaxt3.closest(a, curry($_5h7cor1ejnlpax0k.eq, element));
- });
- inside.fold(function () {
- focus$$1(element);
- }, noop);
- };
- var search = function (element) {
- return active($_dr4ybh18jnlpawzt.owner(element)).filter(function (e) {
- return element.dom().contains(e.dom());
- });
- };
- var $_9bj08p4zjnlpaxsp = {
- hasFocus: hasFocus,
- focus: focus$$1,
- blur: blur$$1,
- active: active,
- search: search,
- focusInside: focusInside
- };
-
- 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 ? Option.from(getNode(rng.startContainer, rng.startOffset)).map(Element$$1.fromDom) : Option.none();
- };
- var getFocusInElement = function (root, rng) {
- return getCollapsedNode(rng).bind(function (node) {
- if (isTableSection(node)) {
- return Option.some(node);
- } else if ($_5h7cor1ejnlpax0k.contains(root, node) === false) {
- return Option.some(root);
- } else {
- return Option.none();
- }
- });
- };
- var normalizeSelection = function (editor, rng) {
- getFocusInElement(Element$$1.fromDom(editor.getBody()), rng).bind(function (elm) {
- return $_32xcvk30jnlpaxbn.firstPositionIn(elm.dom());
- }).fold(function () {
- editor.selection.normalize();
- return;
- }, function (caretPos) {
- return editor.selection.setRng(caretPos.toRange());
- });
- };
- var focusBody = function (body) {
- if (body.setActive) {
+ var setEditorCommandState = function (editor, cmd, state) {
try {
- body.setActive();
+ editor.getDoc().execCommand(cmd, false, state);
} catch (ex) {
+ }
+ };
+ var toggleClass = function (elm, cls, state) {
+ if (has$2(elm, cls) && state === false) {
+ remove$5(elm, cls);
+ } else if (state) {
+ add$2(elm, cls);
+ }
+ };
+ var toggleReadOnly = function (editor, state) {
+ toggleClass(Element$$1.fromDom(editor.getBody()), 'mce-content-readonly', state);
+ if (state) {
+ editor.selection.controlSelection.hideResizeRect();
+ editor.readonly = true;
+ editor.getBody().contentEditable = 'false';
+ } else {
+ editor.readonly = false;
+ editor.getBody().contentEditable = 'true';
+ setEditorCommandState(editor, 'StyleWithCSS', false);
+ setEditorCommandState(editor, 'enableInlineTableEditing', false);
+ setEditorCommandState(editor, 'enableObjectResizing', false);
+ editor.focus();
+ editor.nodeChanged();
+ }
+ };
+ var setMode = function (editor, mode) {
+ if (mode === getMode(editor)) {
+ return;
+ }
+ if (editor.initialized) {
+ toggleReadOnly(editor, mode === 'readonly');
+ } else {
+ editor.on('init', function () {
+ toggleReadOnly(editor, mode === 'readonly');
+ });
+ }
+ Events.fireSwitchMode(editor, mode);
+ };
+ var getMode = function (editor) {
+ return editor.readonly ? 'readonly' : 'design';
+ };
+ var isReadOnly = function (editor) {
+ return editor.readonly === true;
+ };
+
+ var DOM$1 = DOMUtils$1.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;
+ }
+ if (editor.settings.event_root) {
+ if (!editor.eventRoot) {
+ editor.eventRoot = DOM$1.select(editor.settings.event_root)[0];
+ }
+ return editor.eventRoot;
+ }
+ return editor.getBody();
+ };
+ var isListening = function (editor) {
+ return !editor.hidden && !editor.readonly;
+ };
+ var fireEvent = function (editor, eventName, e) {
+ if (isListening(editor)) {
+ editor.fire(eventName, e);
+ } else if (isReadOnly(editor)) {
+ e.preventDefault();
+ }
+ };
+ var bindEventDelegate = function (editor, eventName) {
+ var eventRootElm, delegate;
+ if (!editor.delegates) {
+ editor.delegates = {};
+ }
+ if (editor.delegates[eventName] || editor.removed) {
+ return;
+ }
+ eventRootElm = getEventTarget(editor, eventName);
+ if (editor.settings.event_root) {
+ if (!customEventRootDelegates) {
+ customEventRootDelegates = {};
+ editor.editorManager.on('removeEditor', function () {
+ var name;
+ if (!editor.editorManager.activeEditor) {
+ if (customEventRootDelegates) {
+ for (name in customEventRootDelegates) {
+ 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$1.isChildOf(target, body)) {
+ fireEvent(editors[i], eventName, e);
+ }
+ }
+ };
+ customEventRootDelegates[eventName] = delegate;
+ DOM$1.bind(eventRootElm, eventName, delegate);
+ } else {
+ delegate = function (e) {
+ fireEvent(editor, eventName, e);
+ };
+ DOM$1.bind(eventRootElm, eventName, delegate);
+ editor.delegates[eventName] = delegate;
+ }
+ };
+ var EditorObservable = {
+ 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;
+ var name;
+ if (self.delegates) {
+ for (name in self.delegates) {
+ self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);
+ }
+ 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());
+ }
+ }
+ };
+ EditorObservable = Tools.extend({}, Observable, EditorObservable);
+ var EditorObservable$1 = EditorObservable;
+
+ var each$b = Tools.each, explode$2 = Tools.explode;
+ var keyCodeLookup = {
+ f9: 120,
+ f10: 121,
+ f11: 122
+ };
+ var modifierNames = Tools.makeMap('alt,ctrl,shift,meta,access');
+ function Shortcuts (editor) {
+ var self = this;
+ var shortcuts = {};
+ var pendingPatterns = [];
+ var parseShortcut = function (pattern) {
+ var id, key;
+ var shortcut = {};
+ each$b(explode$2(pattern, '+'), 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);
+ }
+ }
+ });
+ 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 createShortcut = function (pattern, desc, cmdFunc, scope) {
+ var shortcuts;
+ shortcuts = Tools.map(explode$2(pattern, '>'), parseShortcut);
+ shortcuts[shortcuts.length - 1] = Tools.extend(shortcuts[shortcuts.length - 1], {
+ func: cmdFunc,
+ scope: scope || editor
+ });
+ return Tools.extend(shortcuts[0], {
+ desc: editor.translate(desc),
+ subpatterns: shortcuts.slice(1)
+ });
+ };
+ var hasModifier = function (e) {
+ return e.altKey || e.ctrlKey || e.metaKey;
+ };
+ var isFunctionKey = function (e) {
+ return e.type === 'keydown' && e.keyCode >= 112 && e.keyCode <= 123;
+ };
+ var 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;
+ };
+ var executeShortcutAction = function (shortcut) {
+ return shortcut.func ? shortcut.func.call(shortcut.scope) : null;
+ };
+ editor.on('keyup keypress keydown', function (e) {
+ if ((hasModifier(e) || isFunctionKey(e)) && !e.isDefaultPrevented()) {
+ each$b(shortcuts, function (shortcut) {
+ if (matchShortcut(e, shortcut)) {
+ pendingPatterns = shortcut.subpatterns.slice(0);
+ if (e.type === 'keydown') {
+ executeShortcutAction(shortcut);
+ }
+ return true;
+ }
+ });
+ if (matchShortcut(e, pendingPatterns[0])) {
+ if (pendingPatterns.length === 1) {
+ if (e.type === 'keydown') {
+ executeShortcutAction(pendingPatterns[0]);
+ }
+ }
+ pendingPatterns.shift();
+ }
+ }
+ });
+ self.add = function (pattern, desc, cmdFunc, scope) {
+ var cmd;
+ cmd = cmdFunc;
+ if (typeof cmdFunc === 'string') {
+ cmdFunc = function () {
+ editor.execCommand(cmd, false, null);
+ };
+ } else if (Tools.isArray(cmd)) {
+ cmdFunc = function () {
+ editor.execCommand(cmd[0], cmd[1], cmd[2]);
+ };
+ }
+ each$b(explode$2(Tools.trim(pattern.toLowerCase())), function (pattern) {
+ var shortcut = createShortcut(pattern, desc, cmdFunc, scope);
+ shortcuts[shortcut.id] = shortcut;
+ });
+ return true;
+ };
+ self.remove = function (pattern) {
+ var shortcut = createShortcut(pattern);
+ if (shortcuts[shortcut.id]) {
+ delete shortcuts[shortcut.id];
+ return true;
+ }
+ return false;
+ };
+ }
+
+ var hasFocus = function (element) {
+ var doc = owner(element).dom();
+ return element.dom() === doc.activeElement;
+ };
+ var active = function (_doc) {
+ var doc = _doc !== undefined ? _doc.dom() : document;
+ return Option.from(doc.activeElement).map(Element$$1.fromDom);
+ };
+ var search = function (element) {
+ return active(owner(element)).filter(function (e) {
+ return element.dom().contains(e.dom());
+ });
+ };
+
+ 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 ? Option.from(getNode(rng.startContainer, rng.startOffset)).map(Element$$1.fromDom) : Option.none();
+ };
+ var getFocusInElement = function (root, rng) {
+ return getCollapsedNode(rng).bind(function (node) {
+ if (isTableSection(node)) {
+ return Option.some(node);
+ } else if (contains$3(root, node) === false) {
+ return Option.some(root);
+ } else {
+ return Option.none();
+ }
+ });
+ };
+ var normalizeSelection = function (editor, rng) {
+ getFocusInElement(Element$$1.fromDom(editor.getBody()), rng).bind(function (elm) {
+ return CaretFinder.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();
}
- } else {
- body.focus();
- }
- };
- var hasElementFocus = function (elm) {
- return $_9bj08p4zjnlpaxsp.hasFocus(elm) || $_9bj08p4zjnlpaxsp.search(elm).isSome();
- };
- var hasIframeFocus = function (editor) {
- return editor.iframeElement && $_9bj08p4zjnlpaxsp.hasFocus(Element$$1.fromDom(editor.iframeElement));
- };
- var hasInlineFocus = function (editor) {
- var rawBody = editor.getBody();
- return rawBody && hasElementFocus(Element$$1.fromDom(rawBody));
- };
- var hasFocus$1 = function (editor) {
- return editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);
- };
- var focusEditor = function (editor) {
- var selection = editor.selection, contentEditable = editor.settings.content_editable;
- var body = editor.getBody();
- var rng = selection.getRng();
- editor.quirks.refreshContentEditable();
- var contentEditableHost = getContentEditableHost(editor, selection.getNode());
- if (editor.$.contains(body, contentEditableHost)) {
- focusBody(contentEditableHost);
- normalizeSelection(editor, rng);
- activateEditor(editor);
- return;
- }
- if (editor.bookmark !== undefined && hasFocus$1(editor) === false) {
- $_13pqgk4ojnlpaxqr.getRng(editor).each(function (bookmarkRng) {
- editor.selection.setRng(bookmarkRng);
- rng = bookmarkRng;
- });
- }
- if (!contentEditable) {
- if (!$_cseqobajnlpawll.opera) {
- focusBody(body);
- }
- editor.getWin().focus();
- }
- if ($_cseqobajnlpawll.gecko || contentEditable) {
- 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 $_8odu5n4yjnlpaxsg = {
- focus: focus$1,
- hasFocus: hasFocus$1
- };
-
- var getProp = function (propName, elm) {
- var rawElm = elm.dom();
- return rawElm[propName];
- };
- var getComputedSizeProp = function (propName, elm) {
- return parseInt($_asiuhf13jnlpawvc.get(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 = Element$$1.fromDom(editor.getBody());
- var targetElm = editor.inline ? bodyElm : $_dr4ybh18jnlpawzt.documentElement(bodyElm);
- var transposedPoint = transpose(editor.inline, targetElm, clientX, clientY);
- return isInsideElementContentArea(targetElm, transposedPoint.x, transposedPoint.y);
- };
- var fromDomSafe = function (node) {
- return Option.from(node).map(Element$$1.fromDom);
- };
- var isEditorAttachedToDom = function (editor) {
- var rawContainer = editor.inline ? editor.getBody() : editor.getContentAreaContainer();
- return fromDomSafe(rawContainer).map(function (container) {
- return $_5h7cor1ejnlpax0k.contains($_dr4ybh18jnlpawzt.owner(container), container);
- }).getOr(false);
- };
- var $_wem7o53jnlpaxtk = {
- isXYInContentArea: isXYInContentArea,
- isEditorAttachedToDom: isEditorAttachedToDom
- };
-
- function NotificationManagerImpl () {
- var unimplemented = function () {
- throw new Error('Theme did not provide a NotificationManager implementation.');
+ var hasElementFocus = function (elm) {
+ return hasFocus(elm) || search(elm).isSome();
};
- return {
- open: unimplemented,
- close: unimplemented,
- reposition: unimplemented,
- getArgs: unimplemented
+ var hasIframeFocus = function (editor) {
+ return editor.iframeElement && hasFocus(Element$$1.fromDom(editor.iframeElement));
};
- }
-
- function NotificationManager (editor) {
- var notifications = [];
- var getImplementation = function () {
- var theme = editor.theme;
- return theme && theme.getNotificationManagerImpl ? theme.getNotificationManagerImpl() : NotificationManagerImpl();
+ var hasInlineFocus = function (editor) {
+ var rawBody = editor.getBody();
+ return rawBody && hasElementFocus(Element$$1.fromDom(rawBody));
};
- var getTopNotification = function () {
- return Option.from(notifications[0]);
+ var hasFocus$1 = function (editor) {
+ return editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);
};
- 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 (args) {
- if (editor.removed || !$_wem7o53jnlpaxtk.isEditorAttachedToDom(editor)) {
+ var focusEditor = function (editor) {
+ var selection = editor.selection, contentEditable = editor.settings.content_editable;
+ var body = editor.getBody();
+ var rng = selection.getRng();
+ editor.quirks.refreshContentEditable();
+ var contentEditableHost = getContentEditableHost(editor, selection.getNode());
+ if (editor.$.contains(body, contentEditableHost)) {
+ focusBody(contentEditableHost);
+ normalizeSelection(editor, rng);
+ activateEditor(editor);
return;
}
- return find(notifications, function (notification) {
- return isEqual(getImplementation().getArgs(notification), args);
- }).getOrThunk(function () {
- editor.editorManager.setActive(editor);
- var notification = getImplementation().open(args, function () {
+ if (editor.bookmark !== undefined && hasFocus$1(editor) === false) {
+ SelectionBookmark.getRng(editor).each(function (bookmarkRng) {
+ editor.selection.setRng(bookmarkRng);
+ rng = bookmarkRng;
+ });
+ }
+ if (!contentEditable) {
+ if (!Env.opera) {
+ focusBody(body);
+ }
+ editor.getWin().focus();
+ }
+ if (Env.gecko || contentEditable) {
+ 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 EditorFocus = {
+ focus: focus$1,
+ hasFocus: hasFocus$1
+ };
+
+ var getProp = function (propName, elm) {
+ var rawElm = elm.dom();
+ return rawElm[propName];
+ };
+ var getComputedSizeProp = function (propName, elm) {
+ return parseInt(get$2(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 = Element$$1.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 Option.from(node).map(Element$$1.fromDom);
+ };
+ var isEditorAttachedToDom = function (editor) {
+ var rawContainer = editor.inline ? editor.getBody() : editor.getContentAreaContainer();
+ return fromDomSafe(rawContainer).map(function (container) {
+ return contains$3(owner(container), container);
+ }).getOr(false);
+ };
+ var EditorView = {
+ isXYInContentArea: isXYInContentArea,
+ isEditorAttachedToDom: isEditorAttachedToDom
+ };
+
+ function NotificationManagerImpl () {
+ var unimplemented = function () {
+ throw new Error('Theme did not provide a NotificationManager implementation.');
+ };
+ return {
+ open: unimplemented,
+ close: unimplemented,
+ reposition: unimplemented,
+ getArgs: unimplemented
+ };
+ }
+
+ function NotificationManager (editor) {
+ var notifications = [];
+ var getImplementation = function () {
+ var theme = editor.theme;
+ return theme && theme.getNotificationManagerImpl ? theme.getNotificationManagerImpl() : NotificationManagerImpl();
+ };
+ var getTopNotification = function () {
+ return Option.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 (args) {
+ if (editor.removed || !EditorView.isEditorAttachedToDom(editor)) {
+ return;
+ }
+ return find(notifications, function (notification) {
+ return isEqual(getImplementation().getArgs(notification), args);
+ }).getOrThunk(function () {
+ editor.editorManager.setActive(editor);
+ var notification = getImplementation().open(args, function () {
+ closeNotification(notification);
+ reposition();
+ });
+ addNotification(notification);
+ reposition();
+ return notification;
+ });
+ };
+ var close = function () {
+ getTopNotification().each(function (notification) {
+ getImplementation().close(notification);
closeNotification(notification);
reposition();
});
- addNotification(notification);
- reposition();
- 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 = editor.settings.service_message;
- if (serviceMessage) {
- open({
- text: serviceMessage,
- type: 'warning',
- timeout: 0,
- icon: ''
+ };
+ var getNotifications = function () {
+ return notifications;
+ };
+ var registerEvents = function (editor) {
+ editor.on('SkinLoaded', function () {
+ var serviceMessage = editor.settings.service_message;
+ if (serviceMessage) {
+ open({
+ text: serviceMessage,
+ type: 'warning',
+ timeout: 0,
+ icon: ''
+ });
+ }
+ });
+ editor.on('ResizeEditor ResizeWindow', function () {
+ Delay.requestAnimationFrame(reposition);
+ });
+ editor.on('remove', function () {
+ each(notifications.slice(), function (notification) {
+ getImplementation().close(notification);
});
- }
- });
- editor.on('ResizeEditor ResizeWindow', function () {
- $_2nbnh1ijnlpawpi.requestAnimationFrame(reposition);
- });
+ });
+ };
+ registerEvents(editor);
+ return {
+ open: open,
+ close: close,
+ getNotifications: getNotifications
+ };
+ }
+
+ function WindowManagerImpl () {
+ var unimplemented = function () {
+ throw new Error('Theme did not provide a WindowManager implementation.');
+ };
+ return {
+ open: unimplemented,
+ alert: unimplemented,
+ confirm: unimplemented,
+ close: unimplemented,
+ getParams: unimplemented,
+ setParams: unimplemented
+ };
+ }
+
+ function WindowManager (editor) {
+ var windows = [];
+ var getImplementation = function () {
+ var theme = editor.theme;
+ return theme && theme.getWindowManagerImpl ? theme.getWindowManagerImpl() : WindowManagerImpl();
+ };
+ var funcBind = function (scope, f) {
+ return function () {
+ return f ? f.apply(scope, arguments) : undefined;
+ };
+ };
+ var fireOpenEvent = function (win) {
+ editor.fire('OpenWindow', { win: win });
+ };
+ var fireCloseEvent = function (win) {
+ editor.fire('CloseWindow', { win: win });
+ };
+ var addWindow = function (win) {
+ windows.push(win);
+ fireOpenEvent(win);
+ };
+ var closeWindow = function (win) {
+ findIndex(windows, function (otherWindow) {
+ return otherWindow === win;
+ }).each(function (index) {
+ windows.splice(index, 1);
+ fireCloseEvent(win);
+ if (windows.length === 0) {
+ editor.focus();
+ }
+ });
+ };
+ var getTopWindow = function () {
+ return Option.from(windows[windows.length - 1]);
+ };
+ var open = function (args, params) {
+ editor.editorManager.setActive(editor);
+ SelectionBookmark.store(editor);
+ var win = getImplementation().open(args, params, closeWindow);
+ addWindow(win);
+ return win;
+ };
+ var alert = function (message, callback, scope) {
+ var win = getImplementation().alert(message, funcBind(scope ? scope : this, callback), closeWindow);
+ addWindow(win);
+ };
+ var confirm = function (message, callback, scope) {
+ var win = getImplementation().confirm(message, funcBind(scope ? scope : this, callback), closeWindow);
+ addWindow(win);
+ };
+ var close = function () {
+ getTopWindow().each(function (win) {
+ getImplementation().close(win);
+ closeWindow(win);
+ });
+ };
+ var getParams = function () {
+ return getTopWindow().map(getImplementation().getParams).getOr(null);
+ };
+ var setParams = function (params) {
+ getTopWindow().each(function (win) {
+ getImplementation().setParams(win, params);
+ });
+ };
+ var getWindows = function () {
+ return windows;
+ };
editor.on('remove', function () {
- each(notifications.slice(), function (notification) {
- getImplementation().close(notification);
+ each(windows.slice(0), function (win) {
+ getImplementation().close(win);
});
});
- };
- registerEvents(editor);
- return {
- open: open,
- close: close,
- getNotifications: getNotifications
- };
- }
-
- function WindowManagerImpl () {
- var unimplemented = function () {
- throw new Error('Theme did not provide a WindowManager implementation.');
- };
- return {
- open: unimplemented,
- alert: unimplemented,
- confirm: unimplemented,
- close: unimplemented,
- getParams: unimplemented,
- setParams: unimplemented
- };
- }
-
- function WindowManager (editor) {
- var windows = [];
- var getImplementation = function () {
- var theme = editor.theme;
- return theme && theme.getWindowManagerImpl ? theme.getWindowManagerImpl() : WindowManagerImpl();
- };
- var funcBind = function (scope, f) {
- return function () {
- return f ? f.apply(scope, arguments) : undefined;
+ return {
+ windows: windows,
+ open: open,
+ alert: alert,
+ confirm: confirm,
+ close: close,
+ getParams: getParams,
+ setParams: setParams,
+ getWindows: getWindows
};
- };
- var fireOpenEvent = function (win) {
- editor.fire('OpenWindow', { win: win });
- };
- var fireCloseEvent = function (win) {
- editor.fire('CloseWindow', { win: win });
- };
- var addWindow = function (win) {
- windows.push(win);
- fireOpenEvent(win);
- };
- var closeWindow = function (win) {
- findIndex(windows, function (otherWindow) {
- return otherWindow === win;
- }).each(function (index) {
- windows.splice(index, 1);
- fireCloseEvent(win);
- if (windows.length === 0) {
- editor.focus();
- }
- });
- };
- var getTopWindow = function () {
- return Option.from(windows[windows.length - 1]);
- };
- var open = function (args, params) {
- editor.editorManager.setActive(editor);
- $_13pqgk4ojnlpaxqr.store(editor);
- var win = getImplementation().open(args, params, closeWindow);
- addWindow(win);
- return win;
- };
- var alert = function (message, callback, scope) {
- var win = getImplementation().alert(message, funcBind(scope ? scope : this, callback), closeWindow);
- addWindow(win);
- };
- var confirm = function (message, callback, scope) {
- var win = getImplementation().confirm(message, funcBind(scope ? scope : this, callback), closeWindow);
- addWindow(win);
- };
- var close = function () {
- getTopWindow().each(function (win) {
- getImplementation().close(win);
- closeWindow(win);
- });
- };
- var getParams = function () {
- return getTopWindow().map(getImplementation().getParams).getOr(null);
- };
- var setParams = function (params) {
- getTopWindow().each(function (win) {
- getImplementation().setParams(win, params);
- });
- };
- var getWindows = function () {
- return windows;
- };
- editor.on('remove', function () {
- each(windows.slice(0), function (win) {
- getImplementation().close(win);
- });
- });
- return {
- windows: windows,
- open: open,
- alert: alert,
- confirm: confirm,
- close: close,
- getParams: getParams,
- setParams: setParams,
- getWindows: getWindows
- };
- }
-
- var PluginManager = AddOnManager.PluginManager;
- var resolvePluginName = function (targetUrl, suffix) {
- for (var name$$1 in PluginManager.urls) {
- var matchUrl = PluginManager.urls[name$$1] + '/plugin' + suffix + '.js';
- if (matchUrl === targetUrl) {
- return name$$1;
- }
}
- return null;
- };
- var pluginUrlToMessage = function (editor, url) {
- var plugin = resolvePluginName(url, editor.suffix);
- return plugin ? 'Failed to load plugin: ' + plugin + ' from url ' + url : 'Failed to load plugin url: ' + url;
- };
- 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 () {
+
+ var PluginManager = AddOnManager.PluginManager;
+ var resolvePluginName = function (targetUrl, suffix) {
+ for (var name$$1 in PluginManager.urls) {
+ var matchUrl = PluginManager.urls[name$$1] + '/plugin' + suffix + '.js';
+ if (matchUrl === targetUrl) {
+ return name$$1;
+ }
+ }
+ return null;
+ };
+ var pluginUrlToMessage = function (editor, url) {
+ var plugin = resolvePluginName(url, editor.suffix);
+ return plugin ? 'Failed to load plugin: ' + plugin + ' from url ' + url : 'Failed to load plugin url: ' + url;
+ };
+ var displayNotification = function (editor, message) {
+ editor.notificationManager.open({
+ type: 'error',
+ text: message
+ });
+ };
+ var displayError = function (editor, message) {
+ if (editor._skinLoaded) {
displayNotification(editor, message);
- });
- }
- };
- var uploadError = function (editor, message) {
- displayError(editor, 'Failed to upload image: ' + message);
- };
- var pluginLoadError = function (editor, url) {
- displayError(editor, pluginUrlToMessage(editor, url));
- };
- var initError = function (message) {
- var x = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- x[_i - 1] = arguments[_i];
- }
- var console$$1 = window.console;
- if (console$$1) {
- if (console$$1.error) {
- console$$1.error.apply(console$$1, arguments);
} else {
- console$$1.log.apply(console$$1, arguments);
+ editor.on('SkinLoaded', function () {
+ displayNotification(editor, message);
+ });
}
+ };
+ var uploadError = function (editor, message) {
+ displayError(editor, 'Failed to upload image: ' + message);
+ };
+ var pluginLoadError = function (editor, url) {
+ displayError(editor, pluginUrlToMessage(editor, url));
+ };
+ var initError = function (message) {
+ var x = [];
+ for (var _i = 1; _i < arguments.length; _i++) {
+ x[_i - 1] = arguments[_i];
+ }
+ var console$$1 = window.console;
+ if (console$$1) {
+ if (console$$1.error) {
+ console$$1.error.apply(console$$1, arguments);
+ } else {
+ console$$1.log.apply(console$$1, arguments);
+ }
+ }
+ };
+ var ErrorReporter = {
+ pluginLoadError: pluginLoadError,
+ uploadError: uploadError,
+ displayError: displayError,
+ initError: initError
+ };
+
+ var PluginManager$1 = AddOnManager.PluginManager;
+
+ var ThemeManager = AddOnManager.ThemeManager;
+
+ function XMLHttpRequest () {
+ var f = Global$1.getOrDie('XMLHttpRequest');
+ return new f();
}
- };
- var $_2xhw4u57jnlpaxu1 = {
- pluginLoadError: pluginLoadError,
- uploadError: uploadError,
- displayError: displayError,
- initError: initError
- };
- var PluginManager$1 = AddOnManager.PluginManager;
-
- var ThemeManager = AddOnManager.ThemeManager;
-
- function XMLHttpRequest () {
- var f = $_3b2dlgcjnlpawlt.getOrDie('XMLHttpRequest');
- return new f();
- }
-
- function Uploader (uploadStatus, settings) {
- var pendingPromises = {};
- var pathJoin = function (path1, path2) {
- if (path1) {
- return path1.replace(/\/$/, '') + '/' + path2.replace(/^\//, '');
+ function Uploader (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, formData;
+ xhr = 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 () {
+ var json;
+ if (xhr.status < 200 || xhr.status >= 300) {
+ failure('HTTP Error: ' + xhr.status);
+ return;
+ }
+ json = JSON.parse(xhr.responseText);
+ if (!json || typeof json.location !== 'string') {
+ failure('Invalid JSON: ' + xhr.responseText);
+ return;
+ }
+ success(pathJoin(settings.basePath, json.location));
+ };
+ 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, error) {
+ return {
+ url: '',
+ blobInfo: blobInfo,
+ status: false,
+ error: error
+ };
+ };
+ 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;
+ var noop = function () {
+ };
+ 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) {
+ closeNotification_1();
+ uploadStatus.removeFailed(blobInfo.blobUri());
+ resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, error));
+ resolve(handlerFailure(blobInfo, error));
+ };
+ progress = function (percent) {
+ if (percent < 0 || percent > 100) {
+ return;
+ }
+ if (!notification) {
+ notification = openNotification();
+ }
+ notification.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 path2;
+ return { upload: upload };
+ }
+
+ function FileReader () {
+ var f = Global$1.getOrDie('FileReader');
+ return new f();
+ }
+
+ function Uint8Array (arr) {
+ var f = Global$1.getOrDie('Uint8Array');
+ return new f(arr);
+ }
+
+ var requestAnimationFrame$1 = function (callback) {
+ var f = Global$1.getOrDie('requestAnimationFrame');
+ f(callback);
};
- var defaultHandler = function (blobInfo, success, failure, progress) {
- var xhr, formData;
- xhr = 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 () {
- var json;
- if (xhr.status < 200 || xhr.status >= 300) {
- failure('HTTP Error: ' + xhr.status);
- return;
- }
- json = JSON.parse(xhr.responseText);
- if (!json || typeof json.location !== 'string') {
- failure('Invalid JSON: ' + xhr.responseText);
- return;
- }
- success(pathJoin(settings.basePath, json.location));
- };
- formData = new FormData();
- formData.append('file', blobInfo.blob(), blobInfo.filename());
- xhr.send(formData);
+ var atob = function (base64) {
+ var f = Global$1.getOrDie('atob');
+ return f(base64);
};
- var noUpload = function () {
- return new promiseObj(function (resolve) {
- resolve([]);
- });
+ var Window = {
+ atob: atob,
+ requestAnimationFrame: requestAnimationFrame$1
};
- var handlerSuccess = function (blobInfo, url) {
- return {
- url: url,
- blobInfo: blobInfo,
- status: true
- };
- };
- var handlerFailure = function (blobInfo, error) {
- return {
- url: '',
- blobInfo: blobInfo,
- status: false,
- error: error
- };
- };
- var resolvePending = function (blobUri, result) {
- $_1q1txeljnlpawsa.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;
- var noop = function () {
+
+ 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 closeNotification_1 = function () {
- if (notification) {
- notification.close();
- progress = noop;
+ var xhr = XMLHttpRequest();
+ xhr.open('GET', url, true);
+ xhr.responseType = 'blob';
+ xhr.onload = function () {
+ if (this.status === 200) {
+ resolve(this.response);
+ } else {
+ rejectWithError();
}
};
- 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) {
- closeNotification_1();
- uploadStatus.removeFailed(blobInfo.blobUri());
- resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, error));
- resolve(handlerFailure(blobInfo, error));
- };
- progress = function (percent) {
- if (percent < 0 || percent > 100) {
- return;
- }
- if (!notification) {
- notification = openNotification();
- }
- notification.progressBar.value(percent);
- };
- handler(blobInfo, success, failure, progress);
+ xhr.onerror = rejectWithError;
+ xhr.send();
} catch (ex) {
- resolve(handlerFailure(blobInfo, ex.message));
+ rejectWithError();
}
});
};
- 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 = $_1q1txeljnlpawsa.grep(blobInfos, function (blobInfo) {
- return !uploadStatus.isUploaded(blobInfo.blobUri());
- });
- return promiseObj.all($_1q1txeljnlpawsa.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 };
- }
-
- function FileReader () {
- var f = $_3b2dlgcjnlpawlt.getOrDie('FileReader');
- return new f();
- }
-
- function Uint8Array (arr) {
- var f = $_3b2dlgcjnlpawlt.getOrDie('Uint8Array');
- return new f(arr);
- }
-
- var requestAnimationFrame$1 = function (callback) {
- var f = $_3b2dlgcjnlpawlt.getOrDie('requestAnimationFrame');
- f(callback);
- };
- var atob = function (base64) {
- var f = $_3b2dlgcjnlpawlt.getOrDie('atob');
- return f(base64);
- };
- var $_7fz2a15jjnlpaxvr = {
- atob: atob,
- requestAnimationFrame: requestAnimationFrame$1
- };
-
- 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 = XMLHttpRequest();
- xhr.open('GET', url, true);
- xhr.responseType = 'blob';
- xhr.onload = function () {
- if (this.status === 200) {
- resolve(this.response);
- } else {
- rejectWithError();
- }
- };
- xhr.onerror = rejectWithError;
- xhr.send();
- } catch (ex) {
- rejectWithError();
+ var parseDataUri = function (uri) {
+ var type, matches;
+ var uriParts = decodeURIComponent(uri).split(',');
+ matches = /data:([^;]+)/.exec(uriParts[0]);
+ if (matches) {
+ type = matches[1];
}
- });
- };
- var parseDataUri = function (uri) {
- var type, matches;
- var uriParts = decodeURIComponent(uri).split(',');
- matches = /data:([^;]+)/.exec(uriParts[0]);
- if (matches) {
- type = matches[1];
- }
- return {
- type: type,
- data: uriParts[1]
+ return {
+ type: type,
+ data: uriParts[1]
+ };
};
- };
- var dataUriToBlob = function (uri) {
- return new promiseObj(function (resolve) {
- var str, arr, i;
- var uriParts = parseDataUri(uri);
- try {
- str = $_7fz2a15jjnlpaxvr.atob(uriParts.data);
- } catch (e) {
- resolve(new Blob([]));
+ var dataUriToBlob = function (uri) {
+ return new promiseObj(function (resolve) {
+ var str, arr, i;
+ var uriParts = parseDataUri(uri);
+ try {
+ str = Window.atob(uriParts.data);
+ } catch (e) {
+ resolve(new Blob([]));
+ return;
+ }
+ arr = Uint8Array(str.length);
+ for (i = 0; i < arr.length; i++) {
+ arr[i] = str.charCodeAt(i);
+ }
+ resolve(new Blob([arr], { type: uriParts.type }));
+ });
+ };
+ 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 = FileReader();
+ reader.onloadend = function () {
+ resolve(reader.result);
+ };
+ reader.readAsDataURL(blob);
+ });
+ };
+ var Conversions = {
+ uriToBlob: uriToBlob,
+ blobToDataUri: blobToDataUri,
+ parseDataUri: parseDataUri
+ };
+
+ 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 {
+ Conversions.uriToBlob(img.src).then(function (blob) {
+ Conversions.blobToDataUri(blob).then(function (dataUri) {
+ base64 = Conversions.parseDataUri(dataUri).data;
+ blobInfo = blobCache.create(uniqueId(), blob, base64);
+ blobCache.add(blobInfo);
+ resolve({
+ image: img,
+ blobInfo: blobInfo
+ });
+ });
+ }, function (err) {
+ reject(err);
+ });
+ }
return;
}
- arr = Uint8Array(str.length);
- for (i = 0; i < arr.length; i++) {
- arr[i] = str.charCodeAt(i);
- }
- resolve(new Blob([arr], { type: uriParts.type }));
- });
- };
- 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 = FileReader();
- reader.onloadend = function () {
- resolve(reader.result);
- };
- reader.readAsDataURL(blob);
- });
- };
- var $_4ygjjg5gjnlpaxvh = {
- uriToBlob: uriToBlob,
- blobToDataUri: blobToDataUri,
- parseDataUri: parseDataUri
- };
-
- 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);
+ base64 = Conversions.parseDataUri(img.src).data;
+ blobInfo = blobCache.findFirst(function (cachedBlobInfo) {
+ return cachedBlobInfo.base64() === base64;
+ });
if (blobInfo) {
resolve({
image: img,
blobInfo: blobInfo
});
} else {
- $_4ygjjg5gjnlpaxvh.uriToBlob(img.src).then(function (blob) {
- $_4ygjjg5gjnlpaxvh.blobToDataUri(blob).then(function (dataUri) {
- base64 = $_4ygjjg5gjnlpaxvh.parseDataUri(dataUri).data;
- blobInfo = blobCache.create(uniqueId(), blob, base64);
- blobCache.add(blobInfo);
- resolve({
- image: img,
- blobInfo: blobInfo
- });
+ Conversions.uriToBlob(img.src).then(function (blob) {
+ blobInfo = blobCache.create(uniqueId(), blob, base64);
+ blobCache.add(blobInfo);
+ resolve({
+ image: img,
+ blobInfo: blobInfo
});
}, function (err) {
reject(err);
});
}
- return;
- }
- base64 = $_4ygjjg5gjnlpaxvh.parseDataUri(img.src).data;
- blobInfo = blobCache.findFirst(function (cachedBlobInfo) {
- return cachedBlobInfo.base64() === base64;
- });
- if (blobInfo) {
- resolve({
- image: img,
- blobInfo: blobInfo
- });
- } else {
- $_4ygjjg5gjnlpaxvh.uriToBlob(img.src).then(function (blob) {
- blobInfo = blobCache.create(uniqueId(), blob, base64);
- blobCache.add(blobInfo);
- resolve({
- image: img,
- blobInfo: blobInfo
+ };
+ var getAllImages = function (elm) {
+ return elm ? from$1(elm.getElementsByTagName('img')) : [];
+ };
+ function ImageScanner (uploadStatus, blobCache) {
+ var cachedPromises = {};
+ var findAll = function (elm, predicate) {
+ var images;
+ if (!predicate) {
+ predicate = constant(true);
+ }
+ 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;
});
- }, function (err) {
- reject(err);
- });
- }
- };
- var getAllImages = function (elm) {
- return elm ? elm.getElementsByTagName('img') : [];
- };
- function ImageScanner (uploadStatus, blobCache) {
- var cachedPromises = {};
- var findAll = function (elm, predicate) {
- var images;
- if (!predicate) {
- predicate = $_dv6bef2njnlpax9l.constant(true);
- }
- images = $_n452lmjnlpawsj.filter(getAllImages(elm), function (img) {
- var src = img.src;
- if (!$_cseqobajnlpawll.fileApi) {
- return false;
- }
- if (img.hasAttribute('data-mce-bogus')) {
- return false;
- }
- if (img.hasAttribute('data-mce-placeholder')) {
- return false;
- }
- if (!src || src === $_cseqobajnlpawll.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 = $_n452lmjnlpawsj.map(images, function (img) {
- if (cachedPromises[img.src]) {
- return new promiseObj(function (resolve) {
- cachedPromises[img.src].then(function (imageInfo) {
- if (typeof imageInfo === 'string') {
- return imageInfo;
- }
- resolve({
- image: img,
- blobInfo: imageInfo.blobInfo
+ var promises = map(images, function (img) {
+ if (cachedPromises[img.src]) {
+ 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 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 $_cb5mec5ljnlpaxvz = { uuid: uuid };
-
- function BlobCache () {
- var cache = [];
- var constant = $_dv6bef2njnlpax9l.constant;
- var mimeToExt = function (mime) {
- var mimes = {
- 'image/jpeg': 'jpg',
- 'image/jpg': 'jpg',
- 'image/gif': 'gif',
- 'image/png': 'png'
- };
- return mimes[mime.toLowerCase()] || 'dat';
- };
- var create = function (o, blob, base64, filename) {
- if (isString(o)) {
- var id = o;
- return toBlobInfo({
- id: id,
- name: filename,
- blob: blob,
- base64: base64
- });
- } else if (isObject(o)) {
- return toBlobInfo(o);
- } else {
- throw new Error('Unknown input type');
- }
- };
- var toBlobInfo = function (o) {
- var id, name;
- if (!o.blob || !o.base64) {
- throw new Error('blob and base64 representations of the image are required for BlobInfo to be created');
- }
- id = o.id || $_cb5mec5ljnlpaxvz.uuid('blobid');
- name = o.name || id;
- return {
- id: constant(id),
- name: constant(name),
- filename: constant(name + '.' + mimeToExt(o.blob.type)),
- blob: constant(o.blob),
- base64: constant(o.base64),
- blobUri: constant(o.blobUri || $_9khkh7bjnlpawls.createObjectURL(o.blob)),
- uri: constant(o.uri)
- };
- };
- var add = function (blobInfo) {
- if (!get(blobInfo.id())) {
- cache.push(blobInfo);
- }
- };
- var get = function (id) {
- return findFirst(function (cachedBlobInfo) {
- return cachedBlobInfo.id() === id;
- });
- };
- var findFirst = function (predicate) {
- return $_n452lmjnlpawsj.filter(cache, predicate)[0];
- };
- var getByUri = function (blobUri) {
- return findFirst(function (blobInfo) {
- return blobInfo.blobUri() === blobUri;
- });
- };
- var removeByUri = function (blobUri) {
- cache = $_n452lmjnlpawsj.filter(cache, function (blobInfo) {
- if (blobInfo.blobUri() === blobUri) {
- $_9khkh7bjnlpawls.revokeObjectURL(blobInfo.blobUri());
- return false;
- }
- return true;
- });
- };
- var destroy = function () {
- $_n452lmjnlpawsj.each(cache, function (cachedBlobInfo) {
- $_9khkh7bjnlpawls.revokeObjectURL(cachedBlobInfo.blobUri());
- });
- cache = [];
- };
- return {
- create: create,
- add: add,
- get: get,
- getByUri: getByUri,
- findFirst: findFirst,
- removeByUri: removeByUri,
- destroy: destroy
- };
- }
-
- function UploadStatus () {
- 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
- };
- }
-
- function EditorUpload (editor) {
- var blobCache = BlobCache();
- var uploader, imageScanner;
- var uploadStatus = UploadStatus();
- var urlFilters = [];
- var aliveGuard = function (callback) {
- return function (result) {
- if (editor.selection) {
- return callback(result);
- }
- return [];
- };
- };
- var cacheInvalidator = function () {
- return '?' + 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) {
- content = replaceString(content, 'src="' + targetUrl + '"', 'src="' + replacementUrl + '"');
- 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 openNotification = function () {
- return editor.notificationManager.open({
- text: editor.translate('Image uploading...'),
- type: 'info',
- timeout: -1,
- progressBar: true
- });
- };
- var replaceImageUri = function (image, resultUri) {
- blobCache.removeByUri(image.src);
- replaceUrlInUndoStack(image.src, resultUri);
- editor.$(image).attr({
- 'src': $_c6e09z3ajnlpaxek.shouldReuseFileName(editor) ? resultUri + cacheInvalidator() : resultUri,
- 'data-mce-src': editor.convertURL(resultUri, 'src')
- });
- };
- var uploadImages = function (callback) {
- if (!uploader) {
- uploader = Uploader(uploadStatus, {
- url: $_c6e09z3ajnlpaxek.getImageUploadUrl(editor),
- basePath: $_c6e09z3ajnlpaxek.getImageUploadBasePath(editor),
- credentials: $_c6e09z3ajnlpaxek.getImagesUploadCredentials(editor),
- handler: $_c6e09z3ajnlpaxek.getImagesUploadHandler(editor)
- });
- }
- return scanForImages().then(aliveGuard(function (imageInfos) {
- var blobInfos;
- blobInfos = map(imageInfos, function (imageInfo) {
- return imageInfo.blobInfo;
- });
- return uploader.upload(blobInfos, openNotification).then(aliveGuard(function (result) {
- var filteredResult = map(result, function (uploadInfo, index) {
- var image = imageInfos[index].image;
- if (uploadInfo.status && $_c6e09z3ajnlpaxek.shouldReplaceBlobUris(editor)) {
- replaceImageUri(image, uploadInfo.url);
- } else if (uploadInfo.error) {
- $_2xhw4u57jnlpaxu1.uploadError(editor, uploadInfo.error);
- }
- return {
- element: image,
- status: uploadInfo.status
- };
- });
- if (callback) {
- callback(filteredResult);
}
- return filteredResult;
- }));
- }));
+ 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 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 uploadImagesAuto = function (callback) {
- if ($_c6e09z3ajnlpaxek.isAutomaticUploadsEnabled(editor)) {
- return uploadImages(callback);
- }
+ var uuid = function (prefix) {
+ return prefix + count$1++ + seed();
};
- var isValidDataUriImage = function (imgElm) {
- if (forall(urlFilters, function (filter$$1) {
- return filter$$1(imgElm);
- }) === false) {
- return false;
- }
- if (imgElm.getAttribute('src').indexOf('data:') === 0) {
- var dataImgFilter = $_c6e09z3ajnlpaxek.getImagesDataImgFilter(editor);
- return dataImgFilter(imgElm);
- }
- return true;
- };
- var addFilter = function (filter$$1) {
- urlFilters.push(filter$$1);
- };
- 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') {
- $_2xhw4u57jnlpaxu1.displayError(editor, resultItem);
+ var Uuid = { uuid: uuid };
+
+ function BlobCache () {
+ var cache = [];
+ var mimeToExt = function (mime) {
+ var mimes = {
+ 'image/jpeg': 'jpg',
+ 'image/jpg': 'jpg',
+ 'image/gif': 'gif',
+ 'image/png': 'png'
+ };
+ return mimes[mime.toLowerCase()] || 'dat';
+ };
+ var create = function (o, blob, base64, filename) {
+ if (isString(o)) {
+ var id = o;
+ return toBlobInfo({
+ id: id,
+ name: filename,
+ blob: blob,
+ base64: base64
+ });
+ } else if (isObject(o)) {
+ return toBlobInfo(o);
+ } else {
+ throw new Error('Unknown input type');
+ }
+ };
+ var toBlobInfo = function (o) {
+ var id, name;
+ if (!o.blob || !o.base64) {
+ throw new Error('blob and base64 representations of the image are required for BlobInfo to be created');
+ }
+ id = o.id || Uuid.uuid('blobid');
+ name = o.name || id;
+ return {
+ id: constant(id),
+ name: constant(name),
+ filename: constant(name + '.' + mimeToExt(o.blob.type)),
+ blob: constant(o.blob),
+ base64: constant(o.base64),
+ blobUri: constant(o.blobUri || URL.createObjectURL(o.blob)),
+ uri: constant(o.uri)
+ };
+ };
+ var add = function (blobInfo) {
+ if (!get(blobInfo.id())) {
+ cache.push(blobInfo);
+ }
+ };
+ var get = function (id) {
+ return findFirst(function (cachedBlobInfo) {
+ return cachedBlobInfo.id() === id;
+ });
+ };
+ var findFirst = function (predicate) {
+ return filter(cache, predicate)[0];
+ };
+ var getByUri = function (blobUri) {
+ return findFirst(function (blobInfo) {
+ return blobInfo.blobUri() === blobUri;
+ });
+ };
+ var removeByUri = function (blobUri) {
+ cache = filter(cache, function (blobInfo) {
+ if (blobInfo.blobUri() === blobUri) {
+ URL.revokeObjectURL(blobInfo.blobUri());
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');
+ };
+ var destroy = function () {
+ each(cache, function (cachedBlobInfo) {
+ URL.revokeObjectURL(cachedBlobInfo.blobUri());
});
- 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 ($_c6e09z3ajnlpaxek.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') {
- 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 isBlockElement = function (blockElements, node) {
- return blockElements.hasOwnProperty(node.nodeName);
- };
- var isValidTarget = function (blockElements, node) {
- if ($_fy28ei1rjnlpax2o.isText(node)) {
- return true;
- } else if ($_fy28ei1rjnlpax2o.isElement(node)) {
- return !isBlockElement(blockElements, node) && !$_43l8qj2xjnlpaxb1.isBookmarkNode(node);
- } else {
- return false;
- }
- };
- var hasBlockParent = function (blockElements, root, node) {
- return exists($_4b88sj42jnlpaxkd.parents(Element$$1.fromDom(node), Element$$1.fromDom(root)), function (elm) {
- return isBlockElement(blockElements, elm.dom());
- });
- };
- var shouldRemoveTextNode = function (blockElements, node) {
- if ($_fy28ei1rjnlpax2o.isText(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 settings = editor.settings, dom = editor.dom, selection = editor.selection;
- var schema = editor.schema, blockElements = schema.getBlockElements();
- var node = selection.getStart();
- var rootNode = editor.getBody();
- var rng;
- var startContainer, startOffset, endContainer, endOffset, rootBlockNode;
- var tempNode, wrapped, restoreSelection;
- var rootNodeName, forcedRootBlock;
- forcedRootBlock = settings.forced_root_block;
- if (!node || !$_fy28ei1rjnlpax2o.isElement(node) || !forcedRootBlock) {
- return;
- }
- rootNodeName = rootNode.nodeName.toLowerCase();
- if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, node)) {
- return;
- }
- rng = selection.getRng();
- startContainer = rng.startContainer;
- startOffset = rng.startOffset;
- endContainer = rng.endContainer;
- endOffset = rng.endOffset;
- restoreSelection = $_8odu5n4yjnlpaxsg.hasFocus(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, editor.settings.forced_root_block_attrs);
- 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$2 = function (editor) {
- if (editor.settings.forced_root_block) {
- editor.on('NodeChange', curry(addRootBlocks, editor));
- }
- };
- var $_cjqvqq5njnlpaxw3 = { setup: setup$2 };
-
- var getStartNode = function (rng) {
- var sc = rng.startContainer, so = rng.startOffset;
- if ($_fy28ei1rjnlpax2o.isText(sc)) {
- return so === 0 ? Option.some(Element$$1.fromDom(sc)) : Option.none();
- } else {
- return Option.from(sc.childNodes[so]).map(Element$$1.fromDom);
- }
- };
- var getEndNode = function (rng) {
- var ec = rng.endContainer, eo = rng.endOffset;
- if ($_fy28ei1rjnlpax2o.isText(ec)) {
- return eo === ec.data.length ? Option.some(Element$$1.fromDom(ec)) : Option.none();
- } else {
- return Option.from(ec.childNodes[eo - 1]).map(Element$$1.fromDom);
- }
- };
- var getFirstChildren = function (node) {
- return $_dr4ybh18jnlpawzt.firstChild(node).fold(constant([node]), function (child) {
- return [node].concat(getFirstChildren(child));
- });
- };
- var getLastChildren$1 = function (node) {
- return $_dr4ybh18jnlpawzt.lastChild(node).fold(constant([node]), function (child) {
- if ($_7u5fzs11jnlpawv6.name(child) === 'br') {
- return $_dr4ybh18jnlpawzt.prevSibling(child).map(function (sibling) {
- return [node].concat(getLastChildren$1(sibling));
- }).getOr([]);
- } else {
- return [node].concat(getLastChildren$1(child));
- }
- });
- };
- var hasAllContentsSelected = function (elm, rng) {
- return liftN([
- getStartNode(rng),
- getEndNode(rng)
- ], function (startNode, endNode) {
- var start = find(getFirstChildren(elm), curry($_5h7cor1ejnlpax0k.eq, startNode));
- var end = find(getLastChildren$1(elm), curry($_5h7cor1ejnlpax0k.eq, endNode));
- return start.isSome() && end.isSome();
- }).getOr(false);
- };
- var moveEndPoint$1 = function (dom, rng, node, start) {
- var root = node, walker = new TreeWalker(node, root);
- var nonEmptyElementsMap = dom.schema.getNonEmptyElements();
- do {
- if (node.nodeType === 3 && $_1q1txeljnlpawsa.trim(node.nodeValue).length !== 0) {
- if (start) {
- rng.setStart(node, 0);
- } else {
- rng.setEnd(node, node.nodeValue.length);
- }
- return;
- }
- if (nonEmptyElementsMap[node.nodeName] && !/^(TD|TH)$/.test(node.nodeName)) {
- if (start) {
- rng.setStartBefore(node);
- } else {
- if (node.nodeName === 'BR') {
- rng.setEndBefore(node);
- } else {
- rng.setEndAfter(node);
- }
- }
- return;
- }
- if ($_cseqobajnlpawll.ie && $_cseqobajnlpawll.ie < 11 && dom.isBlock(node) && dom.isEmpty(node)) {
- if (start) {
- rng.setStart(node, 0);
- } else {
- rng.setEnd(node, 0);
- }
- 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;
- };
-
- function NodeChange (editor) {
- var lastRng, lastPath = [];
- var isSameElementPath = function (startElm) {
- var i, currentPath;
- currentPath = editor.$(startElm).parentsUntil(editor.getBody()).add(startElm);
- if (currentPath.length === lastPath.length) {
- for (i = currentPath.length; i >= 0; i--) {
- if (currentPath[i] !== lastPath[i]) {
- break;
- }
- }
- if (i === -1) {
- lastPath = currentPath;
- return true;
- }
- }
- lastPath = currentPath;
- return false;
- };
- if (!('onselectionchange' in editor.getDoc())) {
- editor.on('NodeChange Click MouseUp KeyUp Focus', function (e) {
- var nativeRng, fakeRng;
- nativeRng = editor.selection.getRng();
- fakeRng = {
- startContainer: nativeRng.startContainer,
- startOffset: nativeRng.startOffset,
- endContainer: nativeRng.endContainer,
- endOffset: nativeRng.endOffset
- };
- if (e.type === 'nodechange' || !$_3s8g9y4njnlpaxqj.isEq(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 || !$_cseqobajnlpawll.range && editor.selection.isCollapsed()) {
- return;
- }
- if (hasAnyRanges(editor) && !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') {
- $_2nbnh1ijnlpawpi.setEditorTimeout(editor, function () {
- editor.nodeChanged();
- });
- } else {
- editor.nodeChanged();
- }
- }
- });
- this.nodeChanged = function (args) {
- var selection = editor.selection;
- var node, parents, root;
- if (editor.initialized && selection && !editor.settings.disable_nodechange && !editor.readonly) {
- root = editor.getBody();
- node = selection.getStart(true) || root;
- if (node.ownerDocument !== editor.getDoc() || !editor.dom.isChildOf(node, root)) {
- node = root;
- }
- parents = [];
- editor.dom.getParent(node, function (node) {
- if (node === root) {
- return true;
- }
- parents.push(node);
- });
- args = args || {};
- args.element = node;
- args.parents = parents;
- editor.fire('NodeChange', args);
- }
- };
- }
-
- var getAbsolutePosition = function (elm) {
- var doc, docElem, win, clientRect;
- clientRect = elm.getBoundingClientRect();
- doc = elm.ownerDocument;
- docElem = doc.documentElement;
- 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);
+ cache = [];
+ };
return {
- left: event.pageX - iframePosition.left + scrollPosition.left,
- top: event.pageY - iframePosition.top + scrollPosition.top
+ create: create,
+ add: add,
+ get: get,
+ getByUri: getByUri,
+ findFirst: findFirst,
+ removeByUri: removeByUri,
+ destroy: destroy
};
}
- 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 $_d639a65sjnlpaxxw = { calc: calc };
- var isContentEditableFalse$7 = $_fy28ei1rjnlpax2o.isContentEditableFalse;
- var isContentEditableTrue$4 = $_fy28ei1rjnlpax2o.isContentEditableTrue;
- var isDraggable = function (rootElm, elm) {
- return isContentEditableFalse$7(elm) && elm !== rootElm;
- };
- var isValidDropTarget = function (editor, targetElement, dragElement) {
- if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) {
- return false;
+ function UploadStatus () {
+ 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
+ };
}
- if (isContentEditableFalse$7(targetElement)) {
- return false;
- }
- return true;
- };
- var cloneElement = function (elm) {
- var cloneElm = elm.cloneNode(true);
- cloneElm.removeAttribute('data-mce-selected');
- return cloneElm;
- };
- var createGhost = function (editor, elm, width, height) {
- var clonedElm = elm.cloneNode(true);
- editor.dom.setStyles(clonedElm, {
- width: width,
- height: height
- });
- editor.dom.setAttrib(clonedElm, 'data-mce-selected', null);
- var ghostElm = editor.dom.create('div', {
- 'class': 'mce-drag-container',
- 'data-mce-bogus': 'all',
- 'unselectable': 'on',
- 'contenteditable': 'false'
- });
- editor.dom.setStyles(ghostElm, {
- position: 'absolute',
- opacity: 0.5,
- overflow: 'hidden',
- border: 0,
- padding: 0,
- margin: 0,
- width: width,
- height: height
- });
- editor.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 hasDraggableElement = function (state) {
- return state.element;
- };
- 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 = $_n452lmjnlpawsj.find(editor.dom.getParents(e.target), $_dv6bef2njnlpax9l.or(isContentEditableFalse$7, isContentEditableTrue$4));
- if (isDraggable(editor.getBody(), ceElm)) {
- var elmPos = editor.dom.getPos(ceElm);
- var bodyElm = editor.getBody();
- var docElm = editor.getDoc().documentElement;
- state.element = ceElm;
- state.screenX = e.screenX;
- state.screenY = e.screenY;
- state.maxX = (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2;
- state.maxY = (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2;
- state.relX = e.pageX - elmPos.x;
- state.relY = e.pageY - elmPos.y;
- state.width = ceElm.offsetWidth;
- state.height = ceElm.offsetHeight;
- state.ghost = createGhost(editor, ceElm, state.width, state.height);
- }
- }
- };
- };
- var move$1 = function (state, editor) {
- var throttledPlaceCaretAt = $_2nbnh1ijnlpawpi.throttle(function (clientX, clientY) {
- editor._selectionOverrides.hideFakeCaret();
- editor.selection.placeCaretAt(clientX, clientY);
- }, 0);
- return function (e) {
- var movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY));
- if (hasDraggableElement(state) && !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, $_d639a65sjnlpaxxw.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) {
- if (state.dragging) {
- if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) {
- var targetClone_1 = cloneElement(state.element);
- var args = editor.fire('drop', {
- targetClone: targetClone_1,
- clientX: e.clientX,
- clientY: e.clientY
- });
- if (!args.isDefaultPrevented()) {
- targetClone_1 = args.targetClone;
- editor.undoManager.transact(function () {
- removeElement(state.element);
- editor.insertContent(editor.dom.getOuterHTML(targetClone_1));
- editor._selectionOverrides.hideFakeCaret();
+
+ function EditorUpload (editor) {
+ var blobCache = BlobCache();
+ var uploader, imageScanner;
+ var uploadStatus = UploadStatus();
+ var urlFilters = [];
+ var aliveGuard = function (callback) {
+ return function (result) {
+ if (editor.selection) {
+ return callback(result);
+ }
+ return [];
+ };
+ };
+ var cacheInvalidator = function () {
+ return '?' + 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) {
+ content = replaceString(content, 'src="' + targetUrl + '"', 'src="' + replacementUrl + '"');
+ 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);
});
- }
- }
- }
- removeDragState(state);
- };
- };
- var stop$$1 = function (state, editor) {
- return function () {
- if (state.dragging) {
- editor.fire('dragend');
- }
- removeDragState(state);
- };
- };
- var removeDragState = function (state) {
- state.dragging = false;
- state.element = null;
- removeElement(state.ghost);
- };
- var bindFakeDragEvents = function (editor) {
- var state = {};
- var pageDom, dragStartHandler, dragHandler, dropHandler, dragEndHandler, rootDocument;
- pageDom = DOMUtils$1.DOM;
- rootDocument = document;
- dragStartHandler = start$1(state, editor);
- dragHandler = move$1(state, editor);
- dropHandler = drop(state, editor);
- dragEndHandler = stop$$1(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$7(realTarget) || isContentEditableFalse$7(editor.dom.getContentEditableParent(realTarget))) {
- e.preventDefault();
- }
- });
- };
- var init = function (editor) {
- bindFakeDragEvents(editor);
- blockIeDrop(editor);
- };
- var $_5gate55rjnlpaxxq = { init: init };
-
- var getNodeClientRects = function (node) {
- var toArrayWithNode = function (clientRects) {
- return $_n452lmjnlpawsj.map(clientRects, function (clientRect) {
- clientRect = clone$2(clientRect);
- clientRect.node = node;
- return clientRect;
- });
- };
- if ($_fy28ei1rjnlpax2o.isElement(node)) {
- return toArrayWithNode(node.getClientRects());
- }
- if ($_fy28ei1rjnlpax2o.isText(node)) {
- var rng = node.ownerDocument.createRange();
- rng.setStart(node, 0);
- rng.setEnd(node, node.data.length);
- return toArrayWithNode(rng.getClientRects());
- }
- };
- var getClientRects = function (node) {
- return $_n452lmjnlpawsj.reduce(node, function (result, node) {
- return result.concat(getNodeClientRects(node));
- }, []);
- };
-
- var VDirection;
- (function (VDirection) {
- VDirection[VDirection['Up'] = -1] = 'Up';
- VDirection[VDirection['Down'] = 1] = 'Down';
- }(VDirection || (VDirection = {})));
- var findUntil = 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, node;
- var result = [];
- var targetClientRect;
- 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, $_n452lmjnlpawsj.last(result))) {
- line++;
- }
- clientRect.line = line;
- if (predicateFn(clientRect)) {
- return true;
- }
- result.push(clientRect);
- }
- };
- targetClientRect = $_n452lmjnlpawsj.last(caretPosition.getClientRects());
- if (!targetClientRect) {
- return result;
- }
- node = caretPosition.getNode();
- add(node);
- findUntil(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, targetClientRect;
- var getClientRect = function (caretPosition) {
- if (direction === 1) {
- return $_n452lmjnlpawsj.last(caretPosition.getClientRects());
- }
- return $_n452lmjnlpawsj.last(caretPosition.getClientRects());
- };
- if (direction === 1) {
- walkFn = caretWalker.next;
- isBelowFn = isBelow;
- isAboveFn = isAbove;
- caretPosition = CaretPosition$1.after(node);
- } else {
- walkFn = caretWalker.prev;
- isBelowFn = isAbove;
- isAboveFn = isBelow;
- caretPosition = CaretPosition$1.before(node);
- }
- targetClientRect = getClientRect(caretPosition);
- do {
- if (!caretPosition.isVisible()) {
- continue;
- }
- clientRect = getClientRect(caretPosition);
- if (isAboveFn(clientRect, targetClientRect)) {
- continue;
- }
- if (result.length > 0 && isBelowFn(clientRect, $_n452lmjnlpawsj.last(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 = $_fy28ei1rjnlpax2o.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 isInside = function (clientX, clientRect) {
- return clientX >= clientRect.left && clientX <= clientRect.right;
- };
- var findClosestClientRect = function (clientRects, clientX) {
- return $_n452lmjnlpawsj.reduce(clientRects, function (oldClientRect, clientRect) {
- var oldDistance, newDistance;
- oldDistance = Math.min(distanceToRectLeft(oldClientRect, clientX), distanceToRectRight(oldClientRect, clientX));
- newDistance = Math.min(distanceToRectLeft(clientRect, clientX), distanceToRectRight(clientRect, clientX));
- if (isInside(clientX, clientRect)) {
- return clientRect;
- }
- if (isInside(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, node) {
- while (node = findNode$1(node, direction, isEditableCaretCandidate, root)) {
- if (predicateFn(node)) {
- return;
- }
- }
- };
- var findLineNodeRects = function (root, targetNodeRect) {
- var clientRects = [];
- var collect = function (checkPosFn, node) {
- var lineRects;
- lineRects = $_n452lmjnlpawsj.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);
- walkUntil$1(VDirection.Down, root, curry(collect, isBelow), targetNodeRect.node);
- return clientRects;
- };
- var getFakeCaretTargets = function (root) {
- return $_n452lmjnlpawsj.filter($_n452lmjnlpawsj.toArray(root.getElementsByTagName('*')), isFakeCaretTarget);
- };
- var caretInfo = function (clientRect, clientX) {
- return {
- node: clientRect.node,
- before: distanceToRectLeft(clientRect, clientX) < distanceToRectRight(clientRect, clientX)
- };
- };
- var closestCaret = function (root, clientX, clientY) {
- var closestNodeRect;
- var contentEditableFalseNodeRects = getClientRects(getFakeCaretTargets(root));
- var targetNodeRects = $_n452lmjnlpawsj.filter(contentEditableFalseNodeRects, function (rect) {
- return clientY >= rect.top && clientY <= rect.bottom;
- });
- closestNodeRect = findClosestClientRect(targetNodeRects, clientX);
- if (closestNodeRect) {
- closestNodeRect = findClosestClientRect(findLineNodeRects(root, closestNodeRect), clientX);
- if (closestNodeRect && isFakeCaretTarget(closestNodeRect.node)) {
- return caretInfo(closestNodeRect, clientX);
- }
- }
- return null;
- };
-
- var isXYWithinRange = function (clientX, clientY, range$$1) {
- if (range$$1.collapsed) {
- return false;
- }
- return foldl(range$$1.getClientRects(), function (state, rect) {
- return state || containsXY(rect, clientX, clientY);
- }, false);
- };
- var $_5xpdav5wjnlpaxyf = { isXYWithinRange: isXYWithinRange };
-
- var setup$3 = function (editor) {
- var renderFocusCaret = first$1(function () {
- if (!editor.removed) {
- var rng = editor.selection.getRng();
- if (rng.collapsed) {
- var caretRange = renderRangeCaret(editor, editor.selection.getRng(), false);
- editor.selection.setRng(caretRange);
- }
- }
- }, 0);
- editor.on('focus', function () {
- renderFocusCaret.throttle();
- });
- editor.on('blur', function () {
- renderFocusCaret.cancel();
- });
- };
- var $_gfh1f95xjnlpaxyi = { setup: setup$3 };
-
- var $_1qv0695yjnlpaxyk = {
- BACKSPACE: 8,
- DELETE: 46,
- DOWN: 40,
- ENTER: 13,
- LEFT: 37,
- RIGHT: 39,
- SPACEBAR: 32,
- TAB: 9,
- UP: 38,
- modifierPressed: function (e) {
- return e.shiftKey || e.ctrlKey || e.altKey || this.metaKeyPressed(e);
- },
- metaKeyPressed: function (e) {
- return $_cseqobajnlpawll.mac ? e.metaKey : e.ctrlKey && !e.altKey;
- }
- };
-
- var isContentEditableTrue$5 = $_fy28ei1rjnlpax2o.isContentEditableTrue;
- var isContentEditableFalse$9 = $_fy28ei1rjnlpax2o.isContentEditableFalse;
- var isAfterContentEditableFalse$1 = isAfterContentEditableFalse;
- var isBeforeContentEditableFalse$1 = isBeforeContentEditableFalse;
- var getContentEditableRoot$1 = function (editor, node) {
- var root = editor.getBody();
- while (node && node !== root) {
- if (isContentEditableTrue$5(node) || isContentEditableFalse$9(node)) {
- return node;
- }
- node = node.parentNode;
- }
- return null;
- };
- var SelectionOverrides = function (editor) {
- var isBlock = function (node) {
- return editor.dom.isBlock(node);
- };
- var rootNode = editor.getBody();
- var fakeCaret = FakeCaret(editor.getBody(), isBlock, function () {
- return $_8odu5n4yjnlpaxsg.hasFocus(editor);
- });
- var realSelectionId = 'sel-' + editor.dom.uniqueId();
- var selectedContentEditableNode;
- var isFakeSelectionElement = function (elm) {
- return editor.dom.hasClass(elm, 'mce-offscreen-selection');
- };
- var getRealSelectionElement = function () {
- var container = editor.dom.get(realSelectionId);
- return container ? container.getElementsByTagName('*')[0] : container;
- };
- var setRange = function (range$$1) {
- if (range$$1) {
- editor.selection.setRng(range$$1);
- }
- };
- var getRange = function () {
- return editor.selection.getRng();
- };
- var showCaret$$1 = function (direction, node, before, scrollIntoView) {
- if (scrollIntoView === void 0) {
- scrollIntoView = true;
- }
- var e;
- e = editor.fire('ShowCaret', {
- target: node,
- direction: direction,
- before: before
- });
- if (e.isDefaultPrevented()) {
- return null;
- }
- if (scrollIntoView) {
- editor.selection.scrollIntoView(node, direction === -1);
- }
- return fakeCaret.show(before, node);
- };
- var getNormalizedRangeEndPoint$$1 = function (direction, range$$1) {
- range$$1 = normalizeRange(direction, rootNode, range$$1);
- if (direction === -1) {
- return CaretPosition$1.fromRangeStart(range$$1);
- }
- return CaretPosition$1.fromRangeEnd(range$$1);
- };
- var showBlockCaretContainer = function (blockCaretContainer) {
- if (blockCaretContainer.hasAttribute('data-mce-caret')) {
- showCaretContainerBlock(blockCaretContainer);
- setRange(getRange());
- editor.selection.scrollIntoView(blockCaretContainer[0]);
- }
- };
- var registerEvents = function () {
- editor.on('mouseup', function (e) {
- var range$$1 = getRange();
- if (range$$1.collapsed && $_wem7o53jnlpaxtk.isXYInContentArea(editor, e.clientX, e.clientY)) {
- setRange(renderCaretAtRange(editor, range$$1, false));
- }
- });
- editor.on('click', function (e) {
- var contentEditableRoot;
- contentEditableRoot = getContentEditableRoot$1(editor, e.target);
- if (contentEditableRoot) {
- if (isContentEditableFalse$9(contentEditableRoot)) {
- e.preventDefault();
- editor.focus();
- }
- if (isContentEditableTrue$5(contentEditableRoot)) {
- if (editor.dom.isChildOf(contentEditableRoot, editor.selection.getNode())) {
- removeContentEditableSelection();
- }
- }
- }
- });
- editor.on('blur NewBlock', function () {
- removeContentEditableSelection();
- });
- editor.on('ResizeWindow FullscreenStateChanged', function () {
- return fakeCaret.reposition();
- });
- var handleTouchSelect = function (editor) {
- var moved = false;
- editor.on('touchstart', function () {
- moved = false;
- });
- editor.on('touchmove', function () {
- moved = true;
- });
- editor.on('touchend', function (e) {
- var contentEditableRoot = getContentEditableRoot$1(editor, e.target);
- if (isContentEditableFalse$9(contentEditableRoot)) {
- if (!moved) {
- e.preventDefault();
- setContentEditableSelection(selectNode(editor, contentEditableRoot));
- }
+ } else {
+ level.content = replaceImageUrl(level.content, targetUrl, replacementUrl);
}
});
};
- var hasNormalCaretPosition = function (elm) {
- var caretWalker = CaretWalker(elm);
- if (!elm.firstChild) {
+ var openNotification = function () {
+ return editor.notificationManager.open({
+ text: editor.translate('Image uploading...'),
+ type: 'info',
+ timeout: -1,
+ progressBar: true
+ });
+ };
+ var replaceImageUri = function (image, resultUri) {
+ blobCache.removeByUri(image.src);
+ replaceUrlInUndoStack(image.src, resultUri);
+ editor.$(image).attr({
+ 'src': Settings.shouldReuseFileName(editor) ? resultUri + cacheInvalidator() : resultUri,
+ 'data-mce-src': editor.convertURL(resultUri, 'src')
+ });
+ };
+ var uploadImages = function (callback) {
+ if (!uploader) {
+ uploader = Uploader(uploadStatus, {
+ url: Settings.getImageUploadUrl(editor),
+ basePath: Settings.getImageUploadBasePath(editor),
+ credentials: Settings.getImagesUploadCredentials(editor),
+ handler: Settings.getImagesUploadHandler(editor)
+ });
+ }
+ return scanForImages().then(aliveGuard(function (imageInfos) {
+ var blobInfos;
+ blobInfos = map(imageInfos, function (imageInfo) {
+ return imageInfo.blobInfo;
+ });
+ return uploader.upload(blobInfos, openNotification).then(aliveGuard(function (result) {
+ var filteredResult = map(result, function (uploadInfo, index) {
+ var image = imageInfos[index].image;
+ if (uploadInfo.status && Settings.shouldReplaceBlobUris(editor)) {
+ replaceImageUri(image, uploadInfo.url);
+ } else if (uploadInfo.error) {
+ ErrorReporter.uploadError(editor, uploadInfo.error);
+ }
+ return {
+ element: image,
+ status: uploadInfo.status
+ };
+ });
+ if (callback) {
+ callback(filteredResult);
+ }
+ return filteredResult;
+ }));
+ }));
+ };
+ var uploadImagesAuto = function (callback) {
+ if (Settings.isAutomaticUploadsEnabled(editor)) {
+ return uploadImages(callback);
+ }
+ };
+ var isValidDataUriImage = function (imgElm) {
+ if (forall(urlFilters, function (filter$$1) {
+ return filter$$1(imgElm);
+ }) === false) {
return false;
}
- var startPos = CaretPosition$1.before(elm.firstChild);
- var newPos = caretWalker.next(startPos);
- return newPos && !isBeforeContentEditableFalse$1(newPos) && !isAfterContentEditableFalse$1(newPos);
+ if (imgElm.getAttribute('src').indexOf('data:') === 0) {
+ var dataImgFilter = Settings.getImagesDataImgFilter(editor);
+ return dataImgFilter(imgElm);
+ }
+ return true;
};
- var isInSameBlock$$1 = function (node1, node2) {
- var block1 = editor.dom.getParent(node1, editor.dom.isBlock);
- var block2 = editor.dom.getParent(node2, editor.dom.isBlock);
- return block1 === block2;
+ var addFilter = function (filter$$1) {
+ urlFilters.push(filter$$1);
};
- var hasBetterMouseTarget = function (targetNode, caretNode) {
- var targetBlock = editor.dom.getParent(targetNode, editor.dom.isBlock);
- var caretBlock = editor.dom.getParent(caretNode, editor.dom.isBlock);
- if (targetBlock && editor.dom.isChildOf(targetBlock, caretBlock) && isContentEditableFalse$9(getContentEditableRoot$1(editor, targetBlock)) === false) {
+ 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') {
+ ErrorReporter.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 (Settings.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') {
+ 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 isBlockElement = function (blockElements, node) {
+ return blockElements.hasOwnProperty(node.nodeName);
+ };
+ var isValidTarget = function (blockElements, node) {
+ if (NodeType.isText(node)) {
+ return true;
+ } else if (NodeType.isElement(node)) {
+ return !isBlockElement(blockElements, node) && !Bookmarks.isBookmarkNode(node);
+ } else {
+ return false;
+ }
+ };
+ var hasBlockParent = function (blockElements, root, node) {
+ return exists(Parents.parents(Element$$1.fromDom(node), Element$$1.fromDom(root)), function (elm) {
+ return isBlockElement(blockElements, elm.dom());
+ });
+ };
+ var shouldRemoveTextNode = function (blockElements, node) {
+ if (NodeType.isText(node)) {
+ if (node.nodeValue.length === 0) {
+ return true;
+ } else if (/^\s+$/.test(node.nodeValue) && (!node.nextSibling || isBlockElement(blockElements, node.nextSibling))) {
return true;
}
- return targetBlock && !isInSameBlock$$1(targetBlock, caretBlock) && hasNormalCaretPosition(targetBlock);
- };
- handleTouchSelect(editor);
- editor.on('mousedown', function (e) {
- var contentEditableRoot;
- var targetElm = e.target;
- if (targetElm !== rootNode && targetElm.nodeName !== 'HTML' && !editor.dom.isChildOf(targetElm, rootNode)) {
- return;
+ }
+ return false;
+ };
+ var addRootBlocks = function (editor) {
+ var settings = editor.settings, dom = editor.dom, selection = editor.selection;
+ var schema = editor.schema, blockElements = schema.getBlockElements();
+ var node = selection.getStart();
+ var rootNode = editor.getBody();
+ var rng;
+ var startContainer, startOffset, endContainer, endOffset, rootBlockNode;
+ var tempNode, wrapped, restoreSelection;
+ var rootNodeName, forcedRootBlock;
+ forcedRootBlock = settings.forced_root_block;
+ if (!node || !NodeType.isElement(node) || !forcedRootBlock) {
+ return;
+ }
+ rootNodeName = rootNode.nodeName.toLowerCase();
+ if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, node)) {
+ return;
+ }
+ rng = selection.getRng();
+ startContainer = rng.startContainer;
+ startOffset = rng.startOffset;
+ endContainer = rng.endContainer;
+ endOffset = rng.endOffset;
+ restoreSelection = EditorFocus.hasFocus(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, editor.settings.forced_root_block_attrs);
+ node.parentNode.insertBefore(rootBlockNode, node);
+ wrapped = true;
+ }
+ tempNode = node;
+ node = node.nextSibling;
+ rootBlockNode.appendChild(tempNode);
+ } else {
+ rootBlockNode = null;
+ node = node.nextSibling;
}
- if ($_wem7o53jnlpaxtk.isXYInContentArea(editor, e.clientX, e.clientY) === false) {
- return;
+ }
+ if (wrapped && restoreSelection) {
+ rng.setStart(startContainer, startOffset);
+ rng.setEnd(endContainer, endOffset);
+ selection.setRng(rng);
+ editor.nodeChanged();
+ }
+ };
+ var setup$2 = function (editor) {
+ if (editor.settings.forced_root_block) {
+ editor.on('NodeChange', curry(addRootBlocks, editor));
+ }
+ };
+ var ForceBlocks = { setup: setup$2 };
+
+ var getStartNode = function (rng) {
+ var sc = rng.startContainer, so = rng.startOffset;
+ if (NodeType.isText(sc)) {
+ return so === 0 ? Option.some(Element$$1.fromDom(sc)) : Option.none();
+ } else {
+ return Option.from(sc.childNodes[so]).map(Element$$1.fromDom);
+ }
+ };
+ var getEndNode = function (rng) {
+ var ec = rng.endContainer, eo = rng.endOffset;
+ if (NodeType.isText(ec)) {
+ return eo === ec.data.length ? Option.some(Element$$1.fromDom(ec)) : Option.none();
+ } else {
+ return Option.from(ec.childNodes[eo - 1]).map(Element$$1.fromDom);
+ }
+ };
+ var getFirstChildren = function (node) {
+ return firstChild(node).fold(constant([node]), function (child$$1) {
+ return [node].concat(getFirstChildren(child$$1));
+ });
+ };
+ var getLastChildren$1 = function (node) {
+ return lastChild(node).fold(constant([node]), function (child$$1) {
+ if (name(child$$1) === 'br') {
+ return prevSibling(child$$1).map(function (sibling) {
+ return [node].concat(getLastChildren$1(sibling));
+ }).getOr([]);
+ } else {
+ return [node].concat(getLastChildren$1(child$$1));
}
- contentEditableRoot = getContentEditableRoot$1(editor, targetElm);
- if (contentEditableRoot) {
- if (isContentEditableFalse$9(contentEditableRoot)) {
- e.preventDefault();
- setContentEditableSelection(selectNode(editor, contentEditableRoot));
+ });
+ };
+ var hasAllContentsSelected = function (elm, rng) {
+ return liftN([
+ getStartNode(rng),
+ getEndNode(rng)
+ ], function (startNode, endNode) {
+ var start = find(getFirstChildren(elm), curry(eq, startNode));
+ var end = find(getLastChildren$1(elm), curry(eq, endNode));
+ return start.isSome() && end.isSome();
+ }).getOr(false);
+ };
+ var moveEndPoint$1 = function (dom, rng, node, start) {
+ var root = node, walker = new TreeWalker(node, root);
+ var nonEmptyElementsMap = dom.schema.getNonEmptyElements();
+ do {
+ if (node.nodeType === 3 && Tools.trim(node.nodeValue).length !== 0) {
+ if (start) {
+ rng.setStart(node, 0);
} else {
- removeContentEditableSelection();
- if (!(isContentEditableTrue$5(contentEditableRoot) && e.shiftKey) && !$_5xpdav5wjnlpaxyf.isXYWithinRange(e.clientX, e.clientY, editor.selection.getRng())) {
- hideFakeCaret();
- editor.selection.placeCaretAt(e.clientX, e.clientY);
- }
+ rng.setEnd(node, node.nodeValue.length);
}
- } else if (isFakeCaretTarget(targetElm) === false) {
- removeContentEditableSelection();
- hideFakeCaret();
- var caretInfo = closestCaret(rootNode, e.clientX, e.clientY);
- if (caretInfo) {
- if (!hasBetterMouseTarget(e.target, caretInfo.node)) {
- e.preventDefault();
- var range$$1 = showCaret$$1(1, caretInfo.node, caretInfo.before, false);
- editor.getBody().focus();
- setRange(range$$1);
- }
- }
- }
- });
- editor.on('keypress', function (e) {
- if ($_1qv0695yjnlpaxyk.modifierPressed(e)) {
return;
}
- switch (e.keyCode) {
- default:
- if (isContentEditableFalse$9(editor.selection.getNode())) {
- e.preventDefault();
+ if (nonEmptyElementsMap[node.nodeName] && !/^(TD|TH)$/.test(node.nodeName)) {
+ if (start) {
+ rng.setStartBefore(node);
+ } else {
+ if (node.nodeName === 'BR') {
+ rng.setEndBefore(node);
+ } else {
+ rng.setEndAfter(node);
+ }
}
- break;
+ return;
+ }
+ if (Env.ie && Env.ie < 11 && dom.isBlock(node) && dom.isEmpty(node)) {
+ if (start) {
+ rng.setStart(node, 0);
+ } else {
+ rng.setEnd(node, 0);
+ }
+ 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;
+ };
+
+ function NodeChange (editor) {
+ var lastRng, lastPath = [];
+ var isSameElementPath = function (startElm) {
+ var i, currentPath;
+ currentPath = editor.$(startElm).parentsUntil(editor.getBody()).add(startElm);
+ if (currentPath.length === lastPath.length) {
+ for (i = currentPath.length; i >= 0; i--) {
+ if (currentPath[i] !== lastPath[i]) {
+ break;
+ }
+ }
+ if (i === -1) {
+ lastPath = currentPath;
+ return true;
+ }
+ }
+ lastPath = currentPath;
+ return false;
+ };
+ if (!('onselectionchange' in editor.getDoc())) {
+ editor.on('NodeChange Click MouseUp KeyUp Focus', function (e) {
+ var nativeRng, fakeRng;
+ nativeRng = editor.selection.getRng();
+ fakeRng = {
+ startContainer: nativeRng.startContainer,
+ startOffset: nativeRng.startOffset,
+ endContainer: nativeRng.endContainer,
+ endOffset: nativeRng.endOffset
+ };
+ if (e.type === 'nodechange' || !RangeCompare.isEq(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) && !isSameElementPath(startElm) && editor.dom.isChildOf(startElm, editor.getBody())) {
+ editor.nodeChanged({ selectionChange: true });
}
});
- editor.on('getSelectionRange', function (e) {
- var rng = e.range;
- if (selectedContentEditableNode) {
- if (!selectedContentEditableNode.parentNode) {
- selectedContentEditableNode = null;
+ 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();
+ }
+ }
+ });
+ this.nodeChanged = function (args) {
+ var selection = editor.selection;
+ var node, parents, root;
+ if (editor.initialized && selection && !editor.settings.disable_nodechange && !editor.readonly) {
+ root = editor.getBody();
+ node = selection.getStart(true) || root;
+ if (node.ownerDocument !== editor.getDoc() || !editor.dom.isChildOf(node, root)) {
+ node = root;
+ }
+ parents = [];
+ editor.dom.getParent(node, function (node) {
+ if (node === root) {
+ return true;
+ }
+ parents.push(node);
+ });
+ args = args || {};
+ args.element = node;
+ args.parents = parents;
+ editor.fire('NodeChange', args);
+ }
+ };
+ }
+
+ var getAbsolutePosition = function (elm) {
+ var doc, docElem, win, clientRect;
+ clientRect = elm.getBoundingClientRect();
+ doc = elm.ownerDocument;
+ docElem = doc.documentElement;
+ 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 MousePosition = { calc: calc };
+
+ var isContentEditableFalse$6 = NodeType.isContentEditableFalse, isContentEditableTrue$3 = NodeType.isContentEditableTrue;
+ var isDraggable = function (rootElm, elm) {
+ return isContentEditableFalse$6(elm) && elm !== rootElm;
+ };
+ var isValidDropTarget = function (editor, targetElement, dragElement) {
+ if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) {
+ return false;
+ }
+ if (isContentEditableFalse$6(targetElement)) {
+ return false;
+ }
+ return true;
+ };
+ var cloneElement = function (elm) {
+ var cloneElm = elm.cloneNode(true);
+ cloneElm.removeAttribute('data-mce-selected');
+ return cloneElm;
+ };
+ var createGhost = function (editor, elm, width, height) {
+ var clonedElm = elm.cloneNode(true);
+ editor.dom.setStyles(clonedElm, {
+ width: width,
+ height: height
+ });
+ editor.dom.setAttrib(clonedElm, 'data-mce-selected', null);
+ var ghostElm = editor.dom.create('div', {
+ 'class': 'mce-drag-container',
+ 'data-mce-bogus': 'all',
+ 'unselectable': 'on',
+ 'contenteditable': 'false'
+ });
+ editor.dom.setStyles(ghostElm, {
+ position: 'absolute',
+ opacity: 0.5,
+ overflow: 'hidden',
+ border: 0,
+ padding: 0,
+ margin: 0,
+ width: width,
+ height: height
+ });
+ editor.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 hasDraggableElement = function (state) {
+ return state.element;
+ };
+ 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), Predicate.or(isContentEditableFalse$6, 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.element = ceElm;
+ state.screenX = e.screenX;
+ state.screenY = e.screenY;
+ state.maxX = (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2;
+ state.maxY = (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2;
+ state.relX = e.pageX - elmPos.x;
+ state.relY = e.pageY - elmPos.y;
+ state.width = ceElm.offsetWidth;
+ state.height = ceElm.offsetHeight;
+ state.ghost = createGhost(editor, ceElm, state.width, state.height);
+ }
+ }
+ };
+ };
+ var move$1 = function (state, editor) {
+ var throttledPlaceCaretAt = Delay.throttle(function (clientX, clientY) {
+ editor._selectionOverrides.hideFakeCaret();
+ editor.selection.placeCaretAt(clientX, clientY);
+ }, 0);
+ return function (e) {
+ var movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY));
+ if (hasDraggableElement(state) && !state.dragging && movement > 10) {
+ var args = editor.fire('dragstart', { target: state.element });
+ if (args.isDefaultPrevented()) {
return;
}
- rng = rng.cloneRange();
- rng.selectNode(selectedContentEditableNode);
- e.range = rng;
+ state.dragging = true;
+ editor.focus();
}
- });
- editor.on('setSelectionRange', function (e) {
- var rng;
- rng = setContentEditableSelection(e.range, e.forward);
- if (rng) {
- e.range = rng;
+ if (state.dragging) {
+ var targetPos = applyRelPos(state, MousePosition.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 isPasteBin = function (node) {
- return node.id === 'mcepastebin';
};
- editor.on('AfterSetSelectionRange', function (e) {
- var rng = e.range;
- if (!isRangeInCaretContainer(rng) && !isPasteBin(rng.startContainer.parentNode)) {
- hideFakeCaret();
- }
- if (!isFakeSelectionElement(rng.startContainer.parentNode)) {
- removeContentEditableSelection();
- }
- });
- editor.on('copy', function (e) {
- var clipboardData = e.clipboardData;
- if (!e.isDefaultPrevented() && e.clipboardData && !$_cseqobajnlpawll.ie) {
- var realSelectionElement = getRealSelectionElement();
- if (realSelectionElement) {
- e.preventDefault();
- clipboardData.clearData();
- clipboardData.setData('text/html', realSelectionElement.outerHTML);
- clipboardData.setData('text/plain', realSelectionElement.outerText);
+ };
+ 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) {
+ if (state.dragging) {
+ if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) {
+ var targetClone_1 = cloneElement(state.element);
+ var args = editor.fire('drop', {
+ targetClone: targetClone_1,
+ clientX: e.clientX,
+ clientY: e.clientY
+ });
+ if (!args.isDefaultPrevented()) {
+ targetClone_1 = args.targetClone;
+ editor.undoManager.transact(function () {
+ removeElement(state.element);
+ editor.insertContent(editor.dom.getOuterHTML(targetClone_1));
+ editor._selectionOverrides.hideFakeCaret();
+ });
+ }
}
}
+ removeDragState(state);
+ };
+ };
+ var stop$$1 = function (state, editor) {
+ return function () {
+ if (state.dragging) {
+ editor.fire('dragend');
+ }
+ removeDragState(state);
+ };
+ };
+ var removeDragState = function (state) {
+ state.dragging = false;
+ state.element = null;
+ removeElement(state.ghost);
+ };
+ var bindFakeDragEvents = function (editor) {
+ var state = {};
+ var pageDom, dragStartHandler, dragHandler, dropHandler, dragEndHandler, rootDocument;
+ pageDom = DOMUtils$1.DOM;
+ rootDocument = document;
+ dragStartHandler = start$1(state, editor);
+ dragHandler = move$1(state, editor);
+ dropHandler = drop(state, editor);
+ dragEndHandler = stop$$1(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);
});
- $_5gate55rjnlpaxxq.init(editor);
- $_gfh1f95xjnlpaxyi.setup(editor);
};
- var addCss = function () {
- var styles = editor.contentStyles, rootClass = '.mce-content-body';
- styles.push(fakeCaret.getCss());
- styles.push(rootClass + ' .mce-offscreen-selection {' + 'position: absolute;' + 'left: -9999999999px;' + 'max-width: 1000000px;' + '}' + rootClass + ' *[contentEditable=false] {' + 'cursor: default;' + '}' + rootClass + ' *[contentEditable=true] {' + 'cursor: text;' + '}');
+ 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$6(realTarget) || isContentEditableFalse$6(editor.dom.getContentEditableParent(realTarget))) {
+ e.preventDefault();
+ }
+ });
};
- var isWithinCaretContainer = function (node) {
- return isCaretContainer(node) || startsWithCaretContainer(node) || endsWithCaretContainer(node);
+ var init = function (editor) {
+ bindFakeDragEvents(editor);
+ blockIeDrop(editor);
};
- var isRangeInCaretContainer = function (rng) {
- return isWithinCaretContainer(rng.startContainer) || isWithinCaretContainer(rng.endContainer);
- };
- var setContentEditableSelection = function (range$$1, forward) {
- var node;
- var $ = editor.$;
- var dom = editor.dom;
- var $realSelectionContainer, sel, startContainer, startOffset, endOffset, e, caretPosition, targetClone, origTargetClone;
- if (!range$$1) {
- return null;
+ var DragDropOverrides = { init: init };
+
+ var getNodeClientRects = function (node) {
+ var toArrayWithNode = function (clientRects) {
+ return map(clientRects, function (clientRect) {
+ clientRect = clone$2(clientRect);
+ clientRect.node = node;
+ return clientRect;
+ });
+ };
+ if (NodeType.isElement(node)) {
+ return toArrayWithNode(node.getClientRects());
}
+ if (NodeType.isText(node)) {
+ var rng = node.ownerDocument.createRange();
+ rng.setStart(node, 0);
+ rng.setEnd(node, node.data.length);
+ return toArrayWithNode(rng.getClientRects());
+ }
+ };
+ var getClientRects = function (node) {
+ return foldl(node, function (result, node) {
+ return result.concat(getNodeClientRects(node));
+ }, []);
+ };
+
+ var VDirection;
+ (function (VDirection) {
+ VDirection[VDirection['Up'] = -1] = 'Up';
+ VDirection[VDirection['Down'] = 1] = 'Down';
+ }(VDirection || (VDirection = {})));
+ var findUntil = 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, node;
+ var result = [];
+ var targetClientRect;
+ 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, ArrUtils.last(result))) {
+ line++;
+ }
+ clientRect.line = line;
+ if (predicateFn(clientRect)) {
+ return true;
+ }
+ result.push(clientRect);
+ }
+ };
+ targetClientRect = ArrUtils.last(caretPosition.getClientRects());
+ if (!targetClientRect) {
+ return result;
+ }
+ node = caretPosition.getNode();
+ add(node);
+ findUntil(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, targetClientRect;
+ var getClientRect = function (caretPosition) {
+ if (direction === 1) {
+ return ArrUtils.last(caretPosition.getClientRects());
+ }
+ return ArrUtils.last(caretPosition.getClientRects());
+ };
+ if (direction === 1) {
+ walkFn = caretWalker.next;
+ isBelowFn = isBelow;
+ isAboveFn = isAbove;
+ caretPosition = CaretPosition$1.after(node);
+ } else {
+ walkFn = caretWalker.prev;
+ isBelowFn = isAbove;
+ isAboveFn = isBelow;
+ caretPosition = CaretPosition$1.before(node);
+ }
+ targetClientRect = getClientRect(caretPosition);
+ do {
+ if (!caretPosition.isVisible()) {
+ continue;
+ }
+ clientRect = getClientRect(caretPosition);
+ if (isAboveFn(clientRect, targetClientRect)) {
+ continue;
+ }
+ if (result.length > 0 && isBelowFn(clientRect, ArrUtils.last(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$7 = NodeType.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 isInside = function (clientX, clientRect) {
+ return clientX >= clientRect.left && clientX <= clientRect.right;
+ };
+ var findClosestClientRect = function (clientRects, clientX) {
+ return ArrUtils.reduce(clientRects, function (oldClientRect, clientRect) {
+ var oldDistance, newDistance;
+ oldDistance = Math.min(distanceToRectLeft(oldClientRect, clientX), distanceToRectRight(oldClientRect, clientX));
+ newDistance = Math.min(distanceToRectLeft(clientRect, clientX), distanceToRectRight(clientRect, clientX));
+ if (isInside(clientX, clientRect)) {
+ return clientRect;
+ }
+ if (isInside(clientX, oldClientRect)) {
+ return oldClientRect;
+ }
+ if (newDistance === oldDistance && isContentEditableFalse$7(clientRect.node)) {
+ return clientRect;
+ }
+ if (newDistance < oldDistance) {
+ return clientRect;
+ }
+ return oldClientRect;
+ });
+ };
+ var walkUntil$1 = function (direction, root, predicateFn, node) {
+ while (node = findNode$1(node, direction, isEditableCaretCandidate, root)) {
+ if (predicateFn(node)) {
+ return;
+ }
+ }
+ };
+ var findLineNodeRects = function (root, targetNodeRect) {
+ var clientRects = [];
+ var collect = function (checkPosFn, node) {
+ var lineRects;
+ 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);
+ walkUntil$1(VDirection.Down, root, curry(collect, isBelow), targetNodeRect.node);
+ 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 closestCaret = function (root, clientX, clientY) {
+ var closestNodeRect;
+ var contentEditableFalseNodeRects = getClientRects(getFakeCaretTargets(root));
+ var targetNodeRects = filter(contentEditableFalseNodeRects, function (rect) {
+ return clientY >= rect.top && clientY <= rect.bottom;
+ });
+ closestNodeRect = findClosestClientRect(targetNodeRects, clientX);
+ if (closestNodeRect) {
+ closestNodeRect = findClosestClientRect(findLineNodeRects(root, closestNodeRect), clientX);
+ if (closestNodeRect && isFakeCaretTarget(closestNodeRect.node)) {
+ return caretInfo(closestNodeRect, clientX);
+ }
+ }
+ return null;
+ };
+
+ var isXYWithinRange = function (clientX, clientY, range$$1) {
if (range$$1.collapsed) {
- if (!isRangeInCaretContainer(range$$1)) {
- if (forward === false) {
- caretPosition = getNormalizedRangeEndPoint$$1(-1, range$$1);
- if (isFakeCaretTarget(caretPosition.getNode(true))) {
- return showCaret$$1(-1, caretPosition.getNode(true), false, false);
- }
- if (isFakeCaretTarget(caretPosition.getNode())) {
- return showCaret$$1(-1, caretPosition.getNode(), !caretPosition.isAtEnd(), false);
- }
- } else {
- caretPosition = getNormalizedRangeEndPoint$$1(1, range$$1);
- if (isFakeCaretTarget(caretPosition.getNode())) {
- return showCaret$$1(1, caretPosition.getNode(), !caretPosition.isAtEnd(), false);
- }
- if (isFakeCaretTarget(caretPosition.getNode(true))) {
- return showCaret$$1(1, caretPosition.getNode(true), false, false);
- }
- }
- }
- return null;
+ return false;
}
- startContainer = range$$1.startContainer;
- startOffset = range$$1.startOffset;
- endOffset = range$$1.endOffset;
- if (startContainer.nodeType === 3 && startOffset === 0 && isContentEditableFalse$9(startContainer.parentNode)) {
- startContainer = startContainer.parentNode;
- startOffset = dom.nodeIndex(startContainer);
- startContainer = startContainer.parentNode;
- }
- if (startContainer.nodeType !== 1) {
- return null;
- }
- if (endOffset === startOffset + 1) {
- node = startContainer.childNodes[startOffset];
- }
- if (!isContentEditableFalse$9(node)) {
- return null;
- }
- targetClone = origTargetClone = node.cloneNode(true);
- e = editor.fire('ObjectSelected', {
- target: node,
- targetClone: targetClone
- });
+ return foldl(range$$1.getClientRects(), function (state, rect) {
+ return state || containsXY(rect, clientX, clientY);
+ }, false);
+ };
+ var RangePoint = { isXYWithinRange: isXYWithinRange };
+
+ var isContentEditableTrue$4 = NodeType.isContentEditableTrue;
+ var isContentEditableFalse$8 = NodeType.isContentEditableFalse;
+ var showCaret = function (direction, editor, node, before, scrollIntoView) {
+ return 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 null;
}
- $realSelectionContainer = $_2kbu29jnlpax6t.descendant(Element$$1.fromDom(editor.getBody()), '#' + realSelectionId).fold(function () {
- return $([]);
- }, function (elm) {
- return $([elm.dom()]);
+ return getNodeRange(node);
+ };
+ var renderCaretAtRange = function (editor, range, scrollIntoView) {
+ var normalizedRange = normalizeRange(1, editor.getBody(), range);
+ var caretPosition = CaretPosition$1.fromRangeStart(normalizedRange);
+ var caretPositionNode = caretPosition.getNode();
+ if (isContentEditableFalse$8(caretPositionNode)) {
+ return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);
+ }
+ var caretPositionBeforeNode = caretPosition.getNode(true);
+ if (isContentEditableFalse$8(caretPositionBeforeNode)) {
+ return showCaret(1, editor, caretPositionBeforeNode, false, false);
+ }
+ var ceRoot = editor.dom.getParent(caretPosition.getNode(), function (node) {
+ return isContentEditableFalse$8(node) || isContentEditableTrue$4(node);
});
- targetClone = e.targetClone;
- if ($realSelectionContainer.length === 0) {
- $realSelectionContainer = $('').attr('id', realSelectionId);
- $realSelectionContainer.appendTo(editor.getBody());
+ if (isContentEditableFalse$8(ceRoot)) {
+ return showCaret(1, editor, ceRoot, false, scrollIntoView);
}
- range$$1 = editor.dom.createRng();
- if (targetClone === origTargetClone && $_cseqobajnlpawll.ie) {
- $realSelectionContainer.empty().append('\xA0
').append(targetClone);
- range$$1.setStartAfter($realSelectionContainer[0].firstChild.firstChild);
- range$$1.setEndAfter(targetClone);
- } else {
- $realSelectionContainer.empty().append('\xA0').append(targetClone).append('\xA0');
- range$$1.setStart($realSelectionContainer[0].firstChild, 1);
- range$$1.setEnd($realSelectionContainer[0].lastChild, 0);
+ return null;
+ };
+ var renderRangeCaret = function (editor, range, scrollIntoView) {
+ if (!range || !range.collapsed) {
+ return range;
}
- $realSelectionContainer.css({ top: dom.getPos(node, editor.getBody()).y });
- $realSelectionContainer[0].focus();
- sel = editor.selection.getSel();
- sel.removeAllRanges();
- sel.addRange(range$$1);
- each($_cmitir27jnlpax6e.descendants(Element$$1.fromDom(editor.getBody()), '*[data-mce-selected]'), function (elm) {
- $_521j8z15jnlpawz7.remove(elm, 'data-mce-selected');
- });
- node.setAttribute('data-mce-selected', '1');
- selectedContentEditableNode = node;
- hideFakeCaret();
- return range$$1;
- };
- var removeContentEditableSelection = function () {
- if (selectedContentEditableNode) {
- selectedContentEditableNode.removeAttribute('data-mce-selected');
- $_2kbu29jnlpax6t.descendant(Element$$1.fromDom(editor.getBody()), '#' + realSelectionId).each($_azq8zm1wjnlpax4n.remove);
- selectedContentEditableNode = null;
+ var caretRange = renderCaretAtRange(editor, range, scrollIntoView);
+ if (caretRange) {
+ return caretRange;
}
- $_2kbu29jnlpax6t.descendant(Element$$1.fromDom(editor.getBody()), '#' + realSelectionId).each($_azq8zm1wjnlpax4n.remove);
- selectedContentEditableNode = null;
+ return range;
};
- var destroy = function () {
- fakeCaret.destroy();
- selectedContentEditableNode = null;
- };
- var hideFakeCaret = function () {
- fakeCaret.hide();
- };
- if ($_cseqobajnlpawll.ceFalse) {
- registerEvents();
- addCss();
- }
- return {
- showCaret: showCaret$$1,
- showBlockCaretContainer: showBlockCaretContainer,
- hideFakeCaret: hideFakeCaret,
- destroy: destroy
- };
- };
- var isValidPrefixAttrName = function (name) {
- return name.indexOf('data-') === 0 || name.indexOf('aria-') === 0;
- };
- var trimComments = function (text) {
- return text.replace(//g, '');
- };
- var isInvalidUri = function (settings, uri) {
- if (settings.allow_html_data_urls) {
- return false;
- } else if (/^data:image\//i.test(uri)) {
- return settings.allow_svg_data_urls === false && /^data:image\/svg\+xml/i.test(uri);
- } else {
- return /^data:/i.test(uri);
- }
- };
- var findEndTagIndex = function (schema, html, startIndex) {
- var count = 1, index, matches, tokenRegExp, shortEndedElements;
- shortEndedElements = schema.getShortEndedElements();
- 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;
+ var setup$3 = function (editor) {
+ var renderFocusCaret = first$1(function () {
+ if (!editor.removed) {
+ var rng = editor.selection.getRng();
+ if (rng.collapsed) {
+ var caretRange = renderRangeCaret(editor, editor.selection.getRng(), false);
+ editor.selection.setRng(caretRange);
+ }
}
- count++;
- }
- if (count === 0) {
- break;
- }
- }
- return index;
- };
- function SaxParser(settings, schema) {
- if (schema === void 0) {
- schema = Schema();
- }
- var noop = function () {
+ }, 0);
+ editor.on('focus', function () {
+ renderFocusCaret.throttle();
+ });
+ editor.on('blur', function () {
+ renderFocusCaret.cancel();
+ });
};
- 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 parse = function (html) {
- var matches, index = 0, value, endRegExp;
- var stack = [];
- var attrList, i, textData, name;
- var isInternalElement, removeInternalElements, shortEndedElements, fillAttrsMap, isShortEnded;
- var validate, elementRule, isValidElement, attr, attribsValue, validAttributesMap, validAttributePatterns;
- var attributesRequired, attributesDefault, attributesForced, processHtml;
- var anyAttributesRequired, selfClosing, tokenRegExp, attrRegExp, specialElements, attrValue, idCount = 0;
- var decode = $_bea7j51sjnlpax2u.decode;
- var fixSelfClosing;
- var filteredUrlAttrs = $_1q1txeljnlpawsa.makeMap('src,href,data,background,formaction,poster,xlink:href');
- var scriptUriRegExp = /((java|vb)script|mhtml):/i;
- var processEndTag = function (name) {
- var pos, i;
- pos = stack.length;
- while (pos--) {
- if (stack[pos].name === name) {
+ var CefFocus = { setup: setup$3 };
+
+ var VK = {
+ BACKSPACE: 8,
+ DELETE: 46,
+ DOWN: 40,
+ ENTER: 13,
+ LEFT: 37,
+ RIGHT: 39,
+ SPACEBAR: 32,
+ TAB: 9,
+ UP: 38,
+ modifierPressed: function (e) {
+ return e.shiftKey || e.ctrlKey || e.altKey || this.metaKeyPressed(e);
+ },
+ metaKeyPressed: function (e) {
+ return Env.mac ? e.metaKey : e.ctrlKey && !e.altKey;
+ }
+ };
+
+ var isContentEditableTrue$5 = NodeType.isContentEditableTrue;
+ var isContentEditableFalse$9 = NodeType.isContentEditableFalse;
+ var isAfterContentEditableFalse$1 = isAfterContentEditableFalse;
+ var isBeforeContentEditableFalse$1 = isBeforeContentEditableFalse;
+ var getContentEditableRoot$1 = function (editor, node) {
+ var root = editor.getBody();
+ while (node && node !== root) {
+ if (isContentEditableTrue$5(node) || isContentEditableFalse$9(node)) {
+ return node;
+ }
+ node = node.parentNode;
+ }
+ return null;
+ };
+ var SelectionOverrides = function (editor) {
+ var isBlock = function (node) {
+ return editor.dom.isBlock(node);
+ };
+ var rootNode = editor.getBody();
+ var fakeCaret = FakeCaret(editor.getBody(), isBlock, function () {
+ return EditorFocus.hasFocus(editor);
+ });
+ var realSelectionId = 'sel-' + editor.dom.uniqueId();
+ var selectedContentEditableNode;
+ var isFakeSelectionElement = function (elm) {
+ return editor.dom.hasClass(elm, 'mce-offscreen-selection');
+ };
+ var getRealSelectionElement = function () {
+ var container = editor.dom.get(realSelectionId);
+ return container ? container.getElementsByTagName('*')[0] : container;
+ };
+ var setRange = function (range$$1) {
+ if (range$$1) {
+ editor.selection.setRng(range$$1);
+ }
+ };
+ var getRange = function () {
+ return editor.selection.getRng();
+ };
+ var showCaret$$1 = function (direction, node, before, scrollIntoView) {
+ if (scrollIntoView === void 0) {
+ scrollIntoView = true;
+ }
+ var e;
+ e = editor.fire('ShowCaret', {
+ target: node,
+ direction: direction,
+ before: before
+ });
+ if (e.isDefaultPrevented()) {
+ return null;
+ }
+ if (scrollIntoView) {
+ editor.selection.scrollIntoView(node, direction === -1);
+ }
+ return fakeCaret.show(before, node);
+ };
+ var getNormalizedRangeEndPoint$$1 = function (direction, range$$1) {
+ range$$1 = normalizeRange(direction, rootNode, range$$1);
+ if (direction === -1) {
+ return CaretPosition$1.fromRangeStart(range$$1);
+ }
+ return CaretPosition$1.fromRangeEnd(range$$1);
+ };
+ var showBlockCaretContainer = function (blockCaretContainer) {
+ if (blockCaretContainer.hasAttribute('data-mce-caret')) {
+ showCaretContainerBlock(blockCaretContainer);
+ setRange(getRange());
+ editor.selection.scrollIntoView(blockCaretContainer[0]);
+ }
+ };
+ var registerEvents = function () {
+ editor.on('mouseup', function (e) {
+ var range$$1 = getRange();
+ if (range$$1.collapsed && EditorView.isXYInContentArea(editor, e.clientX, e.clientY)) {
+ setRange(renderCaretAtRange(editor, range$$1, false));
+ }
+ });
+ editor.on('click', function (e) {
+ var contentEditableRoot;
+ contentEditableRoot = getContentEditableRoot$1(editor, e.target);
+ if (contentEditableRoot) {
+ if (isContentEditableFalse$9(contentEditableRoot)) {
+ e.preventDefault();
+ editor.focus();
+ }
+ if (isContentEditableTrue$5(contentEditableRoot)) {
+ if (editor.dom.isChildOf(contentEditableRoot, editor.selection.getNode())) {
+ removeContentEditableSelection();
+ }
+ }
+ }
+ });
+ editor.on('blur NewBlock', function () {
+ removeContentEditableSelection();
+ });
+ editor.on('ResizeWindow FullscreenStateChanged', function () {
+ return fakeCaret.reposition();
+ });
+ var handleTouchSelect = function (editor) {
+ var moved = false;
+ editor.on('touchstart', function () {
+ moved = false;
+ });
+ editor.on('touchmove', function () {
+ moved = true;
+ });
+ editor.on('touchend', function (e) {
+ var contentEditableRoot = getContentEditableRoot$1(editor, e.target);
+ if (isContentEditableFalse$9(contentEditableRoot)) {
+ if (!moved) {
+ e.preventDefault();
+ setContentEditableSelection(selectNode(editor, contentEditableRoot));
+ }
+ }
+ });
+ };
+ var hasNormalCaretPosition = function (elm) {
+ var caretWalker = CaretWalker(elm);
+ if (!elm.firstChild) {
+ return false;
+ }
+ var startPos = CaretPosition$1.before(elm.firstChild);
+ var newPos = caretWalker.next(startPos);
+ return newPos && !isBeforeContentEditableFalse$1(newPos) && !isAfterContentEditableFalse$1(newPos);
+ };
+ var isInSameBlock$$1 = function (node1, node2) {
+ var block1 = editor.dom.getParent(node1, editor.dom.isBlock);
+ var block2 = editor.dom.getParent(node2, editor.dom.isBlock);
+ return block1 === block2;
+ };
+ var hasBetterMouseTarget = function (targetNode, caretNode) {
+ var targetBlock = editor.dom.getParent(targetNode, editor.dom.isBlock);
+ var caretBlock = editor.dom.getParent(caretNode, editor.dom.isBlock);
+ if (targetBlock && editor.dom.isChildOf(targetBlock, caretBlock) && isContentEditableFalse$9(getContentEditableRoot$1(editor, targetBlock)) === false) {
+ return true;
+ }
+ return targetBlock && !isInSameBlock$$1(targetBlock, caretBlock) && hasNormalCaretPosition(targetBlock);
+ };
+ handleTouchSelect(editor);
+ editor.on('mousedown', function (e) {
+ var contentEditableRoot;
+ var targetElm = e.target;
+ if (targetElm !== rootNode && targetElm.nodeName !== 'HTML' && !editor.dom.isChildOf(targetElm, rootNode)) {
+ return;
+ }
+ if (EditorView.isXYInContentArea(editor, e.clientX, e.clientY) === false) {
+ return;
+ }
+ contentEditableRoot = getContentEditableRoot$1(editor, targetElm);
+ if (contentEditableRoot) {
+ if (isContentEditableFalse$9(contentEditableRoot)) {
+ e.preventDefault();
+ setContentEditableSelection(selectNode(editor, contentEditableRoot));
+ } else {
+ removeContentEditableSelection();
+ if (!(isContentEditableTrue$5(contentEditableRoot) && e.shiftKey) && !RangePoint.isXYWithinRange(e.clientX, e.clientY, editor.selection.getRng())) {
+ hideFakeCaret();
+ editor.selection.placeCaretAt(e.clientX, e.clientY);
+ }
+ }
+ } else if (isFakeCaretTarget(targetElm) === false) {
+ removeContentEditableSelection();
+ hideFakeCaret();
+ var caretInfo = closestCaret(rootNode, e.clientX, e.clientY);
+ if (caretInfo) {
+ if (!hasBetterMouseTarget(e.target, caretInfo.node)) {
+ e.preventDefault();
+ var range$$1 = showCaret$$1(1, caretInfo.node, caretInfo.before, false);
+ editor.getBody().focus();
+ setRange(range$$1);
+ }
+ }
+ }
+ });
+ editor.on('keypress', function (e) {
+ if (VK.modifierPressed(e)) {
+ return;
+ }
+ switch (e.keyCode) {
+ default:
+ if (isContentEditableFalse$9(editor.selection.getNode())) {
+ e.preventDefault();
+ }
break;
}
- }
- if (pos >= 0) {
- for (i = stack.length - 1; i >= pos; i--) {
- name = stack[i];
- if (name.valid) {
- end(name.name);
+ });
+ editor.on('getSelectionRange', function (e) {
+ var rng = e.range;
+ if (selectedContentEditableNode) {
+ if (!selectedContentEditableNode.parentNode) {
+ selectedContentEditableNode = null;
+ return;
+ }
+ rng = rng.cloneRange();
+ rng.selectNode(selectedContentEditableNode);
+ e.range = rng;
+ }
+ });
+ editor.on('setSelectionRange', function (e) {
+ var rng;
+ rng = setContentEditableSelection(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;
+ if (!isRangeInCaretContainer(rng) && !isPasteBin(rng.startContainer.parentNode)) {
+ hideFakeCaret();
+ }
+ if (!isFakeSelectionElement(rng.startContainer.parentNode)) {
+ removeContentEditableSelection();
+ }
+ });
+ 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);
}
}
- stack.length = pos;
- }
+ });
+ DragDropOverrides.init(editor);
+ CefFocus.setup(editor);
};
- var parseAttribute = function (match, name, value, val2, val3) {
- var attrRule, i;
- var trimRegExp = /[\s\u0000-\u001F]+/g;
- name = name.toLowerCase();
- value = 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;
+ var addCss = function () {
+ var styles = editor.contentStyles, rootClass = '.mce-content-body';
+ styles.push(fakeCaret.getCss());
+ styles.push(rootClass + ' .mce-offscreen-selection {' + 'position: absolute;' + 'left: -9999999999px;' + 'max-width: 1000000px;' + '}' + rootClass + ' *[contentEditable=false] {' + 'cursor: default;' + '}' + rootClass + ' *[contentEditable=true] {' + 'cursor: text;' + '}');
+ };
+ var isWithinCaretContainer = function (node) {
+ return isCaretContainer(node) || startsWithCaretContainer(node) || endsWithCaretContainer(node);
+ };
+ var isRangeInCaretContainer = function (rng) {
+ return isWithinCaretContainer(rng.startContainer) || isWithinCaretContainer(rng.endContainer);
+ };
+ var setContentEditableSelection = function (range$$1, forward) {
+ var node;
+ var $ = editor.$;
+ var dom = editor.dom;
+ var $realSelectionContainer, sel, startContainer, startOffset, endOffset, e, caretPosition, targetClone, origTargetClone;
+ if (!range$$1) {
+ return null;
+ }
+ if (range$$1.collapsed) {
+ if (!isRangeInCaretContainer(range$$1)) {
+ if (forward === false) {
+ caretPosition = getNormalizedRangeEndPoint$$1(-1, range$$1);
+ if (isFakeCaretTarget(caretPosition.getNode(true))) {
+ return showCaret$$1(-1, caretPosition.getNode(true), false, false);
+ }
+ if (isFakeCaretTarget(caretPosition.getNode())) {
+ return showCaret$$1(-1, caretPosition.getNode(), !caretPosition.isAtEnd(), false);
+ }
+ } else {
+ caretPosition = getNormalizedRangeEndPoint$$1(1, range$$1);
+ if (isFakeCaretTarget(caretPosition.getNode())) {
+ return showCaret$$1(1, caretPosition.getNode(), !caretPosition.isAtEnd(), false);
+ }
+ if (isFakeCaretTarget(caretPosition.getNode(true))) {
+ return showCaret$$1(1, caretPosition.getNode(true), false, false);
}
}
- if (i === -1) {
- attrRule = null;
- }
- }
- if (!attrRule) {
- return;
- }
- if (attrRule.validValues && !(value in attrRule.validValues)) {
- return;
}
+ return null;
}
- 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)) {
- return;
- }
+ startContainer = range$$1.startContainer;
+ startOffset = range$$1.startOffset;
+ endOffset = range$$1.endOffset;
+ if (startContainer.nodeType === 3 && startOffset === 0 && isContentEditableFalse$9(startContainer.parentNode)) {
+ startContainer = startContainer.parentNode;
+ startOffset = dom.nodeIndex(startContainer);
+ startContainer = startContainer.parentNode;
}
- if (isInternalElement && (name in filteredUrlAttrs || name.indexOf('on') === 0)) {
- return;
+ if (startContainer.nodeType !== 1) {
+ return null;
}
- attrList.map[name] = value;
- attrList.push({
- name: name,
- value: value
+ if (endOffset === startOffset + 1) {
+ node = startContainer.childNodes[startOffset];
+ }
+ if (!isContentEditableFalse$9(node)) {
+ return null;
+ }
+ targetClone = origTargetClone = node.cloneNode(true);
+ e = editor.fire('ObjectSelected', {
+ target: node,
+ targetClone: targetClone
});
- };
- tokenRegExp = new RegExp('<(?:' + '(?:!--([\\w\\W]*?)-->)|' + '(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|' + '(?:!DOCTYPE([\\w\\W]*?)>)|' + '(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|' + '(?:\\/([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)>)|' + '(?:([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)((?:\\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\\/|\\s+)>)' + ')', 'g');
- attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g;
- shortEndedElements = schema.getShortEndedElements();
- selfClosing = settings.self_closing_elements || schema.getSelfClosingElements();
- fillAttrsMap = schema.getBoolAttrs();
- validate = settings.validate;
- removeInternalElements = settings.remove_internals;
- fixSelfClosing = settings.fix_self_closing;
- specialElements = schema.getSpecialElements();
- processHtml = html + '>';
- while (matches = tokenRegExp.exec(processHtml)) {
- if (index < matches.index) {
- text(decode(html.substr(index, matches.index - index)));
+ if (e.isDefaultPrevented()) {
+ return null;
}
- if (value = matches[6]) {
- value = value.toLowerCase();
- if (value.charAt(0) === ':') {
- value = value.substr(1);
- }
- processEndTag(value);
- } else if (value = matches[7]) {
- if (matches.index + matches[0].length > html.length) {
- text(decode(html.substr(matches.index)));
- index = matches.index + matches[0].length;
+ $realSelectionContainer = descendant$1(Element$$1.fromDom(editor.getBody()), '#' + realSelectionId).fold(function () {
+ return $([]);
+ }, function (elm) {
+ return $([elm.dom()]);
+ });
+ targetClone = e.targetClone;
+ if ($realSelectionContainer.length === 0) {
+ $realSelectionContainer = $('').attr('id', realSelectionId);
+ $realSelectionContainer.appendTo(editor.getBody());
+ }
+ range$$1 = editor.dom.createRng();
+ if (targetClone === origTargetClone && Env.ie) {
+ $realSelectionContainer.empty().append('\xA0
').append(targetClone);
+ range$$1.setStartAfter($realSelectionContainer[0].firstChild.firstChild);
+ range$$1.setEndAfter(targetClone);
+ } else {
+ $realSelectionContainer.empty().append('\xA0').append(targetClone).append('\xA0');
+ range$$1.setStart($realSelectionContainer[0].firstChild, 1);
+ range$$1.setEnd($realSelectionContainer[0].lastChild, 0);
+ }
+ $realSelectionContainer.css({ top: dom.getPos(node, editor.getBody()).y });
+ $realSelectionContainer[0].focus();
+ sel = editor.selection.getSel();
+ sel.removeAllRanges();
+ sel.addRange(range$$1);
+ each(descendants$1(Element$$1.fromDom(editor.getBody()), '*[data-mce-selected]'), function (elm) {
+ remove(elm, 'data-mce-selected');
+ });
+ node.setAttribute('data-mce-selected', '1');
+ selectedContentEditableNode = node;
+ hideFakeCaret();
+ return range$$1;
+ };
+ var removeContentEditableSelection = function () {
+ if (selectedContentEditableNode) {
+ selectedContentEditableNode.removeAttribute('data-mce-selected');
+ descendant$1(Element$$1.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$2);
+ selectedContentEditableNode = null;
+ }
+ descendant$1(Element$$1.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$2);
+ selectedContentEditableNode = null;
+ };
+ var destroy = function () {
+ fakeCaret.destroy();
+ selectedContentEditableNode = null;
+ };
+ var hideFakeCaret = function () {
+ fakeCaret.hide();
+ };
+ if (Env.ceFalse) {
+ registerEvents();
+ addCss();
+ }
+ return {
+ showCaret: showCaret$$1,
+ showBlockCaretContainer: showBlockCaretContainer,
+ hideFakeCaret: hideFakeCaret,
+ destroy: destroy
+ };
+ };
+
+ var isValidPrefixAttrName = function (name) {
+ return name.indexOf('data-') === 0 || name.indexOf('aria-') === 0;
+ };
+ var trimComments = function (text) {
+ return text.replace(//g, '');
+ };
+ var isInvalidUri = function (settings, uri) {
+ if (settings.allow_html_data_urls) {
+ return false;
+ } else if (/^data:image\//i.test(uri)) {
+ return settings.allow_svg_data_urls === false && /^data:image\/svg\+xml/i.test(uri);
+ } else {
+ return /^data:/i.test(uri);
+ }
+ };
+ var findEndTagIndex = function (schema, html, startIndex) {
+ var count = 1, index, matches, tokenRegExp, shortEndedElements;
+ shortEndedElements = schema.getShortEndedElements();
+ 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;
}
- 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);
- }
- if (!validate || (elementRule = schema.getElementRule(value))) {
- isValidElement = true;
- if (validate) {
- validAttributesMap = elementRule.attributes;
- validAttributePatterns = elementRule.attributePatterns;
+ count++;
+ }
+ if (count === 0) {
+ break;
+ }
+ }
+ return index;
+ };
+ function SaxParser(settings, schema) {
+ if (schema === void 0) {
+ schema = Schema();
+ }
+ var noop = function () {
+ };
+ 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 parse = function (html) {
+ var matches, index = 0, value, endRegExp;
+ var stack = [];
+ var attrList, i, textData, name;
+ var isInternalElement, removeInternalElements, shortEndedElements, fillAttrsMap, isShortEnded;
+ var validate, elementRule, isValidElement, attr, attribsValue, validAttributesMap, validAttributePatterns;
+ var attributesRequired, attributesDefault, attributesForced, processHtml;
+ var anyAttributesRequired, selfClosing, tokenRegExp, attrRegExp, specialElements, attrValue, idCount = 0;
+ var decode = Entities.decode;
+ var fixSelfClosing;
+ var filteredUrlAttrs = Tools.makeMap('src,href,data,background,formaction,poster,xlink:href');
+ var scriptUriRegExp = /((java|vb)script|mhtml):/i;
+ var processEndTag = function (name) {
+ var pos, i;
+ pos = stack.length;
+ while (pos--) {
+ if (stack[pos].name === name) {
+ break;
}
- if (attribsValue = matches[8]) {
- isInternalElement = attribsValue.indexOf('data-mce-type') !== -1;
- if (isInternalElement && removeInternalElements) {
- isValidElement = false;
+ }
+ if (pos >= 0) {
+ for (i = stack.length - 1; i >= pos; i--) {
+ name = stack[i];
+ if (name.valid) {
+ end(name.name);
}
- attrList = [];
- attrList.map = {};
- attribsValue.replace(attrRegExp, parseAttribute);
- } 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
- });
+ stack.length = pos;
+ }
+ };
+ var parseAttribute = function (match, name, value, val2, val3) {
+ var attrRule, i;
+ var trimRegExp = /[\s\u0000-\u001F]+/g;
+ name = name.toLowerCase();
+ value = 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 (attributesDefault) {
- i = attributesDefault.length;
- while (i--) {
- attr = attributesDefault[i];
- name = attr.name;
- if (!(name in attrList.map)) {
+ 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)) {
+ return;
+ }
+ }
+ if (isInternalElement && (name in filteredUrlAttrs || name.indexOf('on') === 0)) {
+ return;
+ }
+ attrList.map[name] = value;
+ attrList.push({
+ name: name,
+ value: value
+ });
+ };
+ tokenRegExp = new RegExp('<(?:' + '(?:!--([\\w\\W]*?)-->)|' + '(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|' + '(?:!DOCTYPE([\\w\\W]*?)>)|' + '(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|' + '(?:\\/([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)>)|' + '(?:([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)((?:\\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\\/|\\s+)>)' + ')', 'g');
+ attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g;
+ shortEndedElements = schema.getShortEndedElements();
+ selfClosing = settings.self_closing_elements || schema.getSelfClosingElements();
+ fillAttrsMap = schema.getBoolAttrs();
+ validate = settings.validate;
+ removeInternalElements = settings.remove_internals;
+ fixSelfClosing = settings.fix_self_closing;
+ specialElements = schema.getSpecialElements();
+ processHtml = html + '>';
+ while (matches = tokenRegExp.exec(processHtml)) {
+ if (index < matches.index) {
+ text(decode(html.substr(index, matches.index - index)));
+ }
+ if (value = matches[6]) {
+ value = value.toLowerCase();
+ if (value.charAt(0) === ':') {
+ value = value.substr(1);
+ }
+ processEndTag(value);
+ } else if (value = matches[7]) {
+ if (matches.index + matches[0].length > html.length) {
+ text(decode(html.substr(matches.index)));
+ index = matches.index + matches[0].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);
+ }
+ if (!validate || (elementRule = schema.getElementRule(value))) {
+ isValidElement = true;
+ if (validate) {
+ validAttributesMap = elementRule.attributes;
+ validAttributePatterns = elementRule.attributePatterns;
+ }
+ if (attribsValue = matches[8]) {
+ isInternalElement = attribsValue.indexOf('data-mce-type') !== -1;
+ if (isInternalElement && removeInternalElements) {
+ isValidElement = false;
+ }
+ attrList = [];
+ attrList.map = {};
+ attribsValue.replace(attrRegExp, parseAttribute);
+ } 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++;
@@ -34827,3417 +33777,3326 @@ window.tinymce = window.tinymce || {
});
}
}
- }
- if (attributesRequired) {
- i = attributesRequired.length;
- while (i--) {
- if (attributesRequired[i] in attrList.map) {
- break;
+ 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 (i === -1) {
+ 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 (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 + matches[0].length;
- if (matches = endRegExp.exec(html)) {
if (isValidElement) {
- textData = html.substr(index, matches.index - index);
+ start(value, attrList, isShortEnded);
}
- index = matches.index + matches[0].length;
} else {
- textData = html.substr(index);
- index = html.length;
+ isValidElement = false;
}
- if (isValidElement) {
- if (textData.length > 0) {
- text(textData, true);
+ if (endRegExp = specialElements[value]) {
+ endRegExp.lastIndex = index = matches.index + matches[0].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;
}
- end(value);
+ if (isValidElement) {
+ if (textData.length > 0) {
+ text(textData, true);
+ }
+ end(value);
+ }
+ tokenRegExp.lastIndex = index;
+ continue;
}
- tokenRegExp.lastIndex = index;
- continue;
- }
- if (!isShortEnded) {
- if (!attribsValue || attribsValue.indexOf('/') !== attribsValue.length - 1) {
- stack.push({
- name: value,
- valid: isValidElement
- });
- } else if (isValidElement) {
- end(value);
+ 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]) {
+ if (value.charAt(0) === '>') {
+ value = ' ' + value;
+ }
+ if (!settings.allow_conditional_comments && value.substr(0, 3).toLowerCase() === '[if') {
+ value = ' ' + value;
+ }
+ comment(value);
+ } else if (value = matches[2]) {
+ cdata(trimComments(value));
+ } else if (value = matches[3]) {
+ doctype(value);
+ } else if (value = matches[4]) {
+ pi(value, matches[5]);
}
- } else if (value = matches[1]) {
- if (value.charAt(0) === '>') {
- value = ' ' + value;
- }
- if (!settings.allow_conditional_comments && value.substr(0, 3).toLowerCase() === '[if') {
- value = ' ' + value;
- }
- comment(value);
- } else if (value = matches[2]) {
- cdata(trimComments(value));
- } else if (value = matches[3]) {
- doctype(value);
- } else if (value = matches[4]) {
- pi(value, matches[5]);
+ index = matches.index + matches[0].length;
}
- index = matches.index + matches[0].length;
- }
- if (index < html.length) {
- text(decode(html.substr(index)));
- }
- for (i = stack.length - 1; i >= 0; i--) {
- value = stack[i];
- if (value.valid) {
- end(value.name);
+ if (index < html.length) {
+ text(decode(html.substr(index)));
+ }
+ for (i = stack.length - 1; i >= 0; i--) {
+ value = stack[i];
+ if (value.valid) {
+ end(value.name);
+ }
}
- }
- };
- return { parse: parse };
- }
- (function (SaxParser) {
- SaxParser.findEndTag = findEndTagIndex;
- }(SaxParser || (SaxParser = {})));
- var SaxParser$1 = SaxParser;
-
- 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, shortEndedElements;
- var schema = serializer.schema;
- content = trimHtml(serializer.getTempAttrs(), content);
- shortEndedElements = schema.getShortEndedElements();
- while (matches = bogusAllRegExp.exec(content)) {
- index = bogusAllRegExp.lastIndex;
- matchLength = matches[0].length;
- if (shortEndedElements[matches[1]]) {
- endTagIndex = index;
- } else {
- endTagIndex = SaxParser$1.findEndTag(schema, content, index);
- }
- content = content.substring(0, index - matchLength) + content.substring(endTagIndex);
- bogusAllRegExp.lastIndex = index - matchLength;
- }
- return $_90hfb72rjnlpaxae.trim(content);
- };
- var trimExternal = trimInternal;
- var $_9cq8vj61jnlpaxzc = {
- trimExternal: trimExternal,
- trimInternal: trimInternal
- };
-
- var KEEP = 0;
- var INSERT = 1;
- var 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
};
+ return { parse: parse };
+ }
+ (function (SaxParser) {
+ SaxParser.findEndTag = findEndTagIndex;
+ }(SaxParser || (SaxParser = {})));
+ var SaxParser$1 = SaxParser;
+
+ var trimHtml = function (tempAttrs, html) {
+ var trimContentRegExp = new RegExp(['\\s?(' + tempAttrs.join('|') + ')="[^"]+"'].join('|'), 'gi');
+ return html.replace(trimContentRegExp, '');
};
- 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) {
+ var trimInternal = function (serializer, html) {
+ var content = html;
+ var bogusAllRegExp = /<(\w+) [^>]*data-mce-bogus="all"[^>]*>/g;
+ var endTagIndex, index, matchLength, matches, shortEndedElements;
+ var schema = serializer.schema;
+ content = trimHtml(serializer.getTempAttrs(), content);
+ shortEndedElements = schema.getShortEndedElements();
+ while (matches = bogusAllRegExp.exec(content)) {
+ index = bogusAllRegExp.lastIndex;
+ matchLength = matches[0].length;
+ if (shortEndedElements[matches[1]]) {
+ endTagIndex = index;
+ } else {
+ endTagIndex = SaxParser$1.findEndTag(schema, content, index);
+ }
+ content = content.substring(0, index - matchLength) + content.substring(endTagIndex);
+ bogusAllRegExp.lastIndex = index - matchLength;
+ }
+ return Zwsp.trim(content);
+ };
+ var trimExternal = trimInternal;
+ var TrimHtml = {
+ trimExternal: trimExternal,
+ trimInternal: trimInternal
+ };
+
+ 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([
- DELETE,
+ KEEP,
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 $_27o9im64jnlpaxzv = {
- KEEP: KEEP,
- DELETE: DELETE,
- INSERT: INSERT,
- diff: diff
- };
-
- var getOuterHtml = function (elm) {
- if ($_fy28ei1rjnlpax2o.isElement(elm)) {
- return elm.outerHTML;
- } else if ($_fy28ei1rjnlpax2o.isText(elm)) {
- return $_bea7j51sjnlpax2u.encodeRaw(elm.data, false);
- } else if ($_fy28ei1rjnlpax2o.isComment(elm)) {
- return '';
- }
- return '';
- };
- var createFragment$1 = function (html) {
- var frag, node, container;
- container = document.createElement('div');
- 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;
- $_n452lmjnlpawsj.each(diff, function (action) {
- if (action[0] === $_27o9im64jnlpaxzv.KEEP) {
- index++;
- } else if (action[0] === $_27o9im64jnlpaxzv.INSERT) {
- insertAt(elm, action[1], index);
- index++;
- } else if (action[0] === $_27o9im64jnlpaxzv.DELETE) {
- removeAt(elm, index);
- }
- });
- };
- var read$3 = function (elm) {
- return $_n452lmjnlpawsj.filter($_n452lmjnlpawsj.map(elm.childNodes, getOuterHtml), function (item) {
- return item.length > 0;
- });
- };
- var write = function (fragments, elm) {
- var currentFragments = $_n452lmjnlpawsj.map(elm.childNodes, getOuterHtml);
- applyDiff($_27o9im64jnlpaxzv.diff(currentFragments, fragments), elm);
- return elm;
- };
- var $_12gl6x63jnlpaxzs = {
- read: read$3,
- write: write
- };
-
- var undoLevelDocument = Cell(Option.none());
- var lazyTempDocument = function () {
- return undoLevelDocument.get().getOrThunk(function () {
- var doc = document.implementation.createHTMLDocument('undo');
- undoLevelDocument.set(Option.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, content, trimmedFragments;
- fragments = $_12gl6x63jnlpaxzs.read(editor.getBody());
- trimmedFragments = bind(fragments, function (html) {
- var trimmed = $_9cq8vj61jnlpaxzc.trimInternal(editor.serializer, html);
- return trimmed.length > 0 ? [trimmed] : [];
- });
- content = trimmedFragments.join('');
- return hasIframes(content) ? createFragmentedLevel(trimmedFragments) : createCompleteLevel(content);
- };
- var applyToEditor = function (editor, level, before) {
- if (level.type === 'fragmented') {
- $_12gl6x63jnlpaxzs.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 = Element$$1.fromTag('body', lazyTempDocument());
- $_am4twv2jjnlpax8k.set(elm, getLevelContent(level));
- each($_cmitir27jnlpax6e.descendants(elm, '*[data-mce-bogus]'), $_azq8zm1wjnlpax4n.unwrap);
- return $_am4twv2jjnlpax8k.get(elm);
- };
- var hasEqualContent = function (level1, level2) {
- return getLevelContent(level1) === getLevelContent(level2);
- };
- var hasEqualCleanedContent = function (level1, level2) {
- return getCleanLevelContent(level1) === getCleanLevelContent(level2);
- };
- var isEq$3 = function (level1, level2) {
- if (!level1 || !level2) {
- return false;
- } else if (hasEqualContent(level1, level2)) {
- return true;
- } else {
- return hasEqualCleanedContent(level1, level2);
- }
- };
- var $_4dwaci60jnlpaxyt = {
- createFragmentedLevel: createFragmentedLevel,
- createCompleteLevel: createCompleteLevel,
- createFromEditor: createFromEditor,
- applyToEditor: applyToEditor,
- isEq: isEq$3
- };
-
- function UndoManager (editor) {
- var self = this, index = 0, data = [], beforeBookmark, isFirstTypedCharacter, locks = 0;
- var isUnlocked = function () {
- return locks === 0;
- };
- var setTyping = function (typing) {
- if (isUnlocked()) {
- self.typing = typing;
- }
- };
- var setDirty = function (state) {
- editor.setDirty(state);
- };
- var addNonTypingUndoLevel = function (e) {
- setTyping(false);
- self.add({}, e);
- };
- var endTyping = function () {
- if (self.typing) {
- setTyping(false);
- self.add();
- }
- };
- editor.on('init', function () {
- self.add();
- });
- editor.on('BeforeExecCommand', function (e) {
- var cmd = e.command;
- if (cmd !== 'Undo' && cmd !== 'Redo' && cmd !== 'mceRepaint') {
- endTyping();
- self.beforeChange();
- }
- });
- editor.on('ExecCommand', function (e) {
- var cmd = e.command;
- if (cmd !== 'Undo' && cmd !== 'Redo' && cmd !== 'mceRepaint') {
- addNonTypingUndoLevel(e);
- }
- });
- editor.on('ObjectResizeStart Cut', function () {
- self.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 && self.typing && $_4dwaci60jnlpaxyt.isEq($_4dwaci60jnlpaxyt.createFromEditor(editor), data[0]) === false) {
- if (editor.isDirty() === false) {
- setDirty(true);
- editor.fire('change', {
- level: data[0],
- lastLevel: null
- });
- }
- editor.fire('TypingUndo');
- isFirstTypedCharacter = 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 (self.typing) {
- addNonTypingUndoLevel(e);
- }
- return;
- }
- var modKey = e.ctrlKey && !e.altKey || e.metaKey;
- if ((keyCode < 16 || keyCode > 20) && keyCode !== 224 && keyCode !== 91 && !self.typing && !modKey) {
- self.beforeChange();
- setTyping(true);
- self.add({}, e);
- isFirstTypedCharacter = true;
- }
- });
- editor.on('MouseDown', function (e) {
- if (self.typing) {
- addNonTypingUndoLevel(e);
- }
- });
- var isInsertReplacementText = function (event) {
- return event.inputType === 'insertReplacementText';
- };
- var isInsertTextDataNull = function (event) {
- return event.inputType === 'insertText' && event.data === null;
- };
- editor.on('input', function (e) {
- if (e.inputType && (isInsertReplacementText(e) || isInsertTextDataNull(e))) {
- addNonTypingUndoLevel(e);
- }
- });
- editor.addShortcut('meta+z', '', 'Undo');
- editor.addShortcut('meta+y,meta+shift+z', '', 'Redo');
- editor.on('AddUndo Undo Redo ClearUndos', function (e) {
- if (!e.isDefaultPrevented()) {
- editor.nodeChanged();
- }
- });
- self = {
- data: data,
- typing: false,
- beforeChange: function () {
- if (isUnlocked()) {
- beforeBookmark = $_5l0mu32ljnlpax8x.getUndoBookmark(editor.selection);
- }
- },
- add: function (level, event) {
- var i;
- var settings = editor.settings;
- var lastLevel, currentLevel;
- currentLevel = $_4dwaci60jnlpaxyt.createFromEditor(editor);
- level = level || {};
- level = $_1q1txeljnlpawsa.extend(level, currentLevel);
- if (isUnlocked() === false || editor.removed) {
- return null;
- }
- lastLevel = data[index];
- if (editor.fire('BeforeAddUndo', {
- level: level,
- lastLevel: lastLevel,
- originalEvent: event
- }).isDefaultPrevented()) {
- return null;
- }
- if (lastLevel && $_4dwaci60jnlpaxyt.isEq(lastLevel, level)) {
- return null;
- }
- if (data[index]) {
- data[index].beforeBookmark = beforeBookmark;
- }
- if (settings.custom_undo_redo_levels) {
- if (data.length > settings.custom_undo_redo_levels) {
- for (i = 0; i < data.length - 1; i++) {
- data[i] = data[i + 1];
- }
- data.length--;
- index = data.length;
- }
- }
- level.bookmark = $_5l0mu32ljnlpax8x.getUndoBookmark(editor.selection);
- if (index < data.length - 1) {
- data.length = index + 1;
- }
- data.push(level);
- index = data.length - 1;
- var args = {
- level: level,
- lastLevel: lastLevel,
- originalEvent: event
- };
- editor.fire('AddUndo', args);
- if (index > 0) {
- setDirty(true);
- editor.fire('change', args);
- }
- return level;
- },
- undo: function () {
- var level;
- if (self.typing) {
- self.add();
- self.typing = false;
- setTyping(false);
- }
- if (index > 0) {
- level = data[--index];
- $_4dwaci60jnlpaxyt.applyToEditor(editor, level, true);
- setDirty(true);
- editor.fire('undo', { level: level });
- }
- return level;
- },
- redo: function () {
- var level;
- if (index < data.length - 1) {
- level = data[++index];
- $_4dwaci60jnlpaxyt.applyToEditor(editor, level, false);
- setDirty(true);
- editor.fire('redo', { level: level });
- }
- return level;
- },
- clear: function () {
- data = [];
- index = 0;
- self.typing = false;
- self.data = data;
- editor.fire('ClearUndos');
- },
- hasUndo: function () {
- return index > 0 || self.typing && data[0] && !$_4dwaci60jnlpaxyt.isEq($_4dwaci60jnlpaxyt.createFromEditor(editor), data[0]);
- },
- hasRedo: function () {
- return index < data.length - 1 && !self.typing;
- },
- transact: function (callback) {
- endTyping();
- self.beforeChange();
- self.ignore(callback);
- return self.add();
- },
- ignore: function (callback) {
- try {
- locks++;
- callback();
- } finally {
- locks--;
- }
- },
- extra: function (callback1, callback2) {
- var lastLevel, bookmark;
- if (self.transact(callback1)) {
- bookmark = data[index].bookmark;
- lastLevel = data[index - 1];
- $_4dwaci60jnlpaxyt.applyToEditor(editor, lastLevel, true);
- if (self.transact(callback2)) {
- data[index - 1].beforeBookmark = bookmark;
- }
- }
- }
- };
- return self;
- }
-
- var isEq$4 = $_dlfh233cjnlpaxes.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$4(node, format.inline)) {
- return true;
- }
- if (isEq$4(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 = $_dlfh233cjnlpaxes.getStyle(dom, node, key);
- }
- if (similar && !value && !format.exact) {
- return;
- }
- if ((!similar || format.exact) && !isEq$4(value, $_dlfh233cjnlpaxes.normalizeStyleValue(dom, $_dlfh233cjnlpaxes.replaceVars(items[key], vars), key))) {
- return;
- }
- }
- }
- } else {
- for (i = 0; i < items.length; i++) {
- if (itemName === 'attributes' ? dom.getAttrib(node, items[i]) : $_dlfh233cjnlpaxes.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, classes[x])) {
- return;
+ if (end1 - start1 > end2 - start2) {
+ script.push([
+ DELETE,
+ left[i]
+ ]);
+ ++i;
+ } else {
+ script.push([
+ INSERT,
+ right[j]
+ ]);
+ ++j;
}
}
}
- return format;
+ } 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 Diff = {
+ KEEP: KEEP,
+ DELETE: DELETE,
+ INSERT: INSERT,
+ diff: diff
+ };
+
+ var getOuterHtml = function (elm) {
+ if (NodeType.isElement(elm)) {
+ return elm.outerHTML;
+ } else if (NodeType.isText(elm)) {
+ return Entities.encodeRaw(elm.data, false);
+ } else if (NodeType.isComment(elm)) {
+ return '';
}
- }
- };
- var match = function (editor, name, vars, node) {
- var startNode;
- if (node) {
- return matchParents(editor, node, name, vars);
- }
- node = editor.selection.getNode();
- if (matchParents(editor, node, name, vars)) {
- return true;
- }
- startNode = editor.selection.getStart();
- if (startNode !== node) {
- if (matchParents(editor, startNode, name, vars)) {
+ return '';
+ };
+ var createFragment$1 = function (html) {
+ var frag, node, container;
+ container = document.createElement('div');
+ 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] === Diff.KEEP) {
+ index++;
+ } else if (action[0] === Diff.INSERT) {
+ insertAt(elm, action[1], index);
+ index++;
+ } else if (action[0] === Diff.DELETE) {
+ removeAt(elm, index);
+ }
+ });
+ };
+ var read$3 = 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.diff(currentFragments, fragments), elm);
+ return elm;
+ };
+ var Fragments = {
+ read: read$3,
+ write: write
+ };
+
+ var undoLevelDocument = Cell(Option.none());
+ var lazyTempDocument = function () {
+ return undoLevelDocument.get().getOrThunk(function () {
+ var doc = document.implementation.createHTMLDocument('undo');
+ undoLevelDocument.set(Option.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, content, trimmedFragments;
+ fragments = Fragments.read(editor.getBody());
+ trimmedFragments = bind(fragments, function (html) {
+ var trimmed = TrimHtml.trimInternal(editor.serializer, html);
+ return trimmed.length > 0 ? [trimmed] : [];
+ });
+ content = trimmedFragments.join('');
+ return hasIframes(content) ? createFragmentedLevel(trimmedFragments) : createCompleteLevel(content);
+ };
+ var applyToEditor = function (editor, level, before) {
+ if (level.type === 'fragmented') {
+ Fragments.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 = Element$$1.fromTag('body', lazyTempDocument());
+ set$2(elm, getLevelContent(level));
+ each(descendants$1(elm, '*[data-mce-bogus]'), unwrap);
+ return get$5(elm);
+ };
+ var hasEqualContent = function (level1, level2) {
+ return getLevelContent(level1) === getLevelContent(level2);
+ };
+ var hasEqualCleanedContent = function (level1, level2) {
+ return getCleanLevelContent(level1) === getCleanLevelContent(level2);
+ };
+ var isEq$3 = function (level1, level2) {
+ if (!level1 || !level2) {
+ return false;
+ } else if (hasEqualContent(level1, level2)) {
return true;
+ } else {
+ return hasEqualCleanedContent(level1, level2);
}
+ };
+ var Levels = {
+ createFragmentedLevel: createFragmentedLevel,
+ createCompleteLevel: createCompleteLevel,
+ createFromEditor: createFromEditor,
+ applyToEditor: applyToEditor,
+ isEq: isEq$3
+ };
+
+ function UndoManager (editor) {
+ var self = this, index = 0, data = [], beforeBookmark, isFirstTypedCharacter, locks = 0;
+ var isUnlocked = function () {
+ return locks === 0;
+ };
+ var setTyping = function (typing) {
+ if (isUnlocked()) {
+ self.typing = typing;
+ }
+ };
+ var setDirty = function (state) {
+ editor.setDirty(state);
+ };
+ var addNonTypingUndoLevel = function (e) {
+ setTyping(false);
+ self.add({}, e);
+ };
+ var endTyping = function () {
+ if (self.typing) {
+ setTyping(false);
+ self.add();
+ }
+ };
+ editor.on('init', function () {
+ self.add();
+ });
+ editor.on('BeforeExecCommand', function (e) {
+ var cmd = e.command;
+ if (cmd !== 'Undo' && cmd !== 'Redo' && cmd !== 'mceRepaint') {
+ endTyping();
+ self.beforeChange();
+ }
+ });
+ editor.on('ExecCommand', function (e) {
+ var cmd = e.command;
+ if (cmd !== 'Undo' && cmd !== 'Redo' && cmd !== 'mceRepaint') {
+ addNonTypingUndoLevel(e);
+ }
+ });
+ editor.on('ObjectResizeStart Cut', function () {
+ self.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 && self.typing && Levels.isEq(Levels.createFromEditor(editor), data[0]) === false) {
+ if (editor.isDirty() === false) {
+ setDirty(true);
+ editor.fire('change', {
+ level: data[0],
+ lastLevel: null
+ });
+ }
+ editor.fire('TypingUndo');
+ isFirstTypedCharacter = 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 (self.typing) {
+ addNonTypingUndoLevel(e);
+ }
+ return;
+ }
+ var modKey = e.ctrlKey && !e.altKey || e.metaKey;
+ if ((keyCode < 16 || keyCode > 20) && keyCode !== 224 && keyCode !== 91 && !self.typing && !modKey) {
+ self.beforeChange();
+ setTyping(true);
+ self.add({}, e);
+ isFirstTypedCharacter = true;
+ }
+ });
+ editor.on('MouseDown', function (e) {
+ if (self.typing) {
+ addNonTypingUndoLevel(e);
+ }
+ });
+ var isInsertReplacementText = function (event) {
+ return event.inputType === 'insertReplacementText';
+ };
+ var isInsertTextDataNull = function (event) {
+ return event.inputType === 'insertText' && event.data === null;
+ };
+ editor.on('input', function (e) {
+ if (e.inputType && (isInsertReplacementText(e) || isInsertTextDataNull(e))) {
+ addNonTypingUndoLevel(e);
+ }
+ });
+ editor.addShortcut('meta+z', '', 'Undo');
+ editor.addShortcut('meta+y,meta+shift+z', '', 'Redo');
+ editor.on('AddUndo Undo Redo ClearUndos', function (e) {
+ if (!e.isDefaultPrevented()) {
+ editor.nodeChanged();
+ }
+ });
+ self = {
+ data: data,
+ typing: false,
+ beforeChange: function () {
+ if (isUnlocked()) {
+ beforeBookmark = GetBookmark.getUndoBookmark(editor.selection);
+ }
+ },
+ add: function (level, event) {
+ var i;
+ var settings = editor.settings;
+ var lastLevel, currentLevel;
+ currentLevel = Levels.createFromEditor(editor);
+ level = level || {};
+ level = Tools.extend(level, currentLevel);
+ if (isUnlocked() === false || editor.removed) {
+ return null;
+ }
+ lastLevel = data[index];
+ if (editor.fire('BeforeAddUndo', {
+ level: level,
+ lastLevel: lastLevel,
+ originalEvent: event
+ }).isDefaultPrevented()) {
+ return null;
+ }
+ if (lastLevel && Levels.isEq(lastLevel, level)) {
+ return null;
+ }
+ if (data[index]) {
+ data[index].beforeBookmark = beforeBookmark;
+ }
+ if (settings.custom_undo_redo_levels) {
+ if (data.length > settings.custom_undo_redo_levels) {
+ for (i = 0; i < data.length - 1; i++) {
+ data[i] = data[i + 1];
+ }
+ data.length--;
+ index = data.length;
+ }
+ }
+ level.bookmark = GetBookmark.getUndoBookmark(editor.selection);
+ if (index < data.length - 1) {
+ data.length = index + 1;
+ }
+ data.push(level);
+ index = data.length - 1;
+ var args = {
+ level: level,
+ lastLevel: lastLevel,
+ originalEvent: event
+ };
+ editor.fire('AddUndo', args);
+ if (index > 0) {
+ setDirty(true);
+ editor.fire('change', args);
+ }
+ return level;
+ },
+ undo: function () {
+ var level;
+ if (self.typing) {
+ self.add();
+ self.typing = false;
+ setTyping(false);
+ }
+ if (index > 0) {
+ level = data[--index];
+ Levels.applyToEditor(editor, level, true);
+ setDirty(true);
+ editor.fire('undo', { level: level });
+ }
+ return level;
+ },
+ redo: function () {
+ var level;
+ if (index < data.length - 1) {
+ level = data[++index];
+ Levels.applyToEditor(editor, level, false);
+ setDirty(true);
+ editor.fire('redo', { level: level });
+ }
+ return level;
+ },
+ clear: function () {
+ data = [];
+ index = 0;
+ self.typing = false;
+ self.data = data;
+ editor.fire('ClearUndos');
+ },
+ hasUndo: function () {
+ return index > 0 || self.typing && data[0] && !Levels.isEq(Levels.createFromEditor(editor), data[0]);
+ },
+ hasRedo: function () {
+ return index < data.length - 1 && !self.typing;
+ },
+ transact: function (callback) {
+ endTyping();
+ self.beforeChange();
+ self.ignore(callback);
+ return self.add();
+ },
+ ignore: function (callback) {
+ try {
+ locks++;
+ callback();
+ } finally {
+ locks--;
+ }
+ },
+ extra: function (callback1, callback2) {
+ var lastLevel, bookmark;
+ if (self.transact(callback1)) {
+ bookmark = data[index].bookmark;
+ lastLevel = data[index - 1];
+ Levels.applyToEditor(editor, lastLevel, true);
+ if (self.transact(callback2)) {
+ data[index - 1].beforeBookmark = bookmark;
+ }
+ }
+ }
+ };
+ return self;
}
- return false;
- };
- var matchAll = function (editor, names, vars) {
- var startElement;
- var matchedFormatNames = [];
- var checkedMap = {};
- startElement = editor.selection.getStart();
- editor.dom.getParent(startElement, function (node) {
- var i, name;
- for (i = 0; i < names.length; i++) {
- name = names[i];
- if (!checkedMap[name] && matchNode(editor, node, name, vars)) {
- checkedMap[name] = true;
- matchedFormatNames.push(name);
- }
- }
- }, editor.dom.getRoot());
- return matchedFormatNames;
- };
- 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 = $_dlfh233cjnlpaxes.getParents(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)) {
+
+ var isEq$4 = FormatUtils.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 $_706y6v68jnlpay1a = {
- matchNode: matchNode,
- matchName: matchName,
- match: match,
- matchAll: matchAll,
- canApply: canApply,
- matchesUnInheritedFormatSelector: matchesUnInheritedFormatSelector
- };
-
- 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 && $_fy28ei1rjnlpax2o.isText(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 ($_fy28ei1rjnlpax2o.isText(startContainer) && startOffset > 0 && startOffset < startContainer.nodeValue.length) {
- startContainer = splitText(startContainer, startOffset);
- startOffset = 0;
- }
- if ($_fy28ei1rjnlpax2o.isText(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 $_fvyfxh69jnlpay1e = { split: split$1 };
-
- var ZWSP$1 = $_90hfb72rjnlpaxae.ZWSP;
- var 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) {
- var walker;
- if (node) {
- walker = new TreeWalker(node, node);
- for (node = walker.current(); node; node = walker.next()) {
- if (node.nodeType === 3) {
- return node;
- }
- }
- }
- return null;
- };
- var createCaretContainer = function (fill) {
- var caretContainer = Element$$1.fromTag('span');
- $_521j8z15jnlpawz7.setAll(caretContainer, {
- 'id': CARET_ID$1,
- 'data-mce-bogus': '1',
- 'data-mce-type': 'format-caret'
- });
- if (fill) {
- $_ag89ax1yjnlpax4x.append(caretContainer, Element$$1.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 (dom, selection, node, moveCaret) {
- var rng, block, textNode;
- rng = selection.getRng(true);
- block = dom.getParent(node, dom.isBlock);
- if (isCaretContainerEmpty(node)) {
- if (moveCaret !== false) {
- rng.setStartBefore(node);
- rng.setEndBefore(node);
- }
- dom.remove(node);
- } else {
- textNode = trimZwspFromCaretContainer(node);
- if (rng.startContainer === textNode && rng.startOffset > 0) {
- rng.setStart(textNode, rng.startOffset - 1);
- }
- if (rng.endContainer === textNode && rng.endOffset > 0) {
- rng.setEnd(textNode, rng.endOffset - 1);
- }
- dom.remove(node, true);
- }
- if (block && dom.isEmpty(block)) {
- $_azhpc63njnlpaxgw.fillWithPaddingBr(Element$$1.fromDom(block));
- }
- selection.setRng(rng);
- };
- var removeCaretContainer = function (body, dom, selection, node, moveCaret) {
- if (!node) {
- node = getParentCaretContainer(body, selection.getStart());
- if (!node) {
- while (node = dom.get(CARET_ID$1)) {
- removeCaretContainerNode(dom, selection, node, false);
- }
- }
- } else {
- removeCaretContainerNode(dom, selection, node, moveCaret);
- }
- };
- var insertCaretContainerNode = function (editor, caretContainer, formatNode) {
- var dom = editor.dom, block = dom.getParent(formatNode, $_dv6bef2njnlpax9l.curry($_dlfh233cjnlpaxes.isTextBlock, editor));
- if (block && dom.isEmpty(block)) {
- formatNode.parentNode.replaceChild(caretContainer, formatNode);
- } else {
- $_azhpc63njnlpaxgw.removeTrailingBr(Element$$1.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 applyCaretFormat = function (editor, name, vars) {
- var rng, caretContainer, textNode, offset, bookmark, container, text;
- var selection = editor.selection;
- rng = selection.getRng(true);
- offset = rng.startOffset;
- container = rng.startContainer;
- 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))) {
- bookmark = selection.getBookmark();
- rng.collapse(true);
- rng = $_3cscnj2wjnlpaxau.expandRng(editor, rng, editor.formatter.get(name));
- rng = $_fvyfxh69jnlpay1e.split(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;
- rng.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, selection = editor.selection;
- var container, offset, bookmark;
- var hasContentAfter, node, formatNode;
- var parents = [], rng = selection.getRng();
- var caretContainer;
- container = rng.startContainer;
- offset = rng.startOffset;
- node = container;
- if (container.nodeType === 3) {
- if (offset !== container.nodeValue.length) {
- hasContentAfter = true;
- }
- node = node.parentNode;
- }
- while (node) {
- if ($_706y6v68jnlpay1a.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) {
- bookmark = selection.getBookmark();
- rng.collapse(true);
- var expandedRng = $_3cscnj2wjnlpaxau.expandRng(editor, rng, editor.formatter.get(name), true);
- expandedRng = $_fvyfxh69jnlpay1e.split(expandedRng);
- editor.formatter.remove(name, vars, expandedRng);
- selection.moveToBookmark(bookmark);
- } else {
- caretContainer = getParentCaretContainer(editor.getBody(), formatNode);
- var newCaretContainer = createCaretContainer(false).dom();
- var caretNode = insertFormatNodesIntoCaretContainer(parents, newCaretContainer);
- if (caretContainer) {
- insertCaretContainerNode(editor, newCaretContainer, caretContainer);
- } else {
- insertCaretContainerNode(editor, newCaretContainer, formatNode);
- }
- removeCaretContainerNode(dom, selection, caretContainer, false);
- selection.setCursorLocation(caretNode, 1);
- if (dom.isEmpty(formatNode)) {
- dom.remove(formatNode);
- }
- }
- };
- var disableCaretContainer = function (body, dom, selection, keyCode) {
- removeCaretContainer(body, dom, selection, null, false);
- if (keyCode === 8 && selection.isCollapsed() && selection.getStart().innerHTML === ZWSP$1) {
- removeCaretContainer(body, dom, selection, getParentCaretContainer(body, selection.getStart()));
- }
- if (keyCode === 37 || keyCode === 39) {
- removeCaretContainer(body, dom, selection, getParentCaretContainer(body, selection.getStart()));
- }
- };
- var setup$4 = function (editor) {
- var dom = editor.dom, selection = editor.selection;
- var body = editor.getBody();
- editor.on('mouseup keydown', function (e) {
- disableCaretContainer(body, dom, selection, e.keyCode);
- });
- };
- var replaceWithCaretFormat = function (targetNode, formatNodes) {
- var caretContainer = createCaretContainer(false);
- var innerMost = insertFormatNodesIntoCaretContainer(formatNodes, caretContainer.dom());
- $_ag89ax1yjnlpax4x.before(Element$$1.fromDom(targetNode), caretContainer);
- $_azq8zm1wjnlpax4n.remove(Element$$1.fromDom(targetNode));
- return CaretPosition$1(innerMost, 0);
- };
- var isFormatElement = function (editor, element) {
- var inlineElements = editor.schema.getTextInlineElements();
- return inlineElements.hasOwnProperty($_7u5fzs11jnlpawv6.name(element)) && !isCaretNode(element.dom()) && !$_fy28ei1rjnlpax2o.isBogus(element.dom());
- };
-
- var postProcessHooks = {};
- var filter$2 = $_n452lmjnlpawsj.filter;
- var each$12 = $_n452lmjnlpawsj.each;
- var addPostProcessHook = function (name, hook) {
- var hooks = postProcessHooks[name];
- if (!hooks) {
- postProcessHooks[name] = hooks = [];
- }
- postProcessHooks[name].push(hook);
- };
- var postProcess = function (name, editor) {
- each$12(postProcessHooks[name], function (hook) {
- hook(editor);
- });
- };
- addPostProcessHook('pre', function (editor) {
- var rng = editor.selection.getRng();
- var isPre, blocks;
- var hasPreSibling = function (pre) {
- return isPre(pre.previousSibling) && $_n452lmjnlpawsj.indexOf(blocks, pre.previousSibling) !== -1;
- };
- var joinPre = function (pre1, pre2) {
- DomQuery(pre2).remove();
- DomQuery(pre1).append('
').append(pre2.childNodes);
- };
- isPre = $_fy28ei1rjnlpax2o.matchNodeNames('pre');
- if (!rng.collapsed) {
- blocks = editor.selection.getSelectedBlocks();
- each$12(filter$2(filter$2(blocks, isPre), hasPreSibling), function (pre) {
- joinPre(pre.previousSibling, pre);
- });
- }
- });
- var $_48059m6ajnlpay1h = { postProcess: postProcess };
-
- var MCE_ATTR_RE = /^(src|href|style)$/;
- var each$13 = $_1q1txeljnlpawsa.each;
- var isEq$5 = $_dlfh233cjnlpaxes.isEq;
- var isTableCell$4 = function (node) {
- return /^(TH|TD)$/.test(node.nodeName);
- };
- var getContainer = function (ed, rng, start) {
- var container, offset, lastIdx;
- container = rng[start ? 'startContainer' : 'endContainer'];
- offset = rng[start ? 'startOffset' : 'endOffset'];
- if ($_fy28ei1rjnlpax2o.isElement(container)) {
- lastIdx = container.childNodes.length - 1;
- if (!start && offset) {
- offset--;
- }
- container = container.childNodes[offset > lastIdx ? lastIdx : offset];
- }
- if ($_fy28ei1rjnlpax2o.isText(container) && start && offset >= container.nodeValue.length) {
- container = new TreeWalker(container, ed.getBody()).next() || container;
- }
- if ($_fy28ei1rjnlpax2o.isText(container) && !start && offset === 0) {
- container = new TreeWalker(container, ed.getBody()).prev() || container;
- }
- return container;
- };
- 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, startNode, name, next, attrs) {
- var direction = (next ? 'next' : 'previous') + 'Sibling';
- var wrapper = dom.create(name, attrs);
- startNode.parentNode.insertBefore(wrapper, startNode);
- var nodesToWrap = [startNode];
- var currNode = startNode;
- while (currNode = currNode[direction]) {
- nodesToWrap.push(currNode);
- }
- nodesToWrap.forEach(function (node) {
- return wrapper.appendChild(node);
- });
- return wrapper;
- };
- var matchName$1 = function (dom, node, format) {
- if (isEq$5(node, format.inline)) {
- return true;
- }
- if (isEq$5(node, format.block)) {
- return true;
- }
- if (format.selector) {
- return $_fy28ei1rjnlpax2o.isElement(node) && dom.is(node, format.selector);
- }
- };
- var isColorFormatAndAnchor = function (node, format) {
- return format.links && node.tagName === 'A';
- };
- var find$4 = function (dom, node, next, inc) {
- node = $_dlfh233cjnlpaxes.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 = ed.settings.forced_root_block;
- if (format.block) {
- if (!forcedRootBlock) {
- if (dom.isBlock(node) && !dom.isBlock(parentNode)) {
- if (!find$4(dom, node, false) && !find$4(dom, node.firstChild, true, 1)) {
- node.insertBefore(dom.create('br'), node.firstChild);
- }
- if (!find$4(dom, node, true) && !find$4(dom, node.lastChild, false, 1)) {
- node.appendChild(dom.create('br'));
- }
- }
- } else {
- if (parentNode === dom.getRoot()) {
- if (!format.list_block || !isEq$5(node, format.list_block)) {
- each$13($_1q1txeljnlpawsa.grep(node.childNodes), function (node) {
- if ($_dlfh233cjnlpaxes.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$5(format.inline, node)) {
- return;
- }
- dom.remove(node, 1);
- };
- var removeFormat = function (ed, format, vars, node, compareNode) {
- var i, attrs, stylesModified;
- var dom = ed.dom;
- if (!matchName$1(dom, node, format) && !isColorFormatAndAnchor(node, format)) {
return false;
- }
- if (format.remove !== 'all') {
- each$13(format.styles, function (value, name) {
- value = $_dlfh233cjnlpaxes.normalizeStyleValue(dom, $_dlfh233cjnlpaxes.replaceVars(value, vars), name);
- if (typeof name === 'number') {
- name = value;
- compareNode = 0;
- }
- if (format.remove_similar || (!compareNode || isEq$5($_dlfh233cjnlpaxes.getStyle(dom, compareNode, name), value))) {
- dom.setStyle(node, name, '');
- }
- stylesModified = 1;
- });
- if (stylesModified && dom.getAttrib(node, 'style') === '') {
- node.removeAttribute('style');
- node.removeAttribute('data-mce-style');
+ };
+ var matchParents = function (editor, node, name, vars) {
+ var root = editor.dom.getRoot();
+ if (node === root) {
+ return false;
}
- each$13(format.attributes, function (value, name) {
- var valueOut;
- value = $_dlfh233cjnlpaxes.replaceVars(value, vars);
- if (typeof name === 'number') {
- name = value;
- compareNode = 0;
+ node = editor.dom.getParent(node, function (node) {
+ if (matchesUnInheritedFormatSelector(editor, node, name)) {
+ return true;
}
- if (!compareNode || isEq$5(dom.getAttrib(compareNode, name), value)) {
- if (name === 'class') {
- value = dom.getAttrib(node, name);
- if (value) {
- valueOut = '';
- each$13(value.split(/\s+/), function (cls) {
- if (/mce\-\w+/.test(cls)) {
- valueOut += (valueOut ? ' ' : '') + cls;
- }
- });
- if (valueOut) {
- dom.setAttrib(node, name, valueOut);
+ return node.parentNode === root || !!matchNode(editor, node, name, vars, true);
+ });
+ return matchNode(editor, node, name, vars);
+ };
+ var matchName = function (dom, node, format) {
+ if (isEq$4(node, format.inline)) {
+ return true;
+ }
+ if (isEq$4(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 = FormatUtils.getStyle(dom, node, key);
+ }
+ if (similar && !value && !format.exact) {
+ return;
+ }
+ if ((!similar || format.exact) && !isEq$4(value, FormatUtils.normalizeStyleValue(dom, FormatUtils.replaceVars(items[key], vars), key))) {
return;
}
}
}
- if (name === 'class') {
- node.removeAttribute('className');
- }
- if (MCE_ATTR_RE.test(name)) {
- node.removeAttribute('data-mce-' + name);
- }
- node.removeAttribute(name);
- }
- });
- each$13(format.classes, function (value) {
- value = $_dlfh233cjnlpaxes.replaceVars(value, vars);
- if (!compareNode || dom.hasClass(compareNode, value)) {
- dom.removeClass(node, value);
- }
- });
- attrs = dom.getAttribs(node);
- for (i = 0; i < attrs.length; i++) {
- var attrName = attrs[i].nodeName;
- if (attrName.indexOf('_') !== 0 && attrName.indexOf('data-') !== 0) {
- return false;
- }
- }
- }
- if (format.remove !== 'none') {
- removeNode$1(ed, node, format);
- return true;
- }
- };
- var findFormatRoot = function (editor, container, name, vars, similar) {
- var formatRoot;
- each$13($_dlfh233cjnlpaxes.getParents(editor.dom, container.parentNode).reverse(), function (parent) {
- var format;
- if (!formatRoot && parent.id !== '_start' && parent.id !== '_end') {
- format = $_706y6v68jnlpay1a.matchNode(editor, parent, name, vars, similar);
- if (format && format.split !== false) {
- formatRoot = parent;
- }
- }
- });
- return formatRoot;
- };
- var wrapAndSplit = function (editor, formatList, formatRoot, container, target, split, format, vars) {
- var parent, clone, lastClone, firstClone, i, formatRootParent;
- var dom = editor.dom;
- if (formatRoot) {
- formatRootParent = formatRoot.parentNode;
- for (parent = container.parentNode; parent && parent !== formatRootParent; parent = parent.parentNode) {
- clone = dom.clone(parent, false);
- for (i = 0; i < formatList.length; i++) {
- if (removeFormat(editor, formatList[i], vars, clone, clone)) {
- clone = 0;
- 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);
- }
- }
- return container;
- };
- var remove$8 = function (ed, name, vars, node, similar) {
- var formatList = ed.formatter.get(name), format = formatList[0];
- var bookmark, rng, 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 process = function (node) {
- var children, i, l, lastContentEditable, hasContentEditableState;
- if ($_fy28ei1rjnlpax2o.isElement(node) && dom.getContentEditable(node)) {
- lastContentEditable = contentEditable;
- contentEditable = dom.getContentEditable(node) === 'true';
- hasContentEditableState = true;
- }
- children = $_1q1txeljnlpawsa.grep(node.childNodes);
- if (contentEditable && !hasContentEditableState) {
- for (i = 0, l = formatList.length; i < l; i++) {
- if (removeFormat(ed, formatList[i], vars, node, node)) {
- break;
- }
- }
- }
- if (format.deep) {
- if (children.length) {
- for (i = 0, l = children.length; i < l; 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 ($_43l8qj2xjnlpaxb1.isBookmarkNode(out)) {
- out = out[start ? 'firstChild' : 'lastChild'];
- }
- if ($_fy28ei1rjnlpax2o.isText(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 commonAncestorContainer = rng.commonAncestorContainer;
- rng = $_3cscnj2wjnlpaxau.expandRng(ed, rng, formatList, true);
- if (format.split) {
- rng = $_fvyfxh69jnlpay1e.split(rng);
- startContainer = getContainer(ed, rng, true);
- endContainer = getContainer(ed, rng);
- if (startContainer !== endContainer) {
- if (/^(TR|TH|TD)$/.test(startContainer.nodeName) && startContainer.firstChild) {
- if (startContainer.nodeName === 'TR') {
- startContainer = startContainer.firstChild.firstChild || startContainer;
- } else {
- startContainer = startContainer.firstChild || startContainer;
+ } else {
+ for (i = 0; i < items.length; i++) {
+ if (itemName === 'attributes' ? dom.getAttrib(node, items[i]) : FormatUtils.getStyle(dom, node, items[i])) {
+ return format;
}
}
- if (commonAncestorContainer && /^T(HEAD|BODY|FOOT|R)$/.test(commonAncestorContainer.nodeName) && isTableCell$4(endContainer) && endContainer.firstChild) {
- endContainer = endContainer.firstChild || endContainer;
- }
- if (dom.isChildOf(startContainer, endContainer) && startContainer !== endContainer && !dom.isBlock(endContainer) && !isTableCell$4(startContainer) && !isTableCell$4(endContainer)) {
- var wrappedContent = wrapWithSiblings(dom, startContainer, 'span', true, {
- 'id': '_start',
- 'data-mce-type': 'bookmark'
- });
- splitToFormatRoot(wrappedContent);
- startContainer = unwrap(true);
- 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'
- });
- splitToFormatRoot(startContainer);
- splitToFormatRoot(endContainer);
- startContainer = unwrap(true);
- endContainer = unwrap();
- } else {
- startContainer = endContainer = splitToFormatRoot(startContainer);
}
- rng.startContainer = startContainer.parentNode ? startContainer.parentNode : startContainer;
- rng.startOffset = dom.nodeIndex(startContainer);
- rng.endContainer = endContainer.parentNode ? endContainer.parentNode : endContainer;
- rng.endOffset = dom.nodeIndex(endContainer) + 1;
}
- $_6wozuu3djnlpaxew.walk(dom, rng, function (nodes) {
- each$13(nodes, function (node) {
- process(node);
- if ($_fy28ei1rjnlpax2o.isElement(node) && ed.dom.getStyle(node, 'text-decoration') === 'underline' && node.parentNode && $_dlfh233cjnlpaxes.getTextDecoration(dom, node.parentNode) === 'underline') {
- removeFormat(ed, {
- deep: false,
- exact: true,
- inline: 'span',
- styles: { textDecoration: 'underline' }
- }, null, node);
- }
- });
- });
+ return format;
};
- if (node) {
- if (node.nodeType) {
- 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, l = formatList.length; i < l; i++) {
- if (formatList[i].ceFalseOverride) {
- if (removeFormat(ed, formatList[i], vars, node, node)) {
- break;
+ 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, classes[x])) {
+ return;
+ }
+ }
+ }
+ return format;
}
}
}
- return;
- }
- if (!selection.isCollapsed() || !format.inline || dom.select('td[data-mce-selected],th[data-mce-selected]').length) {
- bookmark = $_5l0mu32ljnlpax8x.getPersistentBookmark(ed.selection, true);
- removeRngStyle(selection.getRng());
- selection.moveToBookmark(bookmark);
- if (format.inline && $_706y6v68jnlpay1a.match(ed, name, vars, selection.getStart())) {
- $_dlfh233cjnlpaxes.moveStart(dom, selection, selection.getRng());
+ };
+ var match = function (editor, name, vars, node) {
+ var startNode;
+ if (node) {
+ return matchParents(editor, node, name, vars);
}
- ed.nodeChanged();
- } else {
- removeCaretFormat(ed, name, vars, similar);
- }
- };
- var $_4dimpr6cjnlpay1t = {
- removeFormat: removeFormat,
- remove: remove$8
- };
-
- var each$14 = $_1q1txeljnlpawsa.each;
- var isElementNode = function (node) {
- return node && node.nodeType === 1 && !$_43l8qj2xjnlpaxb1.isBookmarkNode(node) && !isCaretNode(node) && !$_fy28ei1rjnlpax2o.isBogus(node);
- };
- var findElementSibling = function (node, siblingName) {
- var sibling;
- for (sibling = node; sibling; sibling = sibling[siblingName]) {
- if (sibling.nodeType === 3 && sibling.nodeValue.length !== 0) {
- return node;
+ node = editor.selection.getNode();
+ if (matchParents(editor, node, name, vars)) {
+ return true;
}
- if (sibling.nodeType === 1 && !$_43l8qj2xjnlpaxb1.isBookmarkNode(sibling)) {
- return sibling;
- }
- }
- return node;
- };
- var mergeSiblingsNodes = function (dom, prev, next) {
- var sibling, tmpSibling;
- var elementUtils = new 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);
- $_1q1txeljnlpawsa.each($_1q1txeljnlpawsa.grep(next.childNodes), function (node) {
- prev.appendChild(node);
- });
- return prev;
- }
- }
- return next;
- };
- var processChildElements = function (node, filter, process) {
- each$14(node.childNodes, function (node) {
- if (isElementNode(node)) {
- if (filter(node)) {
- process(node);
- }
- if (node.hasChildNodes()) {
- processChildElements(node, filter, process);
- }
- }
- });
- };
- var hasStyle = function (dom, name) {
- return curry(function (name, node) {
- return !!(node && $_dlfh233cjnlpaxes.getStyle(dom, node, name));
- }, name);
- };
- var applyStyle = function (dom, name, value) {
- return curry(function (name, value, node) {
- dom.setStyle(node, name, value);
- if (node.getAttribute('style') === '') {
- node.removeAttribute('style');
- }
- unwrapEmptySpan(dom, node);
- }, name, value);
- };
- var unwrapEmptySpan = function (dom, node) {
- if (node.nodeName === 'SPAN' && dom.getAttribs(node).length === 0) {
- dom.remove(node, true);
- }
- };
- var processUnderlineAndColor = function (dom, node) {
- var textDecoration;
- if (node.nodeType === 1 && node.parentNode && node.parentNode.nodeType === 1) {
- textDecoration = $_dlfh233cjnlpaxes.getTextDecoration(dom, node.parentNode);
- if (dom.getStyle(node, 'color') && textDecoration) {
- dom.setStyle(node, 'text-decoration', textDecoration);
- } else if (dom.getStyle(node, 'text-decoration') === textDecoration) {
- dom.setStyle(node, 'text-decoration', null);
- }
- }
- };
- var mergeUnderlineAndColor = function (dom, format, vars, node) {
- if (format.styles.color || format.styles.textDecoration) {
- $_1q1txeljnlpawsa.walk(node, curry(processUnderlineAndColor, dom), 'childNodes');
- processUnderlineAndColor(dom, node);
- }
- };
- var mergeBackgroundColorAndFontSize = function (dom, format, vars, node) {
- if (format.styles && format.styles.backgroundColor) {
- processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'backgroundColor', $_dlfh233cjnlpaxes.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 mergeSiblings = function (dom, format, vars, node) {
- if (node && format.merge_siblings !== false) {
- node = mergeSiblingsNodes(dom, $_dlfh233cjnlpaxes.getNonWhiteSpaceSibling(node), node);
- node = mergeSiblingsNodes(dom, node, $_dlfh233cjnlpaxes.getNonWhiteSpaceSibling(node, true));
- }
- };
- var clearChildStyles = function (dom, format, node) {
- if (format.clear_child_styles) {
- var selector = format.links ? '*:not(a)' : '*';
- each$14(dom.select(selector, node), function (node) {
- if (isElementNode(node)) {
- each$14(format.styles, function (value, name) {
- dom.setStyle(node, name, '');
- });
- }
- });
- }
- };
- var mergeWithChildren = function (editor, formatList, vars, node) {
- each$14(formatList, function (format) {
- each$14(editor.dom.select(format.inline, node), function (child) {
- if (!isElementNode(child)) {
- return;
- }
- $_4dimpr6cjnlpay1t.removeFormat(editor, format, vars, child, format.exact ? child : null);
- });
- clearChildStyles(editor.dom, format, node);
- });
- };
- var mergeWithParents = function (editor, format, name, vars, node) {
- if ($_706y6v68jnlpay1a.matchNode(editor, node.parentNode, name, vars)) {
- if ($_4dimpr6cjnlpay1t.removeFormat(editor, format, vars, node)) {
- return;
- }
- }
- if (format.merge_with_parents) {
- editor.dom.getParent(node.parentNode, function (parent) {
- if ($_706y6v68jnlpay1a.matchNode(editor, parent, name, vars)) {
- $_4dimpr6cjnlpay1t.removeFormat(editor, format, vars, node);
+ startNode = editor.selection.getStart();
+ if (startNode !== node) {
+ if (matchParents(editor, startNode, name, vars)) {
return true;
}
- });
- }
- };
- var $_4luhzy6bjnlpay1j = {
- mergeWithChildren: mergeWithChildren,
- mergeUnderlineAndColor: mergeUnderlineAndColor,
- mergeBackgroundColorAndFontSize: mergeBackgroundColorAndFontSize,
- mergeSubSup: mergeSubSup,
- mergeSiblings: mergeSiblings,
- mergeWithParents: mergeWithParents
- };
+ }
+ return false;
+ };
+ var matchAll = function (editor, names, vars) {
+ var startElement;
+ var matchedFormatNames = [];
+ var checkedMap = {};
+ startElement = editor.selection.getStart();
+ editor.dom.getParent(startElement, function (node) {
+ var i, name;
+ for (i = 0; i < names.length; i++) {
+ name = names[i];
+ if (!checkedMap[name] && matchNode(editor, node, name, vars)) {
+ checkedMap[name] = true;
+ matchedFormatNames.push(name);
+ }
+ }
+ }, editor.dom.getRoot());
+ return matchedFormatNames;
+ };
+ 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 = FormatUtils.getParents(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 MatchFormat = {
+ matchNode: matchNode,
+ matchName: matchName,
+ match: match,
+ matchAll: matchAll,
+ canApply: canApply,
+ matchesUnInheritedFormatSelector: matchesUnInheritedFormatSelector
+ };
- var each$15 = $_1q1txeljnlpawsa.each;
- var isElementNode$1 = function (node) {
- return node && node.nodeType === 1 && !$_43l8qj2xjnlpaxb1.isBookmarkNode(node) && !isCaretNode(node) && !$_fy28ei1rjnlpax2o.isBogus(node);
- };
- var applyFormat = function (ed, name, vars, node) {
- var formatList = ed.formatter.get(name);
- var format = formatList[0];
- var bookmark, rng;
- var isCollapsed = !node && ed.selection.isCollapsed();
- var dom = ed.dom, selection = ed.selection;
- var setElementFormat = function (elm, fmt) {
- fmt = fmt || format;
- if (elm) {
- if (fmt.onformat) {
- fmt.onformat(elm, fmt, vars, node);
- }
- each$15(fmt.styles, function (value, name) {
- dom.setStyle(elm, name, $_dlfh233cjnlpaxes.replaceVars(value, vars));
- });
- if (fmt.styles) {
- var styleVal = dom.getAttrib(elm, 'style');
- if (styleVal) {
- elm.setAttribute('data-mce-style', styleVal);
+ 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 && NodeType.isText(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;
}
}
- each$15(fmt.attributes, function (value, name) {
- dom.setAttrib(elm, name, $_dlfh233cjnlpaxes.replaceVars(value, vars));
- });
- each$15(fmt.classes, function (value) {
- value = $_dlfh233cjnlpaxes.replaceVars(value, vars);
- if (!dom.hasClass(elm, value)) {
- dom.addClass(elm, value);
+ } else {
+ if (NodeType.isText(startContainer) && startOffset > 0 && startOffset < startContainer.nodeValue.length) {
+ startContainer = splitText(startContainer, startOffset);
+ startOffset = 0;
+ }
+ if (NodeType.isText(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 SplitRange = { split: split$1 };
+
+ var ZWSP$1 = Zwsp.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) {
+ var walker;
+ if (node) {
+ walker = new TreeWalker(node, node);
+ for (node = walker.current(); node; node = walker.next()) {
+ if (node.nodeType === 3) {
+ return node;
}
- });
+ }
+ }
+ return null;
+ };
+ var createCaretContainer = function (fill) {
+ var caretContainer = Element$$1.fromTag('span');
+ setAll(caretContainer, {
+ 'id': CARET_ID$1,
+ 'data-mce-bogus': '1',
+ 'data-mce-type': 'format-caret'
+ });
+ if (fill) {
+ append(caretContainer, Element$$1.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.deleteElement(editor, false, Element$$1.fromDom(node), moveCaret);
+ } else {
+ var rng = selection.getRng();
+ var block = dom.getParent(node, dom.isBlock);
+ var textNode = trimZwspFromCaretContainer(node);
+ if (rng.startContainer === textNode && rng.startOffset > 0) {
+ rng.setStart(textNode, rng.startOffset - 1);
+ }
+ if (rng.endContainer === textNode && rng.endOffset > 0) {
+ rng.setEnd(textNode, rng.endOffset - 1);
+ }
+ dom.remove(node, true);
+ if (block && dom.isEmpty(block)) {
+ PaddingBr.fillWithPaddingBr(Element$$1.fromDom(block));
+ }
+ selection.setRng(rng);
}
};
- var applyNodeStyle = function (formatList, node) {
- var found = false;
- if (!format.selector) {
+ 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(FormatUtils.isTextBlock, editor));
+ if (block && dom.isEmpty(block)) {
+ formatNode.parentNode.replaceChild(caretContainer, formatNode);
+ } else {
+ PaddingBr.removeTrailingBr(Element$$1.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 applyCaretFormat = function (editor, name$$1, vars) {
+ var rng, caretContainer, textNode, offset, bookmark, container, text;
+ var selection = editor.selection;
+ rng = selection.getRng(true);
+ offset = rng.startOffset;
+ container = rng.startContainer;
+ 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))) {
+ bookmark = selection.getBookmark();
+ rng.collapse(true);
+ rng = ExpandRange.expandRng(editor, rng, editor.formatter.get(name$$1));
+ rng = SplitRange.split(rng);
+ editor.formatter.apply(name$$1, vars, rng);
+ selection.moveToBookmark(bookmark);
+ } else {
+ if (!caretContainer || textNode.nodeValue !== ZWSP$1) {
+ caretContainer = importNode(editor.getDoc(), createCaretContainer(true).dom());
+ textNode = caretContainer.firstChild;
+ rng.insertNode(caretContainer);
+ offset = 1;
+ editor.formatter.apply(name$$1, vars, caretContainer);
+ } else {
+ editor.formatter.apply(name$$1, vars, caretContainer);
+ }
+ selection.setCursorLocation(textNode, offset);
+ }
+ };
+ var removeCaretFormat = function (editor, name$$1, vars, similar) {
+ var dom = editor.dom, selection = editor.selection;
+ var container, offset, bookmark;
+ var hasContentAfter, node, formatNode;
+ var parents = [], rng = selection.getRng();
+ var caretContainer;
+ container = rng.startContainer;
+ offset = rng.startOffset;
+ node = container;
+ if (container.nodeType === 3) {
+ if (offset !== container.nodeValue.length) {
+ hasContentAfter = true;
+ }
+ node = node.parentNode;
+ }
+ while (node) {
+ if (MatchFormat.matchNode(editor, node, name$$1, vars, similar)) {
+ formatNode = node;
+ break;
+ }
+ if (node.nextSibling) {
+ hasContentAfter = true;
+ }
+ parents.push(node);
+ node = node.parentNode;
+ }
+ if (!formatNode) {
+ return;
+ }
+ if (hasContentAfter) {
+ bookmark = selection.getBookmark();
+ rng.collapse(true);
+ var expandedRng = ExpandRange.expandRng(editor, rng, editor.formatter.get(name$$1), true);
+ expandedRng = SplitRange.split(expandedRng);
+ editor.formatter.remove(name$$1, vars, expandedRng);
+ selection.moveToBookmark(bookmark);
+ } else {
+ caretContainer = getParentCaretContainer(editor.getBody(), formatNode);
+ var newCaretContainer = createCaretContainer(false).dom();
+ var caretNode = insertFormatNodesIntoCaretContainer(parents, newCaretContainer);
+ if (caretContainer) {
+ insertCaretContainerNode(editor, newCaretContainer, caretContainer);
+ } else {
+ insertCaretContainerNode(editor, newCaretContainer, formatNode);
+ }
+ removeCaretContainerNode(editor, caretContainer, false);
+ selection.setCursorLocation(caretNode, 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$4 = 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(Element$$1.fromDom(targetNode), caretContainer);
+ remove$2(Element$$1.fromDom(targetNode));
+ return CaretPosition$1(innerMost, 0);
+ };
+ var isFormatElement = function (editor, element) {
+ var inlineElements = editor.schema.getTextInlineElements();
+ return inlineElements.hasOwnProperty(name(element)) && !isCaretNode(element.dom()) && !NodeType.isBogus(element.dom());
+ };
+ var isEmptyCaretFormatElement = function (element) {
+ return isCaretNode(element.dom()) && isCaretContainerEmpty(element.dom());
+ };
+
+ var postProcessHooks = {}, filter$2 = ArrUtils.filter, each$c = ArrUtils.each;
+ var addPostProcessHook = function (name, hook) {
+ var hooks = postProcessHooks[name];
+ if (!hooks) {
+ postProcessHooks[name] = hooks = [];
+ }
+ postProcessHooks[name].push(hook);
+ };
+ var postProcess = function (name, editor) {
+ each$c(postProcessHooks[name], function (hook) {
+ hook(editor);
+ });
+ };
+ addPostProcessHook('pre', function (editor) {
+ var rng = editor.selection.getRng();
+ var isPre, blocks;
+ var hasPreSibling = function (pre) {
+ return isPre(pre.previousSibling) && ArrUtils.indexOf(blocks, pre.previousSibling) !== -1;
+ };
+ var joinPre = function (pre1, pre2) {
+ DomQuery(pre2).remove();
+ DomQuery(pre1).append('
').append(pre2.childNodes);
+ };
+ isPre = NodeType.matchNodeNames('pre');
+ if (!rng.collapsed) {
+ blocks = editor.selection.getSelectedBlocks();
+ each$c(filter$2(filter$2(blocks, isPre), hasPreSibling), function (pre) {
+ joinPre(pre.previousSibling, pre);
+ });
+ }
+ });
+ var Hooks = { postProcess: postProcess };
+
+ var MCE_ATTR_RE = /^(src|href|style)$/;
+ var each$d = Tools.each;
+ var isEq$5 = FormatUtils.isEq;
+ var isTableCell$4 = function (node) {
+ return /^(TH|TD)$/.test(node.nodeName);
+ };
+ var isChildOfInlineParent = function (dom, node, parent$$1) {
+ return dom.isChildOf(node, parent$$1) && node !== parent$$1 && !dom.isBlock(parent$$1);
+ };
+ var getContainer = function (ed, rng, start) {
+ var container, offset, lastIdx;
+ container = rng[start ? 'startContainer' : 'endContainer'];
+ offset = rng[start ? 'startOffset' : 'endOffset'];
+ if (NodeType.isElement(container)) {
+ lastIdx = container.childNodes.length - 1;
+ if (!start && offset) {
+ offset--;
+ }
+ container = container.childNodes[offset > lastIdx ? lastIdx : offset];
+ }
+ if (NodeType.isText(container) && start && offset >= container.nodeValue.length) {
+ container = new TreeWalker(container, ed.getBody()).next() || container;
+ }
+ if (NodeType.isText(container) && !start && offset === 0) {
+ container = new TreeWalker(container, ed.getBody()).prev() || container;
+ }
+ return container;
+ };
+ 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 = Element$$1.fromDom(node);
+ var wrapper = Element$$1.fromDom(dom.create(name, attrs));
+ var siblings$$1 = next ? nextSiblings(start) : prevSiblings(start);
+ append$1(wrapper, siblings$$1);
+ 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$5(node, format.inline)) {
+ return true;
+ }
+ if (isEq$5(node, format.block)) {
+ return true;
+ }
+ if (format.selector) {
+ return NodeType.isElement(node) && dom.is(node, format.selector);
+ }
+ };
+ var isColorFormatAndAnchor = function (node, format) {
+ return format.links && node.tagName === 'A';
+ };
+ var find$4 = function (dom, node, next, inc) {
+ node = FormatUtils.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 = ed.settings.forced_root_block;
+ if (format.block) {
+ if (!forcedRootBlock) {
+ if (dom.isBlock(node) && !dom.isBlock(parentNode)) {
+ if (!find$4(dom, node, false) && !find$4(dom, node.firstChild, true, 1)) {
+ node.insertBefore(dom.create('br'), node.firstChild);
+ }
+ if (!find$4(dom, node, true) && !find$4(dom, node.lastChild, false, 1)) {
+ node.appendChild(dom.create('br'));
+ }
+ }
+ } else {
+ if (parentNode === dom.getRoot()) {
+ if (!format.list_block || !isEq$5(node, format.list_block)) {
+ each$d(Tools.grep(node.childNodes), function (node) {
+ if (FormatUtils.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$5(format.inline, node)) {
+ return;
+ }
+ dom.remove(node, 1);
+ };
+ var removeFormat = function (ed, format, vars, node, compareNode) {
+ var i, attrs, stylesModified;
+ var dom = ed.dom;
+ if (!matchName$1(dom, node, format) && !isColorFormatAndAnchor(node, format)) {
return false;
}
- each$15(formatList, function (format) {
- if ('collapsed' in format && format.collapsed !== isCollapsed) {
- return;
+ if (format.remove !== 'all') {
+ each$d(format.styles, function (value, name) {
+ value = FormatUtils.normalizeStyleValue(dom, FormatUtils.replaceVars(value, vars), name);
+ if (typeof name === 'number') {
+ name = value;
+ compareNode = 0;
+ }
+ if (format.remove_similar || (!compareNode || isEq$5(FormatUtils.getStyle(dom, compareNode, name), value))) {
+ dom.setStyle(node, name, '');
+ }
+ stylesModified = 1;
+ });
+ if (stylesModified && dom.getAttrib(node, 'style') === '') {
+ node.removeAttribute('style');
+ node.removeAttribute('data-mce-style');
}
- if (dom.is(node, format.selector) && !isCaretNode(node)) {
- setElementFormat(node, format);
- found = true;
- return false;
+ each$d(format.attributes, function (value, name) {
+ var valueOut;
+ value = FormatUtils.replaceVars(value, vars);
+ if (typeof name === 'number') {
+ name = value;
+ compareNode = 0;
+ }
+ if (!compareNode || isEq$5(dom.getAttrib(compareNode, name), value)) {
+ if (name === 'class') {
+ value = dom.getAttrib(node, name);
+ if (value) {
+ valueOut = '';
+ each$d(value.split(/\s+/), function (cls) {
+ if (/mce\-\w+/.test(cls)) {
+ valueOut += (valueOut ? ' ' : '') + cls;
+ }
+ });
+ if (valueOut) {
+ dom.setAttrib(node, name, valueOut);
+ return;
+ }
+ }
+ }
+ if (name === 'class') {
+ node.removeAttribute('className');
+ }
+ if (MCE_ATTR_RE.test(name)) {
+ node.removeAttribute('data-mce-' + name);
+ }
+ node.removeAttribute(name);
+ }
+ });
+ each$d(format.classes, function (value) {
+ value = FormatUtils.replaceVars(value, vars);
+ if (!compareNode || dom.hasClass(compareNode, value)) {
+ dom.removeClass(node, value);
+ }
+ });
+ attrs = dom.getAttribs(node);
+ for (i = 0; i < attrs.length; i++) {
+ var attrName = attrs[i].nodeName;
+ if (attrName.indexOf('_') !== 0 && attrName.indexOf('data-') !== 0) {
+ return false;
+ }
+ }
+ }
+ if (format.remove !== 'none') {
+ removeNode$1(ed, node, format);
+ return true;
+ }
+ };
+ var findFormatRoot = function (editor, container, name, vars, similar) {
+ var formatRoot;
+ each$d(FormatUtils.getParents(editor.dom, container.parentNode).reverse(), function (parent$$1) {
+ var format;
+ if (!formatRoot && parent$$1.id !== '_start' && parent$$1.id !== '_end') {
+ format = MatchFormat.matchNode(editor, parent$$1, name, vars, similar);
+ if (format && format.split !== false) {
+ formatRoot = parent$$1;
+ }
}
});
- return found;
+ return formatRoot;
};
- var applyRngStyle = function (dom, rng, bookmark, nodeSpecific) {
- var newWrappers = [];
- var wrapName, wrapElm, contentEditable = true;
- wrapName = format.inline || format.block;
- wrapElm = dom.create(wrapName);
- setElementFormat(wrapElm);
- $_6wozuu3djnlpaxew.walk(dom, rng, function (nodes) {
- var currentWrapElm;
- var process = function (node) {
- var nodeName, parentName, hasContentEditableState, lastContentEditable;
+ var wrapAndSplit = function (editor, formatList, formatRoot, container, target, split, format, vars) {
+ var parent$$1, clone, lastClone, firstClone, i, formatRootParent;
+ var dom = editor.dom;
+ if (formatRoot) {
+ formatRootParent = formatRoot.parentNode;
+ for (parent$$1 = container.parentNode; parent$$1 && parent$$1 !== formatRootParent; parent$$1 = parent$$1.parentNode) {
+ clone = dom.clone(parent$$1, false);
+ for (i = 0; i < formatList.length; i++) {
+ if (removeFormat(editor, formatList[i], vars, clone, clone)) {
+ clone = 0;
+ 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);
+ }
+ }
+ return container;
+ };
+ var remove$8 = function (ed, name, vars, node, similar) {
+ var formatList = ed.formatter.get(name), format = formatList[0];
+ var bookmark, rng, 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 Bookmarks.isBookmarkNode(node) && NodeType.isElement(node) && (node.id === '_start' || node.id === '_end');
+ };
+ var process = function (node) {
+ var children$$1, i, l, lastContentEditable, hasContentEditableState;
+ if (NodeType.isElement(node) && dom.getContentEditable(node)) {
lastContentEditable = contentEditable;
- nodeName = node.nodeName.toLowerCase();
- parentName = node.parentNode.nodeName.toLowerCase();
- if (node.nodeType === 1 && dom.getContentEditable(node)) {
- lastContentEditable = contentEditable;
- contentEditable = dom.getContentEditable(node) === 'true';
- hasContentEditableState = true;
- }
- if ($_dlfh233cjnlpaxes.isEq(nodeName, 'br')) {
- currentWrapElm = 0;
- if (format.block) {
- dom.remove(node);
- }
- return;
- }
- if (format.wrapper && $_706y6v68jnlpay1a.matchNode(ed, node, name, vars)) {
- currentWrapElm = 0;
- return;
- }
- if (contentEditable && !hasContentEditableState && format.block && !format.wrapper && $_dlfh233cjnlpaxes.isTextBlock(ed, nodeName) && $_dlfh233cjnlpaxes.isValid(ed, parentName, wrapName)) {
- node = dom.rename(node, wrapName);
- setElementFormat(node);
- newWrappers.push(node);
- currentWrapElm = 0;
- return;
- }
- if (format.selector) {
- var found = applyNodeStyle(formatList, node);
- if (!format.inline || found) {
- currentWrapElm = 0;
- return;
+ contentEditable = dom.getContentEditable(node) === 'true';
+ hasContentEditableState = true;
+ }
+ children$$1 = Tools.grep(node.childNodes);
+ if (contentEditable && !hasContentEditableState) {
+ for (i = 0, l = formatList.length; i < l; i++) {
+ if (removeFormat(ed, formatList[i], vars, node, node)) {
+ break;
}
}
- if (contentEditable && !hasContentEditableState && $_dlfh233cjnlpaxes.isValid(ed, wrapName, nodeName) && $_dlfh233cjnlpaxes.isValid(ed, parentName, wrapName) && !(!nodeSpecific && node.nodeType === 3 && node.nodeValue.length === 1 && node.nodeValue.charCodeAt(0) === 65279) && !isCaretNode(node) && (!format.inline || !dom.isBlock(node))) {
- if (!currentWrapElm) {
- currentWrapElm = dom.clone(wrapElm, false);
- node.parentNode.insertBefore(currentWrapElm, node);
- newWrappers.push(currentWrapElm);
+ }
+ if (format.deep) {
+ if (children$$1.length) {
+ for (i = 0, l = children$$1.length; i < l; i++) {
+ process(children$$1[i]);
}
- currentWrapElm.appendChild(node);
- } else {
- currentWrapElm = 0;
- each$15($_1q1txeljnlpawsa.grep(node.childNodes), process);
if (hasContentEditableState) {
contentEditable = lastContentEditable;
}
- currentWrapElm = 0;
}
- };
- each$15(nodes, process);
- });
- if (format.links === true) {
- each$15(newWrappers, function (node) {
- var process = function (node) {
- if (node.nodeName === 'A') {
- setElementFormat(node, format);
+ }
+ };
+ 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 (NodeType.isText(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 commonAncestorContainer = rng.commonAncestorContainer;
+ rng = ExpandRange.expandRng(ed, rng, formatList, true);
+ if (format.split) {
+ rng = SplitRange.split(rng);
+ startContainer = getContainer(ed, rng, true);
+ endContainer = getContainer(ed, rng);
+ if (startContainer !== endContainer) {
+ if (/^(TR|TH|TD)$/.test(startContainer.nodeName) && startContainer.firstChild) {
+ if (startContainer.nodeName === 'TR') {
+ startContainer = startContainer.firstChild.firstChild || startContainer;
+ } else {
+ startContainer = startContainer.firstChild || startContainer;
+ }
}
- each$15($_1q1txeljnlpawsa.grep(node.childNodes), process);
- };
- process(node);
+ if (commonAncestorContainer && /^T(HEAD|BODY|FOOT|R)$/.test(commonAncestorContainer.nodeName) && isTableCell$4(endContainer) && endContainer.firstChild) {
+ endContainer = endContainer.firstChild || endContainer;
+ }
+ if (isChildOfInlineParent(dom, startContainer, endContainer)) {
+ var marker = Option.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 = Option.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'
+ });
+ splitToFormatRoot(startContainer);
+ splitToFormatRoot(endContainer);
+ startContainer = unwrap(true);
+ endContainer = unwrap();
+ } else {
+ startContainer = endContainer = splitToFormatRoot(startContainer);
+ }
+ rng.startContainer = startContainer.parentNode ? startContainer.parentNode : startContainer;
+ rng.startOffset = dom.nodeIndex(startContainer);
+ rng.endContainer = endContainer.parentNode ? endContainer.parentNode : endContainer;
+ rng.endOffset = dom.nodeIndex(endContainer) + 1;
+ }
+ RangeWalk.walk(dom, rng, function (nodes) {
+ each$d(nodes, function (node) {
+ process(node);
+ if (NodeType.isElement(node) && ed.dom.getStyle(node, 'text-decoration') === 'underline' && node.parentNode && FormatUtils.getTextDecoration(dom, node.parentNode) === 'underline') {
+ removeFormat(ed, {
+ deep: false,
+ exact: true,
+ inline: 'span',
+ styles: { textDecoration: 'underline' }
+ }, null, node);
+ }
+ });
});
- }
- each$15(newWrappers, function (node) {
- var childCount;
- var getChildCount = function (node) {
- var count = 0;
- each$15(node.childNodes, function (node) {
- if (!$_dlfh233cjnlpaxes.isWhiteSpaceNode(node) && !$_43l8qj2xjnlpaxb1.isBookmarkNode(node)) {
- count++;
- }
- });
- return count;
- };
- var getChildElementNode = function (root) {
- var child = false;
- each$15(root.childNodes, function (node) {
- if (isElementNode$1(node)) {
- child = node;
- return false;
- }
- });
- return child;
- };
- var mergeStyles = function (node) {
- var child, clone;
- child = getChildElementNode(node);
- if (child && !$_43l8qj2xjnlpaxb1.isBookmarkNode(child) && $_706y6v68jnlpay1a.matchName(dom, child, format)) {
- clone = dom.clone(child, false);
- setElementFormat(clone);
- dom.replace(clone, node, true);
- dom.remove(child, 1);
- }
- return clone || node;
- };
- childCount = getChildCount(node);
- if ((newWrappers.length > 1 || !dom.isBlock(node)) && childCount === 0) {
- dom.remove(node, 1);
- return;
- }
- if (format.inline || format.wrapper) {
- if (!format.exact && childCount === 1) {
- node = mergeStyles(node);
- }
- $_4luhzy6bjnlpay1j.mergeWithChildren(ed, formatList, vars, node);
- $_4luhzy6bjnlpay1j.mergeWithParents(ed, format, name, vars, node);
- $_4luhzy6bjnlpay1j.mergeBackgroundColorAndFontSize(dom, format, vars, node);
- $_4luhzy6bjnlpay1j.mergeSubSup(dom, format, vars, node);
- $_4luhzy6bjnlpay1j.mergeSiblings(dom, format, vars, node);
- }
- });
- };
- if (dom.getContentEditable(selection.getNode()) === 'false') {
- node = selection.getNode();
- for (var i = 0, l = formatList.length; i < l; i++) {
- if (formatList[i].ceFalseOverride && dom.is(node, formatList[i].selector)) {
- setElementFormat(node, formatList[i]);
- return;
- }
- }
- return;
- }
- if (format) {
+ };
if (node) {
if (node.nodeType) {
- if (!applyNodeStyle(formatList, node)) {
- rng = dom.createRng();
- rng.setStartBefore(node);
- rng.setEndAfter(node);
- applyRngStyle(dom, $_3cscnj2wjnlpaxau.expandRng(ed, rng, formatList), null, true);
- }
+ rng = dom.createRng();
+ rng.setStartBefore(node);
+ rng.setEndAfter(node);
+ removeRngStyle(rng);
} else {
- applyRngStyle(dom, node, null, true);
+ removeRngStyle(node);
}
- } else {
- if (!isCollapsed || !format.inline || dom.select('td[data-mce-selected],th[data-mce-selected]').length) {
- var curSelNode = ed.selection.getNode();
- if (!ed.settings.forced_root_block && formatList[0].defaultBlock && !dom.getParent(curSelNode, dom.isBlock)) {
- applyFormat(ed, formatList[0].defaultBlock);
- }
- ed.selection.setRng($_4fmn0j3qjnlpaxhi.normalize(ed.selection.getRng()));
- bookmark = $_5l0mu32ljnlpax8x.getPersistentBookmark(ed.selection, true);
- applyRngStyle(dom, $_3cscnj2wjnlpaxau.expandRng(ed, selection.getRng(), formatList), bookmark);
- if (format.styles) {
- $_4luhzy6bjnlpay1j.mergeUnderlineAndColor(dom, format, vars, curSelNode);
- }
- selection.moveToBookmark(bookmark);
- $_dlfh233cjnlpaxes.moveStart(dom, selection, selection.getRng());
- ed.nodeChanged();
- } else {
- applyCaretFormat(ed, name, vars);
- }
- }
- $_48059m6ajnlpay1h.postProcess(name, ed);
- }
- };
- var $_f4ruu466jnlpay08 = { applyFormat: applyFormat };
-
- var each$16 = $_1q1txeljnlpawsa.each;
- var setup$5 = function (formatChangeData, editor) {
- var currentFormats = {};
- formatChangeData.set({});
- editor.on('NodeChange', function (e) {
- var parents = $_dlfh233cjnlpaxes.getParents(editor.dom, e.element);
- var matchedFormats = {};
- parents = $_1q1txeljnlpawsa.grep(parents, function (node) {
- return node.nodeType === 1 && !node.getAttribute('data-mce-bogus');
- });
- each$16(formatChangeData.get(), function (callbacks, format) {
- each$16(parents, function (node) {
- if (editor.formatter.matchNode(node, format, {}, callbacks.similar)) {
- if (!currentFormats[format]) {
- each$16(callbacks, function (callback) {
- callback(true, {
- node: node,
- format: format,
- parents: parents
- });
- });
- currentFormats[format] = callbacks;
- }
- matchedFormats[format] = callbacks;
- return false;
- }
- if ($_706y6v68jnlpay1a.matchesUnInheritedFormatSelector(editor, node, format)) {
- return false;
- }
- });
- });
- each$16(currentFormats, function (callbacks, format) {
- if (!matchedFormats[format]) {
- delete currentFormats[format];
- each$16(callbacks, function (callback) {
- callback(false, {
- node: e.element,
- format: format,
- parents: parents
- });
- });
- }
- });
- });
- };
- var addListeners = function (formatChangeData, formats, callback, similar) {
- var formatChangeItems = formatChangeData.get();
- each$16(formats.split(','), function (format) {
- if (!formatChangeItems[format]) {
- formatChangeItems[format] = [];
- formatChangeItems[format].similar = similar;
- }
- formatChangeItems[format].push(callback);
- });
- formatChangeData.set(formatChangeItems);
- };
- var formatChanged = function (editor, formatChangeState, formats, callback, similar) {
- if (formatChangeState.get() === null) {
- setup$5(formatChangeState, editor);
- }
- addListeners(formatChangeState, formats, callback, similar);
- };
- var $_10ddoa6djnlpay24 = { formatChanged: formatChanged };
-
- var get$8 = 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',
- 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',
- 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',
- 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'
- },
- {
- inline: 'span',
- styles: { fontWeight: 'bold' }
- },
- {
- inline: 'b',
- remove: 'all'
- }
- ],
- italic: [
- {
- inline: 'em',
- remove: 'all'
- },
- {
- inline: 'span',
- styles: { fontStyle: 'italic' }
- },
- {
- inline: 'i',
- remove: 'all'
- }
- ],
- underline: [
- {
- inline: 'span',
- styles: { textDecoration: 'underline' },
- exact: true
- },
- {
- inline: 'u',
- remove: 'all'
- }
- ],
- strikethrough: [
- {
- inline: 'span',
- styles: { textDecoration: 'line-through' },
- exact: true
- },
- {
- inline: 'strike',
- remove: 'all'
- }
- ],
- 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
- },
- fontsize_class: {
- inline: 'span',
- attributes: { class: '%value' }
- },
- blockquote: {
- block: 'blockquote',
- wrapper: 1,
- remove: 'all'
- },
- subscript: { inline: 'sub' },
- superscript: { inline: 'sup' },
- code: { inline: 'code' },
- link: {
- inline: 'a',
- selector: 'a',
- remove: 'all',
- split: true,
- deep: true,
- onmatch: function () {
- return true;
- },
- onformat: function (elm, fmt, vars) {
- $_1q1txeljnlpawsa.each(vars, function (value, key) {
- dom.setAttrib(elm, key, value);
- });
- }
- },
- removeformat: [
- {
- selector: 'b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins',
- 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
- }
- ]
- };
- $_1q1txeljnlpawsa.each('p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp'.split(/\s/), function (name) {
- formats[name] = {
- block: name,
- remove: 'all'
- };
- });
- return formats;
- };
- var $_2j3wlv6fjnlpay2d = { get: get$8 };
-
- function FormatRegistry (editor) {
- var formats = {};
- var get = function (name) {
- return name ? formats[name] : formats;
- };
- var register = function (name, format) {
- if (name) {
- if (typeof name !== 'string') {
- $_1q1txeljnlpawsa.each(name, function (format, name) {
- register(name, format);
- });
- } else {
- format = format.length ? format : [format];
- $_1q1txeljnlpawsa.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($_2j3wlv6fjnlpay2d.get(editor.dom));
- register(editor.settings.formats);
- return {
- get: get,
- register: register,
- unregister: unregister
- };
- }
-
- var each$17 = $_1q1txeljnlpawsa.each;
- var dom = DOMUtils$1.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) {
- var elm;
- item = typeof sItem === 'string' ? {
- name: sItem,
- classes: [],
- attrs: {}
- } : sItem;
- 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 && $_1q1txeljnlpawsa.inArray(parentsRequired, candidate) !== -1 ? candidate : parentsRequired[0];
- } else {
- return false;
- }
- };
- var wrapInHtml = function (elm, ancestry, siblings) {
- var parent, parentCandidate, parentRequired;
- var ancestor = ancestry.length > 0 && ancestry[0];
- var ancestorName = ancestor && ancestor.name;
- 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);
- }
- $_1q1txeljnlpawsa.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 selectorToHtml = function (selector, editor) {
- return parsedSelectorToHtml(parseSelector(selector), editor);
- };
- var parseSelectorItem = function (item) {
- var tagName;
- var obj = {
- classes: [],
- attrs: {}
- };
- item = obj.selector = $_1q1txeljnlpawsa.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 ($_1q1txeljnlpawsa.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 $_1q1txeljnlpawsa.map(selector.split(/(?:>|\s+(?![^\[\]]+\]))/), function (item) {
- var siblings = $_1q1txeljnlpawsa.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, previewElm, items;
- var previewCss = '', parentFontSize, previewStyles;
- previewStyles = editor.settings.preview_styles;
- if (previewStyles === false) {
- return '';
- }
- if (typeof previewStyles !== 'string') {
- previewStyles = 'font-family font-size font-weight font-style text-decoration ' + 'text-transform color background-color border border-radius outline text-shadow';
- }
- 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) {
- previewStyles = format.preview;
- if (previewStyles === false) {
- return '';
- }
- }
- name = format.block || format.inline || 'span';
- 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);
- }
- previewElm = dom.select(name, previewFrag)[0] || previewFrag.firstChild;
- each$17(format.styles, function (value, name) {
- value = removeVars(value);
- if (value) {
- dom.setStyle(previewElm, name, value);
- }
- });
- each$17(format.attributes, function (value, name) {
- value = removeVars(value);
- if (value) {
- dom.setAttrib(previewElm, name, value);
- }
- });
- each$17(format.classes, function (value) {
- value = removeVars(value);
- if (!dom.hasClass(previewElm, value)) {
- dom.addClass(previewElm, value);
- }
- });
- 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$17(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 $_6yt3d06gjnlpay2j = {
- getCssText: getCssText,
- parseSelector: parseSelector,
- selectorToHtml: selectorToHtml
- };
-
- var toggle$3 = function (editor, formats, name, vars, node) {
- var fmt = formats.get(name);
- if ($_706y6v68jnlpay1a.match(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) {
- $_4dimpr6cjnlpay1t.remove(editor, name, vars, node);
- } else {
- $_f4ruu466jnlpay08.applyFormat(editor, name, vars, node);
- }
- };
- var $_div70r6hjnlpay2r = { toggle: toggle$3 };
-
- 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 $_azkj2d6ijnlpay2t = { setup: setup$6 };
-
- function Formatter (editor) {
- var formats = FormatRegistry(editor);
- var formatChangeState = Cell(null);
- $_azkj2d6ijnlpay2t.setup(editor);
- setup$4(editor);
- return {
- get: formats.get,
- register: formats.register,
- unregister: formats.unregister,
- apply: curry($_f4ruu466jnlpay08.applyFormat, editor),
- remove: curry($_4dimpr6cjnlpay1t.remove, editor),
- toggle: curry($_div70r6hjnlpay2r.toggle, editor, formats),
- match: curry($_706y6v68jnlpay1a.match, editor),
- matchAll: curry($_706y6v68jnlpay1a.matchAll, editor),
- matchNode: curry($_706y6v68jnlpay1a.matchNode, editor),
- canApply: curry($_706y6v68jnlpay1a.canApply, editor),
- formatChanged: curry($_10ddoa6djnlpay24.formatChanged, editor, formatChangeState),
- getCssText: curry($_6yt3d06gjnlpay2j.getCssText, editor)
- };
- }
-
- var hasOwnProperty$2 = Object.prototype.hasOwnProperty;
- var shallow$1 = function (old, nu) {
- return nu;
- };
- var baseMerge = function (merger) {
- return function () {
- var objects = new Array(arguments.length);
- for (var i = 0; i < objects.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 merge = baseMerge(shallow$1);
-
- var register = 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.attributes.map['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.attributes.map[internalName];
- if (value !== undefined) {
- node.attr(name, value.length > 0 ? value : null);
- node.attr(internalName, null);
- } else {
- value = node.attributes.map[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.attributes.map['data-mce-type'] === 'bookmark' && !args.cleanup) {
- node.remove();
- }
- }
- });
- htmlParser.addNodeFilter('noscript', function (nodes) {
- var i = nodes.length, node;
- while (i--) {
- node = nodes[i].firstChild;
- if (node) {
- node.value = $_bea7j51sjnlpax2u.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 = '';
+ if (dom.getContentEditable(selection.getNode()) === 'false') {
+ node = selection.getNode();
+ for (var i = 0, l = formatList.length; i < l; i++) {
+ if (formatList[i].ceFalseOverride) {
+ if (removeFormat(ed, formatList[i], vars, node, node)) {
+ break;
+ }
}
}
+ return;
}
- });
- htmlParser.addNodeFilter('#comment', function (nodes) {
- var i = nodes.length, node;
- while (i--) {
- node = nodes[i];
- if (node.value.indexOf('[CDATA[') === 0) {
- node.name = '#cdata';
- node.type = 4;
- node.value = 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);
+ if (!selection.isCollapsed() || !format.inline || dom.select('td[data-mce-selected],th[data-mce-selected]').length) {
+ bookmark = GetBookmark.getPersistentBookmark(ed.selection, true);
+ removeRngStyle(selection.getRng());
+ selection.moveToBookmark(bookmark);
+ if (format.inline && MatchFormat.match(ed, name, vars, selection.getStart())) {
+ FormatUtils.moveStart(dom, selection, selection.getRng());
}
- }
- });
- 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' && !('type' in node.attributes.map)) {
- 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', function (nodes, name) {
- var i = nodes.length;
- while (i--) {
- nodes[i].attr(name, null);
- }
- });
- };
- var trimTrailingBr = function (rootNode) {
- var brNode1, brNode2;
- var isBr = function (node) {
- return node && node.name === 'br';
- };
- brNode1 = rootNode.lastChild;
- if (isBr(brNode1)) {
- brNode2 = brNode1.prev;
- if (isBr(brNode2)) {
- brNode1.remove();
- brNode2.remove();
- }
- }
- };
- var $_bpervq6mjnlpay3i = {
- register: register,
- trimTrailingBr: trimTrailingBr
- };
-
- var preProcess = function (editor, node, args) {
- var impl, doc, oldDoc;
- var dom = editor.dom;
- node = node.cloneNode(true);
- impl = document.implementation;
- if (impl.createHTMLDocument) {
- doc = impl.createHTMLDocument('');
- $_1q1txeljnlpawsa.each(node.nodeName === 'BODY' ? node.childNodes : [node], function (node) {
- doc.body.appendChild(doc.importNode(node, true));
- });
- if (node.nodeName !== 'BODY') {
- node = doc.body.firstChild;
+ ed.nodeChanged();
} else {
- node = doc.body;
+ removeCaretFormat(ed, name, vars, similar);
}
- oldDoc = dom.doc;
- dom.doc = doc;
- }
- $_5atig84wjnlpaxs7.firePreProcess(editor, merge(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 $_5tjdgs6njnlpay3r = { process: process };
+ };
+ var RemoveFormat = {
+ removeFormat: removeFormat,
+ remove: remove$8
+ };
- 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;
+ var each$e = Tools.each;
+ var isElementNode = function (node) {
+ return node && node.nodeType === 1 && !Bookmarks.isBookmarkNode(node) && !isCaretNode(node) && !NodeType.isBogus(node);
+ };
+ var findElementSibling = function (node, siblingName) {
+ var sibling;
+ for (sibling = node; sibling; sibling = sibling[siblingName]) {
+ if (sibling.nodeType === 3 && sibling.nodeValue.length !== 0) {
+ return node;
}
- 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, $_1q1txeljnlpawsa.explode(settings.font_size_legacy_values));
- }
- addStrikeToSpanFilter(domParser, styles);
- };
- var register$1 = function (domParser, settings) {
- if (settings.inline_styles) {
- addFilters(domParser, settings);
- }
- };
- var $_2wvuyy6pjnlpay4e = { register: register$1 };
-
- var whiteSpaceRegExp$3 = /^[ \t\r\n]*$/;
- var typeLookup = {
- '#text': 3,
- '#comment': 8,
- '#cdata': 4,
- '#pi': 7,
- '#doctype': 10,
- '#document-fragment': 11
- };
- var walk$3 = function (node, root, prev) {
- var sibling;
- var parent;
- var startName = prev ? 'lastChild' : 'firstChild';
- var siblingName = prev ? 'prev' : 'next';
- if (node[startName]) {
- return node[startName];
- }
- if (node !== root) {
- sibling = node[siblingName];
- if (sibling) {
- return sibling;
- }
- for (parent = node.parent; parent && parent !== root; parent = parent.parent) {
- sibling = parent[siblingName];
- if (sibling) {
+ if (sibling.nodeType === 1 && !Bookmarks.isBookmarkNode(sibling)) {
return sibling;
}
}
- }
- };
- var Node$2 = function () {
- function Node(name, type) {
- this.name = name;
- this.type = type;
- if (type === 1) {
- this.attributes = [];
- this.attributes.map = {};
- }
- }
- Node.create = function (name, attrs) {
- var node, attrName;
- node = new Node(name, typeLookup[name] || 1);
- if (attrs) {
- for (attrName in attrs) {
- node.attr(attrName, attrs[attrName]);
- }
- }
return node;
};
- Node.prototype.replace = function (node) {
- var self = this;
- if (node.parent) {
- node.remove();
- }
- self.insert(node, self);
- self.remove();
- return self;
- };
- Node.prototype.attr = function (name, value) {
- var self = this;
- var attrs, i;
- if (typeof name !== 'string') {
- for (i in name) {
- self.attr(i, name[i]);
- }
- return self;
- }
- if (attrs = self.attributes) {
- if (value !== undefined) {
- if (value === null) {
- if (name in attrs.map) {
- delete attrs.map[name];
- i = attrs.length;
- while (i--) {
- if (attrs[i].name === name) {
- attrs = attrs.splice(i, 1);
- return self;
- }
- }
- }
- return self;
+ var mergeSiblingsNodes = function (dom, prev, next) {
+ var sibling, tmpSibling;
+ var elementUtils = new 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);
}
- if (name in attrs.map) {
- i = attrs.length;
- while (i--) {
- if (attrs[i].name === name) {
- attrs[i].value = value;
- break;
- }
- }
- } else {
- attrs.push({
- name: name,
- value: value
+ dom.remove(next);
+ Tools.each(Tools.grep(next.childNodes), function (node) {
+ prev.appendChild(node);
+ });
+ return prev;
+ }
+ }
+ return next;
+ };
+ var processChildElements = function (node, filter, process) {
+ each$e(node.childNodes, function (node) {
+ if (isElementNode(node)) {
+ if (filter(node)) {
+ process(node);
+ }
+ if (node.hasChildNodes()) {
+ processChildElements(node, filter, process);
+ }
+ }
+ });
+ };
+ var hasStyle = function (dom, name) {
+ return curry(function (name, node) {
+ return !!(node && FormatUtils.getStyle(dom, node, name));
+ }, name);
+ };
+ var applyStyle = function (dom, name, value) {
+ return curry(function (name, value, node) {
+ dom.setStyle(node, name, value);
+ if (node.getAttribute('style') === '') {
+ node.removeAttribute('style');
+ }
+ unwrapEmptySpan(dom, node);
+ }, name, value);
+ };
+ var unwrapEmptySpan = function (dom, node) {
+ if (node.nodeName === 'SPAN' && dom.getAttribs(node).length === 0) {
+ dom.remove(node, true);
+ }
+ };
+ var processUnderlineAndColor = function (dom, node) {
+ var textDecoration;
+ if (node.nodeType === 1 && node.parentNode && node.parentNode.nodeType === 1) {
+ textDecoration = FormatUtils.getTextDecoration(dom, node.parentNode);
+ if (dom.getStyle(node, 'color') && textDecoration) {
+ dom.setStyle(node, 'text-decoration', textDecoration);
+ } else if (dom.getStyle(node, 'text-decoration') === textDecoration) {
+ dom.setStyle(node, 'text-decoration', null);
+ }
+ }
+ };
+ var mergeUnderlineAndColor = function (dom, format, vars, node) {
+ if (format.styles.color || format.styles.textDecoration) {
+ Tools.walk(node, curry(processUnderlineAndColor, dom), 'childNodes');
+ processUnderlineAndColor(dom, node);
+ }
+ };
+ var mergeBackgroundColorAndFontSize = function (dom, format, vars, node) {
+ if (format.styles && format.styles.backgroundColor) {
+ processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'backgroundColor', FormatUtils.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 mergeSiblings = function (dom, format, vars, node) {
+ if (node && format.merge_siblings !== false) {
+ node = mergeSiblingsNodes(dom, FormatUtils.getNonWhiteSpaceSibling(node), node);
+ node = mergeSiblingsNodes(dom, node, FormatUtils.getNonWhiteSpaceSibling(node, true));
+ }
+ };
+ var clearChildStyles = function (dom, format, node) {
+ if (format.clear_child_styles) {
+ var selector = format.links ? '*:not(a)' : '*';
+ each$e(dom.select(selector, node), function (node) {
+ if (isElementNode(node)) {
+ each$e(format.styles, function (value, name) {
+ dom.setStyle(node, name, '');
});
}
- attrs.map[name] = value;
- return self;
- }
- return attrs.map[name];
+ });
}
};
- Node.prototype.clone = function () {
- var self = this;
- var clone = new Node(self.name, self.type);
- var i, l, selfAttrs, selfAttr, cloneAttrs;
- if (selfAttrs = self.attributes) {
- cloneAttrs = [];
- cloneAttrs.map = {};
- for (i = 0, l = selfAttrs.length; i < l; i++) {
- selfAttr = selfAttrs[i];
- if (selfAttr.name !== 'id') {
- cloneAttrs[cloneAttrs.length] = {
- name: selfAttr.name,
- value: selfAttr.value
+ var mergeWithChildren = function (editor, formatList, vars, node) {
+ each$e(formatList, function (format) {
+ each$e(editor.dom.select(format.inline, node), function (child) {
+ if (!isElementNode(child)) {
+ return;
+ }
+ RemoveFormat.removeFormat(editor, format, vars, child, format.exact ? child : null);
+ });
+ clearChildStyles(editor.dom, format, node);
+ });
+ };
+ var mergeWithParents = function (editor, format, name, vars, node) {
+ if (MatchFormat.matchNode(editor, node.parentNode, name, vars)) {
+ if (RemoveFormat.removeFormat(editor, format, vars, node)) {
+ return;
+ }
+ }
+ if (format.merge_with_parents) {
+ editor.dom.getParent(node.parentNode, function (parent) {
+ if (MatchFormat.matchNode(editor, parent, name, vars)) {
+ RemoveFormat.removeFormat(editor, format, vars, node);
+ return true;
+ }
+ });
+ }
+ };
+ var MergeFormats = {
+ mergeWithChildren: mergeWithChildren,
+ mergeUnderlineAndColor: mergeUnderlineAndColor,
+ mergeBackgroundColorAndFontSize: mergeBackgroundColorAndFontSize,
+ mergeSubSup: mergeSubSup,
+ mergeSiblings: mergeSiblings,
+ mergeWithParents: mergeWithParents
+ };
+
+ var each$f = Tools.each;
+ var isElementNode$1 = function (node) {
+ return node && node.nodeType === 1 && !Bookmarks.isBookmarkNode(node) && !isCaretNode(node) && !NodeType.isBogus(node);
+ };
+ var applyFormat = function (ed, name, vars, node) {
+ var formatList = ed.formatter.get(name);
+ var format = formatList[0];
+ var bookmark, rng;
+ var isCollapsed = !node && ed.selection.isCollapsed();
+ var dom = ed.dom, selection = ed.selection;
+ var setElementFormat = function (elm, fmt) {
+ fmt = fmt || format;
+ if (elm) {
+ if (fmt.onformat) {
+ fmt.onformat(elm, fmt, vars, node);
+ }
+ each$f(fmt.styles, function (value, name) {
+ dom.setStyle(elm, name, FormatUtils.replaceVars(value, vars));
+ });
+ if (fmt.styles) {
+ var styleVal = dom.getAttrib(elm, 'style');
+ if (styleVal) {
+ elm.setAttribute('data-mce-style', styleVal);
+ }
+ }
+ each$f(fmt.attributes, function (value, name) {
+ dom.setAttrib(elm, name, FormatUtils.replaceVars(value, vars));
+ });
+ each$f(fmt.classes, function (value) {
+ value = FormatUtils.replaceVars(value, vars);
+ if (!dom.hasClass(elm, value)) {
+ dom.addClass(elm, value);
+ }
+ });
+ }
+ };
+ var applyNodeStyle = function (formatList, node) {
+ var found = false;
+ if (!format.selector) {
+ return false;
+ }
+ each$f(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 wrapName, wrapElm, contentEditable = true;
+ wrapName = format.inline || format.block;
+ wrapElm = dom.create(wrapName);
+ setElementFormat(wrapElm);
+ RangeWalk.walk(dom, rng, function (nodes) {
+ var currentWrapElm;
+ var process = function (node) {
+ var nodeName, parentName, hasContentEditableState, lastContentEditable;
+ lastContentEditable = contentEditable;
+ nodeName = node.nodeName.toLowerCase();
+ parentName = node.parentNode.nodeName.toLowerCase();
+ if (node.nodeType === 1 && dom.getContentEditable(node)) {
+ lastContentEditable = contentEditable;
+ contentEditable = dom.getContentEditable(node) === 'true';
+ hasContentEditableState = true;
+ }
+ if (FormatUtils.isEq(nodeName, 'br')) {
+ currentWrapElm = 0;
+ if (format.block) {
+ dom.remove(node);
+ }
+ return;
+ }
+ if (format.wrapper && MatchFormat.matchNode(ed, node, name, vars)) {
+ currentWrapElm = 0;
+ return;
+ }
+ if (contentEditable && !hasContentEditableState && format.block && !format.wrapper && FormatUtils.isTextBlock(ed, nodeName) && FormatUtils.isValid(ed, parentName, wrapName)) {
+ node = dom.rename(node, wrapName);
+ setElementFormat(node);
+ newWrappers.push(node);
+ currentWrapElm = 0;
+ return;
+ }
+ if (format.selector) {
+ var found = applyNodeStyle(formatList, node);
+ if (!format.inline || found) {
+ currentWrapElm = 0;
+ return;
+ }
+ }
+ if (contentEditable && !hasContentEditableState && FormatUtils.isValid(ed, wrapName, nodeName) && FormatUtils.isValid(ed, parentName, wrapName) && !(!nodeSpecific && node.nodeType === 3 && node.nodeValue.length === 1 && node.nodeValue.charCodeAt(0) === 65279) && !isCaretNode(node) && (!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 = 0;
+ each$f(Tools.grep(node.childNodes), process);
+ if (hasContentEditableState) {
+ contentEditable = lastContentEditable;
+ }
+ currentWrapElm = 0;
+ }
+ };
+ each$f(nodes, process);
+ });
+ if (format.links === true) {
+ each$f(newWrappers, function (node) {
+ var process = function (node) {
+ if (node.nodeName === 'A') {
+ setElementFormat(node, format);
+ }
+ each$f(Tools.grep(node.childNodes), process);
};
- cloneAttrs.map[selfAttr.name] = selfAttr.value;
- }
+ process(node);
+ });
}
- clone.attributes = cloneAttrs;
- }
- clone.value = self.value;
- clone.shortEnded = self.shortEnded;
- return clone;
- };
- Node.prototype.wrap = function (wrapper) {
- var self = this;
- self.parent.insert(wrapper, self);
- wrapper.append(self);
- return self;
- };
- Node.prototype.unwrap = function () {
- var self = this;
- var node, next;
- for (node = self.firstChild; node;) {
- next = node.next;
- self.insert(node, self, true);
- node = next;
- }
- self.remove();
- };
- Node.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;
- };
- Node.prototype.append = function (node) {
- var self = this;
- var last;
- if (node.parent) {
- node.remove();
- }
- 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;
- };
- Node.prototype.insert = function (node, refNode, before) {
- var parent;
- if (node.parent) {
- node.remove();
- }
- 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;
- };
- Node.prototype.getAll = function (name) {
- var self = this;
- var node;
- var collection = [];
- for (node = self.firstChild; node; node = walk$3(node, self)) {
- if (node.name === name) {
- collection.push(node);
- }
- }
- return collection;
- };
- Node.prototype.empty = function () {
- var self = this;
- var nodes, i, node;
- if (self.firstChild) {
- nodes = [];
- for (node = self.firstChild; node; node = walk$3(node, self)) {
- nodes.push(node);
- }
- i = nodes.length;
- while (i--) {
- node = nodes[i];
- node.parent = node.firstChild = node.lastChild = node.next = node.prev = null;
- }
- }
- self.firstChild = self.lastChild = null;
- return self;
- };
- Node.prototype.isEmpty = function (elements, whitespace, predicate) {
- var self = this;
- var node = self.firstChild, i, name;
- whitespace = whitespace || {};
- if (node) {
- do {
- if (node.type === 1) {
- if (node.attributes.map['data-mce-bogus']) {
- continue;
- }
- if (elements[node.name]) {
- return false;
- }
- i = node.attributes.length;
- while (i--) {
- name = node.attributes[i].name;
- if (name === 'name' || name.indexOf('data-mce-bookmark') === 0) {
+ each$f(newWrappers, function (node) {
+ var childCount;
+ var getChildCount = function (node) {
+ var count = 0;
+ each$f(node.childNodes, function (node) {
+ if (!FormatUtils.isWhiteSpaceNode(node) && !Bookmarks.isBookmarkNode(node)) {
+ count++;
+ }
+ });
+ return count;
+ };
+ var getChildElementNode = function (root) {
+ var child = false;
+ each$f(root.childNodes, function (node) {
+ if (isElementNode$1(node)) {
+ child = node;
return false;
}
+ });
+ return child;
+ };
+ var mergeStyles = function (node) {
+ var child, clone;
+ child = getChildElementNode(node);
+ if (child && !Bookmarks.isBookmarkNode(child) && MatchFormat.matchName(dom, child, format)) {
+ clone = dom.clone(child, false);
+ setElementFormat(clone);
+ dom.replace(clone, node, true);
+ dom.remove(child, 1);
}
+ return clone || node;
+ };
+ childCount = getChildCount(node);
+ if ((newWrappers.length > 1 || !dom.isBlock(node)) && childCount === 0) {
+ dom.remove(node, 1);
+ return;
}
- if (node.type === 8) {
- return false;
- }
- if (node.type === 3 && !whiteSpaceRegExp$3.test(node.value)) {
- return false;
- }
- if (node.type === 3 && node.parent && whitespace[node.parent.name] && whiteSpaceRegExp$3.test(node.value)) {
- return false;
- }
- if (predicate && predicate(node)) {
- return false;
- }
- } while (node = walk$3(node, self));
- }
- return true;
- };
- Node.prototype.walk = function (prev) {
- return walk$3(this, null, prev);
- };
- return Node;
- }();
-
- 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 Node$2('br', 1)).shortEnded = true;
- } else {
- node.empty().append(new Node$2('#text', 3)).value = '\xA0';
- }
- };
- var isPaddedWithNbsp = function (node) {
- return hasOnlyChild(node, '#text') && node.firstChild.value === '\xA0';
- };
- 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 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 = $_1q1txeljnlpawsa.extend({}, schema.getBlockElements());
- var nonEmptyElements = schema.getNonEmptyElements();
- var parent, lastParent, prev, prevName;
- var whiteSpaceElements = schema.getNonEmptyElements();
- 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') {
- break;
- }
- 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 Node$2('#text', 3);
- textNode.value = '\xA0';
- node.replace(textNode);
+ if (format.inline || format.wrapper) {
+ if (!format.exact && childCount === 1) {
+ node = mergeStyles(node);
}
+ MergeFormats.mergeWithChildren(ed, formatList, vars, node);
+ MergeFormats.mergeWithParents(ed, format, name, vars, node);
+ MergeFormats.mergeBackgroundColorAndFontSize(dom, format, vars, node);
+ MergeFormats.mergeSubSup(dom, format, vars, node);
+ MergeFormats.mergeSiblings(dom, format, vars, node);
}
- }
- });
- }
- parser.addAttributeFilter('href', function (nodes) {
- var i = nodes.length, node;
- 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 ? $_1q1txeljnlpawsa.trim(rel) : '';
- if (!/\b(noopener)\b/g.test(newRel)) {
- return appendRel(newRel);
+ if (dom.getContentEditable(selection.getNode()) === 'false') {
+ node = selection.getNode();
+ for (var i = 0, l = formatList.length; i < l; i++) {
+ if (formatList[i].ceFalseOverride && dom.is(node, formatList[i].selector)) {
+ setElementFormat(node, formatList[i]);
+ return;
+ }
+ }
+ return;
+ }
+ if (format) {
+ if (node) {
+ if (node.nodeType) {
+ if (!applyNodeStyle(formatList, node)) {
+ rng = dom.createRng();
+ rng.setStartBefore(node);
+ rng.setEndAfter(node);
+ applyRngStyle(dom, ExpandRange.expandRng(ed, rng, formatList), null, true);
+ }
+ } else {
+ applyRngStyle(dom, node, null, true);
+ }
} else {
- return newRel;
+ if (!isCollapsed || !format.inline || dom.select('td[data-mce-selected],th[data-mce-selected]').length) {
+ var curSelNode = ed.selection.getNode();
+ if (!ed.settings.forced_root_block && formatList[0].defaultBlock && !dom.getParent(curSelNode, dom.isBlock)) {
+ applyFormat(ed, formatList[0].defaultBlock);
+ }
+ ed.selection.setRng(RangeNormalizer.normalize(ed.selection.getRng()));
+ bookmark = GetBookmark.getPersistentBookmark(ed.selection, true);
+ applyRngStyle(dom, ExpandRange.expandRng(ed, selection.getRng(), formatList), bookmark);
+ if (format.styles) {
+ MergeFormats.mergeUnderlineAndColor(dom, format, vars, curSelNode);
+ }
+ selection.moveToBookmark(bookmark);
+ FormatUtils.moveStart(dom, selection, selection.getRng());
+ ed.nodeChanged();
+ } else {
+ applyCaretFormat(ed, name, vars);
+ }
+ }
+ Hooks.postProcess(name, ed);
+ }
+ };
+ var ApplyFormat = { applyFormat: applyFormat };
+
+ var each$g = Tools.each;
+ var setup$5 = function (formatChangeData, editor) {
+ var currentFormats = {};
+ formatChangeData.set({});
+ editor.on('NodeChange', function (e) {
+ var parents = FormatUtils.getParents(editor.dom, e.element);
+ var matchedFormats = {};
+ parents = Tools.grep(parents, function (node) {
+ return node.nodeType === 1 && !node.getAttribute('data-mce-bogus');
+ });
+ each$g(formatChangeData.get(), function (callbacks, format) {
+ each$g(parents, function (node) {
+ if (editor.formatter.matchNode(node, format, {}, callbacks.similar)) {
+ if (!currentFormats[format]) {
+ each$g(callbacks, function (callback) {
+ callback(true, {
+ node: node,
+ format: format,
+ parents: parents
+ });
+ });
+ currentFormats[format] = callbacks;
+ }
+ matchedFormats[format] = callbacks;
+ return false;
+ }
+ if (MatchFormat.matchesUnInheritedFormatSelector(editor, node, format)) {
+ return false;
+ }
+ });
+ });
+ each$g(currentFormats, function (callbacks, format) {
+ if (!matchedFormats[format]) {
+ delete currentFormats[format];
+ each$g(callbacks, function (callback) {
+ callback(false, {
+ node: e.element,
+ format: format,
+ parents: parents
+ });
+ });
+ }
+ });
+ });
+ };
+ var addListeners = function (formatChangeData, formats, callback, similar) {
+ var formatChangeItems = formatChangeData.get();
+ each$g(formats.split(','), function (format) {
+ if (!formatChangeItems[format]) {
+ formatChangeItems[format] = [];
+ formatChangeItems[format].similar = similar;
+ }
+ formatChangeItems[format].push(callback);
+ });
+ formatChangeData.set(formatChangeItems);
+ };
+ var formatChanged = function (editor, formatChangeState, formats, callback, similar) {
+ if (formatChangeState.get() === null) {
+ setup$5(formatChangeState, editor);
+ }
+ addListeners(formatChangeState, formats, callback, similar);
+ };
+ var FormatChanged = { formatChanged: formatChanged };
+
+ var get$8 = 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',
+ 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',
+ 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',
+ 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'
+ },
+ {
+ inline: 'span',
+ styles: { fontWeight: 'bold' }
+ },
+ {
+ inline: 'b',
+ remove: 'all'
+ }
+ ],
+ italic: [
+ {
+ inline: 'em',
+ remove: 'all'
+ },
+ {
+ inline: 'span',
+ styles: { fontStyle: 'italic' }
+ },
+ {
+ inline: 'i',
+ remove: 'all'
+ }
+ ],
+ underline: [
+ {
+ inline: 'span',
+ styles: { textDecoration: 'underline' },
+ exact: true
+ },
+ {
+ inline: 'u',
+ remove: 'all'
+ }
+ ],
+ strikethrough: [
+ {
+ inline: 'span',
+ styles: { textDecoration: 'line-through' },
+ exact: true
+ },
+ {
+ inline: 'strike',
+ remove: 'all'
+ }
+ ],
+ 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
+ },
+ fontsize_class: {
+ inline: 'span',
+ attributes: { class: '%value' }
+ },
+ blockquote: {
+ block: 'blockquote',
+ wrapper: 1,
+ remove: 'all'
+ },
+ subscript: { inline: 'sub' },
+ superscript: { inline: 'sup' },
+ code: { inline: 'code' },
+ link: {
+ inline: 'a',
+ selector: 'a',
+ remove: 'all',
+ split: true,
+ deep: true,
+ onmatch: function () {
+ return true;
+ },
+ 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,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins',
+ 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 div dt dd samp'.split(/\s/), function (name) {
+ formats[name] = {
+ block: name,
+ remove: 'all'
+ };
+ });
+ return formats;
+ };
+ var DefaultFormats = { get: get$8 };
+
+ function FormatRegistry (editor) {
+ var formats = {};
+ var get = function (name) {
+ return name ? formats[name] : formats;
+ };
+ var register = function (name, format) {
+ if (name) {
+ if (typeof name !== 'string') {
+ Tools.each(name, function (format, name) {
+ register(name, format);
+ });
+ } else {
+ format = format.length ? 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;
+ }
}
};
- if (!settings.allow_unsafe_link_target) {
- while (i--) {
- node = nodes[i];
- if (node.name === 'a' && node.attr('target') === '_blank') {
- node.attr('rel', addNoOpener(node.attr('rel')));
+ var unregister = function (name) {
+ if (name && formats[name]) {
+ delete formats[name];
+ }
+ return formats;
+ };
+ register(DefaultFormats.get(editor.dom));
+ register(editor.settings.formats);
+ return {
+ get: get,
+ register: register,
+ unregister: unregister
+ };
+ }
+
+ var each$h = Tools.each;
+ var dom = DOMUtils$1.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) {
+ var elm;
+ item = typeof sItem === 'string' ? {
+ name: sItem,
+ classes: [],
+ attrs: {}
+ } : sItem;
+ 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, parentRequired;
+ var ancestor = ancestry.length > 0 && ancestry[0];
+ var ancestorName = ancestor && ancestor.name;
+ 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 selectorToHtml = function (selector, editor) {
+ return parsedSelectorToHtml(parseSelector(selector), editor);
+ };
+ 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, previewElm, items;
+ var previewCss = '', parentFontSize, previewStyles;
+ previewStyles = editor.settings.preview_styles;
+ if (previewStyles === false) {
+ return '';
+ }
+ if (typeof previewStyles !== 'string') {
+ previewStyles = 'font-family font-size font-weight font-style text-decoration ' + 'text-transform color background-color border border-radius outline text-shadow';
+ }
+ 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) {
+ previewStyles = format.preview;
+ if (previewStyles === false) {
+ return '';
}
}
- });
- 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);
- }
+ name = format.block || format.inline || 'span';
+ 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);
+ }
+ previewElm = dom.select(name, previewFrag)[0] || previewFrag.firstChild;
+ each$h(format.styles, function (value, name) {
+ value = removeVars(value);
+ if (value) {
+ dom.setStyle(previewElm, name, value);
}
});
- }
- 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 Node$2('li', 1);
- li.attr('style', 'list-style-type: none');
- node.wrap(li);
- }
- }
+ each$h(format.attributes, function (value, name) {
+ value = removeVars(value);
+ if (value) {
+ dom.setAttrib(previewElm, name, value);
}
});
- }
- 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);
+ each$h(format.classes, function (value) {
+ value = removeVars(value);
+ if (!dom.hasClass(previewElm, value)) {
+ dom.addClass(previewElm, value);
}
});
- }
- };
+ 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$h(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 Preview = {
+ getCssText: getCssText,
+ parseSelector: parseSelector,
+ selectorToHtml: selectorToHtml
+ };
- var makeMap$4 = $_1q1txeljnlpawsa.makeMap;
- var each$18 = $_1q1txeljnlpawsa.each;
- var explode$3 = $_1q1txeljnlpawsa.explode;
- var extend$3 = $_1q1txeljnlpawsa.extend;
- function DomParser (settings, schema) {
- if (schema === void 0) {
- schema = Schema();
+ var toggle$3 = function (editor, formats, name, vars, node) {
+ var fmt = formats.get(name);
+ if (MatchFormat.match(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) {
+ RemoveFormat.remove(editor, name, vars, node);
+ } else {
+ ApplyFormat.applyFormat(editor, name, vars, node);
+ }
+ };
+ var ToggleFormat = { toggle: toggle$3 };
+
+ 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 FormatShortcuts = { setup: setup$6 };
+
+ function Formatter (editor) {
+ var formats = FormatRegistry(editor);
+ var formatChangeState = Cell(null);
+ FormatShortcuts.setup(editor);
+ setup$4(editor);
+ return {
+ get: formats.get,
+ register: formats.register,
+ unregister: formats.unregister,
+ apply: curry(ApplyFormat.applyFormat, editor),
+ remove: curry(RemoveFormat.remove, editor),
+ toggle: curry(ToggleFormat.toggle, editor, formats),
+ match: curry(MatchFormat.match, editor),
+ matchAll: curry(MatchFormat.matchAll, editor),
+ matchNode: curry(MatchFormat.matchNode, editor),
+ canApply: curry(MatchFormat.canApply, editor),
+ formatChanged: curry(FormatChanged.formatChanged, editor, formatChangeState),
+ getCssText: curry(Preview.getCssText, editor)
+ };
}
- 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 nonEmptyElements, whitespaceElements, nonSplitableElements, textBlockElements, specialElements, sibling, nextNode;
- nonSplitableElements = makeMap$4('tr,td,th,tbody,thead,tfoot,table');
- nonEmptyElements = schema.getNonEmptyElements();
- whitespaceElements = schema.getWhiteSpaceElements();
- textBlockElements = schema.getTextBlockElements();
- 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;
+
+ var hasOwnProperty$2 = Object.prototype.hasOwnProperty;
+ var shallow$1 = function (old, nu) {
+ return nu;
+ };
+ var baseMerge = function (merger) {
+ return function () {
+ var objects = new Array(arguments.length);
+ for (var i = 0; i < objects.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]);
}
- 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);
+ return ret;
+ };
+ };
+ var merge = baseMerge(shallow$1);
+
+ var register = 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.attributes.map['data-mce-tabindex']);
+ node.attr(name, null);
}
- 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);
+ });
+ 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.attributes.map[internalName];
+ if (value !== undefined) {
+ node.attr(name, value.length > 0 ? value : null);
+ node.attr(internalName, null);
} 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 === 'ul')) {
- sibling.append(node);
- continue;
+ value = node.attributes.map[name];
+ if (name === 'style') {
+ value = dom.serializeStyle(dom.parseStyle(value), node.name);
+ } else if (urlConverter) {
+ value = urlConverter.call(urlConverterScope, value, name, node.name);
}
- sibling = node.next;
- if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {
- sibling.insert(node, sibling.firstChild, true);
- continue;
- }
- node.wrap(filterNode(new Node$2('ul', 1)));
- continue;
+ node.attr(name, value.length > 0 ? value : null);
}
- if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {
- node.wrap(filterNode(new Node$2('div', 1)));
+ }
+ });
+ 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.attributes.map['data-mce-type'] === 'bookmark' && !args.cleanup) {
+ 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 (specialElements[node.name]) {
- node.empty().remove();
+ 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 (node.value.indexOf('[CDATA[') === 0) {
+ node.name = '#cdata';
+ node.type = 4;
+ node.value = 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' && !('type' in node.attributes.map)) {
+ 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', function (nodes, name) {
+ var i = nodes.length;
+ while (i--) {
+ nodes[i].attr(name, null);
+ }
+ });
+ };
+ var trimTrailingBr = function (rootNode) {
+ var brNode1, brNode2;
+ var isBr = function (node) {
+ return node && node.name === 'br';
+ };
+ brNode1 = rootNode.lastChild;
+ if (isBr(brNode1)) {
+ brNode2 = brNode1.prev;
+ if (isBr(brNode2)) {
+ brNode1.remove();
+ brNode2.remove();
}
}
};
- var filterNode = function (node) {
- var i, name, list;
- if (name in nodeFilters) {
- list = matchedNodes[name];
- if (list) {
- list.push(node);
+ var DomSerializerFilters = {
+ register: register,
+ trimTrailingBr: trimTrailingBr
+ };
+
+ var preProcess = function (editor, node, args) {
+ var impl, doc, oldDoc;
+ var dom = editor.dom;
+ node = node.cloneNode(true);
+ 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 {
- matchedNodes[name] = [node];
+ node = doc.body;
}
+ oldDoc = dom.doc;
+ dom.doc = doc;
}
- 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];
- }
- }
+ Events.firePreProcess(editor, merge(args, { node: node }));
+ if (oldDoc) {
+ dom.doc = oldDoc;
}
return node;
};
- var addNodeFilter = function (name, callback) {
- each$18(explode$3(name), function (name) {
- var list = nodeFilters[name];
- if (!list) {
- nodeFilters[name] = list = [];
- }
- list.push(callback);
+ 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 DomSerializerPreProcess = { process: process };
+
+ var removeAttrs = function (node, names) {
+ each(names, function (name) {
+ node.attr(name, null);
});
};
- var getNodeFilters = function () {
- var out = [];
- for (var name in nodeFilters) {
- if (nodeFilters.hasOwnProperty(name)) {
- out.push({
- name: name,
- callbacks: nodeFilters[name]
- });
- }
- }
- return out;
- };
- var addAttributeFilter = function (name, callback) {
- each$18(explode$3(name), function (name) {
- var i;
- for (i = 0; i < attributeFilters.length; i++) {
- if (attributeFilters[i].name === name) {
- attributeFilters[i].callbacks.push(callback);
- return;
+ 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;
}
- }
- attributeFilters.push({
- name: name,
- callbacks: [callback]
+ 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 getAttributeFilters = function () {
- return [].concat(attributeFilters);
+ 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 parse = function (html, args) {
- var parser, nodes, i, l, fi, fl, list, name;
- var blockElements;
- var invalidChildren = [];
- var isInWhiteSpacePreservedElement;
- var node;
- args = args || {};
- matchedNodes = {};
- matchedAttributes = {};
- blockElements = extend$3(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 rootBlockName = 'forced_root_block' in args ? args.forced_root_block : settings.forced_root_block;
- 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;
+ 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 LegacyFilter = { register: register$1 };
+
+ var whiteSpaceRegExp$3 = /^[ \t\r\n]*$/;
+ var typeLookup = {
+ '#text': 3,
+ '#comment': 8,
+ '#cdata': 4,
+ '#pi': 7,
+ '#doctype': 10,
+ '#document-fragment': 11
+ };
+ var walk$2 = function (node, root, prev) {
+ var sibling;
+ var parent;
+ var startName = prev ? 'lastChild' : 'firstChild';
+ var siblingName = prev ? 'prev' : 'next';
+ if (node[startName]) {
+ return node[startName];
+ }
+ if (node !== root) {
+ sibling = node[siblingName];
+ if (sibling) {
+ return sibling;
}
- 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;
+ for (parent = node.parent; parent && parent !== root; parent = parent.parent) {
+ sibling = parent[siblingName];
+ if (sibling) {
+ return sibling;
}
+ }
+ }
+ };
+ var Node$2 = function () {
+ function Node(name, type) {
+ this.name = name;
+ this.type = type;
+ if (type === 1) {
+ this.attributes = [];
+ this.attributes.map = {};
+ }
+ }
+ Node.create = function (name, attrs) {
+ var node, attrName;
+ node = new Node(name, typeLookup[name] || 1);
+ if (attrs) {
+ for (attrName in attrs) {
+ node.attr(attrName, attrs[attrName]);
+ }
+ }
+ return node;
+ };
+ Node.prototype.replace = function (node) {
+ var self = this;
+ if (node.parent) {
+ node.remove();
+ }
+ self.insert(node, self);
+ self.remove();
+ return self;
+ };
+ Node.prototype.attr = function (name, value) {
+ var self = this;
+ var attrs, i;
+ if (typeof name !== 'string') {
+ for (i in name) {
+ self.attr(i, name[i]);
+ }
+ return self;
+ }
+ if (attrs = self.attributes) {
+ if (value !== undefined) {
+ if (value === null) {
+ if (name in attrs.map) {
+ delete attrs.map[name];
+ i = attrs.length;
+ while (i--) {
+ if (attrs[i].name === name) {
+ attrs = attrs.splice(i, 1);
+ return self;
+ }
+ }
+ }
+ return self;
+ }
+ if (name in attrs.map) {
+ 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];
+ }
+ };
+ Node.prototype.clone = function () {
+ var self = this;
+ var clone = new Node(self.name, self.type);
+ var i, l, selfAttrs, selfAttr, cloneAttrs;
+ if (selfAttrs = self.attributes) {
+ cloneAttrs = [];
+ cloneAttrs.map = {};
+ for (i = 0, l = selfAttrs.length; i < l; i++) {
+ 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;
+ };
+ Node.prototype.wrap = function (wrapper) {
+ var self = this;
+ self.parent.insert(wrapper, self);
+ wrapper.append(self);
+ return self;
+ };
+ Node.prototype.unwrap = function () {
+ var self = this;
+ var node, next;
+ for (node = self.firstChild; node;) {
+ next = node.next;
+ self.insert(node, self, true);
node = next;
}
- trim(rootBlockNode);
+ self.remove();
};
- var createNode = function (name, type) {
- var node = new Node$2(name, type);
- var list;
+ Node.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;
+ };
+ Node.prototype.append = function (node) {
+ var self = this;
+ var last;
+ if (node.parent) {
+ node.remove();
+ }
+ 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;
+ };
+ Node.prototype.insert = function (node, refNode, before) {
+ var parent;
+ if (node.parent) {
+ node.remove();
+ }
+ 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;
+ };
+ Node.prototype.getAll = function (name) {
+ var self = this;
+ var node;
+ var collection = [];
+ for (node = self.firstChild; node; node = walk$2(node, self)) {
+ if (node.name === name) {
+ collection.push(node);
+ }
+ }
+ return collection;
+ };
+ Node.prototype.empty = function () {
+ var self = this;
+ var nodes, i, node;
+ if (self.firstChild) {
+ nodes = [];
+ for (node = self.firstChild; node; node = walk$2(node, self)) {
+ nodes.push(node);
+ }
+ i = nodes.length;
+ while (i--) {
+ node = nodes[i];
+ node.parent = node.firstChild = node.lastChild = node.next = node.prev = null;
+ }
+ }
+ self.firstChild = self.lastChild = null;
+ return self;
+ };
+ Node.prototype.isEmpty = function (elements, whitespace, predicate) {
+ var self = this;
+ var node = self.firstChild, i, name;
+ whitespace = whitespace || {};
+ if (node) {
+ do {
+ if (node.type === 1) {
+ if (node.attributes.map['data-mce-bogus']) {
+ continue;
+ }
+ if (elements[node.name]) {
+ return false;
+ }
+ i = node.attributes.length;
+ while (i--) {
+ name = node.attributes[i].name;
+ if (name === 'name' || name.indexOf('data-mce-bookmark') === 0) {
+ return false;
+ }
+ }
+ }
+ if (node.type === 8) {
+ return false;
+ }
+ if (node.type === 3 && !whiteSpaceRegExp$3.test(node.value)) {
+ return false;
+ }
+ if (node.type === 3 && node.parent && whitespace[node.parent.name] && whiteSpaceRegExp$3.test(node.value)) {
+ return false;
+ }
+ if (predicate && predicate(node)) {
+ return false;
+ }
+ } while (node = walk$2(node, self));
+ }
+ return true;
+ };
+ Node.prototype.walk = function (prev) {
+ return walk$2(this, null, prev);
+ };
+ return Node;
+ }();
+
+ 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 Node$2('br', 1)).shortEnded = true;
+ } else {
+ node.empty().append(new Node$2('#text', 3)).value = '\xA0';
+ }
+ };
+ var isPaddedWithNbsp = function (node) {
+ return hasOnlyChild(node, '#text') && node.firstChild.value === '\xA0';
+ };
+ 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 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.getNonEmptyElements();
+ 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') {
+ break;
+ }
+ 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 Node$2('#text', 3);
+ textNode.value = '\xA0';
+ node.replace(textNode);
+ }
+ }
+ }
+ });
+ }
+ parser.addAttributeFilter('href', function (nodes) {
+ var i = nodes.length, node;
+ 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--) {
+ 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 Node$2('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);
+ }
+ });
+ }
+ };
+
+ var makeMap$4 = Tools.makeMap, each$i = Tools.each, explode$3 = Tools.explode, extend$3 = Tools.extend;
+ function DomParser (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 nonEmptyElements, whitespaceElements, nonSplitableElements, textBlockElements, specialElements, sibling, nextNode;
+ nonSplitableElements = makeMap$4('tr,td,th,tbody,thead,tfoot,table');
+ nonEmptyElements = schema.getNonEmptyElements();
+ whitespaceElements = schema.getWhiteSpaceElements();
+ textBlockElements = schema.getTextBlockElements();
+ 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 === 'ul')) {
+ sibling.append(node);
+ continue;
+ }
+ sibling = node.next;
+ if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {
+ sibling.insert(node, sibling.firstChild, true);
+ continue;
+ }
+ node.wrap(filterNode(new Node$2('ul', 1)));
+ continue;
+ }
+ if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {
+ node.wrap(filterNode(new Node$2('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) {
@@ -38246,5937 +37105,6738 @@ window.tinymce = window.tinymce || {
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 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;
+ var addNodeFilter = function (name, callback) {
+ each$i(explode$3(name), function (name) {
+ var list = nodeFilters[name];
+ if (!list) {
+ nodeFilters[name] = list = [];
+ }
+ list.push(callback);
+ });
+ };
+ var getNodeFilters = function () {
+ var out = [];
+ for (var name in nodeFilters) {
+ if (nodeFilters.hasOwnProperty(name)) {
+ out.push({
+ name: name,
+ callbacks: nodeFilters[name]
+ });
+ }
+ }
+ return out;
+ };
+ var addAttributeFilter = function (name, callback) {
+ each$i(explode$3(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 parser, nodes, i, l, fi, fl, list, name;
+ var blockElements;
+ var invalidChildren = [];
+ var isInWhiteSpacePreservedElement;
+ var node;
+ args = args || {};
+ matchedNodes = {};
+ matchedAttributes = {};
+ blockElements = extend$3(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 rootBlockName = 'forced_root_block' in args ? args.forced_root_block : settings.forced_root_block;
+ 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;
}
- textNodeNext = textNode.next;
- if (textNodeNext) {
- if (textNodeNext.type === 3 && textNodeNext.value.length) {
- textNode = textNode.prev;
- continue;
+ 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;
}
- if (!blockElements[textNodeNext.name] && textNodeNext.name !== 'script' && textNodeNext.name !== 'style') {
- textNode = textNode.prev;
- continue;
+ node = next;
+ }
+ trim(rootBlockNode);
+ };
+ var createNode = function (name, type) {
+ var node = new Node$2(name, type);
+ var list;
+ if (name in nodeFilters) {
+ list = matchedNodes[name];
+ if (list) {
+ list.push(node);
+ } else {
+ matchedNodes[name] = [node];
}
}
- 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;
- };
- parser = SaxParser$1({
- validate: validate,
- allow_script_urls: settings.allow_script_urls,
- allow_conditional_comments: settings.allow_conditional_comments,
- 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, '');
+ 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;
}
- }
- 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;
- newNode = node.append(createNode('#doctype', 10));
- newNode.value = text;
- removeWhitespaceBefore(node);
- },
- start: function (name, attrs, empty) {
- var newNode, attrFiltersLen, elementRule, attrName, parent;
- 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];
- }
+ 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;
}
}
- if (blockElements[name]) {
- removeWhitespaceBefore(newNode);
- }
- if (!empty) {
- node = newNode;
- }
- if (!isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {
- isInWhiteSpacePreservedElement = true;
+ 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];
}
}
- },
- end: function (name) {
- var textNode, elementRule, text, sibling, tempNode;
- 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;
+ return output;
+ };
+ parser = SaxParser$1({
+ validate: validate,
+ allow_script_urls: settings.allow_script_urls,
+ allow_conditional_comments: settings.allow_conditional_comments,
+ 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;
+ newNode = node.append(createNode('#doctype', 10));
+ newNode.value = text;
+ removeWhitespaceBefore(node);
+ },
+ start: function (name, attrs, empty) {
+ var newNode, attrFiltersLen, elementRule, attrName, parent;
+ 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 {
- sibling = textNode.next;
- textNode.remove();
- textNode = sibling;
- while (textNode && textNode.type === 3) {
- text = textNode.value;
+ matchedAttributes[attrName] = [newNode];
+ }
+ }
+ }
+ if (blockElements[name]) {
+ removeWhitespaceBefore(newNode);
+ }
+ if (!empty) {
+ node = newNode;
+ }
+ if (!isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {
+ isInWhiteSpacePreservedElement = true;
+ }
+ }
+ },
+ end: function (name) {
+ var textNode, elementRule, text, sibling, tempNode;
+ 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;
- if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {
- textNode.remove();
+ 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 = 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;
+ 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;
- if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {
- textNode.remove();
+ 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;
}
- textNode = sibling;
}
}
}
}
- }
- if (isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {
- isInWhiteSpacePreservedElement = false;
- }
- if (elementRule.removeEmpty && isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, node)) {
- if (!node.attributes.map.name && !node.attr('id')) {
- tempNode = node.parent;
- if (blockElements[node.name]) {
- node.empty().remove();
- } else {
- node.unwrap();
- }
- node = tempNode;
- return;
+ if (isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {
+ isInWhiteSpacePreservedElement = false;
}
- }
- if (elementRule.paddEmpty && (isPaddedWithNbsp(node) || isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, node))) {
- paddEmptyNode(settings, args, blockElements, node);
- }
- node = node.parent;
- }
- }
- }, schema);
- var rootNode = node = new Node$2(args.context || settings.root_name, 11);
- parser.parse(html);
- 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) {
- list = nodeFilters[name];
- nodes = matchedNodes[name];
- fi = nodes.length;
- while (fi--) {
- if (!nodes[fi].parent) {
- nodes.splice(fi, 1);
+ if (elementRule.removeEmpty && isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, node)) {
+ if (!node.attributes.map.name && !node.attr('id')) {
+ 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;
}
}
- for (i = 0, l = list.length; i < l; i++) {
- list[i](nodes, name, args);
+ }, schema);
+ var rootNode = node = new Node$2(args.context || settings.root_name, 11);
+ parser.parse(html);
+ if (validate && invalidChildren.length) {
+ if (!args.context) {
+ fixInvalidChildren(invalidChildren);
+ } else {
+ args.invalid = true;
}
}
- for (i = 0, l = attributeFilters.length; i < l; i++) {
- list = attributeFilters[i];
- if (list.name in matchedAttributes) {
- nodes = matchedAttributes[list.name];
+ if (rootBlockName && (rootNode.name === 'body' || args.isRootContent)) {
+ addRootBlocks();
+ }
+ if (!args.invalid) {
+ for (name in matchedNodes) {
+ list = nodeFilters[name];
+ nodes = matchedNodes[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);
+ 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);
+ LegacyFilter.register(exports, settings);
+ return exports;
+ }
+
+ 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 = Events.firePostProcess(editor, merge(args, { content: content }));
+ return outArgs.content;
+ } else {
+ return content;
+ }
+ };
+ var getHtmlFromNode = function (dom, node, args) {
+ var html = Zwsp.trim(args.getInner ? node.innerHTML : dom.getOuterHTML(node));
+ return args.selection || isWsPreserveElement(Element$$1.fromDom(node)) ? html : Tools.trim(html);
+ };
+ var parseHtml = function (htmlParser, html, args) {
+ var parserArgs = args.selection ? merge({ forced_root_block: false }, args) : args;
+ var rootNode = htmlParser.parse(html, parserArgs);
+ DomSerializerFilters.trimTrailingBr(rootNode);
return rootNode;
};
- var exports = {
- schema: schema,
- addAttributeFilter: addAttributeFilter,
- getAttributeFilters: getAttributeFilters,
- addNodeFilter: addNodeFilter,
- getNodeFilters: getNodeFilters,
- filterNode: filterNode,
- parse: parse
+ var serializeNode = function (settings, schema, node) {
+ var htmlSerializer = Serializer(settings, schema);
+ return htmlSerializer.serialize(node);
};
- register$2(exports, settings);
- $_2wvuyy6pjnlpay4e.register(exports, settings);
- return exports;
- }
-
- var addTempAttr = function (htmlParser, tempAttrs, name) {
- if ($_1q1txeljnlpawsa.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 = $_5atig84wjnlpaxs7.firePostProcess(editor, merge(args, { content: content }));
- return outArgs.content;
- } else {
- return content;
- }
- };
- var getHtmlFromNode = function (dom, node, args) {
- var html = $_90hfb72rjnlpaxae.trim(args.getInner ? node.innerHTML : dom.getOuterHTML(node));
- return args.selection || isWsPreserveElement(Element$$1.fromDom(node)) ? html : $_1q1txeljnlpawsa.trim(html);
- };
- var parseHtml = function (htmlParser, html, args) {
- var parserArgs = args.selection ? merge({ forced_root_block: false }, args) : args;
- var rootNode = htmlParser.parse(html, parserArgs);
- $_bpervq6mjnlpay3i.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);
- };
- function DomSerializer (settings, editor) {
- var dom, schema, htmlParser;
- var tempAttrs = ['data-mce-selected'];
- dom = editor && editor.dom ? editor.dom : DOMUtils$1.DOM;
- 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;
- htmlParser = DomParser(settings, schema);
- $_bpervq6mjnlpay3i.register(htmlParser, settings, dom);
- var serialize = function (node, parserArgs) {
- var args = merge({ format: 'html' }, parserArgs ? parserArgs : {});
- var targetNode = $_5tjdgs6njnlpay3r.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);
+ var toHtml = function (editor, settings, schema, rootNode, args) {
+ var content = serializeNode(settings, schema, rootNode);
+ return postProcess$1(editor, args, content);
};
- 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: function () {
- return tempAttrs;
- }
- };
- }
-
- function DomSerializer$1 (settings, editor) {
- var domSerializer = DomSerializer(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
- };
- }
-
- function BookmarkManager(selection) {
- return {
- getBookmark: curry($_43l8qj2xjnlpaxb1.getBookmark, selection),
- moveToBookmark: curry($_43l8qj2xjnlpaxb1.moveToBookmark, selection)
- };
- }
- (function (BookmarkManager) {
- BookmarkManager.isBookmarkNode = $_43l8qj2xjnlpaxb1.isBookmarkNode;
- }(BookmarkManager || (BookmarkManager = {})));
- var BookmarkManager$1 = BookmarkManager;
-
- var isContentEditableFalse$10 = $_fy28ei1rjnlpax2o.isContentEditableFalse;
- var isContentEditableTrue$6 = $_fy28ei1rjnlpax2o.isContentEditableTrue;
- var getContentEditableRoot$2 = function (root, node) {
- while (node && node !== root) {
- if (isContentEditableTrue$6(node) || isContentEditableFalse$10(node)) {
- return node;
- }
- node = node.parentNode;
- }
- return null;
- };
- var ControlSelection = function (selection, editor) {
- var dom = editor.dom, each = $_1q1txeljnlpawsa.each;
- var selectedElm, selectedElmGhost, resizeHelper, resizeHandles, selectedHandle;
- 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;
- resizeHandles = {
- nw: [
- 0,
- 0,
- -1,
- -1
- ],
- ne: [
- 1,
- 0,
- 1,
- -1
- ],
- se: [
- 1,
- 1,
- 1,
- 1
- ],
- sw: [
- 0,
- 1,
- -1,
- 1
- ]
- };
- var rootClass = '.mce-content-body';
- editor.contentStyles.push(rootClass + ' div.mce-resizehandle {' + 'position: absolute;' + 'border: 1px solid black;' + 'box-sizing: content-box;' + 'background: #FFF;' + 'width: 7px;' + 'height: 7px;' + 'z-index: 10000' + '}' + rootClass + ' .mce-resizehandle:hover {' + 'background: #000' + '}' + rootClass + ' img[data-mce-selected],' + rootClass + ' hr[data-mce-selected] {' + 'outline: 1px solid black;' + 'resize: none' + '}' + rootClass + ' .mce-clonedresizable {' + 'position: absolute;' + ($_cseqobajnlpawll.gecko ? '' : 'outline: 1px dashed black;') + 'opacity: .5;' + 'filter: alpha(opacity=50);' + 'z-index: 10000' + '}' + rootClass + ' .mce-resize-helper {' + 'background: #555;' + 'background: rgba(0,0,0,0.75);' + 'border-radius: 3px;' + 'border: 1px;' + 'color: white;' + 'display: none;' + 'font-family: sans-serif;' + 'font-size: 12px;' + 'white-space: nowrap;' + 'line-height: 14px;' + 'margin: 5px 10px;' + 'padding: 5px;' + 'position: absolute;' + 'z-index: 10001' + '}');
- var isImage = function (elm) {
- return elm && (elm.nodeName === 'IMG' || editor.dom.is(elm, 'figure.image'));
- };
- var isEventOnImageOutsideRange = function (evt, range) {
- return isImage(evt.target) && !$_5xpdav5wjnlpaxyf.isXYWithinRange(evt.clientX, evt.clientY, range);
- };
- var contextMenuSelectImage = function (evt) {
- var target = evt.target;
- if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {
- evt.preventDefault();
- editor.selection.select(target);
- }
- };
- var getResizeTarget = function (elm) {
- return editor.dom.is(elm, 'figure.image') ? elm.querySelector('img') : elm;
- };
- var isResizable = function (elm) {
- var selector = editor.settings.object_resizing;
- if (selector === false || $_cseqobajnlpawll.iOS) {
- return false;
- }
- if (typeof selector !== 'string') {
- selector = 'table,img,figure.image,div';
- }
- if (elm.getAttribute('data-mce-resize') === 'false') {
- return false;
- }
- if (elm === editor.getBody()) {
- return false;
- }
- return $_d8v5lf1gjnlpax0y.is(Element$$1.fromDom(elm), selector);
- };
- 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) && editor.settings.resize_img_proportional !== false) {
- proportional = !$_1qv0695yjnlpaxyk.modifierPressed(e);
- } else {
- proportional = $_1qv0695yjnlpaxyk.modifierPressed(e) || isImage(selectedElm) && selectedHandle[2] * selectedHandle[3] !== 0;
- }
- if (proportional) {
- if (abs(deltaX) > abs(deltaY)) {
- height = round(width * ratio);
- width = round(height / ratio);
- } else {
- width = round(height / ratio);
- height = round(width * ratio);
- }
- }
- dom.setStyles(getResizeTarget(selectedElmGhost), {
- width: width,
- height: 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) {
- $_5atig84wjnlpaxs7.fireObjectResizeStart(editor, selectedElm, startW, startH);
- resizeStarted = true;
- }
- };
- var endGhostResize = function () {
- resizeStarted = false;
- var setSizeProp = function (name$$1, value) {
- if (value) {
- if (selectedElm.style[name$$1] || !editor.schema.isValid(selectedElm.nodeName.toLowerCase(), name$$1)) {
- dom.setStyle(getResizeTarget(selectedElm), name$$1, value);
- } else {
- dom.setAttrib(getResizeTarget(selectedElm), name$$1, value);
- }
+ function DomSerializer (settings, editor) {
+ var dom, schema, htmlParser;
+ var tempAttrs = ['data-mce-selected'];
+ dom = editor && editor.dom ? editor.dom : DOMUtils$1.DOM;
+ 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;
+ htmlParser = DomParser(settings, schema);
+ DomSerializerFilters.register(htmlParser, settings, dom);
+ var serialize = function (node, parserArgs) {
+ var args = merge({ format: 'html' }, parserArgs ? parserArgs : {});
+ var targetNode = DomSerializerPreProcess.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: function () {
+ return tempAttrs;
}
};
- setSizeProp('width', width);
- setSizeProp('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);
+ }
+
+ function Serializer$1 (settings, editor) {
+ var domSerializer = DomSerializer(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
+ };
+ }
+
+ function BookmarkManager(selection) {
+ return {
+ getBookmark: curry(Bookmarks.getBookmark, selection),
+ moveToBookmark: curry(Bookmarks.moveToBookmark, selection)
+ };
+ }
+ (function (BookmarkManager) {
+ BookmarkManager.isBookmarkNode = Bookmarks.isBookmarkNode;
+ }(BookmarkManager || (BookmarkManager = {})));
+ var BookmarkManager$1 = BookmarkManager;
+
+ var isContentEditableFalse$a = NodeType.isContentEditableFalse;
+ var isContentEditableTrue$6 = NodeType.isContentEditableTrue;
+ var getContentEditableRoot$2 = function (root, node) {
+ while (node && node !== root) {
+ if (isContentEditableTrue$6(node) || isContentEditableFalse$a(node)) {
+ return node;
+ }
+ node = node.parentNode;
}
- dom.remove(selectedElmGhost);
- dom.remove(resizeHelper);
- showResizeRect(selectedElm);
- $_5atig84wjnlpaxs7.fireObjectResized(editor, selectedElm, width, height);
- dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style'));
- editor.nodeChanged();
+ return null;
};
- var showResizeRect = function (targetElm) {
- var position, targetWidth, targetHeight, e, rect;
- hideResizeRect();
- unbindResizeHandleEvents();
- position = dom.getPos(targetElm, rootElement);
- selectedElmX = position.x;
- selectedElmY = position.y;
- rect = targetElm.getBoundingClientRect();
- targetWidth = rect.width || rect.right - rect.left;
- targetHeight = rect.height || rect.bottom - rect.top;
- if (selectedElm !== targetElm) {
- selectedElm = targetElm;
- width = height = 0;
- }
- e = editor.fire('ObjectSelected', { target: targetElm });
- if (isResizable(targetElm) && !e.isDefaultPrevented()) {
- each(resizeHandles, function (handle, name$$1) {
- var handleElm;
- var startDrag = function (e) {
- startX = e.screenX;
- startY = e.screenY;
- startW = getResizeTarget(selectedElm).clientWidth;
- startH = getResizeTarget(selectedElm).clientHeight;
- ratio = startH / startW;
- selectedHandle = handle;
- handle.startPos = {
- x: targetWidth * handle[0] + selectedElmX,
- y: targetHeight * handle[1] + selectedElmY
- };
- startScrollWidth = rootElement.scrollWidth;
- startScrollHeight = rootElement.scrollHeight;
- selectedElmGhost = selectedElm.cloneNode(true);
- dom.addClass(selectedElmGhost, 'mce-clonedresizable');
- dom.setAttrib(selectedElmGhost, 'data-mce-bogus', 'all');
- selectedElmGhost.contentEditable = false;
- selectedElmGhost.unSelectabe = true;
- dom.setStyles(selectedElmGhost, {
- left: selectedElmX,
- top: selectedElmY,
- margin: 0
- });
- selectedElmGhost.removeAttribute('data-mce-selected');
- 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);
+ var ControlSelection = function (selection, editor) {
+ var dom = editor.dom, each = Tools.each;
+ var selectedElm, selectedElmGhost, resizeHelper, resizeHandles, selectedHandle;
+ 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;
+ resizeHandles = {
+ nw: [
+ 0,
+ 0,
+ -1,
+ -1
+ ],
+ ne: [
+ 1,
+ 0,
+ 1,
+ -1
+ ],
+ se: [
+ 1,
+ 1,
+ 1,
+ 1
+ ],
+ sw: [
+ 0,
+ 1,
+ -1,
+ 1
+ ]
+ };
+ var rootClass = '.mce-content-body';
+ editor.contentStyles.push(rootClass + ' div.mce-resizehandle {' + 'position: absolute;' + 'border: 1px solid black;' + 'box-sizing: content-box;' + 'background: #FFF;' + 'width: 7px;' + 'height: 7px;' + 'z-index: 10000' + '}' + rootClass + ' .mce-resizehandle:hover {' + 'background: #000' + '}' + rootClass + ' img[data-mce-selected],' + rootClass + ' hr[data-mce-selected] {' + 'outline: 1px solid black;' + 'resize: none' + '}' + rootClass + ' .mce-clonedresizable {' + 'position: absolute;' + (Env.gecko ? '' : 'outline: 1px dashed black;') + 'opacity: .5;' + 'filter: alpha(opacity=50);' + 'z-index: 10000' + '}' + rootClass + ' .mce-resize-helper {' + 'background: #555;' + 'background: rgba(0,0,0,0.75);' + 'border-radius: 3px;' + 'border: 1px;' + 'color: white;' + 'display: none;' + 'font-family: sans-serif;' + 'font-size: 12px;' + 'white-space: nowrap;' + 'line-height: 14px;' + 'margin: 5px 10px;' + 'padding: 5px;' + 'position: absolute;' + 'z-index: 10001' + '}');
+ var isImage = function (elm) {
+ return elm && (elm.nodeName === 'IMG' || editor.dom.is(elm, 'figure.image'));
+ };
+ var isEventOnImageOutsideRange = function (evt, range) {
+ return isImage(evt.target) && !RangePoint.isXYWithinRange(evt.clientX, evt.clientY, range);
+ };
+ var contextMenuSelectImage = function (evt) {
+ var target = evt.target;
+ if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {
+ evt.preventDefault();
+ editor.selection.select(target);
+ }
+ };
+ var getResizeTarget = function (elm) {
+ return editor.dom.is(elm, 'figure.image') ? elm.querySelector('img') : elm;
+ };
+ var isResizable = function (elm) {
+ var selector = editor.settings.object_resizing;
+ if (selector === false || Env.iOS) {
+ return false;
+ }
+ if (typeof selector !== 'string') {
+ selector = 'table,img,figure.image,div';
+ }
+ if (elm.getAttribute('data-mce-resize') === 'false') {
+ return false;
+ }
+ if (elm === editor.getBody()) {
+ return false;
+ }
+ return is$1(Element$$1.fromDom(elm), selector);
+ };
+ 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) && editor.settings.resize_img_proportional !== false) {
+ proportional = !VK.modifierPressed(e);
+ } else {
+ proportional = VK.modifierPressed(e) || isImage(selectedElm) && selectedHandle[2] * selectedHandle[3] !== 0;
+ }
+ if (proportional) {
+ if (abs(deltaX) > abs(deltaY)) {
+ height = round(width * ratio);
+ width = round(height / ratio);
+ } else {
+ width = round(height / ratio);
+ height = round(width * ratio);
+ }
+ }
+ dom.setStyles(getResizeTarget(selectedElmGhost), {
+ width: width,
+ height: 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) {
+ Events.fireObjectResizeStart(editor, selectedElm, startW, startH);
+ resizeStarted = true;
+ }
+ };
+ var endGhostResize = function () {
+ resizeStarted = false;
+ var setSizeProp = function (name$$1, value) {
+ if (value) {
+ if (selectedElm.style[name$$1] || !editor.schema.isValid(selectedElm.nodeName.toLowerCase(), name$$1)) {
+ dom.setStyle(getResizeTarget(selectedElm), name$$1, value);
+ } else {
+ dom.setAttrib(getResizeTarget(selectedElm), name$$1, value);
}
- resizeHelper = dom.add(rootElement, 'div', {
- 'class': 'mce-resize-helper',
- 'data-mce-bogus': 'all'
- }, startW + ' × ' + startH);
- };
+ }
+ };
+ setSizeProp('width', width);
+ setSizeProp('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);
+ showResizeRect(selectedElm);
+ Events.fireObjectResized(editor, selectedElm, width, height);
+ dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style'));
+ editor.nodeChanged();
+ };
+ var showResizeRect = function (targetElm) {
+ var position, targetWidth, targetHeight, e, rect;
+ hideResizeRect();
+ unbindResizeHandleEvents();
+ position = dom.getPos(targetElm, rootElement);
+ selectedElmX = position.x;
+ selectedElmY = position.y;
+ rect = targetElm.getBoundingClientRect();
+ targetWidth = rect.width || rect.right - rect.left;
+ targetHeight = rect.height || rect.bottom - rect.top;
+ if (selectedElm !== targetElm) {
+ selectedElm = targetElm;
+ width = height = 0;
+ }
+ e = editor.fire('ObjectSelected', { target: targetElm });
+ if (isResizable(targetElm) && !e.isDefaultPrevented()) {
+ each(resizeHandles, function (handle, name$$1) {
+ var handleElm;
+ var startDrag = function (e) {
+ startX = e.screenX;
+ startY = e.screenY;
+ startW = getResizeTarget(selectedElm).clientWidth;
+ startH = getResizeTarget(selectedElm).clientHeight;
+ ratio = startH / startW;
+ selectedHandle = handle;
+ handle.startPos = {
+ x: targetWidth * handle[0] + selectedElmX,
+ y: targetHeight * handle[1] + selectedElmY
+ };
+ startScrollWidth = rootElement.scrollWidth;
+ startScrollHeight = rootElement.scrollHeight;
+ selectedElmGhost = selectedElm.cloneNode(true);
+ dom.addClass(selectedElmGhost, 'mce-clonedresizable');
+ dom.setAttrib(selectedElmGhost, 'data-mce-bogus', 'all');
+ selectedElmGhost.contentEditable = false;
+ selectedElmGhost.unSelectabe = true;
+ dom.setStyles(selectedElmGhost, {
+ left: selectedElmX,
+ top: selectedElmY,
+ margin: 0
+ });
+ selectedElmGhost.removeAttribute('data-mce-selected');
+ 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$$1);
+ if (handleElm) {
+ dom.remove(handleElm);
+ }
+ handleElm = dom.add(rootElement, 'div', {
+ 'id': 'mceResizeHandle' + name$$1,
+ 'data-mce-bogus': 'all',
+ 'class': 'mce-resizehandle',
+ 'unselectable': true,
+ 'style': 'cursor:' + name$$1 + '-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();
+ }
+ selectedElm.setAttribute('data-mce-selected', '1');
+ };
+ var hideResizeRect = function () {
+ var name$$1, handleElm;
+ unbindResizeHandleEvents();
+ if (selectedElm) {
+ selectedElm.removeAttribute('data-mce-selected');
+ }
+ for (name$$1 in resizeHandles) {
handleElm = dom.get('mceResizeHandle' + name$$1);
if (handleElm) {
+ dom.unbind(handleElm);
dom.remove(handleElm);
}
- handleElm = dom.add(rootElement, 'div', {
- 'id': 'mceResizeHandle' + name$$1,
- 'data-mce-bogus': 'all',
- 'class': 'mce-resizehandle',
- 'unselectable': true,
- 'style': 'cursor:' + name$$1 + '-resize; margin:0; padding:0'
- });
- if ($_cseqobajnlpawll.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();
- }
- selectedElm.setAttribute('data-mce-selected', '1');
- };
- var hideResizeRect = function () {
- var name$$1, handleElm;
- unbindResizeHandleEvents();
- if (selectedElm) {
- selectedElm.removeAttribute('data-mce-selected');
- }
- for (name$$1 in resizeHandles) {
- handleElm = dom.get('mceResizeHandle' + name$$1);
- if (handleElm) {
- dom.unbind(handleElm);
- dom.remove(handleElm);
- }
- }
- };
- var updateResizeRect = function (e) {
- var startElm, controlElm;
- var isChildOrEqual = function (node, parent$$1) {
- if (node) {
- do {
- if (node === parent$$1) {
- return true;
- }
- } while (node = node.parentNode);
}
};
- if (resizeStarted || editor.removed) {
+ var updateResizeRect = function (e) {
+ var startElm, controlElm;
+ var isChildOrEqual = function (node, parent$$1) {
+ if (node) {
+ do {
+ if (node === parent$$1) {
+ return true;
+ }
+ } while (node = node.parentNode);
+ }
+ };
+ if (resizeStarted || editor.removed) {
+ return;
+ }
+ each(dom.select('img[data-mce-selected],hr[data-mce-selected]'), function (img) {
+ img.removeAttribute('data-mce-selected');
+ });
+ controlElm = e.type === 'mousedown' ? e.target : selection.getNode();
+ controlElm = dom.$(controlElm).closest('table,img,figure.image,hr')[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$a(getContentEditableRoot$2(editor.getBody(), elm));
+ };
+ var unbindResizeHandleEvents = function () {
+ for (var name$$1 in resizeHandles) {
+ var handle = resizeHandles[name$$1];
+ 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.ie && Env.ie >= 11) {
+ 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();
+ }
+ }
+ });
+ editor.dom.bind(rootElement, 'mscontrolselect', function (e) {
+ var delayedSelect = function (node) {
+ Delay.setEditorTimeout(editor, function () {
+ editor.selection.select(node);
+ });
+ };
+ if (isWithinContentEditableFalse(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);
+ }
+ }
+ });
+ }
+ var throttledUpdateResizeRect = Delay.throttle(function (e) {
+ if (!editor.composing) {
+ updateResizeRect(e);
+ }
+ });
+ editor.on('nodechange ResizeEditor ResizeWindow drop FullscreenStateChanged', throttledUpdateResizeRect);
+ editor.on('keyup compositionend', function (e) {
+ if (selectedElm && selectedElm.nodeName === 'TABLE') {
+ throttledUpdateResizeRect(e);
+ }
+ });
+ editor.on('hide blur', hideResizeRect);
+ editor.on('contextmenu', contextMenuSelectImage);
+ });
+ editor.on('remove', unbindResizeHandleEvents);
+ var destroy = function () {
+ selectedElm = selectedElmGhost = null;
+ };
+ return {
+ isResizable: isResizable,
+ showResizeRect: showResizeRect,
+ hideResizeRect: hideResizeRect,
+ updateResizeRect: updateResizeRect,
+ destroy: destroy
+ };
+ };
+
+ var getPos$1 = function (elm) {
+ var x = 0, y = 0;
+ var offsetParent = elm;
+ while (offsetParent && offsetParent.nodeType) {
+ x += offsetParent.offsetLeft || 0;
+ y += offsetParent.offsetTop || 0;
+ offsetParent = offsetParent.offsetParent;
+ }
+ return {
+ x: x,
+ y: y
+ };
+ };
+ var fireScrollIntoViewEvent = function (editor, elm, alignToTop) {
+ var scrollEvent = {
+ elm: elm,
+ alignToTop: alignToTop
+ };
+ editor.fire('scrollIntoView', scrollEvent);
+ return scrollEvent.isDefaultPrevented();
+ };
+ var scrollElementIntoView = function (editor, elm, alignToTop) {
+ var y, viewPort;
+ var dom = editor.dom;
+ var root = dom.getRoot();
+ var viewPortY, viewPortH, offsetY = 0;
+ if (fireScrollIntoViewEvent(editor, elm, alignToTop)) {
return;
}
- each(dom.select('img[data-mce-selected],hr[data-mce-selected]'), function (img) {
- img.removeAttribute('data-mce-selected');
- });
- controlElm = e.type === 'mousedown' ? e.target : selection.getNode();
- controlElm = dom.$(controlElm).closest('table,img,figure.image,hr')[0];
- if (isChildOrEqual(controlElm, rootElement)) {
- disableGeckoResize();
- startElm = selection.getStart(true);
- if (isChildOrEqual(startElm, controlElm) && isChildOrEqual(selection.getEnd(true), controlElm)) {
- showResizeRect(controlElm);
+ if (!NodeType.isElement(elm)) {
+ return;
+ }
+ if (alignToTop === false) {
+ offsetY = elm.offsetHeight;
+ }
+ if (root.nodeName !== 'BODY') {
+ var scrollContainer = editor.selection.getScrollContainer();
+ if (scrollContainer) {
+ y = getPos$1(elm).y - getPos$1(scrollContainer).y + offsetY;
+ viewPortH = scrollContainer.clientHeight;
+ viewPortY = scrollContainer.scrollTop;
+ if (y < viewPortY || y + 25 > viewPortY + viewPortH) {
+ scrollContainer.scrollTop = y < viewPortY ? y : y - viewPortH + 25;
+ }
return;
}
}
- hideResizeRect();
- };
- var isWithinContentEditableFalse = function (elm) {
- return isContentEditableFalse$10(getContentEditableRoot$2(editor.getBody(), elm));
- };
- var unbindResizeHandleEvents = function () {
- for (var name$$1 in resizeHandles) {
- var handle = resizeHandles[name$$1];
- if (handle.elm) {
- dom.unbind(handle.elm);
- delete handle.elm;
- }
+ viewPort = dom.getViewPort(editor.getWin());
+ y = dom.getPos(elm).y + offsetY;
+ viewPortY = viewPort.y;
+ viewPortH = viewPort.h;
+ if (y < viewPort.y || y + 25 > viewPortY + viewPortH) {
+ editor.getWin().scrollTo(0, y < viewPortY ? y : y - viewPortH + 25);
}
};
- var disableGeckoResize = function () {
- try {
- editor.getDoc().execCommand('enableObjectResizing', false, false);
- } catch (ex) {
- }
- };
- editor.on('init', function () {
- disableGeckoResize();
- if ($_cseqobajnlpawll.ie && $_cseqobajnlpawll.ie >= 11) {
- 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();
- }
- }
- });
- editor.dom.bind(rootElement, 'mscontrolselect', function (e) {
- var delayedSelect = function (node) {
- $_2nbnh1ijnlpawpi.setEditorTimeout(editor, function () {
- editor.selection.select(node);
- });
- };
- if (isWithinContentEditableFalse(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);
- }
- }
- });
- }
- var throttledUpdateResizeRect = $_2nbnh1ijnlpawpi.throttle(function (e) {
- if (!editor.composing) {
- updateResizeRect(e);
- }
- });
- editor.on('nodechange ResizeEditor ResizeWindow drop FullscreenStateChanged', throttledUpdateResizeRect);
- editor.on('keyup compositionend', function (e) {
- if (selectedElm && selectedElm.nodeName === 'TABLE') {
- throttledUpdateResizeRect(e);
- }
- });
- editor.on('hide blur', hideResizeRect);
- editor.on('contextmenu', contextMenuSelectImage);
- });
- editor.on('remove', unbindResizeHandleEvents);
- var destroy = function () {
- selectedElm = selectedElmGhost = null;
- };
- return {
- isResizable: isResizable,
- showResizeRect: showResizeRect,
- hideResizeRect: hideResizeRect,
- updateResizeRect: updateResizeRect,
- destroy: destroy
- };
- };
-
- var hasCeProperty = function (node) {
- return $_fy28ei1rjnlpax2o.isContentEditableTrue(node) || $_fy28ei1rjnlpax2o.isContentEditableFalse(node);
- };
- var findParent$1 = 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 element, rng, rects;
- element = doc.elementFromPoint(clientX, clientY);
- rng = doc.body.createTextRange();
- if (!element || element.tagName === 'HTML') {
- element = doc.body;
- }
- rng.moveToElementText(element);
- rects = $_1q1txeljnlpawsa.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 $_fy28ei1rjnlpax2o.isContentEditableFalse(findParent$1(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 $_445zg66wjnlpay63 = { fromPoint: fromPoint$1 };
-
- var processRanges = function (editor, ranges) {
- return map(ranges, function (range$$1) {
- var evt = editor.fire('GetSelectionRange', { range: range$$1 });
- return evt.range !== range$$1 ? evt.range : range$$1;
- });
- };
- var $_76ma076xjnlpay65 = { processRanges: processRanges };
-
- var fromElements = function (elements, scope) {
- var doc = scope || document;
- var fragment = doc.createDocumentFragment();
- each(elements, function (element) {
- fragment.appendChild(element.dom());
- });
- return Element$$1.fromDom(fragment);
- };
- var $_8n4csb70jnlpay6p = { fromElements: fromElements };
-
- var tableModel = Immutable('element', 'width', 'rows');
- var tableRow = Immutable('element', 'cells');
- var cellPosition = Immutable('x', 'y');
- var getSpan = function (td, key) {
- var value = parseInt($_521j8z15jnlpawz7.get(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($_5sdpl92ijnlpax8h.deep(tr), []);
- }
- for (var x2 = x; x2 < x + colspan; x2++) {
- var cells = rows[y2].cells();
- cells[x2] = y2 === y && x2 === x ? td : $_5sdpl92ijnlpax8h.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 ($_5h7cor1ejnlpax0k.eq(cells[x], element)) {
- return Option.some(cellPosition(x, y));
- }
- }
- }
- return Option.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 = $_5sdpl92ijnlpax8h.shallow(table.element());
- var tableBody = Element$$1.fromTag('tbody');
- $_9vd3j51xjnlpax4s.append(tableBody, rows);
- $_ag89ax1yjnlpax4x.append(tableElement, tableBody);
- return tableElement;
- };
- var modelRowsToDomRows = function (table) {
- return map(table.rows(), function (row) {
- var cells = map(row.cells(), function (cell) {
- var td = $_5sdpl92ijnlpax8h.deep(cell);
- $_521j8z15jnlpawz7.remove(td, 'colspan');
- $_521j8z15jnlpawz7.remove(td, 'rowspan');
- return td;
- });
- var tr = $_5sdpl92ijnlpax8h.shallow(row.element());
- $_9vd3j51xjnlpax4s.append(tr, cells);
- return tr;
- });
- };
- var fromDom$2 = function (tableElm) {
- var table = tableModel($_5sdpl92ijnlpax8h.shallow(tableElm), 0, []);
- each($_cmitir27jnlpax6e.descendants(tableElm, 'tr'), function (tr, y) {
- each($_cmitir27jnlpax6e.descendants(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 $_7mbdap71jnlpay6v = {
- fromDom: fromDom$2,
- toDom: toDom,
- subsection: subsection
- };
-
- var findParentListContainer = function (parents) {
- return find(parents, function (elm) {
- return $_7u5fzs11jnlpawv6.name(elm) === 'ul' || $_7u5fzs11jnlpawv6.name(elm) === 'ol';
- });
- };
- var getFullySelectedListWrappers = function (parents, rng) {
- return find(parents, function (elm) {
- return $_7u5fzs11jnlpawv6.name(elm) === 'li' && hasAllContentsSelected(elm, rng);
- }).fold(constant([]), function (li) {
- return findParentListContainer(parents).map(function (listCont) {
- return [
- Element$$1.fromTag('li'),
- Element$$1.fromTag($_7u5fzs11jnlpawv6.name(listCont))
- ];
- }).getOr([]);
- });
- };
- var wrap$3 = function (innerElm, elms) {
- var wrapped = foldl(elms, function (acc, elm) {
- $_ag89ax1yjnlpax4x.append(elm, acc);
- return elm;
- }, innerElm);
- return elms.length > 0 ? $_8n4csb70jnlpay6p.fromElements([wrapped]) : wrapped;
- };
- var directListWrappers = function (commonAnchorContainer) {
- if (isListItem(commonAnchorContainer)) {
- return $_dr4ybh18jnlpawzt.parent(commonAnchorContainer).filter(isList).fold(constant([]), function (listElm) {
- return [
- commonAnchorContainer,
- listElm
- ];
- });
- } else {
- return isList(commonAnchorContainer) ? [commonAnchorContainer] : [];
- }
- };
- var getWrapElements = function (rootNode, rng) {
- var commonAnchorContainer = Element$$1.fromDom(rng.commonAncestorContainer);
- var parents = $_4b88sj42jnlpaxkd.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, $_5sdpl92ijnlpax8h.shallow);
- };
- var emptyFragment = function () {
- return $_8n4csb70jnlpay6p.fromElements([]);
- };
- var getFragmentFromRange = function (rootNode, rng) {
- return wrap$3(Element$$1.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng));
- };
- var getParentTable = function (rootElm, cell) {
- return $_2kbu29jnlpax6t.ancestor(cell, 'table', curry($_5h7cor1ejnlpax0k.eq, 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 = $_7mbdap71jnlpay6v.fromDom(tableElm);
- return $_7mbdap71jnlpay6v.subsection(fullTableModel, firstCell, lastCell).map(function (sectionedTableModel) {
- return $_8n4csb70jnlpay6p.fromElements([$_7mbdap71jnlpay6v.toDom(sectionedTableModel)]);
- });
- }).getOrThunk(emptyFragment);
- };
- var getSelectionFragment = function (rootNode, ranges) {
- return ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0]);
- };
- var read$4 = function (rootNode, ranges) {
- var selectedCells = $_1yq8wz4hjnlpaxo7.getCellsFromElementOrRanges(ranges, rootNode);
- return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges);
- };
- var $_7ki6146zjnlpay6b = { read: read$4 };
-
- var getContent = function (editor, args) {
- var rng = editor.selection.getRng(), tmpElm = editor.dom.create('body');
- var sel = editor.selection.getSel();
- var fragment;
- var ranges = $_76ma076xjnlpay65.processRanges(editor, $_533sn84ijnlpaxoe.getRanges(sel));
- args = args || {};
- args.get = true;
- args.format = args.format || 'html';
- args.selection = true;
- args = editor.fire('BeforeGetContent', args);
- if (args.isDefaultPrevented()) {
- editor.fire('GetContent', args);
- return args.content;
- }
- if (args.format === 'text') {
- return editor.selection.isCollapsed() ? '' : $_90hfb72rjnlpaxae.trim(rng.text || (sel.toString ? sel.toString() : ''));
- }
- if (rng.cloneContents) {
- fragment = args.contextual ? $_7ki6146zjnlpay6b.read(Element$$1.fromDom(editor.getBody()), ranges).dom() : rng.cloneContents();
- if (fragment) {
- tmpElm.appendChild(fragment);
- }
- } else if (rng.item !== undefined || rng.htmlText !== undefined) {
- tmpElm.innerHTML = '
' + (rng.item ? rng.item(0).outerHTML : rng.htmlText);
- tmpElm.removeChild(tmpElm.firstChild);
- } else {
- tmpElm.innerHTML = rng.toString();
- }
- args.getInner = true;
- var content = editor.selection.serializer.serialize(tmpElm, args);
- if (args.format === 'tree') {
- return content;
- }
- args.content = editor.selection.isCollapsed() ? '' : content;
- editor.fire('GetContent', args);
- return args.content;
- };
- var $_d9gs4y6yjnlpay67 = { getContent: getContent };
-
- var setContent = function (editor, content, args) {
- var rng = editor.selection.getRng(), caretNode;
- var doc = editor.getDoc();
- var frag, temp;
- args = args || { format: 'html' };
- args.set = true;
- args.selection = true;
- args.content = content;
- if (!args.no_events) {
- args = editor.fire('BeforeSetContent', args);
- if (args.isDefaultPrevented()) {
- editor.fire('SetContent', args);
- return;
- }
- }
- content = args.content;
- if (rng.insertNode) {
- content += '_';
- if (rng.startContainer === doc && rng.endContainer === doc) {
- doc.body.innerHTML = content;
+ var getViewPortRect = function (editor) {
+ if (editor.inline) {
+ return editor.getBody().getBoundingClientRect();
} else {
- rng.deleteContents();
- if (doc.body.childNodes.length === 0) {
+ var win = editor.getWin();
+ return {
+ left: 0,
+ right: win.innerWidth,
+ top: 0,
+ bottom: win.innerHeight,
+ width: win.innerWidth,
+ height: win.innerHeight
+ };
+ }
+ };
+ var scrollBy = function (editor, dx, dy) {
+ if (editor.inline) {
+ editor.getBody().scrollLeft += dx;
+ editor.getBody().scrollTop += dy;
+ } else {
+ editor.getWin().scrollBy(dx, dy);
+ }
+ };
+ var scrollRangeIntoView = function (editor, rng) {
+ head(CaretPosition.fromRangeStart(rng).getClientRects()).each(function (rngRect) {
+ var bodyRect = getViewPortRect(editor);
+ var overflow = getOverflow(bodyRect, rngRect);
+ var margin = 4;
+ var dx = overflow.x > 0 ? overflow.x + margin : overflow.x - margin;
+ var dy = overflow.y > 0 ? overflow.y + margin : overflow.y - margin;
+ scrollBy(editor, overflow.x !== 0 ? dx : 0, overflow.y !== 0 ? dy : 0);
+ });
+ };
+ var ScrollIntoView = {
+ scrollElementIntoView: scrollElementIntoView,
+ scrollRangeIntoView: scrollRangeIntoView
+ };
+
+ var hasCeProperty = function (node) {
+ return NodeType.isContentEditableTrue(node) || NodeType.isContentEditableFalse(node);
+ };
+ var findParent$1 = 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 element, rng, rects;
+ element = doc.elementFromPoint(clientX, clientY);
+ 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 NodeType.isContentEditableFalse(findParent$1(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 CaretRangeFromPoint = { fromPoint: fromPoint$1 };
+
+ var processRanges = function (editor, ranges) {
+ return map(ranges, function (range$$1) {
+ var evt = editor.fire('GetSelectionRange', { range: range$$1 });
+ return evt.range !== range$$1 ? evt.range : range$$1;
+ });
+ };
+ var EventProcessRanges = { processRanges: processRanges };
+
+ var fromElements = function (elements, scope) {
+ var doc = scope || document;
+ var fragment = doc.createDocumentFragment();
+ each(elements, function (element) {
+ fragment.appendChild(element.dom());
+ });
+ return Element$$1.fromDom(fragment);
+ };
+
+ var tableModel = Immutable('element', 'width', 'rows');
+ var tableRow = Immutable('element', 'cells');
+ var cellPosition = Immutable('x', 'y');
+ var getSpan = function (td, key) {
+ var value = parseInt(get$1(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(cells[x], element)) {
+ return Option.some(cellPosition(x, y));
+ }
+ }
+ }
+ return Option.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 = Element$$1.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(td, 'colspan');
+ remove(td, 'rowspan');
+ return td;
+ });
+ var tr = shallow(row.element());
+ append$1(tr, cells);
+ return tr;
+ });
+ };
+ var fromDom$2 = 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 SimpleTableModel = {
+ fromDom: fromDom$2,
+ toDom: toDom,
+ subsection: subsection
+ };
+
+ var findParentListContainer = function (parents$$1) {
+ return find(parents$$1, function (elm) {
+ return name(elm) === 'ul' || name(elm) === 'ol';
+ });
+ };
+ var getFullySelectedListWrappers = function (parents$$1, rng) {
+ return find(parents$$1, function (elm) {
+ return name(elm) === 'li' && hasAllContentsSelected(elm, rng);
+ }).fold(constant([]), function (li) {
+ return findParentListContainer(parents$$1).map(function (listCont) {
+ return [
+ Element$$1.fromTag('li'),
+ Element$$1.fromTag(name(listCont))
+ ];
+ }).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 = Element$$1.fromDom(rng.commonAncestorContainer);
+ var parents$$1 = Parents.parentsAndSelf(commonAnchorContainer, rootNode);
+ var wrapElements = filter(parents$$1, function (elm) {
+ return isInline(elm) || isHeading(elm);
+ });
+ var listWrappers = getFullySelectedListWrappers(parents$$1, 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(Element$$1.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng));
+ };
+ var getParentTable = function (rootElm, cell) {
+ return ancestor$1(cell, 'table', curry(eq, 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 = SimpleTableModel.fromDom(tableElm);
+ return SimpleTableModel.subsection(fullTableModel, firstCell, lastCell).map(function (sectionedTableModel) {
+ return fromElements([SimpleTableModel.toDom(sectionedTableModel)]);
+ });
+ }).getOrThunk(emptyFragment);
+ };
+ var getSelectionFragment = function (rootNode, ranges) {
+ return ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0]);
+ };
+ var read$4 = function (rootNode, ranges) {
+ var selectedCells = TableCellSelection.getCellsFromElementOrRanges(ranges, rootNode);
+ return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges);
+ };
+ var FragmentReader = { read: read$4 };
+
+ var getTextContent = function (editor) {
+ return Option.from(editor.selection.getRng()).map(function (r) {
+ return Zwsp.trim(r.toString());
+ }).getOr('');
+ };
+ var getHtmlContent = function (editor, args) {
+ var rng = editor.selection.getRng(), tmpElm = editor.dom.create('body');
+ var sel = editor.selection.getSel();
+ var fragment;
+ var ranges = EventProcessRanges.processRanges(editor, MultiRange.getRanges(sel));
+ if (rng.cloneContents) {
+ fragment = args.contextual ? FragmentReader.read(Element$$1.fromDom(editor.getBody()), ranges).dom() : rng.cloneContents();
+ if (fragment) {
+ tmpElm.appendChild(fragment);
+ }
+ } else {
+ tmpElm.innerHTML = rng.toString();
+ }
+ return editor.selection.serializer.serialize(tmpElm, args);
+ };
+ var getContent = function (editor, args) {
+ if (args === void 0) {
+ args = {};
+ }
+ args.get = true;
+ args.format = args.format || 'html';
+ 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 = getHtmlContent(editor, args);
+ if (args.format === 'tree') {
+ return content;
+ } else {
+ args.content = editor.selection.isCollapsed() ? '' : content;
+ editor.fire('GetContent', args);
+ return args.content;
+ }
+ }
+ };
+ var GetSelectionContent = { getContent: getContent };
+
+ var setContent = function (editor, content, args) {
+ var rng = editor.selection.getRng(), caretNode;
+ var doc = editor.getDoc();
+ var frag, temp;
+ args = args || { format: 'html' };
+ args.set = true;
+ args.selection = true;
+ args.content = content;
+ if (!args.no_events) {
+ args = editor.fire('BeforeSetContent', args);
+ if (args.isDefaultPrevented()) {
+ editor.fire('SetContent', args);
+ return;
+ }
+ }
+ content = args.content;
+ if (rng.insertNode) {
+ content += '_';
+ if (rng.startContainer === doc && rng.endContainer === doc) {
doc.body.innerHTML = content;
} else {
- if (rng.createContextualFragment) {
- rng.insertNode(rng.createContextualFragment(content));
+ rng.deleteContents();
+ if (doc.body.childNodes.length === 0) {
+ doc.body.innerHTML = content;
} else {
- frag = doc.createDocumentFragment();
- temp = doc.createElement('div');
- frag.appendChild(temp);
- temp.outerHTML = content;
- rng.insertNode(frag);
+ if (rng.createContextualFragment) {
+ rng.insertNode(rng.createContextualFragment(content));
+ } else {
+ frag = doc.createDocumentFragment();
+ temp = doc.createElement('div');
+ frag.appendChild(temp);
+ temp.outerHTML = content;
+ rng.insertNode(frag);
+ }
}
}
- }
- caretNode = editor.dom.get('__caret');
- rng = doc.createRange();
- rng.setStartBefore(caretNode);
- rng.setEndBefore(caretNode);
- editor.selection.setRng(rng);
- editor.dom.remove('__caret');
- try {
+ caretNode = editor.dom.get('__caret');
+ rng = doc.createRange();
+ rng.setStartBefore(caretNode);
+ rng.setEndBefore(caretNode);
editor.selection.setRng(rng);
- } catch (ex) {
- }
- } else {
- if (rng.item) {
- doc.execCommand('Delete', false, null);
- rng = editor.getRng();
- }
- if (/^\s+/.test(content)) {
- rng.pasteHTML('_' + content);
- editor.dom.remove('__mce_tmp');
- } else {
- rng.pasteHTML(content);
- }
- }
- if (!args.no_events) {
- editor.fire('SetContent', args);
- }
- };
- var $_b3j7u072jnlpaybw = { setContent: setContent };
-
- var getEndpointElement = function (root, rng, start, real, resolve) {
- var container = start ? rng.startContainer : rng.endContainer;
- var offset = start ? rng.startOffset : rng.endOffset;
- return Option.from(container).map(Element$$1.fromDom).map(function (elm) {
- return !real || !rng.collapsed ? $_dr4ybh18jnlpawzt.child(elm, resolve(elm, offset)).getOr(elm) : elm;
- }).bind(function (elm) {
- return $_7u5fzs11jnlpawv6.isElement(elm) ? Option.some(elm) : $_dr4ybh18jnlpawzt.parent(elm);
- }).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($_dr4ybh18jnlpawzt.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 && $_fy28ei1rjnlpax2o.isText(node) && node.length === 0) {
- node = forwards ? node.nextSibling : node.previousSibling;
- }
- return node || orig;
- };
- var getNode$1 = function (root, rng) {
- var elm, startContainer, endContainer, startOffset, endOffset;
- if (!rng) {
- return root;
- }
- startContainer = rng.startContainer;
- endContainer = rng.endContainer;
- startOffset = rng.startOffset;
- 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, root;
- var selectedBlocks = [];
- 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 TreeWalker(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 Option.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 each$19 = $_1q1txeljnlpawsa.each;
- var isNativeIeSelection = function (rng) {
- return !!rng.select;
- };
- var isAttachedToDom = function (node) {
- return !!(node && node.ownerDocument) && $_5h7cor1ejnlpax0k.contains(Element$$1.fromDom(node.ownerDocument), Element$$1.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 Selection$1 = function (dom, win, serializer, editor) {
- var bookmarkManager, controlSelection;
- var selectedRange, explicitRange, selectorChangedData;
- var setCursorLocation = function (node, offset) {
- var rng = dom.createRng();
- if (!node) {
- moveEndPoint$1(dom, rng, editor.getBody(), true);
- setRng(rng);
- } else {
- rng.setStart(node, offset);
- rng.setEnd(node, offset);
- setRng(rng);
- collapse(false);
- }
- };
- var getContent = function (args) {
- return $_d9gs4y6yjnlpay67.getContent(editor, args);
- };
- var setContent = function (content, args) {
- return $_b3j7u072jnlpaybw.setContent(editor, content, args);
- };
- var getStart = function (real) {
- return getStart$2(editor.getBody(), getRng(), real);
- };
- var getEnd$$1 = function (real) {
- return getEnd(editor.getBody(), getRng(), 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(), 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();
- rng.collapse(!!toStart);
- setRng(rng);
- };
- var getSel = function () {
- return win.getSelection ? win.getSelection() : win.document.selection;
- };
- var getRng = function () {
- var selection, rng, elm, doc;
- var tryCompareBoundaryPoints = function (how, sourceRange, destinationRange) {
+ editor.dom.remove('__caret');
try {
- return sourceRange.compareBoundaryPoints(how, destinationRange);
- } catch (ex) {
- return -1;
- }
- };
- if (!win) {
- return null;
- }
- doc = win.document;
- if (typeof doc === 'undefined' || doc === null) {
- return null;
- }
- if (editor.bookmark !== undefined && $_8odu5n4yjnlpaxsg.hasFocus(editor) === false) {
- var bookmark = $_13pqgk4ojnlpaxqr.getRng(editor);
- if (bookmark.isSome()) {
- return bookmark.map(function (r) {
- return $_76ma076xjnlpay65.processRanges(editor, [r])[0];
- }).getOr(doc.createRange());
- }
- }
- try {
- if (selection = getSel()) {
- if (selection.rangeCount > 0) {
- rng = selection.getRangeAt(0);
- } else {
- rng = selection.createRange ? selection.createRange() : doc.createRange();
- }
- }
- } catch (ex) {
- }
- rng = $_76ma076xjnlpay65.processRanges(editor, [rng])[0];
- 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 sel, node, evt;
- if (!isValidRange(rng)) {
- return;
- }
- var ieRange = isNativeIeSelection(rng) ? rng : null;
- if (ieRange) {
- explicitRange = null;
- try {
- ieRange.select();
+ editor.selection.setRng(rng);
} catch (ex) {
}
- return;
- }
- sel = getSel();
- 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 && !$_cseqobajnlpawll.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());
- };
- var getSelectedBlocks$$1 = function (startElm, endElm) {
- return getSelectedBlocks(dom, getRng(), startElm, endElm);
- };
- var isForward = function () {
- var sel = getSel();
- var anchorRange, focusRange;
- if (!sel || !sel.anchorNode || !sel.focusNode) {
- return true;
- }
- anchorRange = dom.createRng();
- anchorRange.setStart(sel.anchorNode, sel.anchorOffset);
- anchorRange.collapse(true);
- focusRange = dom.createRng();
- focusRange.setStart(sel.focusNode, sel.focusOffset);
- focusRange.collapse(true);
- return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;
- };
- var normalize = function () {
- var rng = getRng();
- var sel = getSel();
- if (!$_533sn84ijnlpaxoe.hasMultipleRanges(sel) && hasAnyRanges(editor)) {
- var normRng = $_afh56j4mjnlpaxpx.normalize(dom, rng);
- normRng.each(function (normRng) {
- setRng(normRng, isForward());
- });
- return normRng.getOr(rng);
- }
- return rng;
- };
- var selectorChanged = function (selector, callback) {
- var currentSelectors;
- if (!selectorChangedData) {
- selectorChangedData = {};
- currentSelectors = {};
- editor.on('NodeChange', function (e) {
- var node = e.element, parents = dom.getParents(node, null, dom.getRoot()), matchedSelectors = {};
- each$19(selectorChangedData, function (callbacks, selector) {
- each$19(parents, function (node) {
- if (dom.is(node, selector)) {
- if (!currentSelectors[selector]) {
- each$19(callbacks, function (callback) {
- callback(true, {
- node: node,
- selector: selector,
- parents: parents
- });
- });
- currentSelectors[selector] = callbacks;
- }
- matchedSelectors[selector] = callbacks;
- return false;
- }
- });
- });
- each$19(currentSelectors, function (callbacks, selector) {
- if (!matchedSelectors[selector]) {
- delete currentSelectors[selector];
- each$19(callbacks, function (callback) {
- callback(false, {
- node: node,
- selector: selector,
- parents: parents
- });
- });
- }
- });
- });
- }
- if (!selectorChangedData[selector]) {
- selectorChangedData[selector] = [];
- }
- selectorChangedData[selector].push(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 $_av60ug39jnlpaxee.scrollElementIntoView(editor, elm, alignToTop);
- };
- var placeCaretAt = function (clientX, clientY) {
- return setRng($_445zg66wjnlpay63.fromPoint(clientX, clientY, editor.getDoc()));
- };
- var getBoundingClientRect = function () {
- var rng = getRng();
- return rng.collapsed ? CaretPosition$1.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,
- getStart: getStart,
- getEnd: getEnd$$1,
- getSelectedBlocks: getSelectedBlocks$$1,
- normalize: normalize,
- selectorChanged: selectorChanged,
- getScrollContainer: getScrollContainer,
- scrollIntoView: scrollIntoView,
- placeCaretAt: placeCaretAt,
- getBoundingClientRect: getBoundingClientRect,
- destroy: destroy
- };
- bookmarkManager = BookmarkManager$1(exports);
- controlSelection = ControlSelection(exports, editor);
- exports.bookmarkManager = bookmarkManager;
- exports.controlSelection = controlSelection;
- return exports;
- };
-
- var isContentEditableFalse$11 = $_fy28ei1rjnlpax2o.isContentEditableFalse;
- var getSelectedNode$1 = getSelectedNode;
- var isAfterContentEditableFalse$2 = isAfterContentEditableFalse;
- var isBeforeContentEditableFalse$2 = isBeforeContentEditableFalse;
- 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 && $_fy28ei1rjnlpax2o.isBr(from.getNode())) {
- return true;
- }
- return inSameBlock;
- };
- var moveToCeFalseHorizontally = function (direction, editor, getNextPosFn, range) {
- var node, caretPosition, peekCaretPosition, rangeIsInContainerBlock;
- var forwards = direction === HDirection.Forwards;
- var isBeforeContentEditableFalseFn = forwards ? isBeforeContentEditableFalse$2 : isAfterContentEditableFalse$2;
- if (!range.collapsed) {
- node = getSelectedNode$1(range);
- if (isContentEditableFalse$11(node)) {
- return showCaret(direction, editor, node, direction === HDirection.Backwards, true);
- }
- }
- rangeIsInContainerBlock = isRangeInCaretContainerBlock(range);
- caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);
- if (isBeforeContentEditableFalseFn(caretPosition)) {
- return selectNode(editor, caretPosition.getNode(!forwards));
- }
- caretPosition = getNextPosFn(caretPosition);
- if (!caretPosition) {
- if (rangeIsInContainerBlock) {
- return range;
- }
- return null;
- }
- if (isBeforeContentEditableFalseFn(caretPosition)) {
- return showCaret(direction, editor, caretPosition.getNode(!forwards), forwards, true);
- }
- peekCaretPosition = getNextPosFn(caretPosition);
- if (isBeforeContentEditableFalseFn(peekCaretPosition)) {
- if (isMoveInsideSameBlock(caretPosition, peekCaretPosition)) {
- return showCaret(direction, editor, peekCaretPosition.getNode(!forwards), forwards, true);
- }
- }
- if (rangeIsInContainerBlock) {
- return renderRangeCaret(editor, caretPosition.toRange(), true);
- }
- return null;
- };
- var moveToCeFalseVertically = function (direction, editor, walkerFn, range) {
- var caretPosition, linePositions, nextLinePositions;
- var closestNextLineRect, caretClientRect, clientX;
- var dist1, dist2, contentEditableFalseNode;
- contentEditableFalseNode = getSelectedNode$1(range);
- caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);
- linePositions = walkerFn(editor.getBody(), isAboveLine(1), caretPosition);
- nextLinePositions = $_n452lmjnlpawsj.filter(linePositions, isLine(1));
- caretClientRect = $_n452lmjnlpawsj.last(caretPosition.getClientRects());
- if (isBeforeContentEditableFalse$2(caretPosition) || isBeforeTable(caretPosition)) {
- contentEditableFalseNode = caretPosition.getNode();
- }
- if (isAfterContentEditableFalse$2(caretPosition) || isAfterTable(caretPosition)) {
- contentEditableFalseNode = caretPosition.getNode(true);
- }
- if (!caretClientRect) {
- return null;
- }
- clientX = caretClientRect.left;
- closestNextLineRect = findClosestClientRect(nextLinePositions, clientX);
- if (closestNextLineRect) {
- if (isContentEditableFalse$11(closestNextLineRect.node)) {
- dist1 = Math.abs(clientX - closestNextLineRect.left);
- dist2 = Math.abs(clientX - closestNextLineRect.right);
- return showCaret(direction, editor, closestNextLineRect.node, dist1 < dist2, true);
- }
- }
- if (contentEditableFalseNode) {
- var caretPositions = positionsUntil(direction, editor.getBody(), isAboveLine(1), contentEditableFalseNode);
- closestNextLineRect = findClosestClientRect($_n452lmjnlpawsj.filter(caretPositions, isLine(1)), clientX);
- if (closestNextLineRect) {
- return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true);
- }
- closestNextLineRect = $_n452lmjnlpawsj.last($_n452lmjnlpawsj.filter(caretPositions, isLine(0)));
- if (closestNextLineRect) {
- return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true);
- }
- }
- };
- var createTextBlock = function (editor) {
- var textBlock = editor.dom.create(editor.settings.forced_root_block);
- if (!$_cseqobajnlpawll.ie || $_cseqobajnlpawll.ie >= 11) {
- textBlock.innerHTML = '
';
- }
- return textBlock;
- };
- var exitPreBlock = function (editor, direction, range) {
- var pre, caretPos, newBlock;
- var caretWalker = CaretWalker(editor.getBody());
- var getNextVisualCaretPosition = $_dv6bef2njnlpax9l.curry(getVisualCaretPosition, caretWalker.next);
- var getPrevVisualCaretPosition = $_dv6bef2njnlpax9l.curry(getVisualCaretPosition, caretWalker.prev);
- if (range.collapsed && editor.settings.forced_root_block) {
- pre = editor.dom.getParent(range.startContainer, 'PRE');
- if (!pre) {
- return;
- }
- if (direction === 1) {
- caretPos = getNextVisualCaretPosition(CaretPosition$1.fromRangeStart(range));
} else {
- caretPos = getPrevVisualCaretPosition(CaretPosition$1.fromRangeStart(range));
- }
- if (!caretPos) {
- newBlock = createTextBlock(editor);
- if (direction === 1) {
- editor.$(pre).after(newBlock);
+ if (rng.item) {
+ doc.execCommand('Delete', false, null);
+ rng = editor.getRng();
+ }
+ if (/^\s+/.test(content)) {
+ rng.pasteHTML('_' + content);
+ editor.dom.remove('__mce_tmp');
} else {
- editor.$(pre).before(newBlock);
- }
- editor.selection.select(newBlock, true);
- editor.selection.collapse();
- }
- }
- };
- var getHorizontalRange = function (editor, forward) {
- var caretWalker = CaretWalker(editor.getBody());
- var getNextVisualCaretPosition = $_dv6bef2njnlpax9l.curry(getVisualCaretPosition, caretWalker.next);
- var getPrevVisualCaretPosition = $_dv6bef2njnlpax9l.curry(getVisualCaretPosition, caretWalker.prev);
- var newRange;
- var direction = forward ? HDirection.Forwards : HDirection.Backwards;
- var getNextPosFn = forward ? getNextVisualCaretPosition : getPrevVisualCaretPosition;
- var range = editor.selection.getRng();
- newRange = moveToCeFalseHorizontally(direction, editor, getNextPosFn, range);
- if (newRange) {
- return newRange;
- }
- newRange = exitPreBlock(editor, direction, range);
- if (newRange) {
- return newRange;
- }
- return null;
- };
- var getVerticalRange = function (editor, down) {
- var newRange;
- var direction = down ? 1 : -1;
- var walkerFn = down ? downUntil : upUntil;
- var range = editor.selection.getRng();
- newRange = moveToCeFalseVertically(direction, editor, walkerFn, range);
- if (newRange) {
- return newRange;
- }
- newRange = exitPreBlock(editor, direction, range);
- if (newRange) {
- return newRange;
- }
- return null;
- };
- var moveH$1 = function (editor, forward) {
- return function () {
- var newRng = getHorizontalRange(editor, forward);
- if (newRng) {
- editor.selection.setRng(newRng);
- return true;
- } else {
- return false;
- }
- };
- };
- var moveV$1 = function (editor, down) {
- return function () {
- var newRng = getVerticalRange(editor, down);
- if (newRng) {
- editor.selection.setRng(newRng);
- return true;
- } else {
- return false;
- }
- };
- };
-
- var defaultPatterns = function (patterns) {
- return map(patterns, function (pattern) {
- return merge({
- 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];
- }
- var args = Array.prototype.slice.call(arguments, 1);
- return function () {
- return f.apply(null, args);
- };
- };
- var execute = function (patterns, evt) {
- return find(match$1(patterns, evt), function (pattern) {
- return pattern.action();
- });
- };
- var $_4wmttl77jnlpaycu = {
- match: match$1,
- action: action,
- execute: execute
- };
-
- var executeKeydownOverride = function (editor, caret, evt) {
- var os = $_766rx4ojnlpawtd.detect().os;
- $_4wmttl77jnlpaycu.execute([
- {
- keyCode: $_1qv0695yjnlpaxyk.RIGHT,
- action: moveH$1(editor, true)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.LEFT,
- action: moveH$1(editor, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.UP,
- action: moveV$1(editor, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.DOWN,
- action: moveV$1(editor, true)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.RIGHT,
- action: moveH(editor, true)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.LEFT,
- action: moveH(editor, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.UP,
- action: moveV(editor, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.DOWN,
- action: moveV(editor, true)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.RIGHT,
- action: $_1971nm4djnlpaxmv.move(editor, caret, true)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.LEFT,
- action: $_1971nm4djnlpaxmv.move(editor, caret, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.RIGHT,
- ctrlKey: !os.isOSX(),
- altKey: os.isOSX(),
- action: $_1971nm4djnlpaxmv.moveNextWord(editor, caret)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.LEFT,
- ctrlKey: !os.isOSX(),
- altKey: os.isOSX(),
- action: $_1971nm4djnlpaxmv.movePrevWord(editor, caret)
- }
- ], evt).each(function (_) {
- evt.preventDefault();
- });
- };
- var setup$7 = function (editor, caret) {
- editor.on('keydown', function (evt) {
- if (evt.isDefaultPrevented() === false) {
- executeKeydownOverride(editor, caret, evt);
- }
- });
- };
- var $_61j8yg75jnlpayck = { setup: setup$7 };
-
- var getParentInlines = function (rootElm, startElm) {
- var parents = $_4b88sj42jnlpaxkd.parentsAndSelf(startElm, rootElm);
- return findIndex(parents, isBlock).fold(constant(parents), function (index) {
- return parents.slice(0, index);
- });
- };
- var hasOnlyOneChild$1 = function (elm) {
- return $_dr4ybh18jnlpawzt.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) {
- $_ezizyx47jnlpaxle.deleteElement(editor, forward, target);
- } else {
- var pos = replaceWithCaretFormat(target.dom(), formatNodes);
- editor.selection.setRng(pos.toRange());
- }
- };
- var deleteCaret$1 = function (editor, forward) {
- var rootElm = Element$$1.fromDom(editor.getBody());
- var startElm = Element$$1.fromDom(editor.selection.getStart());
- var parentInlines = filter(getParentInlines(rootElm, startElm), hasOnlyOneChild$1);
- return last(parentInlines).map(function (target) {
- var fromPos = CaretPosition$1.fromRangeStart(editor.selection.getRng());
- if ($_dfzzw73vjnlpaxik.willDeleteLastPositionInElement(forward, fromPos, target.dom())) {
- deleteLastPosition(forward, editor, target, parentInlines);
- return true;
- } else {
- return false;
- }
- }).getOr(false);
- };
- var backspaceDelete$5 = function (editor, forward) {
- return editor.selection.isCollapsed() ? deleteCaret$1(editor, forward) : false;
- };
- var $_7joyou79jnlpayd3 = { backspaceDelete: backspaceDelete$5 };
-
- var executeKeydownOverride$1 = function (editor, caret, evt) {
- $_4wmttl77jnlpaycu.execute([
- {
- keyCode: $_1qv0695yjnlpaxyk.BACKSPACE,
- action: $_4wmttl77jnlpaycu.action($_jcgv344jnlpaxks.backspaceDelete, editor, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.DELETE,
- action: $_4wmttl77jnlpaycu.action($_jcgv344jnlpaxks.backspaceDelete, editor, true)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.BACKSPACE,
- action: $_4wmttl77jnlpaycu.action($_5d7kmb48jnlpaxm1.backspaceDelete, editor, caret, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.DELETE,
- action: $_4wmttl77jnlpaycu.action($_5d7kmb48jnlpaxm1.backspaceDelete, editor, caret, true)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.BACKSPACE,
- action: $_4wmttl77jnlpaycu.action($_3apnm14fjnlpaxn8.backspaceDelete, editor, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.DELETE,
- action: $_4wmttl77jnlpaycu.action($_3apnm14fjnlpaxn8.backspaceDelete, editor, true)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.BACKSPACE,
- action: $_4wmttl77jnlpaycu.action($_f5evyu43jnlpaxki.backspaceDelete, editor, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.DELETE,
- action: $_4wmttl77jnlpaycu.action($_f5evyu43jnlpaxki.backspaceDelete, editor, true)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.BACKSPACE,
- action: $_4wmttl77jnlpaycu.action($_3n8adg3tjnlpaxi5.backspaceDelete, editor, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.DELETE,
- action: $_4wmttl77jnlpaycu.action($_3n8adg3tjnlpaxi5.backspaceDelete, editor, true)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.BACKSPACE,
- action: $_4wmttl77jnlpaycu.action($_7joyou79jnlpayd3.backspaceDelete, editor, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.DELETE,
- action: $_4wmttl77jnlpaycu.action($_7joyou79jnlpayd3.backspaceDelete, editor, true)
- }
- ], evt).each(function (_) {
- evt.preventDefault();
- });
- };
- var executeKeyupOverride = function (editor, evt) {
- $_4wmttl77jnlpaycu.execute([
- {
- keyCode: $_1qv0695yjnlpaxyk.BACKSPACE,
- action: $_4wmttl77jnlpaycu.action($_jcgv344jnlpaxks.paddEmptyElement, editor)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.DELETE,
- action: $_4wmttl77jnlpaycu.action($_jcgv344jnlpaxks.paddEmptyElement, editor)
- }
- ], evt);
- };
- var setup$8 = 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 $_7bt40278jnlpayd0 = { setup: setup$8 };
-
- 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 walker, node, rng, lastNode = root, tempElm;
- 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('\xA0'), root.firstChild);
- }
- }
- rng = dom.createRng();
- root.normalize();
- if (root.hasChildNodes()) {
- walker = new TreeWalker(root, root);
- while (node = walker.current()) {
- if ($_fy28ei1rjnlpax2o.isText(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 ($_fy28ei1rjnlpax2o.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);
- dom.remove(tempElm);
- editor.selection.scrollIntoView(root);
- };
- 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 Option.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(Element$$1.fromDom(elm));
- }).isSome();
- };
- var $_f5kh147ejnlpaye2 = {
- moveToCaretPosition: moveToCaretPosition,
- getEditableRoot: getEditableRoot,
- getParentBlock: getParentBlock$2,
- getParentBlockName: getParentBlockName,
- isListItemParentBlock: isListItemParentBlock
- };
-
- var hasFirstChild = function (elm, name) {
- return elm.firstChild && elm.firstChild.nodeName === name;
- };
- 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 ($_fy28ei1rjnlpax2o.isElement(node)) {
- break;
- }
- node = node[first ? 'nextSibling' : 'previousSibling'];
- }
- return node === parentBlock;
- };
- var insert$1 = 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')) {
- dom.insertAfter(newBlock, getContainerBlock(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);
- }
- } else if (isFirstOrLastLi(containerBlock, parentBlock, false)) {
- dom.insertAfter(newBlock, getContainerBlock(containerBlock));
- } 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);
- $_f5kh147ejnlpaye2.moveToCaretPosition(editor, newBlock);
- };
- var $_ejp82b7djnlpaydz = { insert: insert$1 };
-
- var isEmptyAnchor = function (elm) {
- return elm && elm.nodeName === 'A' && $_1q1txeljnlpawsa.trim($_90hfb72rjnlpaxae.trim(elm.innerText || elm.textContent)).length === 0;
- };
- 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 ($_fy28ei1rjnlpax2o.isElement(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(node)) {
- dom.remove(node);
+ rng.pasteHTML(content);
}
}
- }
- };
- var normalizeZwspOffset = function (start, container, offset) {
- if ($_fy28ei1rjnlpax2o.isText(container) === false) {
- return offset;
- } else if (start) {
- return offset === 1 && container.data.charAt(offset - 1) === $_90hfb72rjnlpaxae.ZWSP ? 0 : offset;
- } else {
- return offset === container.data.length - 1 && container.data.charAt(offset) === $_90hfb72rjnlpaxae.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 ($_fy28ei1rjnlpax2o.isText(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 setForcedBlockAttrs = function (editor, node) {
- var forcedRootBlockName = $_c6e09z3ajnlpaxek.getForcedRootBlock(editor);
- if (forcedRootBlockName && forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {
- editor.dom.setAttribs(node, $_c6e09z3ajnlpaxek.getForcedRootBlockAttrs(editor));
- }
- };
- 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) {
- var lastChild;
- block.normalize();
- lastChild = block.lastChild;
- if (!lastChild || /^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true))) {
- dom.add(block, 'br');
- }
- };
- var insert$2 = function (editor, evt) {
- var tmpRng, editableRoot, container, offset, parentBlock, shiftKey;
- var newBlock, fragment, containerBlock, parentBlockName, containerBlockName, 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);
- setForcedBlockAttrs(editor, block);
- } else {
- block = parentBlock.cloneNode(false);
- }
- caretNode = block;
- if ($_c6e09z3ajnlpaxek.shouldKeepStyles(editor) === false) {
- dom.setAttrib(block, 'style', null);
- dom.setAttrib(block, 'class', null);
- } else {
- do {
- if (textInlineElements[node.nodeName]) {
- if (isCaretNode(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);
- }
- emptyBlock(caretNode);
- return block;
- };
- var isCaretAtStartOrEndOfBlock = function (start) {
- var walker, node, name, normalizedOffset;
- normalizedOffset = normalizeZwspOffset(start, container, offset);
- if ($_fy28ei1rjnlpax2o.isText(container) && (start ? normalizedOffset > 0 : normalizedOffset < container.nodeValue.length)) {
- return false;
- }
- if (container.parentNode === parentBlock && isAfterLastNodeInContainer && !start) {
- return true;
- }
- if (start && $_fy28ei1rjnlpax2o.isElement(container) && container === parentBlock.firstChild) {
- return true;
- }
- if (containerAndSiblingName(container, 'TABLE') || containerAndSiblingName(container, 'HR')) {
- return isAfterLastNodeInContainer && !start || !isAfterLastNodeInContainer && start;
- }
- walker = new TreeWalker(container, parentBlock);
- if ($_fy28ei1rjnlpax2o.isText(container)) {
- if (start && normalizedOffset === 0) {
- walker.prev();
- } else if (!start && normalizedOffset === container.nodeValue.length) {
- walker.next();
- }
- }
- while (node = walker.current()) {
- if ($_fy28ei1rjnlpax2o.isElement(node)) {
- if (!node.getAttribute('data-mce-bogus')) {
- name = node.nodeName.toLowerCase();
- if (nonEmptyElementsMap[name] && name !== 'br') {
- return false;
- }
- }
- } else if ($_fy28ei1rjnlpax2o.isText(node) && !/^[ \t\r\n]*$/.test(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 ($_c6e09z3ajnlpaxek.shouldEndContainerOnEmptyBlock(editor) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock)) {
- newBlock = dom.split(containerBlock, parentBlock);
- } else {
- dom.insertAfter(newBlock, parentBlock);
- }
- $_f5kh147ejnlpaye2.moveToCaretPosition(editor, newBlock);
- };
- $_afh56j4mjnlpaxpx.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 = $_c6e09z3ajnlpaxek.getForcedRootBlock(editor);
- shiftKey = evt.shiftKey;
- if ($_fy28ei1rjnlpax2o.isElement(container) && container.hasChildNodes()) {
- isAfterLastNodeInContainer = offset > container.childNodes.length - 1;
- container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;
- if (isAfterLastNodeInContainer && $_fy28ei1rjnlpax2o.isText(container)) {
- offset = container.nodeValue.length;
- } else {
- offset = 0;
- }
- }
- 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() : '';
- containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';
- if (containerBlockName === 'LI' && !evt.ctrlKey) {
- parentBlock = containerBlock;
- containerBlock = containerBlock.parentNode;
- parentBlockName = containerBlockName;
- }
- if (/^(LI|DT|DD)$/.test(parentBlockName)) {
- if (dom.isEmpty(parentBlock)) {
- $_ejp82b7djnlpaydz.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);
- }
- $_f5kh147ejnlpaye2.moveToCaretPosition(editor, newBlock);
- } else if (isCaretAtStartOrEndOfBlock()) {
- insertNewBlockAfter();
- } else if (isCaretAtStartOrEndOfBlock(true)) {
- newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock);
- $_f5kh147ejnlpaye2.moveToCaretPosition(editor, containerAndSiblingName(parentBlock, 'HR') ? newBlock : parentBlock);
- } else {
- tmpRng = includeZwspInRange(rng).cloneRange();
- tmpRng.setEndAfter(parentBlock);
- fragment = tmpRng.extractContents();
- 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 {
- $_f5kh147ejnlpaye2.moveToCaretPosition(editor, newBlock);
- }
- }
- dom.setAttrib(newBlock, 'id', '');
- editor.fire('NewBlock', { newBlock: newBlock });
- };
- var $_dytumn7cjnlpaydl = { insert: insert$2 };
-
- var matchesSelector = function (editor, selector) {
- return $_f5kh147ejnlpaye2.getParentBlock(editor).filter(function (parentBlock) {
- return selector.length > 0 && $_d8v5lf1gjnlpax0y.is(Element$$1.fromDom(parentBlock), selector);
- }).isSome();
- };
- var shouldInsertBr = function (editor) {
- return matchesSelector(editor, $_c6e09z3ajnlpaxek.getBrNewLineSelector(editor));
- };
- var shouldBlockNewLine = function (editor) {
- return matchesSelector(editor, $_c6e09z3ajnlpaxek.getNoNewLineSelector(editor));
- };
- var $_8nqlsa7gjnlpayev = {
- shouldInsertBr: shouldInsertBr,
- shouldBlockNewLine: shouldBlockNewLine
- };
-
- var newLineAction = Adt.generate([
- { br: [] },
- { block: [] },
- { none: [] }
- ]);
- var shouldBlockNewLine$1 = function (editor, shiftKey) {
- return $_8nqlsa7gjnlpayev.shouldBlockNewLine(editor);
- };
- var isBrMode = function (requiredState) {
- return function (editor, shiftKey) {
- var brMode = $_c6e09z3ajnlpaxek.getForcedRootBlock(editor) === '';
- return brMode === requiredState;
- };
- };
- var inListBlock = function (requiredState) {
- return function (editor, shiftKey) {
- return $_f5kh147ejnlpaye2.isListItemParentBlock(editor) === requiredState;
- };
- };
- var inBlock = function (blockName, requiredState) {
- return function (editor, shiftKey) {
- var state = $_f5kh147ejnlpaye2.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 $_c6e09z3ajnlpaxek.shouldPutBrInPre(editor) === requiredState;
- };
- };
- var inBrContext = function (editor, shiftKey) {
- return $_8nqlsa7gjnlpayev.shouldInsertBr(editor);
- };
- var hasShiftKey = function (editor, shiftKey) {
- return shiftKey;
- };
- var canInsertIntoEditableRoot = function (editor) {
- var forcedRootBlock = $_c6e09z3ajnlpaxek.getForcedRootBlock(editor);
- var rootEditable = $_f5kh147ejnlpaye2.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 ? Option.some(action) : Option.none();
- };
- };
- var getAction$1 = function (editor, evt) {
- return $_3eehvl4cjnlpaxms.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.shiftKey
- ]).getOr(newLineAction.none());
- };
- var $_5478lv7fjnlpayeb = { getAction: getAction$1 };
-
- var insert$3 = function (editor, evt) {
- $_5478lv7fjnlpayeb.getAction(editor, evt).fold(function () {
- $_ejrlhl4ljnlpaxpg.insert(editor, evt);
- }, function () {
- $_dytumn7cjnlpaydl.insert(editor, evt);
- }, noop);
- };
- var $_en8mkp7bjnlpaydc = { insert: insert$3 };
-
- var endTypingLevel = function (undoManager) {
- if (undoManager.typing) {
- undoManager.typing = false;
- undoManager.add();
- }
- };
- var handleEnterKeyEvent = function (editor, event) {
- if (event.isDefaultPrevented()) {
- return;
- }
- event.preventDefault();
- endTypingLevel(editor.undoManager);
- editor.undoManager.transact(function () {
- if (editor.selection.isCollapsed() === false) {
- editor.execCommand('Delete');
- }
- $_en8mkp7bjnlpaydc.insert(editor, event);
- });
- };
- var setup$9 = function (editor) {
- editor.on('keydown', function (event) {
- if (event.keyCode === $_1qv0695yjnlpaxyk.ENTER) {
- handleEnterKeyEvent(editor, event);
- }
- });
- };
- var $_39dxqo7ajnlpaydb = { setup: setup$9 };
-
- var isValidInsertPoint = function (location, caretPosition) {
- return isAtStartOrEnd(location) && $_fy28ei1rjnlpax2o.isText(caretPosition.container());
- };
- var insertNbspAtPosition = function (editor, caretPosition) {
- var container = caretPosition.container();
- var offset = caretPosition.offset();
- container.insertData(offset, '\xA0');
- editor.selection.setCursorLocation(container, offset + 1);
- };
- var insertAtLocation = function (editor, caretPosition, location) {
- if (isValidInsertPoint(location, caretPosition)) {
- insertNbspAtPosition(editor, caretPosition);
- return true;
- } else {
- return false;
- }
- };
- var insertAtCaret$2 = function (editor) {
- var isInlineTarget = curry($_955v2u3wjnlpaxit.isInlineTarget, editor);
- var caretPosition = CaretPosition$1.fromRangeStart(editor.selection.getRng());
- var boundaryLocation = $_1wxx4j4bjnlpaxmj.readLocation(isInlineTarget, editor.getBody(), caretPosition);
- return boundaryLocation.map(curry(insertAtLocation, editor, caretPosition)).getOr(false);
- };
- var isAtStartOrEnd = function (location) {
- return location.fold(constant(false), constant(true), constant(true), constant(false));
- };
- var insertAtSelection = function (editor) {
- return editor.selection.isCollapsed() ? insertAtCaret$2(editor) : false;
- };
- var $_55jipx7ijnlpayf1 = { insertAtSelection: insertAtSelection };
-
- var executeKeydownOverride$2 = function (editor, evt) {
- $_4wmttl77jnlpaycu.execute([{
- keyCode: $_1qv0695yjnlpaxyk.SPACEBAR,
- action: $_4wmttl77jnlpaycu.action($_55jipx7ijnlpayf1.insertAtSelection, editor)
- }], evt).each(function (_) {
- evt.preventDefault();
- });
- };
- var setup$10 = function (editor) {
- editor.on('keydown', function (evt) {
- if (evt.isDefaultPrevented() === false) {
- executeKeydownOverride$2(editor, evt);
- }
- });
- };
- var $_4zpmte7hjnlpayez = { setup: setup$10 };
-
- var findBlockCaretContainer = function (editor) {
- return $_2kbu29jnlpax6t.descendant(Element$$1.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$11 = function (editor) {
- editor.on('keyup compositionstart', curry(handleBlockContainer, editor));
- };
- var $_fb76tn7jjnlpayf4 = { setup: setup$11 };
-
- var setup$12 = function (editor) {
- var caret = $_1971nm4djnlpaxmv.setupSelectedState(editor);
- $_fb76tn7jjnlpayf4.setup(editor);
- $_61j8yg75jnlpayck.setup(editor, caret);
- $_7bt40278jnlpayd0.setup(editor, caret);
- $_39dxqo7ajnlpaydb.setup(editor);
- $_4zpmte7hjnlpayez.setup(editor);
- };
- var $_cvby1r74jnlpayci = { setup: setup$12 };
-
- function Quirks (editor) {
- var each = $_1q1txeljnlpawsa.each;
- var BACKSPACE = $_1qv0695yjnlpaxyk.BACKSPACE, DELETE = $_1qv0695yjnlpaxyk.DELETE, dom = editor.dom, selection = editor.selection, settings = editor.settings, parser = editor.parser;
- var isGecko = $_cseqobajnlpawll.gecko, isIE = $_cseqobajnlpawll.ie, isWebKit = $_cseqobajnlpawll.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.settings.content_editable) {
- 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();
- $_2nbnh1ijnlpawpi.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();
- $_2nbnh1ijnlpawpi.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, container, offset, root, parent$$1;
- if (isDefaultPrevented(e) || e.keyCode !== $_1qv0695yjnlpaxyk.BACKSPACE) {
- return;
- }
- rng = selection.getRng();
- container = rng.startContainer;
- offset = rng.startOffset;
- root = dom.getRoot();
- parent$$1 = container;
- if (!rng.collapsed || offset !== 0) {
- return;
- }
- while (parent$$1 && parent$$1.parentNode && parent$$1.parentNode.firstChild === parent$$1 && parent$$1.parentNode !== root) {
- parent$$1 = parent$$1.parentNode;
- }
- if (parent$$1.tagName === 'BLOCKQUOTE') {
- editor.formatter.toggle('blockquote', null, parent$$1);
- 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 (!settings.object_resizing) {
- setEditorCommandState('enableObjectResizing', false);
- }
- };
- if (!settings.readonly) {
- 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 (settings.forced_root_block) {
- editor.on('init', function () {
- setEditorCommandState('DefaultParagraphSeparator', settings.forced_root_block);
- });
- }
- };
- var normalizeSelection = function () {
- editor.on('keyup focusin mouseup', function (e) {
- if (!$_1qv0695yjnlpaxyk.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 ($_cseqobajnlpawll.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 ($_cseqobajnlpawll.mac) {
- editor.on('keydown', function (e) {
- if ($_1qv0695yjnlpaxyk.metaKeyPressed(e) && !e.shiftKey && (e.keyCode === 37 || e.keyCode === 39)) {
- e.preventDefault();
- editor.selection.getSel().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 = $_445zg66wjnlpay63.fromPoint(e.x, e.y, editor.getDoc());
- selection.setRng(rng);
- insertClipboardContents(internalContent.html, true);
- }
- }
- });
- };
- var refreshContentEditable = function () {
- };
- var isHidden = function () {
- var sel;
- if (!isGecko || editor.removed) {
- return 0;
- }
- sel = editor.selection.getSel();
- return !sel || !sel.rangeCount || sel.rangeCount === 0;
- };
- removeBlockQuoteOnBackSpace();
- emptyEditorWhenDeleting();
- if (!$_cseqobajnlpawll.windowsPhone) {
- normalizeSelection();
- }
- if (isWebKit) {
- inputMethodFocus();
- selectControlElements();
- setDefaultBlockType();
- blockFormSubmitInsideEditor();
- disableBackspaceIntoATable();
- removeAppleInterchangeBrs();
- if ($_cseqobajnlpawll.iOS) {
- restoreFocusOnKeyDown();
- bodyHeight();
- tapLinksAndImages();
- } else {
- selectAll();
- }
- }
- if ($_cseqobajnlpawll.ie >= 11) {
- bodyHeight();
- disableBackspaceIntoATable();
- }
- if ($_cseqobajnlpawll.ie) {
- selectAll();
- disableAutoUrlDetect();
- ieInternalDragAndDrop();
- }
- if (isGecko) {
- removeHrOnBackspace();
- focusBody();
- removeStylesWhenDeletingAcrossBlockElements();
- setGeckoEditingOptions();
- addBrAfterLastLinks();
- showBrokenImageIcon();
- blockCmdArrowNavigation();
- disableBackspaceIntoATable();
- }
- return {
- refreshContentEditable: refreshContentEditable,
- isHidden: isHidden
- };
- }
-
- var isTextBlockNode = function (node) {
- return $_fy28ei1rjnlpax2o.isElement(node) && isTextBlock(Element$$1.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)) {
- $_32xcvk30jnlpaxbn.firstPositionIn(container).each(function (pos) {
- return rng.setStart(pos.container(), pos.offset());
- });
- }
- }
- if (CaretPosition.isElementPosition(endPos)) {
- var container = startPos.container();
- if (isTextBlockNode(container)) {
- $_32xcvk30jnlpaxbn.lastPositionIn(container).each(function (pos) {
- return rng.setEnd(pos.container(), pos.offset());
- });
- }
- }
- editor.selection.setRng($_4fmn0j3qjnlpaxhi.normalize(rng));
- };
- var setup$13 = function (editor) {
- editor.on('click', function (e) {
- if (e.detail >= 3) {
- normalizeSelection$1(editor);
- }
- });
- };
-
- 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$14 = function (editor) {
- preventSummaryToggle(editor);
- filterDetails(editor);
- };
-
- var DOM$2 = DOMUtils$1.DOM;
- var appendStyle = function (editor, text) {
- var head = Element$$1.fromDom(editor.getDoc().head);
- var tag = Element$$1.fromTag('style');
- $_521j8z15jnlpawz7.set(tag, 'type', 'text/css');
- $_ag89ax1yjnlpax4x.append(tag, Element$$1.fromText(text));
- $_ag89ax1yjnlpax4x.append(head, tag);
- };
- var createParser = function (editor) {
- var parser = DomParser(editor.settings, editor.schema);
- parser.addAttributeFilter('src,href,style,tabindex', function (nodes, name$$1) {
- var i = nodes.length, node;
- var dom = editor.dom;
- var value, internalName;
- while (i--) {
- node = nodes[i];
- value = node.attr(name$$1);
- internalName = 'data-mce-' + name$$1;
- if (!node.attributes.map[internalName]) {
- if (value.indexOf('data:') === 0 || value.indexOf('blob:') === 0) {
- continue;
- }
- if (name$$1 === 'style') {
- value = dom.serializeStyle(dom.parseStyle(value), node.name);
- if (!value.length) {
- value = null;
- }
- node.attr(internalName, value);
- node.attr(name$$1, value);
- } else if (name$$1 === 'tabindex') {
- node.attr(internalName, value);
- node.attr(name$$1, null);
- } else {
- node.attr(internalName, editor.convertURL(value, name$$1, node.name));
- }
- }
- }
- });
- parser.addNodeFilter('script', function (nodes) {
- var i = nodes.length, node, type;
- while (i--) {
- node = nodes[i];
- type = node.attr('type') || 'no/type';
- if (type.indexOf('mce-') !== 0) {
- node.attr('type', 'mce-' + type);
- }
- }
- });
- parser.addNodeFilter('#cdata', function (nodes) {
- var i = nodes.length, node;
- while (i--) {
- node = nodes[i];
- node.type = 8;
- node.name = '#comment';
- node.value = '[CDATA[' + node.value + ']]';
- }
- });
- parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function (nodes) {
- var i = nodes.length, node;
- var nonEmptyElements = editor.schema.getNonEmptyElements();
- while (i--) {
- node = nodes[i];
- if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) {
- node.append(new Node$2('br', 1)).shortEnded = true;
- }
- }
- });
- return parser;
- };
- var autoFocus = function (editor) {
- if (editor.settings.auto_focus) {
- $_2nbnh1ijnlpawpi.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 initEditor = function (editor) {
- editor.bindPendingEventDelegates();
- editor.initialized = true;
- editor.fire('init');
- editor.focus(true);
- editor.nodeChanged({ initial: true });
- editor.execCallback('init_instance_callback', editor);
- autoFocus(editor);
- };
- var getStyleSheetLoader = function (editor) {
- return editor.inline ? DOM$2.styleSheetLoader : editor.dom.styleSheetLoader;
- };
- var initContentBody = function (editor, skipWrite) {
- var settings = editor.settings;
- var targetElm = editor.getElement();
- var doc = editor.getDoc(), body, contentCssText;
- if (!settings.inline) {
- editor.getElement().style.visibility = editor.orgVisibility;
- }
- if (!skipWrite && !settings.content_editable) {
- doc.open();
- doc.write(editor.iframeHTML);
- doc.close();
- }
- if (settings.content_editable) {
- editor.on('remove', function () {
- var bodyEl = this.getBody();
- DOM$2.removeClass(bodyEl, 'mce-content-body');
- DOM$2.removeClass(bodyEl, 'mce-edit-focus');
- DOM$2.setAttrib(bodyEl, 'contentEditable', null);
- });
- DOM$2.addClass(targetElm, 'mce-content-body');
- editor.contentDocument = doc = settings.content_document || document;
- editor.contentWindow = settings.content_window || window;
- editor.bodyElement = targetElm;
- settings.content_document = settings.content_window = null;
- settings.root_name = targetElm.nodeName.toLowerCase();
- }
- body = editor.getBody();
- body.disabled = true;
- editor.readonly = settings.readonly;
- if (!editor.readonly) {
- if (editor.inline && DOM$2.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$1(doc, {
- keep_values: true,
- url_converter: editor.convertURL,
- url_converter_scope: editor,
- hex_colors: settings.force_hex_style_colors,
- class_filter: settings.class_filter,
- update_styles: true,
- root_element: editor.inline ? editor.getBody() : null,
- collect: settings.content_editable,
- schema: editor.schema,
- onSetAttrib: function (e) {
- editor.fire('SetAttrib', e);
- }
- });
- editor.parser = createParser(editor);
- editor.serializer = DomSerializer$1(settings, editor);
- editor.selection = Selection$1(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$14(editor);
- setup$13(editor);
- $_cvby1r74jnlpayci.setup(editor);
- $_cjqvqq5njnlpaxw3.setup(editor);
- editor.fire('PreInit');
- if (!settings.browser_spellcheck && !settings.gecko_spellcheck) {
- doc.body.spellcheck = false;
- DOM$2.setAttrib(body, 'spellcheck', 'false');
- }
- editor.quirks = Quirks(editor);
- editor.fire('PostRender');
- if (settings.directionality) {
- body.dir = settings.directionality;
- }
- if (settings.nowrap) {
- body.style.whiteSpace = 'nowrap';
- }
- if (settings.protect) {
- editor.on('BeforeSetContent', function (e) {
- $_1q1txeljnlpawsa.each(settings.protect, function (pattern) {
- e.content = e.content.replace(pattern, function (str) {
- return '';
- });
- });
- });
- }
- editor.on('SetContent', function () {
- editor.addVisual(editor.getBody());
- });
- 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) {
- contentCssText = '';
- $_1q1txeljnlpawsa.each(editor.contentStyles, function (style) {
- contentCssText += style + '\r\n';
- });
- editor.dom.addStyle(contentCssText);
- }
- getStyleSheetLoader(editor).loadAll(editor.contentCSS, function (_) {
- initEditor(editor);
- }, function (urls) {
- initEditor(editor);
- });
- if (settings.content_style) {
- appendStyle(editor, settings.content_style);
- }
- };
- var $_8cqui75bjnlpaxue = { initContentBody: initContentBody };
-
- var DOM$3 = DOMUtils$1.DOM;
- var relaxDomain = function (editor, ifr) {
- if (document.domain !== window.location.hostname && $_cseqobajnlpawll.ie && $_cseqobajnlpawll.ie < 12) {
- var bodyUuid = $_cb5mec5ljnlpaxvz.uuid('mce');
- editor[bodyUuid] = function () {
- $_8cqui75bjnlpaxue.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$3.setAttrib(ifr, 'src', domainRelaxUrl);
- return true;
- }
- return false;
- };
- var normalizeHeight = function (height) {
- var normalizedHeight = typeof height === 'number' ? height + 'px' : height;
- return normalizedHeight ? normalizedHeight : '';
- };
- var createIframeElement = function (id, title, height, customAttrs) {
- var iframe = Element$$1.fromTag('iframe');
- $_521j8z15jnlpawz7.setAll(iframe, customAttrs);
- $_521j8z15jnlpawz7.setAll(iframe, {
- id: id + '_ifr',
- frameBorder: '0',
- allowTransparency: 'true',
- title: title
- });
- $_asiuhf13jnlpawvc.setAll(iframe, {
- width: '100%',
- height: normalizeHeight(height),
- display: 'block'
- });
- return iframe;
- };
- var getIframeHtml = function (editor) {
- var bodyId, bodyClass, iframeHTML;
- iframeHTML = $_c6e09z3ajnlpaxek.getDocType(editor) + '';
- if ($_c6e09z3ajnlpaxek.getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {
- iframeHTML += '';
- }
- iframeHTML += '';
- bodyId = $_c6e09z3ajnlpaxek.getBodyId(editor);
- bodyClass = $_c6e09z3ajnlpaxek.getBodyClass(editor);
- if ($_c6e09z3ajnlpaxek.getContentSecurityPolicy(editor)) {
- iframeHTML += '';
- }
- iframeHTML += '
';
- return iframeHTML;
- };
- var createIframe = function (editor, o) {
- var title = editor.editorManager.translate('Rich Text Area. Press ALT-F9 for menu. ' + 'Press ALT-F10 for toolbar. Press ALT-0 for help');
- var ifr = createIframeElement(editor.id, title, o.height, $_c6e09z3ajnlpaxek.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$3.add(o.iframeContainer, ifr);
- return isDomainRelaxed;
- };
- var init$1 = function (editor, boxInfo) {
- var isDomainRelaxed = createIframe(editor, boxInfo);
- if (boxInfo.editorContainer) {
- DOM$3.get(boxInfo.editorContainer).style.display = editor.orgDisplay;
- editor.hidden = DOM$3.isHidden(boxInfo.editorContainer);
- }
- editor.getElement().style.display = 'none';
- DOM$3.setAttrib(editor.id, 'aria-hidden', 'true');
- if (!isDomainRelaxed) {
- $_8cqui75bjnlpaxue.initContentBody(editor);
- }
- };
- var $_aablho7njnlpayfx = { init: init$1 };
-
- var DOM$4 = DOMUtils$1.DOM;
- var initPlugin = function (editor, initializedPlugins, plugin) {
- var Plugin = PluginManager$1.get(plugin);
- var pluginUrl, pluginInstance;
- pluginUrl = PluginManager$1.urls[plugin] || editor.documentBaseUrl.replace(/\/$/, '');
- plugin = $_1q1txeljnlpawsa.trim(plugin);
- if (Plugin && $_1q1txeljnlpawsa.inArray(initializedPlugins, plugin) === -1) {
- $_1q1txeljnlpawsa.each(PluginManager$1.dependencies(plugin), function (dep) {
- initPlugin(editor, initializedPlugins, dep);
- });
- if (editor.plugins[plugin]) {
- return;
- }
- pluginInstance = new Plugin(editor, pluginUrl, editor.$);
- editor.plugins[plugin] = pluginInstance;
- if (pluginInstance.init) {
- pluginInstance.init(editor, pluginUrl);
- initializedPlugins.push(plugin);
- }
- }
- };
- var trimLegacyPrefix = function (name) {
- return name.replace(/^\-/, '');
- };
- var initPlugins = function (editor) {
- var initializedPlugins = [];
- $_1q1txeljnlpawsa.each(editor.settings.plugins.split(/[ ,]/), function (name) {
- initPlugin(editor, initializedPlugins, trimLegacyPrefix(name));
- });
- };
- var initTheme = function (editor) {
- var Theme;
- var theme = editor.settings.theme;
- if (isString(theme)) {
- editor.settings.theme = trimLegacyPrefix(theme);
- 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) {
- var w, h, minHeight, re, info;
- var settings = editor.settings;
- var elm = editor.getElement();
- w = settings.width || DOM$4.getStyle(elm, 'width') || '100%';
- h = settings.height || DOM$4.getStyle(elm, 'height') || elm.offsetHeight;
- minHeight = settings.min_height || 100;
- re = /^[0-9\.]+(|px)$/i;
- if (re.test('' + w)) {
- w = Math.max(parseInt(w, 10), 100);
- }
- if (re.test('' + h)) {
- h = Math.max(parseInt(h, 10), minHeight);
- }
- info = editor.theme.renderUI({
- targetNode: elm,
- width: w,
- height: h,
- deltaWidth: settings.delta_width,
- deltaHeight: settings.delta_height
- });
- if (!settings.content_editable) {
- h = (info.iframeHeight || h) + (typeof h === 'number' ? info.deltaHeight || 0 : '');
- if (h < minHeight) {
- h = minHeight;
- }
- }
- info.height = h;
- return info;
- };
- var renderFromThemeFunc = function (editor) {
- var info;
- var elm = editor.getElement();
- info = editor.settings.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
- };
- };
- var renderThemeFalseIframe = function (targetElement) {
- var iframeContainer = DOM$4.create('div');
- DOM$4.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 settings = editor.settings, elm = editor.getElement();
- editor.orgDisplay = elm.style.display;
- if (isString(settings.theme)) {
- return renderFromLoadedTheme(editor);
- } else if (isFunction(settings.theme)) {
- return renderFromThemeFunc(editor);
- } else {
- return renderThemeFalse(editor);
- }
- };
- var init$2 = function (editor) {
- var settings = editor.settings;
- var elm = editor.getElement();
- var boxInfo;
- editor.rtl = settings.rtl_ui || editor.editorManager.i18n.rtl;
- editor.editorManager.i18n.setCode(settings.language);
- settings.aria_label = settings.aria_label || DOM$4.getAttrib(elm, 'aria-label', editor.getLang('aria.rich_text_area'));
- editor.fire('ScriptsLoaded');
- initTheme(editor);
- initPlugins(editor);
- boxInfo = renderThemeUi(editor);
- editor.editorContainer = boxInfo.editorContainer ? boxInfo.editorContainer : null;
- if (settings.content_css) {
- $_1q1txeljnlpawsa.each($_1q1txeljnlpawsa.explode(settings.content_css), function (u) {
- editor.contentCSS.push(editor.documentBaseURI.toAbsolute(u));
- });
- }
- if (settings.content_editable) {
- return $_8cqui75bjnlpaxue.initContentBody(editor);
- } else {
- return $_aablho7njnlpayfx.init(editor, boxInfo);
- }
- };
- var $_99cvli58jnlpaxu5 = { init: init$2 };
-
- var DOM$5 = DOMUtils$1.DOM;
- var hasSkipLoadPrefix = function (name$$1) {
- return name$$1.charAt(0) === '-';
- };
- var loadLanguage = function (scriptLoader, editor) {
- var settings = editor.settings;
- if (settings.language && settings.language !== 'en' && !settings.language_url) {
- settings.language_url = editor.editorManager.baseURL + '/langs/' + settings.language + '.js';
- }
- if (settings.language_url && !editor.editorManager.i18n.data[settings.language]) {
- scriptLoader.add(settings.language_url);
- }
- };
- var loadTheme = function (scriptLoader, editor, suffix, callback) {
- var settings = editor.settings, theme = settings.theme;
- if (isString(theme)) {
- if (!hasSkipLoadPrefix(theme) && !ThemeManager.urls.hasOwnProperty(theme)) {
- var themeUrl = settings.theme_url;
- 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 loadPlugins = function (settings, suffix) {
- if ($_1q1txeljnlpawsa.isArray(settings.plugins)) {
- settings.plugins = settings.plugins.join(' ');
- }
- $_1q1txeljnlpawsa.each(settings.external_plugins, function (url, name$$1) {
- PluginManager$1.load(name$$1, url);
- settings.plugins += ' ' + name$$1;
- });
- $_1q1txeljnlpawsa.each(settings.plugins.split(/[ ,]/), function (plugin) {
- plugin = $_1q1txeljnlpawsa.trim(plugin);
- if (plugin && !PluginManager$1.urls[plugin]) {
- if (hasSkipLoadPrefix(plugin)) {
- plugin = plugin.substr(1, plugin.length);
- var dependencies = PluginManager$1.dependencies(plugin);
- $_1q1txeljnlpawsa.each(dependencies, function (dep) {
- var defaultSettings = {
- prefix: 'plugins/',
- resource: dep,
- suffix: '/plugin' + suffix + '.js'
- };
- dep = PluginManager$1.createUrl(defaultSettings, dep);
- PluginManager$1.load(dep.resource, dep);
- });
- } else {
- PluginManager$1.load(plugin, {
- prefix: 'plugins/',
- resource: plugin,
- suffix: '/plugin' + suffix + '.js'
- });
- }
- }
- });
- };
- var loadScripts = function (editor, suffix) {
- var scriptLoader = ScriptLoader.ScriptLoader;
- loadTheme(scriptLoader, editor, suffix, function () {
- loadLanguage(scriptLoader, editor);
- loadPlugins(editor.settings, suffix);
- scriptLoader.loadQueue(function () {
- if (!editor.removed) {
- $_99cvli58jnlpaxu5.init(editor);
- }
- }, editor, function (urls) {
- $_2xhw4u57jnlpaxu1.pluginLoadError(editor, urls[0]);
- if (!editor.removed) {
- $_99cvli58jnlpaxu5.init(editor);
- }
- });
- });
- };
- var render = function (editor) {
- var settings = editor.settings, id = editor.id;
- var readyHandler = function () {
- DOM$5.unbind(window, 'ready', readyHandler);
- editor.render();
- };
- if (!EventUtils.Event.domLoaded) {
- DOM$5.bind(window, 'ready', readyHandler);
- return;
- }
- if (!editor.getElement()) {
- return;
- }
- if (!$_cseqobajnlpawll.contentEditable) {
- return;
- }
- if (!settings.inline) {
- editor.orgVisibility = editor.getElement().style.visibility;
- editor.getElement().style.visibility = 'hidden';
- } else {
- editor.inline = true;
- }
- var form = editor.getElement().form || DOM$5.getParent(id, 'form');
- if (form) {
- editor.formElement = form;
- if (settings.hidden_input && !/TEXTAREA|INPUT/i.test(editor.getElement().nodeName)) {
- DOM$5.insertAfter(DOM$5.create('input', {
- type: 'hidden',
- name: id
- }), id);
- editor.hasHiddenInput = true;
- }
- editor.formEventDelegate = function (e) {
- editor.fire(e.type, e);
- };
- DOM$5.bind(form, 'submit reset', editor.formEventDelegate);
- editor.on('reset', function () {
- editor.setContent(editor.startContent, { format: 'raw' });
- });
- if (settings.submit_patch && !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 (settings.encoding === 'xml') {
- editor.on('GetContent', function (e) {
- if (e.save) {
- e.content = DOM$5.encode(e.content);
- }
- });
- }
- if (settings.add_form_submit_trigger) {
- editor.on('submit', function () {
- if (editor.initialized) {
- editor.save();
- }
- });
- }
- if (settings.add_unload_trigger) {
- 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 $_eajmw851jnlpaxt7 = { render: render };
-
- var add$4 = function (editor, name, settings) {
- var sidebars = editor.sidebars ? editor.sidebars : [];
- sidebars.push({
- name: name,
- settings: settings
- });
- editor.sidebars = sidebars;
- };
- var $_g47nm77ojnlpayg6 = { add: add$4 };
-
- var each$20 = $_1q1txeljnlpawsa.each;
- var trim$4 = $_1q1txeljnlpawsa.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 (url, settings) {
- var self$$1 = this;
- var baseUri, baseUrl;
- url = trim$4(url);
- settings = self$$1.settings = settings || {};
- baseUri = settings.base_uri;
- if (/^([\w\-]+):([^\/]{2})/i.test(url) || /^\s*#/.test(url)) {
- self$$1.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)) {
- baseUrl = settings.base_uri ? settings.base_uri.path : new URI(document.location.href).directory;
- if (settings.base_uri.protocol == '') {
- url = '//mce_host' + self$$1.toAbsPath(baseUrl, url);
- } else {
- url = /([^#?]*)([#?]?.*)/.exec(url);
- url = (baseUri && baseUri.protocol || 'http') + '://mce_host' + self$$1.toAbsPath(baseUrl, url[1]) + url[2];
- }
- }
- url = url.replace(/@@/g, '(mce_at)');
- url = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(url);
- each$20(queryParts, function (v, i) {
- var part = url[i];
- if (part) {
- part = part.replace(/\(mce_at\)/g, '@@');
- }
- self$$1[v] = part;
- });
- if (baseUri) {
- if (!self$$1.protocol) {
- self$$1.protocol = baseUri.protocol;
- }
- if (!self$$1.userInfo) {
- self$$1.userInfo = baseUri.userInfo;
- }
- if (!self$$1.port && self$$1.host === 'mce_host') {
- self$$1.port = baseUri.port;
- }
- if (!self$$1.host || self$$1.host === 'mce_host') {
- self$$1.host = baseUri.host;
- }
- self$$1.source = '';
- }
- if (isProtocolRelative) {
- self$$1.protocol = '';
- }
- };
- URI.prototype = {
- setPath: function (path) {
- var self$$1 = this;
- path = /^(.*?)\/?(\w+)?$/.exec(path);
- self$$1.path = path[0];
- self$$1.directory = path[1];
- self$$1.file = path[2];
- self$$1.source = '';
- self$$1.getURI();
- },
- toRelative: function (uri) {
- var self$$1 = this;
- var output;
- if (uri === './') {
- return uri;
- }
- uri = new URI(uri, { base_uri: self$$1 });
- if (uri.host !== 'mce_host' && self$$1.host !== uri.host && uri.host || self$$1.port !== uri.port || self$$1.protocol !== uri.protocol && uri.protocol !== '') {
- return uri.getURI();
- }
- var tu = self$$1.getURI(), uu = uri.getURI();
- if (tu === uu || tu.charAt(tu.length - 1) === '/' && tu.substr(0, tu.length - 1) === uu) {
- return tu;
- }
- output = self$$1.toRelPath(self$$1.path, uri.path);
- if (uri.query) {
- output += '?' + uri.query;
- }
- if (uri.anchor) {
- output += '#' + uri.anchor;
- }
- return output;
- },
- toAbsolute: function (uri, noHost) {
- uri = new URI(uri, { base_uri: this });
- return uri.getURI(noHost && this.isSameOrigin(uri));
- },
- 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;
- },
- toRelPath: function (base, path) {
- var items, breakPoint = 0, out = '', i, l;
- base = base.substring(0, base.lastIndexOf('/'));
- base = base.split('/');
- items = path.split('/');
- if (base.length >= items.length) {
- for (i = 0, l = base.length; i < l; i++) {
- if (i >= items.length || base[i] !== items[i]) {
- breakPoint = i + 1;
- break;
- }
- }
- }
- if (base.length < items.length) {
- for (i = 0, l = items.length; i < l; i++) {
- if (i >= base.length || base[i] !== items[i]) {
- breakPoint = i + 1;
- break;
- }
- }
- }
- if (breakPoint === 1) {
- return path;
- }
- for (i = 0, l = base.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;
- },
- toAbsPath: function (base, path) {
- var i, nb = 0, o = [], tr, outPath;
- tr = /\/$/.test(path) ? '/' : '';
- base = base.split('/');
- path = path.split('/');
- each$20(base, function (k) {
- if (k) {
- o.push(k);
- }
- });
- base = o;
- for (i = path.length - 1, o = []; i >= 0; i--) {
- if (path[i].length === 0 || path[i] === '.') {
- continue;
- }
- if (path[i] === '..') {
- nb++;
- continue;
- }
- if (nb > 0) {
- nb--;
- continue;
- }
- o.push(path[i]);
- }
- i = base.length - nb;
- if (i <= 0) {
- outPath = o.reverse().join('/');
- } else {
- outPath = base.slice(0, i).join('/') + '/' + o.reverse().join('/');
- }
- if (outPath.indexOf('/') !== 0) {
- outPath = '/' + outPath;
- }
- if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) {
- outPath += tr;
- }
- return outPath;
- },
- getURI: function (noProtoHost) {
- var s;
- var self$$1 = this;
- if (!self$$1.source || noProtoHost) {
- s = '';
- if (!noProtoHost) {
- if (self$$1.protocol) {
- s += self$$1.protocol + '://';
- } else {
- s += '//';
- }
- if (self$$1.userInfo) {
- s += self$$1.userInfo + '@';
- }
- if (self$$1.host) {
- s += self$$1.host;
- }
- if (self$$1.port) {
- s += ':' + self$$1.port;
- }
- }
- if (self$$1.path) {
- s += self$$1.path;
- }
- if (self$$1.query) {
- s += '?' + self$$1.query;
- }
- if (self$$1.anchor) {
- s += '#' + self$$1.anchor;
- }
- self$$1.source = s;
- }
- return self$$1.source;
- }
- };
- URI.parseDataUri = function (uri) {
- var type, matches;
- uri = decodeURIComponent(uri).split(',');
- matches = /data:([^;]+)/.exec(uri[0]);
- if (matches) {
- type = matches[1];
- }
- return {
- type: type,
- data: uri[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;
- };
-
- var defaultFormat = 'html';
- var trimEmptyContents = function (editor, html) {
- var blockName = $_c6e09z3ajnlpaxek.getForcedRootBlock(editor);
- var emptyRegExp = new RegExp('^(<' + blockName + '[^>]*>( | |\\s|\xA0|
|)<\\/' + blockName + '>[\r\n]*|
[\r\n]*)$');
- return html.replace(emptyRegExp, '');
- };
- var getContentFromBody = function (editor, args, body) {
- var content;
- args.format = args.format ? args.format : defaultFormat;
- args.get = true;
- args.getInner = true;
- if (!args.no_events) {
- editor.fire('BeforeGetContent', args);
- }
- if (args.format === 'raw') {
- content = $_1q1txeljnlpawsa.trim($_9cq8vj61jnlpaxzc.trimExternal(editor.serializer, body.innerHTML));
- } else if (args.format === 'text') {
- content = $_90hfb72rjnlpaxae.trim(body.innerText || body.textContent);
- } else if (args.format === 'tree') {
- return editor.serializer.serialize(body, args);
- } else {
- content = trimEmptyContents(editor, editor.serializer.serialize(body, args));
- }
- if (args.format !== 'text' && !isWsPreserveElement(Element$$1.fromDom(body))) {
- args.content = $_1q1txeljnlpawsa.trim(content);
- } else {
- args.content = content;
- }
- if (!args.no_events) {
- editor.fire('GetContent', args);
- }
- return args.content;
- };
- var getContent$1 = function (editor, args) {
- if (args === void 0) {
- args = {};
- }
- return Option.from(editor.getBody()).fold(constant(args.format === 'tree' ? new Node$2('body', 11) : ''), function (body) {
- return getContentFromBody(editor, args, body);
- });
- };
-
- 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$$1) {
- if (filter$$1.name === node.name) {
- if (nodeMatches[filter$$1.name]) {
- nodeMatches[filter$$1.name].nodes.push(node);
- } else {
- nodeMatches[filter$$1.name] = {
- filter: filter$$1,
- nodes: [node]
- };
- }
- }
- });
- each(attributeFilters, function (filter$$1) {
- if (typeof node.attr(filter$$1.name) === 'string') {
- if (attrMatches[filter$$1.name]) {
- attrMatches[filter$$1.name].nodes.push(node);
- } else {
- attrMatches[filter$$1.name] = {
- filter: filter$$1,
- nodes: [node]
- };
- }
- }
- });
- });
- }
- for (var name in nodeMatches) {
- if (nodeMatches.hasOwnProperty(name)) {
- matches.push(nodeMatches[name]);
- }
- }
- for (var name in attrMatches) {
- if (attrMatches.hasOwnProperty(name)) {
- matches.push(attrMatches[name]);
- }
- }
- 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$1 = 'html';
- var isTreeNode = function (content) {
- return content instanceof Node$2;
- };
- var moveSelection = function (editor) {
- if ($_8odu5n4yjnlpaxsg.hasFocus(editor)) {
- $_32xcvk30jnlpaxbn.firstPositionIn(editor.getBody()).each(function (pos) {
- var node = pos.getNode();
- var caretPos = $_fy28ei1rjnlpax2o.isTable(node) ? $_32xcvk30jnlpaxbn.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 = $_c6e09z3ajnlpaxek.getForcedRootBlock(editor);
- if (forcedRootBlockName && editor.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) {
- content = padd;
- content = editor.dom.createHTML(forcedRootBlockName, editor.settings.forced_root_block_attrs, 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(Element$$1.fromDom(body)) ? content : $_1q1txeljnlpawsa.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(Element$$1.fromDom(body)) ? html : $_1q1txeljnlpawsa.trim(html);
- setEditorHtml(editor, args.content);
- if (!args.no_events) {
- editor.fire('SetContent', args);
- }
- return content;
- };
- var setContent$1 = function (editor, content, args) {
- if (args === void 0) {
- args = {};
- }
- args.format = args.format ? args.format : defaultFormat$1;
- args.set = true;
- args.content = isTreeNode(content) ? '' : content;
- if (!isTreeNode(content) && !args.no_events) {
- editor.fire('BeforeSetContent', args);
- content = args.content;
- }
- return Option.from(editor.getBody()).fold(constant(content), function (body) {
- return isTreeNode(content) ? setContentTree(editor, body, content, args) : setContentString(editor, body, content, args);
- });
- };
+ };
+ var SetSelectionContent = { setContent: setContent };
- var DOM$6 = DOMUtils$1.DOM;
- var restoreOriginalStyles = function (editor) {
- DOM$6.setStyle(editor.id, 'display', editor.orgDisplay);
- };
- var safeDestroy = function (x) {
- return Option.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;
+ var getEndpointElement = function (root, rng, start, real, resolve) {
+ var container = start ? rng.startContainer : rng.endContainer;
+ var offset = start ? rng.startOffset : rng.endOffset;
+ return Option.from(container).map(Element$$1.fromDom).map(function (elm) {
+ return !real || !rng.collapsed ? child(elm, resolve(elm, offset)).getOr(elm) : elm;
+ }).bind(function (elm) {
+ return isElement(elm) ? Option.some(elm) : parent(elm);
+ }).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 && NodeType.isText(node) && node.length === 0) {
+ node = forwards ? node.nextSibling : node.previousSibling;
}
- DOM$6.unbind(form, 'submit reset', editor.formEventDelegate);
- }
- };
- var remove$9 = 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 });
+ return node || orig;
+ };
+ var getNode$1 = function (root, rng) {
+ var elm, startContainer, endContainer, startOffset, endOffset;
+ if (!rng) {
+ return root;
}
- editor.removed = true;
- editor.unbindAllNativeEvents();
- if (editor.hasHiddenInput && element) {
- DOM$6.remove(element.nextSibling);
+ startContainer = rng.startContainer;
+ endContainer = rng.endContainer;
+ startOffset = rng.startOffset;
+ 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 (!editor.inline && body) {
- restoreOriginalStyles(editor);
+ if (elm && elm.nodeType === 3) {
+ return elm.parentNode;
}
- $_5atig84wjnlpaxs7.fireRemove(editor);
- editor.editorManager.remove(editor);
- DOM$6.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();
+ return elm;
+ };
+ var getSelectedBlocks = function (dom, rng, startElm, endElm) {
+ var node, root;
+ var selectedBlocks = [];
+ 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);
}
- safeDestroy(selection);
- safeDestroy(dom);
- }
- restoreForm(editor);
- clearDomReferences(editor);
- editor.destroyed = true;
- };
+ if (startElm && endElm && startElm !== endElm) {
+ node = startElm;
+ var walker = new TreeWalker(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 Option.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 DOM$7 = DOMUtils$1.DOM;
- var extend$4 = $_1q1txeljnlpawsa.extend;
- var each$21 = $_1q1txeljnlpawsa.each;
- var resolve$4 = $_1q1txeljnlpawsa.resolve;
- var ie$2 = $_cseqobajnlpawll.ie;
- var Editor = function (id, settings, editorManager) {
- var self = this;
- var documentBaseUrl = self.documentBaseUrl = editorManager.documentBaseURL;
- var baseUri = editorManager.baseURI;
- settings = getEditorSettings(self, id, documentBaseUrl, editorManager.defaultSettings, settings);
- self.settings = settings;
- AddOnManager.language = settings.language || 'en';
- AddOnManager.languageLoad = settings.language_load;
- AddOnManager.baseURL = editorManager.baseURL;
- self.id = id;
- self.setDirty(false);
- self.plugins = {};
- self.documentBaseURI = new URI(settings.document_base_url, { base_uri: baseUri });
- self.baseURI = baseUri;
- self.contentCSS = [];
- self.contentStyles = [];
- self.shortcuts = new Shortcuts(self);
- self.loadedCSS = {};
- self.editorCommands = new EditorCommands(self);
- self.suffix = editorManager.suffix;
- self.editorManager = editorManager;
- self.inline = settings.inline;
- self.buttons = {};
- self.menuItems = {};
- if (settings.cache_suffix) {
- $_cseqobajnlpawll.cacheSuffix = settings.cache_suffix.replace(/^[\?\&]+/, '');
- }
- if (settings.override_viewport === false) {
- $_cseqobajnlpawll.overrideViewPort = false;
- }
- editorManager.fire('SetupEditor', { editor: self });
- self.execCallback('setup', self);
- self.$ = DomQuery.overrideDefaults(function () {
- return {
- context: self.inline ? self.getBody() : self.getDoc(),
- element: self.getBody()
+ var each$j = Tools.each;
+ var isNativeIeSelection = function (rng) {
+ return !!rng.select;
+ };
+ var isAttachedToDom = function (node) {
+ return !!(node && node.ownerDocument) && contains$3(Element$$1.fromDom(node.ownerDocument), Element$$1.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 Selection = function (dom, win, serializer, editor) {
+ var bookmarkManager, controlSelection;
+ var selectedRange, explicitRange, selectorChangedData;
+ var setCursorLocation = function (node, offset) {
+ var rng = dom.createRng();
+ if (!node) {
+ moveEndPoint$1(dom, rng, editor.getBody(), true);
+ setRng(rng);
+ } else {
+ rng.setStart(node, offset);
+ rng.setEnd(node, offset);
+ setRng(rng);
+ collapse(false);
+ }
};
- });
- };
- Editor.prototype = {
- render: function () {
- $_eajmw851jnlpaxt7.render(this);
- },
- focus: function (skipFocus) {
- $_8odu5n4yjnlpaxsg.focus(this, skipFocus);
- },
- hasFocus: function () {
- return $_8odu5n4yjnlpaxsg.hasFocus(this);
- },
- execCallback: function (name) {
+ var getContent = function (args) {
+ return GetSelectionContent.getContent(editor, args);
+ };
+ var setContent = function (content, args) {
+ return SetSelectionContent.setContent(editor, content, args);
+ };
+ var getStart = function (real) {
+ return getStart$2(editor.getBody(), getRng(), real);
+ };
+ var getEnd$$1 = function (real) {
+ return getEnd(editor.getBody(), getRng(), 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(), 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();
+ rng.collapse(!!toStart);
+ setRng(rng);
+ };
+ var getSel = function () {
+ return win.getSelection ? win.getSelection() : win.document.selection;
+ };
+ var getRng = function () {
+ var selection, rng, elm, doc;
+ var tryCompareBoundaryPoints = function (how, sourceRange, destinationRange) {
+ try {
+ return sourceRange.compareBoundaryPoints(how, destinationRange);
+ } catch (ex) {
+ return -1;
+ }
+ };
+ if (!win) {
+ return null;
+ }
+ doc = win.document;
+ if (typeof doc === 'undefined' || doc === null) {
+ return null;
+ }
+ if (editor.bookmark !== undefined && EditorFocus.hasFocus(editor) === false) {
+ var bookmark = SelectionBookmark.getRng(editor);
+ if (bookmark.isSome()) {
+ return bookmark.map(function (r) {
+ return EventProcessRanges.processRanges(editor, [r])[0];
+ }).getOr(doc.createRange());
+ }
+ }
+ try {
+ if (selection = getSel()) {
+ if (selection.rangeCount > 0) {
+ rng = selection.getRangeAt(0);
+ } else {
+ rng = selection.createRange ? selection.createRange() : doc.createRange();
+ }
+ }
+ } catch (ex) {
+ }
+ rng = EventProcessRanges.processRanges(editor, [rng])[0];
+ 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 sel, node, evt;
+ if (!isValidRange(rng)) {
+ return;
+ }
+ var ieRange = isNativeIeSelection(rng) ? rng : null;
+ if (ieRange) {
+ explicitRange = null;
+ try {
+ ieRange.select();
+ } catch (ex) {
+ }
+ return;
+ }
+ sel = getSel();
+ 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());
+ };
+ var getSelectedBlocks$$1 = function (startElm, endElm) {
+ return getSelectedBlocks(dom, getRng(), startElm, endElm);
+ };
+ var isForward = function () {
+ var sel = getSel();
+ var anchorRange, focusRange;
+ if (!sel || !sel.anchorNode || !sel.focusNode) {
+ return true;
+ }
+ anchorRange = dom.createRng();
+ anchorRange.setStart(sel.anchorNode, sel.anchorOffset);
+ anchorRange.collapse(true);
+ focusRange = dom.createRng();
+ focusRange.setStart(sel.focusNode, sel.focusOffset);
+ focusRange.collapse(true);
+ return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;
+ };
+ var normalize = function () {
+ var rng = getRng();
+ var sel = getSel();
+ if (!MultiRange.hasMultipleRanges(sel) && hasAnyRanges(editor)) {
+ var normRng = NormalizeRange.normalize(dom, rng);
+ normRng.each(function (normRng) {
+ setRng(normRng, isForward());
+ });
+ return normRng.getOr(rng);
+ }
+ return rng;
+ };
+ var selectorChanged = function (selector, callback) {
+ var currentSelectors;
+ if (!selectorChangedData) {
+ selectorChangedData = {};
+ currentSelectors = {};
+ editor.on('NodeChange', function (e) {
+ var node = e.element, parents = dom.getParents(node, null, dom.getRoot()), matchedSelectors = {};
+ each$j(selectorChangedData, function (callbacks, selector) {
+ each$j(parents, function (node) {
+ if (dom.is(node, selector)) {
+ if (!currentSelectors[selector]) {
+ each$j(callbacks, function (callback) {
+ callback(true, {
+ node: node,
+ selector: selector,
+ parents: parents
+ });
+ });
+ currentSelectors[selector] = callbacks;
+ }
+ matchedSelectors[selector] = callbacks;
+ return false;
+ }
+ });
+ });
+ each$j(currentSelectors, function (callbacks, selector) {
+ if (!matchedSelectors[selector]) {
+ delete currentSelectors[selector];
+ each$j(callbacks, function (callback) {
+ callback(false, {
+ node: node,
+ selector: selector,
+ parents: parents
+ });
+ });
+ }
+ });
+ });
+ }
+ if (!selectorChangedData[selector]) {
+ selectorChangedData[selector] = [];
+ }
+ selectorChangedData[selector].push(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 ScrollIntoView.scrollElementIntoView(editor, elm, alignToTop);
+ };
+ var placeCaretAt = function (clientX, clientY) {
+ return setRng(CaretRangeFromPoint.fromPoint(clientX, clientY, editor.getDoc()));
+ };
+ var getBoundingClientRect = function () {
+ var rng = getRng();
+ return rng.collapsed ? CaretPosition$1.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,
+ getStart: getStart,
+ getEnd: getEnd$$1,
+ getSelectedBlocks: getSelectedBlocks$$1,
+ normalize: normalize,
+ selectorChanged: selectorChanged,
+ getScrollContainer: getScrollContainer,
+ scrollIntoView: scrollIntoView,
+ placeCaretAt: placeCaretAt,
+ getBoundingClientRect: getBoundingClientRect,
+ destroy: destroy
+ };
+ bookmarkManager = BookmarkManager$1(exports);
+ controlSelection = ControlSelection(exports, editor);
+ exports.bookmarkManager = bookmarkManager;
+ exports.controlSelection = controlSelection;
+ return exports;
+ };
+
+ var isContentEditableFalse$b = NodeType.isContentEditableFalse;
+ var getSelectedNode$1 = getSelectedNode;
+ var isAfterContentEditableFalse$2 = isAfterContentEditableFalse;
+ var isBeforeContentEditableFalse$2 = isBeforeContentEditableFalse;
+ 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 && NodeType.isBr(from.getNode())) {
+ return true;
+ }
+ return inSameBlock;
+ };
+ var moveToCeFalseHorizontally = function (direction, editor, getNextPosFn, range$$1) {
+ var node, caretPosition, peekCaretPosition, rangeIsInContainerBlock;
+ var forwards = direction === HDirection.Forwards;
+ var isBeforeContentEditableFalseFn = forwards ? isBeforeContentEditableFalse$2 : isAfterContentEditableFalse$2;
+ if (!range$$1.collapsed) {
+ node = getSelectedNode$1(range$$1);
+ if (isContentEditableFalse$b(node)) {
+ return showCaret(direction, editor, node, direction === HDirection.Backwards, true);
+ }
+ }
+ rangeIsInContainerBlock = isRangeInCaretContainerBlock(range$$1);
+ caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range$$1);
+ if (isBeforeContentEditableFalseFn(caretPosition)) {
+ return selectNode(editor, caretPosition.getNode(!forwards));
+ }
+ caretPosition = getNextPosFn(caretPosition);
+ if (!caretPosition) {
+ if (rangeIsInContainerBlock) {
+ return range$$1;
+ }
+ return null;
+ }
+ if (isBeforeContentEditableFalseFn(caretPosition)) {
+ return showCaret(direction, editor, caretPosition.getNode(!forwards), forwards, true);
+ }
+ peekCaretPosition = getNextPosFn(caretPosition);
+ if (isBeforeContentEditableFalseFn(peekCaretPosition)) {
+ if (isMoveInsideSameBlock(caretPosition, peekCaretPosition)) {
+ return showCaret(direction, editor, peekCaretPosition.getNode(!forwards), forwards, true);
+ }
+ }
+ if (rangeIsInContainerBlock) {
+ return renderRangeCaret(editor, caretPosition.toRange(), true);
+ }
+ return null;
+ };
+ var moveToCeFalseVertically = function (direction, editor, walkerFn, range$$1) {
+ var caretPosition, linePositions, nextLinePositions;
+ var closestNextLineRect, caretClientRect, clientX;
+ var dist1, dist2, contentEditableFalseNode;
+ contentEditableFalseNode = getSelectedNode$1(range$$1);
+ caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range$$1);
+ linePositions = walkerFn(editor.getBody(), isAboveLine(1), caretPosition);
+ nextLinePositions = filter(linePositions, isLine(1));
+ caretClientRect = ArrUtils.last(caretPosition.getClientRects());
+ if (isBeforeContentEditableFalse$2(caretPosition) || isBeforeTable(caretPosition)) {
+ contentEditableFalseNode = caretPosition.getNode();
+ }
+ if (isAfterContentEditableFalse$2(caretPosition) || isAfterTable(caretPosition)) {
+ contentEditableFalseNode = caretPosition.getNode(true);
+ }
+ if (!caretClientRect) {
+ return null;
+ }
+ clientX = caretClientRect.left;
+ closestNextLineRect = findClosestClientRect(nextLinePositions, clientX);
+ if (closestNextLineRect) {
+ if (isContentEditableFalse$b(closestNextLineRect.node)) {
+ dist1 = Math.abs(clientX - closestNextLineRect.left);
+ dist2 = Math.abs(clientX - closestNextLineRect.right);
+ return showCaret(direction, editor, closestNextLineRect.node, dist1 < dist2, true);
+ }
+ }
+ if (contentEditableFalseNode) {
+ var caretPositions = positionsUntil(direction, editor.getBody(), isAboveLine(1), contentEditableFalseNode);
+ closestNextLineRect = findClosestClientRect(filter(caretPositions, isLine(1)), clientX);
+ if (closestNextLineRect) {
+ return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true);
+ }
+ closestNextLineRect = ArrUtils.last(filter(caretPositions, isLine(0)));
+ if (closestNextLineRect) {
+ return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true);
+ }
+ }
+ };
+ var createTextBlock = function (editor) {
+ var textBlock = editor.dom.create(editor.settings.forced_root_block);
+ if (!Env.ie || Env.ie >= 11) {
+ textBlock.innerHTML = '
';
+ }
+ return textBlock;
+ };
+ var exitPreBlock = function (editor, direction, range$$1) {
+ var pre, caretPos, newBlock;
+ var caretWalker = CaretWalker(editor.getBody());
+ var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);
+ var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);
+ if (range$$1.collapsed && editor.settings.forced_root_block) {
+ pre = editor.dom.getParent(range$$1.startContainer, 'PRE');
+ if (!pre) {
+ return;
+ }
+ if (direction === 1) {
+ caretPos = getNextVisualCaretPosition(CaretPosition$1.fromRangeStart(range$$1));
+ } else {
+ caretPos = getPrevVisualCaretPosition(CaretPosition$1.fromRangeStart(range$$1));
+ }
+ if (!caretPos) {
+ 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 caretWalker = CaretWalker(editor.getBody());
+ var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);
+ var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);
+ var newRange;
+ var direction = forward ? HDirection.Forwards : HDirection.Backwards;
+ var getNextPosFn = forward ? getNextVisualCaretPosition : getPrevVisualCaretPosition;
+ var range$$1 = editor.selection.getRng();
+ newRange = moveToCeFalseHorizontally(direction, editor, getNextPosFn, range$$1);
+ if (newRange) {
+ return newRange;
+ }
+ newRange = exitPreBlock(editor, direction, range$$1);
+ if (newRange) {
+ return newRange;
+ }
+ return null;
+ };
+ var getVerticalRange = function (editor, down) {
+ var newRange;
+ var direction = down ? 1 : -1;
+ var walkerFn = down ? downUntil : upUntil;
+ var range$$1 = editor.selection.getRng();
+ newRange = moveToCeFalseVertically(direction, editor, walkerFn, range$$1);
+ if (newRange) {
+ return newRange;
+ }
+ newRange = exitPreBlock(editor, direction, range$$1);
+ if (newRange) {
+ return newRange;
+ }
+ return null;
+ };
+ var moveH = function (editor, forward) {
+ return function () {
+ var newRng = getHorizontalRange(editor, forward);
+ if (newRng) {
+ editor.selection.setRng(newRng);
+ return true;
+ } else {
+ return false;
+ }
+ };
+ };
+ var moveV = function (editor, down) {
+ return function () {
+ var newRng = getVerticalRange(editor, down);
+ if (newRng) {
+ editor.selection.setRng(newRng);
+ return true;
+ } 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 ? positions.reverse() : 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 (NodeType.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 (NodeType.isBr(nextPos.getNode(false))) {
+ if (direction === HDirection.Forwards) {
+ return {
+ positions: flip(direction, positions).concat([nextPos]),
+ breakType: BreakType.Br,
+ breakAt: Option.some(nextPos)
+ };
+ } else {
+ return {
+ positions: flip(direction, positions),
+ breakType: BreakType.Br,
+ breakAt: Option.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: Option.some(nextPos)
+ };
+ }
+ positions.push(nextPos);
+ currentPos = nextPos;
+ }
+ return {
+ positions: flip(direction, positions),
+ breakType: BreakType.Eol,
+ breakAt: Option.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 Option.some(newPos);
+ }, function (lastPos) {
+ return liftN([
+ 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);
+ });
+ }, Option.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 CaretFinder.firstPositionIn(scope).map(function (pos) {
+ return [pos].concat(getPositionsUntilNextLine(scope, pos).positions);
+ }).getOr([]);
+ };
+ var getLastLinePositions = function (scope) {
+ return CaretFinder.lastPositionIn(scope).map(function (pos) {
+ return getPositionsUntilPreviousLine(scope, pos).positions.concat(pos);
+ }).getOr([]);
+ };
+
+ 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 Option.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 Option.some(newDist < oldDist ? newCorner : oldCorner);
+ });
+ }, Option.none());
+ };
+ var getClosestCell$1 = function (getYAxisValue, isTargetCorner, table, x, y) {
+ var cells = descendants$1(Element$$1.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 moveToRange = function (editor, rng) {
+ editor.selection.setRng(rng);
+ ScrollIntoView.scrollRangeIntoView(editor, rng);
+ };
+ var hasNextBreak = function (getPositionsUntil, scope, lineInfo) {
+ return lineInfo.breakAt.map(function (breakPos) {
+ return getPositionsUntil(scope, breakPos).breakAt.isSome();
+ }).getOr(false);
+ };
+ 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) || !NodeType.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$1.fromRangeStart(rng);
+ return CaretFinder.positionIn(!forward, table).map(function (pos) {
+ return pos.isEqual(caretPos);
+ }).getOr(false);
+ };
+ var navigateHorizontally = function (editor, forward, table, td) {
+ var rng = editor.selection.getRng();
+ var direction = forward ? 1 : -1;
+ if (isFakeCaretTableBrowser() && isCaretAtStartOrEndOfTable(forward, rng, table)) {
+ var newRng = showCaret(direction, editor, table, !forward, true);
+ 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$1.before(table)), rect.left);
+ });
+ }).getOr(CaretPosition$1.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$1.after(table)), rect.left);
+ });
+ }).getOr(CaretPosition$1.after(table));
+ };
+ var getTable = function (previous, pos) {
+ var node = pos.getNode(previous);
+ return NodeType.isElement(node) && node.nodeName === 'TABLE' ? Option.some(node) : Option.none();
+ };
+ var renderBlock = function (down, editor, table, pos) {
+ var forcedRootBlock = Settings.getForcedRootBlock(editor);
+ if (forcedRootBlock) {
+ editor.undoManager.transact(function () {
+ var element = Element$$1.fromTag(forcedRootBlock);
+ setAll(element, Settings.getForcedRootBlockAttrs(editor));
+ append(element, Element$$1.fromTag('br'));
+ if (down) {
+ after(Element$$1.fromDom(table), element);
+ } else {
+ before(Element$$1.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$$1 = down === false;
+ table.fold(function () {
+ return moveToRange(editor, pos.toRange());
+ }, function (table) {
+ return CaretFinder.positionIn(last$$1, 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$1.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 moveH$1 = function (editor, forward) {
+ return function () {
+ return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {
+ return Option.from(editor.dom.getParent(td, 'table')).map(function (table) {
+ return navigateHorizontally(editor, forward, table, td);
+ });
+ }).getOr(false);
+ };
+ };
+ var moveV$1 = function (editor, forward) {
+ return function () {
+ return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {
+ return Option.from(editor.dom.getParent(td, 'table')).map(function (table) {
+ return navigateVertically(editor, forward, table, td);
+ });
+ }).getOr(false);
+ };
+ };
+
+ 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 = Element$$1.fromTag('br');
+ insertElement(root, br, forward);
+ return rangeBefore(br);
+ };
+ var insertBlock$1 = function (root, forward, blockName, attrs) {
+ var block = Element$$1.fromTag(blockName);
+ var br = Element$$1.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, root);
+ return closest(Element$$1.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 = Element$$1.fromDom(editor.getBody());
+ var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());
+ var rootBlock = Settings.getForcedRootBlock(editor);
+ var rootBlockAttrs = Settings.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$2 = function (editor, forward) {
+ return function () {
+ if (editor.selection.isCollapsed()) {
+ return moveCaretToNewEmptyLine(editor, forward);
+ } else {
+ return false;
+ }
+ };
+ };
+
+ var defaultPatterns = function (patterns) {
+ return map(patterns, function (pattern) {
+ return merge({
+ 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];
}
- var self = this;
- var callback = self.settings[name], scope;
- if (!callback) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return function () {
+ return f.apply(null, args);
+ };
+ };
+ var execute = function (patterns, evt) {
+ return find(match$1(patterns, evt), function (pattern) {
+ return pattern.action();
+ });
+ };
+ var MatchKeys = {
+ match: match$1,
+ action: action,
+ execute: execute
+ };
+
+ var executeKeydownOverride = function (editor, caret, evt) {
+ var os = PlatformDetection$1.detect().os;
+ MatchKeys.execute([
+ {
+ keyCode: VK.RIGHT,
+ action: moveH(editor, true)
+ },
+ {
+ keyCode: VK.LEFT,
+ action: moveH(editor, false)
+ },
+ {
+ keyCode: VK.UP,
+ action: moveV(editor, false)
+ },
+ {
+ keyCode: VK.DOWN,
+ action: moveV(editor, true)
+ },
+ {
+ keyCode: VK.RIGHT,
+ action: moveH$1(editor, true)
+ },
+ {
+ keyCode: VK.LEFT,
+ action: moveH$1(editor, false)
+ },
+ {
+ keyCode: VK.UP,
+ action: moveV$1(editor, false)
+ },
+ {
+ keyCode: VK.DOWN,
+ action: moveV$1(editor, true)
+ },
+ {
+ keyCode: VK.RIGHT,
+ action: BoundarySelection.move(editor, caret, true)
+ },
+ {
+ keyCode: VK.LEFT,
+ action: BoundarySelection.move(editor, caret, false)
+ },
+ {
+ keyCode: VK.RIGHT,
+ ctrlKey: !os.isOSX(),
+ altKey: os.isOSX(),
+ action: BoundarySelection.moveNextWord(editor, caret)
+ },
+ {
+ keyCode: VK.LEFT,
+ ctrlKey: !os.isOSX(),
+ altKey: os.isOSX(),
+ action: BoundarySelection.movePrevWord(editor, caret)
+ },
+ {
+ keyCode: VK.UP,
+ action: moveV$2(editor, false)
+ },
+ {
+ keyCode: VK.DOWN,
+ action: moveV$2(editor, true)
+ }
+ ], evt).each(function (_) {
+ evt.preventDefault();
+ });
+ };
+ var setup$7 = function (editor, caret) {
+ editor.on('keydown', function (evt) {
+ if (evt.isDefaultPrevented() === false) {
+ executeKeydownOverride(editor, caret, evt);
+ }
+ });
+ };
+ var ArrowKeys = { setup: setup$7 };
+
+ var getParentInlines = function (rootElm, startElm) {
+ var parents$$1 = Parents.parentsAndSelf(startElm, rootElm);
+ return findIndex(parents$$1, isBlock).fold(constant(parents$$1), function (index) {
+ return parents$$1.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.deleteElement(editor, forward, target);
+ } else {
+ var pos = replaceWithCaretFormat(target.dom(), formatNodes);
+ editor.selection.setRng(pos.toRange());
+ }
+ };
+ var deleteCaret$1 = function (editor, forward) {
+ var rootElm = Element$$1.fromDom(editor.getBody());
+ var startElm = Element$$1.fromDom(editor.selection.getStart());
+ var parentInlines = filter(getParentInlines(rootElm, startElm), hasOnlyOneChild$1);
+ return last(parentInlines).map(function (target) {
+ var fromPos = CaretPosition$1.fromRangeStart(editor.selection.getRng());
+ if (DeleteUtils.willDeleteLastPositionInElement(forward, fromPos, target.dom()) && !isEmptyCaretFormatElement(target)) {
+ deleteLastPosition(forward, editor, target, parentInlines);
+ return true;
+ } else {
+ return false;
+ }
+ }).getOr(false);
+ };
+ var backspaceDelete$5 = function (editor, forward) {
+ return editor.selection.isCollapsed() ? deleteCaret$1(editor, forward) : false;
+ };
+ var InlineFormatDelete = { backspaceDelete: backspaceDelete$5 };
+
+ var executeKeydownOverride$1 = function (editor, caret, evt) {
+ MatchKeys.execute([
+ {
+ keyCode: VK.BACKSPACE,
+ action: MatchKeys.action(CefDelete.backspaceDelete, editor, false)
+ },
+ {
+ keyCode: VK.DELETE,
+ action: MatchKeys.action(CefDelete.backspaceDelete, editor, true)
+ },
+ {
+ keyCode: VK.BACKSPACE,
+ action: MatchKeys.action(InlineBoundaryDelete.backspaceDelete, editor, caret, false)
+ },
+ {
+ keyCode: VK.DELETE,
+ action: MatchKeys.action(InlineBoundaryDelete.backspaceDelete, editor, caret, true)
+ },
+ {
+ keyCode: VK.BACKSPACE,
+ action: MatchKeys.action(TableDelete.backspaceDelete, editor, false)
+ },
+ {
+ keyCode: VK.DELETE,
+ action: MatchKeys.action(TableDelete.backspaceDelete, editor, true)
+ },
+ {
+ keyCode: VK.BACKSPACE,
+ action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, false)
+ },
+ {
+ keyCode: VK.DELETE,
+ action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, true)
+ },
+ {
+ keyCode: VK.BACKSPACE,
+ action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, false)
+ },
+ {
+ keyCode: VK.DELETE,
+ action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, true)
+ },
+ {
+ keyCode: VK.BACKSPACE,
+ action: MatchKeys.action(InlineFormatDelete.backspaceDelete, editor, false)
+ },
+ {
+ keyCode: VK.DELETE,
+ action: MatchKeys.action(InlineFormatDelete.backspaceDelete, editor, true)
+ }
+ ], evt).each(function (_) {
+ evt.preventDefault();
+ });
+ };
+ var executeKeyupOverride = function (editor, evt) {
+ MatchKeys.execute([
+ {
+ keyCode: VK.BACKSPACE,
+ action: MatchKeys.action(CefDelete.paddEmptyElement, editor)
+ },
+ {
+ keyCode: VK.DELETE,
+ action: MatchKeys.action(CefDelete.paddEmptyElement, editor)
+ }
+ ], evt);
+ };
+ var setup$8 = 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 DeleteBackspaceKeys = { setup: setup$8 };
+
+ 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 walker, node, rng, lastNode = root, tempElm;
+ var dom = editor.dom;
+ var moveCaretBeforeOnEnterElementsMap = editor.schema.getMoveCaretBeforeOnEnterElements();
+ if (!root) {
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$4(scope) : 0;
- callback = resolve$4(callback);
- self.callbackLookup = self.callbackLookup || {};
- self.callbackLookup[name] = {
- func: callback,
- scope: scope
- };
- }
- return callback.apply(scope || self, Array.prototype.slice.call(arguments, 1));
- },
- translate: function (text) {
- if (text && $_1q1txeljnlpawsa.is(text, 'string')) {
- var lang_1 = this.settings.language || 'en', i18n_1 = this.editorManager.i18n;
- text = i18n_1.data[lang_1 + '.' + text] || text.replace(/\{\#([^\}]+)\}/g, function (a, b) {
- return i18n_1.data[lang_1 + '.' + b] || '{#' + b + '}';
- });
- }
- return this.editorManager.translate(text);
- },
- getLang: function (name, defaultVal) {
- return this.editorManager.i18n.data[(this.settings.language || 'en') + '.' + name] || (defaultVal !== undefined ? defaultVal : '{#' + name + '}');
- },
- getParam: function (name, defaultVal, type) {
- return getParam(this, name, defaultVal, type);
- },
- nodeChanged: function (args) {
- this._nodeChangeDispatcher.nodeChanged(args);
- },
- addButton: function (name, settings) {
- var self = this;
- if (settings.cmd) {
- settings.onclick = function () {
- self.execCommand(settings.cmd);
- };
- }
- if (settings.stateSelector && typeof settings.active === 'undefined') {
- settings.active = false;
- }
- if (!settings.text && !settings.icon) {
- settings.icon = name;
- }
- settings.tooltip = settings.tooltip || settings.title;
- self.buttons[name] = settings;
- },
- addSidebar: function (name, settings) {
- return $_g47nm77ojnlpayg6.add(this, name, settings);
- },
- addMenuItem: function (name, settings) {
- var self = this;
- if (settings.cmd) {
- settings.onclick = function () {
- self.execCommand(settings.cmd);
- };
- }
- self.menuItems[name] = settings;
- },
- addContextToolbar: function (predicate, items) {
- var self = this;
- var selector;
- self.contextToolbars = self.contextToolbars || [];
- if (typeof predicate === 'string') {
- selector = predicate;
- predicate = function (elm) {
- return self.dom.is(elm, selector);
- };
- }
- self.contextToolbars.push({
- id: $_cb5mec5ljnlpaxvz.uuid('mcet'),
- predicate: predicate,
- items: items
- });
- },
- addCommand: function (name, callback, scope) {
- this.editorCommands.addCommand(name, callback, scope);
- },
- addQueryStateHandler: function (name, callback, scope) {
- this.editorCommands.addQueryStateHandler(name, callback, scope);
- },
- addQueryValueHandler: function (name, callback, scope) {
- this.editorCommands.addQueryValueHandler(name, callback, scope);
- },
- addShortcut: function (pattern, desc, cmdFunc, scope) {
- this.shortcuts.add(pattern, desc, cmdFunc, scope);
- },
- execCommand: function (cmd, ui, value, args) {
- return this.editorCommands.execCommand(cmd, ui, value, args);
- },
- queryCommandState: function (cmd) {
- return this.editorCommands.queryCommandState(cmd);
- },
- queryCommandValue: function (cmd) {
- return this.editorCommands.queryCommandValue(cmd);
- },
- queryCommandSupported: function (cmd) {
- return this.editorCommands.queryCommandSupported(cmd);
- },
- show: function () {
- var self = this;
- if (self.hidden) {
- self.hidden = false;
- if (self.inline) {
- self.getBody().contentEditable = true;
- } else {
- DOM$7.show(self.getContainer());
- DOM$7.hide(self.id);
+ 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('\xA0'), root.firstChild);
}
- self.load();
- self.fire('show');
}
- },
- hide: function () {
- var self = this, doc = self.getDoc();
- if (!self.hidden) {
- if (ie$2 && doc && !self.inline) {
- doc.execCommand('SelectAll');
+ rng = dom.createRng();
+ root.normalize();
+ if (root.hasChildNodes()) {
+ walker = new TreeWalker(root, root);
+ while (node = walker.current()) {
+ if (NodeType.isText(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();
}
- self.save();
- if (self.inline) {
- self.getBody().contentEditable = false;
- if (self === self.editorManager.focusedEditor) {
- self.editorManager.focusedEditor = null;
+ if (!node) {
+ rng.setStart(lastNode, 0);
+ rng.setEnd(lastNode, 0);
+ }
+ } else {
+ if (NodeType.isBr(root)) {
+ if (root.nextSibling && dom.isBlock(root.nextSibling)) {
+ rng.setStartBefore(root);
+ rng.setEndBefore(root);
+ } else {
+ rng.setStartAfter(root);
+ rng.setEndAfter(root);
}
} else {
- DOM$7.hide(self.getContainer());
- DOM$7.setStyle(self.id, 'display', self.orgDisplay);
+ rng.setStart(root, 0);
+ rng.setEnd(root, 0);
}
- self.hidden = true;
- self.fire('hide');
}
- },
- isHidden: function () {
- return !!this.hidden;
- },
- setProgressState: function (state, time) {
- this.fire('ProgressState', {
- state: state,
- time: time
+ editor.selection.setRng(rng);
+ dom.remove(tempElm);
+ editor.selection.scrollIntoView(root);
+ };
+ 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 Option.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();
});
- },
- load: function (args) {
- var self = this;
- var elm = self.getElement(), html;
- if (self.removed) {
- return '';
+ };
+ var isListItemParentBlock = function (editor) {
+ return getParentBlock$2(editor).filter(function (elm) {
+ return isListItem(Element$$1.fromDom(elm));
+ }).isSome();
+ };
+ var NewLineUtils = {
+ moveToCaretPosition: moveToCaretPosition,
+ getEditableRoot: getEditableRoot,
+ getParentBlock: getParentBlock$2,
+ getParentBlockName: getParentBlockName,
+ isListItemParentBlock: isListItemParentBlock
+ };
+
+ var hasFirstChild = function (elm, name) {
+ return elm.firstChild && elm.firstChild.nodeName === name;
+ };
+ 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;
}
- if (elm) {
- args = args || {};
- args.load = true;
- html = self.setContent(elm.value !== undefined ? elm.value : elm.innerHTML, args);
- args.element = elm;
- if (!args.no_events) {
- self.fire('LoadContent', args);
+ return containerBlock;
+ };
+ var isFirstOrLastLi = function (containerBlock, parentBlock, first) {
+ var node = containerBlock[first ? 'firstChild' : 'lastChild'];
+ while (node) {
+ if (NodeType.isElement(node)) {
+ break;
}
- args.element = elm = null;
- return html;
+ node = node[first ? 'nextSibling' : 'previousSibling'];
}
- },
- save: function (args) {
- var self = this;
- var elm = self.getElement(), html, form;
- if (!elm || !self.initialized || self.removed) {
+ return node === parentBlock;
+ };
+ var insert$1 = function (editor, createNewBlock, containerBlock, parentBlock, newBlockName) {
+ var dom = editor.dom;
+ var rng = editor.selection.getRng();
+ if (containerBlock === editor.getBody()) {
return;
}
- args = args || {};
- args.save = true;
- args.element = elm;
- html = args.content = self.getContent(args);
- if (!args.no_events) {
- self.fire('SaveContent', args);
+ if (isNestedList(containerBlock)) {
+ newBlockName = 'LI';
}
- if (args.format === 'raw') {
- self.fire('RawSaveContent', args);
- }
- html = args.content;
- if (!/TEXTAREA|INPUT/i.test(elm.nodeName)) {
- if (args.is_removing || !self.inline) {
- elm.innerHTML = html;
+ var newBlock = newBlockName ? createNewBlock(newBlockName) : dom.create('BR');
+ if (isFirstOrLastLi(containerBlock, parentBlock, true) && isFirstOrLastLi(containerBlock, parentBlock, false)) {
+ if (hasParent$1(containerBlock, 'LI')) {
+ dom.insertAfter(newBlock, getContainerBlock(containerBlock));
+ } else {
+ dom.replace(newBlock, containerBlock);
}
- if (form = DOM$7.getParent(self.id, 'form')) {
- each$21(form.elements, function (elm) {
- if (elm.name === self.id) {
- elm.value = html;
- return false;
+ } 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);
+ }
+ } else if (isFirstOrLastLi(containerBlock, parentBlock, false)) {
+ dom.insertAfter(newBlock, getContainerBlock(containerBlock));
+ } 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);
+ NewLineUtils.moveToCaretPosition(editor, newBlock);
+ };
+ var InsertLi = { insert: insert$1 };
+
+ var trimZwsp = function (fragment) {
+ each(descendants(Element$$1.fromDom(fragment), isText), function (text) {
+ var rawNode = text.dom();
+ rawNode.nodeValue = Zwsp.trim(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 (NodeType.isElement(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 (NodeType.isText(container) === false) {
+ return offset;
+ } else if (start) {
+ return offset === 1 && container.data.charAt(offset - 1) === Zwsp.ZWSP ? 0 : offset;
+ } else {
+ return offset === container.data.length - 1 && container.data.charAt(offset) === Zwsp.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 (NodeType.isText(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 setForcedBlockAttrs = function (editor, node) {
+ var forcedRootBlockName = Settings.getForcedRootBlock(editor);
+ if (forcedRootBlockName && forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {
+ editor.dom.setAttribs(node, Settings.getForcedRootBlockAttrs(editor));
+ }
+ };
+ 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) {
+ var lastChild;
+ block.normalize();
+ lastChild = block.lastChild;
+ if (!lastChild || /^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true))) {
+ dom.add(block, 'br');
+ }
+ };
+ var insert$2 = function (editor, evt) {
+ var tmpRng, editableRoot, container, offset, parentBlock, shiftKey;
+ var newBlock, fragment, containerBlock, parentBlockName, containerBlockName, newBlockName, isAfterLastNodeInContainer;
+ var dom = editor.dom;
+ var schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements();
+ var rng = editor.selection.getRng();
+ var createNewBlock = function (name$$1) {
+ var node = container, block, clonedNode, caretNode;
+ var textInlineElements = schema.getTextInlineElements();
+ if (name$$1 || parentBlockName === 'TABLE' || parentBlockName === 'HR') {
+ block = dom.create(name$$1 || newBlockName);
+ setForcedBlockAttrs(editor, block);
+ } else {
+ block = parentBlock.cloneNode(false);
+ }
+ caretNode = block;
+ if (Settings.shouldKeepStyles(editor) === false) {
+ dom.setAttrib(block, 'style', null);
+ dom.setAttrib(block, 'class', null);
+ } else {
+ do {
+ if (textInlineElements[node.nodeName]) {
+ if (isCaretNode(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);
+ }
+ emptyBlock(caretNode);
+ return block;
+ };
+ var isCaretAtStartOrEndOfBlock = function (start) {
+ var walker, node, name$$1, normalizedOffset;
+ normalizedOffset = normalizeZwspOffset(start, container, offset);
+ if (NodeType.isText(container) && (start ? normalizedOffset > 0 : normalizedOffset < container.nodeValue.length)) {
+ return false;
+ }
+ if (container.parentNode === parentBlock && isAfterLastNodeInContainer && !start) {
+ return true;
+ }
+ if (start && NodeType.isElement(container) && container === parentBlock.firstChild) {
+ return true;
+ }
+ if (containerAndSiblingName(container, 'TABLE') || containerAndSiblingName(container, 'HR')) {
+ return isAfterLastNodeInContainer && !start || !isAfterLastNodeInContainer && start;
+ }
+ walker = new TreeWalker(container, parentBlock);
+ if (NodeType.isText(container)) {
+ if (start && normalizedOffset === 0) {
+ walker.prev();
+ } else if (!start && normalizedOffset === container.nodeValue.length) {
+ walker.next();
+ }
+ }
+ while (node = walker.current()) {
+ if (NodeType.isElement(node)) {
+ if (!node.getAttribute('data-mce-bogus')) {
+ name$$1 = node.nodeName.toLowerCase();
+ if (nonEmptyElementsMap[name$$1] && name$$1 !== 'br') {
+ return false;
+ }
+ }
+ } else if (NodeType.isText(node) && !/^[ \t\r\n]*$/.test(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 (Settings.shouldEndContainerOnEmptyBlock(editor) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock)) {
+ newBlock = dom.split(containerBlock, parentBlock);
+ } else {
+ dom.insertAfter(newBlock, parentBlock);
+ }
+ NewLineUtils.moveToCaretPosition(editor, newBlock);
+ };
+ NormalizeRange.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 = Settings.getForcedRootBlock(editor);
+ shiftKey = evt.shiftKey;
+ if (NodeType.isElement(container) && container.hasChildNodes()) {
+ isAfterLastNodeInContainer = offset > container.childNodes.length - 1;
+ container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;
+ if (isAfterLastNodeInContainer && NodeType.isText(container)) {
+ offset = container.nodeValue.length;
+ } else {
+ offset = 0;
+ }
+ }
+ 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() : '';
+ containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';
+ if (containerBlockName === 'LI' && !evt.ctrlKey) {
+ parentBlock = containerBlock;
+ containerBlock = containerBlock.parentNode;
+ parentBlockName = containerBlockName;
+ }
+ if (/^(LI|DT|DD)$/.test(parentBlockName)) {
+ if (dom.isEmpty(parentBlock)) {
+ InsertLi.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);
+ }
+ NewLineUtils.moveToCaretPosition(editor, newBlock);
+ } else if (isCaretAtStartOrEndOfBlock()) {
+ insertNewBlockAfter();
+ } else if (isCaretAtStartOrEndOfBlock(true)) {
+ newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock);
+ NewLineUtils.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 {
+ NewLineUtils.moveToCaretPosition(editor, newBlock);
+ }
+ }
+ dom.setAttrib(newBlock, 'id', '');
+ editor.fire('NewBlock', { newBlock: newBlock });
+ };
+ var InsertBlock = { insert: insert$2 };
+
+ var matchesSelector = function (editor, selector) {
+ return NewLineUtils.getParentBlock(editor).filter(function (parentBlock) {
+ return selector.length > 0 && is$1(Element$$1.fromDom(parentBlock), selector);
+ }).isSome();
+ };
+ var shouldInsertBr = function (editor) {
+ return matchesSelector(editor, Settings.getBrNewLineSelector(editor));
+ };
+ var shouldBlockNewLine = function (editor) {
+ return matchesSelector(editor, Settings.getNoNewLineSelector(editor));
+ };
+ var ContextSelectors = {
+ shouldInsertBr: shouldInsertBr,
+ shouldBlockNewLine: shouldBlockNewLine
+ };
+
+ var newLineAction = Adt.generate([
+ { br: [] },
+ { block: [] },
+ { none: [] }
+ ]);
+ var shouldBlockNewLine$1 = function (editor, shiftKey) {
+ return ContextSelectors.shouldBlockNewLine(editor);
+ };
+ var isBrMode = function (requiredState) {
+ return function (editor, shiftKey) {
+ var brMode = Settings.getForcedRootBlock(editor) === '';
+ return brMode === requiredState;
+ };
+ };
+ var inListBlock = function (requiredState) {
+ return function (editor, shiftKey) {
+ return NewLineUtils.isListItemParentBlock(editor) === requiredState;
+ };
+ };
+ var inBlock = function (blockName, requiredState) {
+ return function (editor, shiftKey) {
+ var state = NewLineUtils.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 Settings.shouldPutBrInPre(editor) === requiredState;
+ };
+ };
+ var inBrContext = function (editor, shiftKey) {
+ return ContextSelectors.shouldInsertBr(editor);
+ };
+ var hasShiftKey = function (editor, shiftKey) {
+ return shiftKey;
+ };
+ var canInsertIntoEditableRoot = function (editor) {
+ var forcedRootBlock = Settings.getForcedRootBlock(editor);
+ var rootEditable = NewLineUtils.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 ? Option.some(action) : Option.none();
+ };
+ };
+ var getAction$1 = function (editor, evt) {
+ return LazyEvaluator.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.shiftKey
+ ]).getOr(newLineAction.none());
+ };
+ var NewLineAction = { getAction: getAction$1 };
+
+ var insert$3 = function (editor, evt) {
+ NewLineAction.getAction(editor, evt).fold(function () {
+ InsertBr.insert(editor, evt);
+ }, function () {
+ InsertBlock.insert(editor, evt);
+ }, noop);
+ };
+ var InsertNewLine = { insert: insert$3 };
+
+ var endTypingLevel = function (undoManager) {
+ if (undoManager.typing) {
+ undoManager.typing = false;
+ undoManager.add();
+ }
+ };
+ var handleEnterKeyEvent = function (editor, event) {
+ if (event.isDefaultPrevented()) {
+ return;
+ }
+ event.preventDefault();
+ endTypingLevel(editor.undoManager);
+ editor.undoManager.transact(function () {
+ if (editor.selection.isCollapsed() === false) {
+ editor.execCommand('Delete');
+ }
+ InsertNewLine.insert(editor, event);
+ });
+ };
+ var setup$9 = function (editor) {
+ editor.on('keydown', function (event) {
+ if (event.keyCode === VK.ENTER) {
+ handleEnterKeyEvent(editor, event);
+ }
+ });
+ };
+ var EnterKey = { setup: setup$9 };
+
+ var insertTextAtPosition = function (text, pos) {
+ var container = pos.container();
+ var offset = pos.offset();
+ if (NodeType.isText(container)) {
+ container.insertData(offset, text);
+ return Option.some(CaretPosition(container, offset + text.length));
+ } else {
+ return getElementFromPosition(pos).map(function (elm) {
+ var textNode = Element$$1.fromText(text);
+ if (pos.isAtEnd()) {
+ after(elm, textNode);
+ } else {
+ before(elm, textNode);
+ }
+ return CaretPosition(textNode.dom(), text.length);
+ });
+ }
+ };
+ var insertNbspAtPosition = curry(insertTextAtPosition, '\xA0');
+ var insertSpaceAtPosition = curry(insertTextAtPosition, ' ');
+
+ var isAtBlockBoundary = function (forward, root, pos) {
+ var parentBlocks = filter(Parents.parentsAndSelf(Element$$1.fromDom(pos.container()), root), isBlock);
+ return head(parentBlocks).fold(function () {
+ return CaretFinder.navigate(forward, root.dom(), pos).forall(function (newPos) {
+ return isInSameBlock(newPos, pos, root.dom()) === false;
+ });
+ }, function (parent) {
+ return CaretFinder.navigate(forward, parent.dom(), pos).isNone();
+ });
+ };
+ var isAtStartOfBlock = curry(isAtBlockBoundary, false);
+ var isAtEndOfBlock = curry(isAtBlockBoundary, true);
+
+ var nbsp = '\xA0';
+ var isInMiddleOfText = function (pos) {
+ return CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd();
+ };
+ var getClosestBlock = function (root, pos) {
+ var parentBlocks = filter(Parents.parentsAndSelf(Element$$1.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) || CaretFinder.prevPosition(getClosestBlock(root, pos).dom(), pos).exists(isAfterSpace);
+ }
+ };
+ var hasSpaceAfter = function (root, pos) {
+ if (isInMiddleOfText(pos)) {
+ return isBeforeSpace(pos);
+ } else {
+ return isBeforeSpace(pos) || CaretFinder.nextPosition(getClosestBlock(root, pos).dom(), pos).exists(isBeforeSpace);
+ }
+ };
+ var isPreValue = function (value$$1) {
+ return contains([
+ 'pre',
+ 'pre-line',
+ 'pre-wrap'
+ ], value$$1);
+ };
+ var isInPre = function (pos) {
+ return getElementFromPosition(pos).bind(function (elm) {
+ return closest(elm, isElement);
+ }).exists(function (elm) {
+ return isPreValue(get$2(elm, 'white-space'));
+ });
+ };
+ var isAtBeginningOfBody = function (root, pos) {
+ return CaretFinder.prevPosition(root.dom(), pos).isNone();
+ };
+ var isAtEndOfBody = function (root, pos) {
+ return CaretFinder.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) || isAfterBr(root, pos) || hasSpaceBefore(root, pos);
+ }
+ };
+ var needsToBeNbspRight = function (root, pos) {
+ if (isInPre(pos)) {
+ return false;
+ } else {
+ return isAtEndOfBlock(root, pos) || isBeforeBr(root, pos) || hasSpaceAfter(root, pos);
+ }
+ };
+ var isNbspAt = function (text, offset) {
+ return isNbsp(text.charAt(offset));
+ };
+ var hasNbsp = function (pos) {
+ var container = pos.container();
+ return NodeType.isText(container) && contains$2(container.data, nbsp);
+ };
+ var normalizeNbspAtStart = function (root, node, text) {
+ var firstPos = CaretPosition(node, 0);
+ if (isNbspAt(text, 0) && !needsToBeNbspLeft(root, firstPos)) {
+ return ' ' + text.slice(1);
+ } else {
+ return text;
+ }
+ };
+ var normalizeNbspMiddle = function (text) {
+ return map(text.split(''), function (chr, i, chars) {
+ if (isNbsp(chr) && i > 0 && i < chars.length - 1 && isContent(chars[i - 1]) && isContent(chars[i + 1])) {
+ return ' ';
+ } else {
+ return chr;
+ }
+ }).join('');
+ };
+ var normalizeNbspAtEnd = function (root, node, text) {
+ var lastPos = CaretPosition(node, text.length);
+ if (isNbspAt(text, text.length - 1) && !needsToBeNbspRight(root, lastPos)) {
+ return text.slice(0, -1) + ' ';
+ } else {
+ return text;
+ }
+ };
+ var normalizeNbsps = function (root, pos) {
+ return Option.some(pos).filter(hasNbsp).bind(function (pos) {
+ var container = pos.container();
+ var text = container.nodeValue;
+ var newText = normalizeNbspAtStart(root, container, normalizeNbspMiddle(normalizeNbspAtEnd(root, container, text)));
+ if (text !== newText) {
+ pos.container().nodeValue = newText;
+ return Option.some(pos);
+ } else {
+ return Option.none();
+ }
+ });
+ };
+ var normalizeNbspsInEditor = function (editor) {
+ var root = Element$$1.fromDom(editor.getBody());
+ if (editor.selection.isCollapsed()) {
+ normalizeNbsps(root, CaretPosition.fromRangeStart(editor.selection.getRng())).each(function (pos) {
+ editor.selection.setRng(pos.toRange());
+ });
+ }
+ };
+
+ var locationToCaretPosition = function (root) {
+ return function (location) {
+ return location.fold(function (element) {
+ return CaretFinder.prevPosition(root.dom(), CaretPosition$1.before(element));
+ }, function (element) {
+ return CaretFinder.firstPositionIn(element);
+ }, function (element) {
+ return CaretFinder.lastPositionIn(element);
+ }, function (element) {
+ return CaretFinder.nextPosition(root.dom(), CaretPosition$1.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$1.fromRangeStart(editor.selection.getRng());
+ var root = Element$$1.fromDom(editor.getBody());
+ if (editor.selection.isCollapsed()) {
+ var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);
+ var caretPosition = CaretPosition$1.fromRangeStart(editor.selection.getRng());
+ return BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), caretPosition).bind(locationToCaretPosition(root)).bind(insertInlineBoundarySpaceOrNbsp(root, pos)).exists(setSelection$1(editor));
+ } else {
+ return false;
+ }
+ };
+
+ var executeKeydownOverride$2 = function (editor, evt) {
+ MatchKeys.execute([{
+ keyCode: VK.SPACEBAR,
+ action: MatchKeys.action(insertSpaceOrNbspAtSelection, editor)
+ }], evt).each(function (_) {
+ evt.preventDefault();
+ });
+ };
+ var setup$a = function (editor) {
+ editor.on('keydown', function (evt) {
+ if (evt.isDefaultPrevented() === false) {
+ executeKeydownOverride$2(editor, evt);
+ }
+ });
+ };
+ var SpaceKey = { setup: setup$a };
+
+ var findBlockCaretContainer = function (editor) {
+ return descendant$1(Element$$1.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 CaretContainerInput = { setup: setup$b };
+
+ var browser$4 = PlatformDetection$1.detect().browser;
+ var setupIeInput = function (editor) {
+ var keypressThrotter = first$1(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$c = function (editor) {
+ setupIeInput(editor);
+ editor.on('input', function (e) {
+ if (e.isComposing === false) {
+ normalizeNbspsInEditor(editor);
+ }
+ });
+ };
+
+ var setup$d = function (editor) {
+ var caret = BoundarySelection.setupSelectedState(editor);
+ CaretContainerInput.setup(editor);
+ ArrowKeys.setup(editor, caret);
+ DeleteBackspaceKeys.setup(editor, caret);
+ EnterKey.setup(editor);
+ SpaceKey.setup(editor);
+ setup$c(editor);
+ };
+ var KeyboardOverrides = { setup: setup$d };
+
+ function Quirks (editor) {
+ var each = Tools.each;
+ var BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, settings = editor.settings, 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.settings.content_editable) {
+ 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);
+ }
}
});
}
- } else {
- elm.value = html;
- }
- args.element = elm = null;
- if (args.set_dirty !== false) {
- self.setDirty(false);
- }
- return html;
- },
- setContent: function (content, args) {
- return setContent$1(this, content, args);
- },
- getContent: function (args) {
- return getContent$1(this, args);
- },
- insertContent: function (content, args) {
- if (args) {
- content = extend$4({ content: content }, args);
- }
- this.execCommand('mceInsertContent', false, content);
- },
- isDirty: function () {
- return !this.isNotDirty;
- },
- setDirty: function (state) {
- var oldState = !this.isNotDirty;
- this.isNotDirty = !state;
- if (state && state !== oldState) {
- this.fire('dirty');
- }
- },
- setMode: function (mode) {
- setMode(this, mode);
- },
- getContainer: function () {
- var self = this;
- if (!self.container) {
- self.container = DOM$7.get(self.editorContainer || self.id + '_parent');
- }
- return self.container;
- },
- getContentAreaContainer: function () {
- return this.contentAreaContainer;
- },
- getElement: function () {
- if (!this.targetElm) {
- this.targetElm = DOM$7.get(this.id);
- }
- return this.targetElm;
- },
- getWin: function () {
- var self = this;
- var elm;
- if (!self.contentWindow) {
- elm = self.iframeElement;
- if (elm) {
- self.contentWindow = elm.contentWindow;
- }
- }
- return self.contentWindow;
- },
- getDoc: function () {
- var self = this;
- var win;
- if (!self.contentDocument) {
- win = self.getWin();
- if (win) {
- self.contentDocument = win.document;
- }
- }
- return self.contentDocument;
- },
- getBody: function () {
- var doc = this.getDoc();
- return this.bodyElement || (doc ? doc.body : null);
- },
- 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;
- },
- addVisual: function (elm) {
- var self = this;
- var settings = self.settings;
- var dom = self.dom;
- var cls;
- elm = elm || self.getBody();
- if (self.hasVisual === undefined) {
- self.hasVisual = settings.visual;
- }
- each$21(dom.select('table,a', elm), function (elm) {
- var value;
- switch (elm.nodeName) {
- case 'TABLE':
- cls = settings.visual_table_class || 'mce-item-table';
- value = dom.getAttrib(elm, 'border');
- if ((!value || value === '0') && self.hasVisual) {
- dom.addClass(elm, cls);
- } else {
- dom.removeClass(elm, cls);
+ };
+ 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, container, offset, root, parent$$1;
+ if (isDefaultPrevented(e) || e.keyCode !== VK.BACKSPACE) {
+ return;
+ }
+ rng = selection.getRng();
+ container = rng.startContainer;
+ offset = rng.startOffset;
+ root = dom.getRoot();
+ parent$$1 = container;
+ if (!rng.collapsed || offset !== 0) {
+ return;
+ }
+ while (parent$$1 && parent$$1.parentNode && parent$$1.parentNode.firstChild === parent$$1 && parent$$1.parentNode !== root) {
+ parent$$1 = parent$$1.parentNode;
+ }
+ if (parent$$1.tagName === 'BLOCKQUOTE') {
+ editor.formatter.toggle('blockquote', null, parent$$1);
+ 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 (!settings.object_resizing) {
+ setEditorCommandState('enableObjectResizing', false);
+ }
+ };
+ if (!settings.readonly) {
+ 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 (settings.forced_root_block) {
+ editor.on('init', function () {
+ setEditorCommandState('DefaultParagraphSeparator', settings.forced_root_block);
+ });
+ }
+ };
+ 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();
+ editor.selection.getSel().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 = CaretRangeFromPoint.fromPoint(e.x, e.y, editor.getDoc());
+ selection.setRng(rng);
+ insertClipboardContents(internalContent.html, true);
+ }
+ }
+ });
+ };
+ var refreshContentEditable = function () {
+ };
+ var isHidden = function () {
+ var sel;
+ if (!isGecko || editor.removed) {
+ return 0;
+ }
+ sel = editor.selection.getSel();
+ return !sel || !sel.rangeCount || sel.rangeCount === 0;
+ };
+ 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();
+ }
+ return {
+ refreshContentEditable: refreshContentEditable,
+ isHidden: isHidden
+ };
+ }
+
+ var isTextBlockNode = function (node) {
+ return NodeType.isElement(node) && isTextBlock(Element$$1.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)) {
+ CaretFinder.firstPositionIn(container).each(function (pos) {
+ return rng.setStart(pos.container(), pos.offset());
+ });
+ }
+ }
+ if (CaretPosition.isElementPosition(endPos)) {
+ var container = startPos.container();
+ if (isTextBlockNode(container)) {
+ CaretFinder.lastPositionIn(container).each(function (pos) {
+ return rng.setEnd(pos.container(), pos.offset());
+ });
+ }
+ }
+ editor.selection.setRng(RangeNormalizer.normalize(rng));
+ };
+ var setup$e = function (editor) {
+ editor.on('click', function (e) {
+ if (e.detail >= 3) {
+ normalizeSelection$1(editor);
+ }
+ });
+ };
+
+ 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$f = function (editor) {
+ preventSummaryToggle(editor);
+ filterDetails(editor);
+ };
+
+ var DOM$2 = DOMUtils$1.DOM;
+ var appendStyle = function (editor, text) {
+ var head = Element$$1.fromDom(editor.getDoc().head);
+ var tag = Element$$1.fromTag('style');
+ set(tag, 'type', 'text/css');
+ append(tag, Element$$1.fromText(text));
+ append(head, tag);
+ };
+ var createParser = function (editor) {
+ var parser = DomParser(editor.settings, editor.schema);
+ parser.addAttributeFilter('src,href,style,tabindex', function (nodes, name$$1) {
+ var i = nodes.length, node;
+ var dom = editor.dom;
+ var value, internalName;
+ while (i--) {
+ node = nodes[i];
+ value = node.attr(name$$1);
+ internalName = 'data-mce-' + name$$1;
+ if (!node.attributes.map[internalName]) {
+ if (value.indexOf('data:') === 0 || value.indexOf('blob:') === 0) {
+ continue;
+ }
+ if (name$$1 === 'style') {
+ value = dom.serializeStyle(dom.parseStyle(value), node.name);
+ if (!value.length) {
+ value = null;
+ }
+ node.attr(internalName, value);
+ node.attr(name$$1, value);
+ } else if (name$$1 === 'tabindex') {
+ node.attr(internalName, value);
+ node.attr(name$$1, null);
+ } else {
+ node.attr(internalName, editor.convertURL(value, name$$1, node.name));
+ }
+ }
+ }
+ });
+ parser.addNodeFilter('script', function (nodes) {
+ var i = nodes.length, node, type;
+ while (i--) {
+ node = nodes[i];
+ type = node.attr('type') || 'no/type';
+ if (type.indexOf('mce-') !== 0) {
+ node.attr('type', 'mce-' + type);
+ }
+ }
+ });
+ parser.addNodeFilter('#cdata', function (nodes) {
+ var i = nodes.length, node;
+ while (i--) {
+ node = nodes[i];
+ node.type = 8;
+ node.name = '#comment';
+ node.value = '[CDATA[' + node.value + ']]';
+ }
+ });
+ parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function (nodes) {
+ var i = nodes.length, node;
+ var nonEmptyElements = editor.schema.getNonEmptyElements();
+ while (i--) {
+ node = nodes[i];
+ if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) {
+ node.append(new Node$2('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 initEditor = function (editor) {
+ editor.bindPendingEventDelegates();
+ editor.initialized = true;
+ editor.fire('init');
+ editor.focus(true);
+ editor.nodeChanged({ initial: true });
+ editor.execCallback('init_instance_callback', editor);
+ autoFocus(editor);
+ };
+ var getStyleSheetLoader = function (editor) {
+ return editor.inline ? DOM$2.styleSheetLoader : editor.dom.styleSheetLoader;
+ };
+ var initContentBody = function (editor, skipWrite) {
+ var settings = editor.settings;
+ var targetElm = editor.getElement();
+ var doc = editor.getDoc(), body, contentCssText;
+ if (!settings.inline) {
+ editor.getElement().style.visibility = editor.orgVisibility;
+ }
+ if (!skipWrite && !settings.content_editable) {
+ doc.open();
+ doc.write(editor.iframeHTML);
+ doc.close();
+ }
+ if (settings.content_editable) {
+ editor.on('remove', function () {
+ var bodyEl = this.getBody();
+ DOM$2.removeClass(bodyEl, 'mce-content-body');
+ DOM$2.removeClass(bodyEl, 'mce-edit-focus');
+ DOM$2.setAttrib(bodyEl, 'contentEditable', null);
+ });
+ DOM$2.addClass(targetElm, 'mce-content-body');
+ editor.contentDocument = doc = settings.content_document || document;
+ editor.contentWindow = settings.content_window || window;
+ editor.bodyElement = targetElm;
+ settings.content_document = settings.content_window = null;
+ settings.root_name = targetElm.nodeName.toLowerCase();
+ }
+ body = editor.getBody();
+ body.disabled = true;
+ editor.readonly = settings.readonly;
+ if (!editor.readonly) {
+ if (editor.inline && DOM$2.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$1(doc, {
+ keep_values: true,
+ url_converter: editor.convertURL,
+ url_converter_scope: editor,
+ hex_colors: settings.force_hex_style_colors,
+ class_filter: settings.class_filter,
+ update_styles: true,
+ root_element: editor.inline ? editor.getBody() : null,
+ collect: settings.content_editable,
+ schema: editor.schema,
+ contentCssCors: Settings.shouldUseContentCssCors(editor),
+ onSetAttrib: function (e) {
+ editor.fire('SetAttrib', e);
+ }
+ });
+ editor.parser = createParser(editor);
+ editor.serializer = Serializer$1(settings, editor);
+ editor.selection = Selection(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$f(editor);
+ setup$e(editor);
+ KeyboardOverrides.setup(editor);
+ ForceBlocks.setup(editor);
+ editor.fire('PreInit');
+ if (!settings.browser_spellcheck && !settings.gecko_spellcheck) {
+ doc.body.spellcheck = false;
+ DOM$2.setAttrib(body, 'spellcheck', 'false');
+ }
+ editor.quirks = Quirks(editor);
+ editor.fire('PostRender');
+ if (settings.directionality) {
+ body.dir = settings.directionality;
+ }
+ if (settings.nowrap) {
+ body.style.whiteSpace = 'nowrap';
+ }
+ 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());
+ });
+ 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) {
+ contentCssText = '';
+ Tools.each(editor.contentStyles, function (style) {
+ contentCssText += style + '\r\n';
+ });
+ editor.dom.addStyle(contentCssText);
+ }
+ getStyleSheetLoader(editor).loadAll(editor.contentCSS, function (_) {
+ initEditor(editor);
+ }, function (urls) {
+ initEditor(editor);
+ });
+ if (settings.content_style) {
+ appendStyle(editor, settings.content_style);
+ }
+ };
+ var InitContentBody = { initContentBody: initContentBody };
+
+ var DOM$3 = DOMUtils$1.DOM;
+ var relaxDomain = function (editor, ifr) {
+ if (document.domain !== window.location.hostname && Env.ie && Env.ie < 12) {
+ var bodyUuid = Uuid.uuid('mce');
+ editor[bodyUuid] = function () {
+ InitContentBody.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$3.setAttrib(ifr, 'src', domainRelaxUrl);
+ return true;
+ }
+ return false;
+ };
+ var normalizeHeight = function (height) {
+ var normalizedHeight = typeof height === 'number' ? height + 'px' : height;
+ return normalizedHeight ? normalizedHeight : '';
+ };
+ var createIframeElement = function (id, title, height, customAttrs) {
+ var iframe = Element$$1.fromTag('iframe');
+ setAll(iframe, customAttrs);
+ setAll(iframe, {
+ id: id + '_ifr',
+ frameBorder: '0',
+ allowTransparency: 'true',
+ title: title
+ });
+ setAll$1(iframe, {
+ width: '100%',
+ height: normalizeHeight(height),
+ display: 'block'
+ });
+ return iframe;
+ };
+ var getIframeHtml = function (editor) {
+ var bodyId, bodyClass, iframeHTML;
+ iframeHTML = Settings.getDocType(editor) + '';
+ if (Settings.getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {
+ iframeHTML += '';
+ }
+ iframeHTML += '';
+ bodyId = Settings.getBodyId(editor);
+ bodyClass = Settings.getBodyClass(editor);
+ if (Settings.getContentSecurityPolicy(editor)) {
+ iframeHTML += '';
+ }
+ iframeHTML += '
';
+ return iframeHTML;
+ };
+ var createIframe = function (editor, o) {
+ var title = editor.editorManager.translate('Rich Text Area. Press ALT-F9 for menu. ' + 'Press ALT-F10 for toolbar. Press ALT-0 for help');
+ var ifr = createIframeElement(editor.id, title, o.height, Settings.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$3.add(o.iframeContainer, ifr);
+ return isDomainRelaxed;
+ };
+ var init$1 = function (editor, boxInfo) {
+ var isDomainRelaxed = createIframe(editor, boxInfo);
+ if (boxInfo.editorContainer) {
+ DOM$3.get(boxInfo.editorContainer).style.display = editor.orgDisplay;
+ editor.hidden = DOM$3.isHidden(boxInfo.editorContainer);
+ }
+ editor.getElement().style.display = 'none';
+ DOM$3.setAttrib(editor.id, 'aria-hidden', 'true');
+ if (!isDomainRelaxed) {
+ InitContentBody.initContentBody(editor);
+ }
+ };
+ var InitIframe = { init: init$1 };
+
+ var DOM$4 = DOMUtils$1.DOM;
+ var initPlugin = function (editor, initializedPlugins, plugin) {
+ var Plugin = PluginManager$1.get(plugin);
+ var pluginUrl, pluginInstance;
+ pluginUrl = PluginManager$1.urls[plugin] || editor.documentBaseUrl.replace(/\/$/, '');
+ plugin = Tools.trim(plugin);
+ if (Plugin && Tools.inArray(initializedPlugins, plugin) === -1) {
+ Tools.each(PluginManager$1.dependencies(plugin), function (dep) {
+ initPlugin(editor, initializedPlugins, dep);
+ });
+ if (editor.plugins[plugin]) {
return;
- case 'A':
- if (!dom.getAttrib(elm, 'href')) {
- value = dom.getAttrib(elm, 'name') || elm.id;
- cls = settings.visual_anchor_class || 'mce-item-anchor';
- if (value && self.hasVisual) {
+ }
+ pluginInstance = new Plugin(editor, pluginUrl, editor.$);
+ editor.plugins[plugin] = pluginInstance;
+ if (pluginInstance.init) {
+ pluginInstance.init(editor, pluginUrl);
+ initializedPlugins.push(plugin);
+ }
+ }
+ };
+ var trimLegacyPrefix = function (name) {
+ return name.replace(/^\-/, '');
+ };
+ var initPlugins = function (editor) {
+ var initializedPlugins = [];
+ Tools.each(editor.settings.plugins.split(/[ ,]/), function (name) {
+ initPlugin(editor, initializedPlugins, trimLegacyPrefix(name));
+ });
+ };
+ var initTheme = function (editor) {
+ var Theme;
+ var theme = editor.settings.theme;
+ if (isString(theme)) {
+ editor.settings.theme = trimLegacyPrefix(theme);
+ 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) {
+ var w, h, minHeight, re, info;
+ var settings = editor.settings;
+ var elm = editor.getElement();
+ w = settings.width || DOM$4.getStyle(elm, 'width') || '100%';
+ h = settings.height || DOM$4.getStyle(elm, 'height') || elm.offsetHeight;
+ minHeight = settings.min_height || 100;
+ re = /^[0-9\.]+(|px)$/i;
+ if (re.test('' + w)) {
+ w = Math.max(parseInt(w, 10), 100);
+ }
+ if (re.test('' + h)) {
+ h = Math.max(parseInt(h, 10), minHeight);
+ }
+ info = editor.theme.renderUI({
+ targetNode: elm,
+ width: w,
+ height: h,
+ deltaWidth: settings.delta_width,
+ deltaHeight: settings.delta_height
+ });
+ if (!settings.content_editable) {
+ h = (info.iframeHeight || h) + (typeof h === 'number' ? info.deltaHeight || 0 : '');
+ if (h < minHeight) {
+ h = minHeight;
+ }
+ }
+ info.height = h;
+ return info;
+ };
+ var renderFromThemeFunc = function (editor) {
+ var info;
+ var elm = editor.getElement();
+ info = editor.settings.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
+ };
+ };
+ var renderThemeFalseIframe = function (targetElement) {
+ var iframeContainer = DOM$4.create('div');
+ DOM$4.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 settings = editor.settings, elm = editor.getElement();
+ editor.orgDisplay = elm.style.display;
+ if (isString(settings.theme)) {
+ return renderFromLoadedTheme(editor);
+ } else if (isFunction(settings.theme)) {
+ return renderFromThemeFunc(editor);
+ } else {
+ return renderThemeFalse(editor);
+ }
+ };
+ var init$2 = function (editor) {
+ var settings = editor.settings;
+ var elm = editor.getElement();
+ var boxInfo;
+ editor.rtl = settings.rtl_ui || editor.editorManager.i18n.rtl;
+ editor.editorManager.i18n.setCode(settings.language);
+ settings.aria_label = settings.aria_label || DOM$4.getAttrib(elm, 'aria-label', editor.getLang('aria.rich_text_area'));
+ editor.fire('ScriptsLoaded');
+ initTheme(editor);
+ initPlugins(editor);
+ boxInfo = renderThemeUi(editor);
+ editor.editorContainer = boxInfo.editorContainer ? boxInfo.editorContainer : null;
+ if (settings.content_css) {
+ Tools.each(Tools.explode(settings.content_css), function (u) {
+ editor.contentCSS.push(editor.documentBaseURI.toAbsolute(u));
+ });
+ }
+ if (settings.content_editable) {
+ return InitContentBody.initContentBody(editor);
+ } else {
+ return InitIframe.init(editor, boxInfo);
+ }
+ };
+ var Init = { init: init$2 };
+
+ var DOM$5 = DOMUtils$1.DOM;
+ var hasSkipLoadPrefix = function (name$$1) {
+ return name$$1.charAt(0) === '-';
+ };
+ var loadLanguage = function (scriptLoader, editor) {
+ var settings = editor.settings;
+ if (settings.language && settings.language !== 'en' && !settings.language_url) {
+ settings.language_url = editor.editorManager.baseURL + '/langs/' + settings.language + '.js';
+ }
+ if (settings.language_url && !editor.editorManager.i18n.data[settings.language]) {
+ scriptLoader.add(settings.language_url);
+ }
+ };
+ var loadTheme = function (scriptLoader, editor, suffix, callback) {
+ var settings = editor.settings, theme = settings.theme;
+ if (isString(theme)) {
+ if (!hasSkipLoadPrefix(theme) && !ThemeManager.urls.hasOwnProperty(theme)) {
+ var themeUrl = settings.theme_url;
+ 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 loadPlugins = function (settings, suffix) {
+ if (Tools.isArray(settings.plugins)) {
+ settings.plugins = settings.plugins.join(' ');
+ }
+ Tools.each(settings.external_plugins, function (url, name$$1) {
+ PluginManager$1.load(name$$1, url);
+ settings.plugins += ' ' + name$$1;
+ });
+ Tools.each(settings.plugins.split(/[ ,]/), function (plugin) {
+ plugin = Tools.trim(plugin);
+ if (plugin && !PluginManager$1.urls[plugin]) {
+ if (hasSkipLoadPrefix(plugin)) {
+ plugin = plugin.substr(1, plugin.length);
+ var dependencies = PluginManager$1.dependencies(plugin);
+ Tools.each(dependencies, function (dep) {
+ var defaultSettings = {
+ prefix: 'plugins/',
+ resource: dep,
+ suffix: '/plugin' + suffix + '.js'
+ };
+ dep = PluginManager$1.createUrl(defaultSettings, dep);
+ PluginManager$1.load(dep.resource, dep);
+ });
+ } else {
+ PluginManager$1.load(plugin, {
+ prefix: 'plugins/',
+ resource: plugin,
+ suffix: '/plugin' + suffix + '.js'
+ });
+ }
+ }
+ });
+ };
+ var loadScripts = function (editor, suffix) {
+ var scriptLoader = ScriptLoader.ScriptLoader;
+ loadTheme(scriptLoader, editor, suffix, function () {
+ loadLanguage(scriptLoader, editor);
+ loadPlugins(editor.settings, suffix);
+ scriptLoader.loadQueue(function () {
+ if (!editor.removed) {
+ Init.init(editor);
+ }
+ }, editor, function (urls) {
+ ErrorReporter.pluginLoadError(editor, urls[0]);
+ if (!editor.removed) {
+ Init.init(editor);
+ }
+ });
+ });
+ };
+ var render = function (editor) {
+ var settings = editor.settings, id = editor.id;
+ var readyHandler = function () {
+ DOM$5.unbind(window, 'ready', readyHandler);
+ editor.render();
+ };
+ if (!EventUtils.Event.domLoaded) {
+ DOM$5.bind(window, 'ready', readyHandler);
+ return;
+ }
+ if (!editor.getElement()) {
+ return;
+ }
+ if (!Env.contentEditable) {
+ return;
+ }
+ if (!settings.inline) {
+ editor.orgVisibility = editor.getElement().style.visibility;
+ editor.getElement().style.visibility = 'hidden';
+ } else {
+ editor.inline = true;
+ }
+ var form = editor.getElement().form || DOM$5.getParent(id, 'form');
+ if (form) {
+ editor.formElement = form;
+ if (settings.hidden_input && !/TEXTAREA|INPUT/i.test(editor.getElement().nodeName)) {
+ DOM$5.insertAfter(DOM$5.create('input', {
+ type: 'hidden',
+ name: id
+ }), id);
+ editor.hasHiddenInput = true;
+ }
+ editor.formEventDelegate = function (e) {
+ editor.fire(e.type, e);
+ };
+ DOM$5.bind(form, 'submit reset', editor.formEventDelegate);
+ editor.on('reset', function () {
+ editor.setContent(editor.startContent, { format: 'raw' });
+ });
+ if (settings.submit_patch && !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 (settings.encoding === 'xml') {
+ editor.on('GetContent', function (e) {
+ if (e.save) {
+ e.content = DOM$5.encode(e.content);
+ }
+ });
+ }
+ if (settings.add_form_submit_trigger) {
+ editor.on('submit', function () {
+ if (editor.initialized) {
+ editor.save();
+ }
+ });
+ }
+ if (settings.add_unload_trigger) {
+ 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 Render = { render: render };
+
+ var add$4 = function (editor, name, settings) {
+ var sidebars = editor.sidebars ? editor.sidebars : [];
+ sidebars.push({
+ name: name,
+ settings: settings
+ });
+ editor.sidebars = sidebars;
+ };
+ var Sidebar = { add: add$4 };
+
+ var each$k = 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 (url, settings) {
+ var self$$1 = this;
+ var baseUri, baseUrl;
+ url = trim$4(url);
+ settings = self$$1.settings = settings || {};
+ baseUri = settings.base_uri;
+ if (/^([\w\-]+):([^\/]{2})/i.test(url) || /^\s*#/.test(url)) {
+ self$$1.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)) {
+ baseUrl = settings.base_uri ? settings.base_uri.path : new URI(document.location.href).directory;
+ if (settings.base_uri.protocol == '') {
+ url = '//mce_host' + self$$1.toAbsPath(baseUrl, url);
+ } else {
+ url = /([^#?]*)([#?]?.*)/.exec(url);
+ url = (baseUri && baseUri.protocol || 'http') + '://mce_host' + self$$1.toAbsPath(baseUrl, url[1]) + url[2];
+ }
+ }
+ url = url.replace(/@@/g, '(mce_at)');
+ url = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(url);
+ each$k(queryParts, function (v, i) {
+ var part = url[i];
+ if (part) {
+ part = part.replace(/\(mce_at\)/g, '@@');
+ }
+ self$$1[v] = part;
+ });
+ if (baseUri) {
+ if (!self$$1.protocol) {
+ self$$1.protocol = baseUri.protocol;
+ }
+ if (!self$$1.userInfo) {
+ self$$1.userInfo = baseUri.userInfo;
+ }
+ if (!self$$1.port && self$$1.host === 'mce_host') {
+ self$$1.port = baseUri.port;
+ }
+ if (!self$$1.host || self$$1.host === 'mce_host') {
+ self$$1.host = baseUri.host;
+ }
+ self$$1.source = '';
+ }
+ if (isProtocolRelative) {
+ self$$1.protocol = '';
+ }
+ };
+ URI.prototype = {
+ setPath: function (path) {
+ var self$$1 = this;
+ path = /^(.*?)\/?(\w+)?$/.exec(path);
+ self$$1.path = path[0];
+ self$$1.directory = path[1];
+ self$$1.file = path[2];
+ self$$1.source = '';
+ self$$1.getURI();
+ },
+ toRelative: function (uri) {
+ var self$$1 = this;
+ var output;
+ if (uri === './') {
+ return uri;
+ }
+ uri = new URI(uri, { base_uri: self$$1 });
+ if (uri.host !== 'mce_host' && self$$1.host !== uri.host && uri.host || self$$1.port !== uri.port || self$$1.protocol !== uri.protocol && uri.protocol !== '') {
+ return uri.getURI();
+ }
+ var tu = self$$1.getURI(), uu = uri.getURI();
+ if (tu === uu || tu.charAt(tu.length - 1) === '/' && tu.substr(0, tu.length - 1) === uu) {
+ return tu;
+ }
+ output = self$$1.toRelPath(self$$1.path, uri.path);
+ if (uri.query) {
+ output += '?' + uri.query;
+ }
+ if (uri.anchor) {
+ output += '#' + uri.anchor;
+ }
+ return output;
+ },
+ toAbsolute: function (uri, noHost) {
+ uri = new URI(uri, { base_uri: this });
+ return uri.getURI(noHost && this.isSameOrigin(uri));
+ },
+ 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;
+ },
+ toRelPath: function (base, path) {
+ var items, breakPoint = 0, out = '', i, l;
+ base = base.substring(0, base.lastIndexOf('/'));
+ base = base.split('/');
+ items = path.split('/');
+ if (base.length >= items.length) {
+ for (i = 0, l = base.length; i < l; i++) {
+ if (i >= items.length || base[i] !== items[i]) {
+ breakPoint = i + 1;
+ break;
+ }
+ }
+ }
+ if (base.length < items.length) {
+ for (i = 0, l = items.length; i < l; i++) {
+ if (i >= base.length || base[i] !== items[i]) {
+ breakPoint = i + 1;
+ break;
+ }
+ }
+ }
+ if (breakPoint === 1) {
+ return path;
+ }
+ for (i = 0, l = base.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;
+ },
+ toAbsPath: function (base, path) {
+ var i, nb = 0, o = [], tr, outPath;
+ tr = /\/$/.test(path) ? '/' : '';
+ base = base.split('/');
+ path = path.split('/');
+ each$k(base, function (k) {
+ if (k) {
+ o.push(k);
+ }
+ });
+ base = o;
+ for (i = path.length - 1, o = []; i >= 0; i--) {
+ if (path[i].length === 0 || path[i] === '.') {
+ continue;
+ }
+ if (path[i] === '..') {
+ nb++;
+ continue;
+ }
+ if (nb > 0) {
+ nb--;
+ continue;
+ }
+ o.push(path[i]);
+ }
+ i = base.length - nb;
+ if (i <= 0) {
+ outPath = o.reverse().join('/');
+ } else {
+ outPath = base.slice(0, i).join('/') + '/' + o.reverse().join('/');
+ }
+ if (outPath.indexOf('/') !== 0) {
+ outPath = '/' + outPath;
+ }
+ if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) {
+ outPath += tr;
+ }
+ return outPath;
+ },
+ getURI: function (noProtoHost) {
+ var s;
+ var self$$1 = this;
+ if (!self$$1.source || noProtoHost) {
+ s = '';
+ if (!noProtoHost) {
+ if (self$$1.protocol) {
+ s += self$$1.protocol + '://';
+ } else {
+ s += '//';
+ }
+ if (self$$1.userInfo) {
+ s += self$$1.userInfo + '@';
+ }
+ if (self$$1.host) {
+ s += self$$1.host;
+ }
+ if (self$$1.port) {
+ s += ':' + self$$1.port;
+ }
+ }
+ if (self$$1.path) {
+ s += self$$1.path;
+ }
+ if (self$$1.query) {
+ s += '?' + self$$1.query;
+ }
+ if (self$$1.anchor) {
+ s += '#' + self$$1.anchor;
+ }
+ self$$1.source = s;
+ }
+ return self$$1.source;
+ }
+ };
+ URI.parseDataUri = function (uri) {
+ var type, matches;
+ uri = decodeURIComponent(uri).split(',');
+ matches = /data:([^;]+)/.exec(uri[0]);
+ if (matches) {
+ type = matches[1];
+ }
+ return {
+ type: type,
+ data: uri[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;
+ };
+
+ var defaultFormat = 'html';
+ var trimEmptyContents = function (editor, html) {
+ var blockName = Settings.getForcedRootBlock(editor);
+ var emptyRegExp = new RegExp('^(<' + blockName + '[^>]*>( | |\\s|\xA0|
|)<\\/' + blockName + '>[\r\n]*|
[\r\n]*)$');
+ return html.replace(emptyRegExp, '');
+ };
+ var getContentFromBody = function (editor, args, body) {
+ var content;
+ args.format = args.format ? args.format : defaultFormat;
+ args.get = true;
+ args.getInner = true;
+ if (!args.no_events) {
+ editor.fire('BeforeGetContent', args);
+ }
+ if (args.format === 'raw') {
+ content = Tools.trim(TrimHtml.trimExternal(editor.serializer, body.innerHTML));
+ } else if (args.format === 'text') {
+ content = Zwsp.trim(body.innerText || body.textContent);
+ } else if (args.format === 'tree') {
+ return editor.serializer.serialize(body, args);
+ } else {
+ content = trimEmptyContents(editor, editor.serializer.serialize(body, args));
+ }
+ if (args.format !== 'text' && !isWsPreserveElement(Element$$1.fromDom(body))) {
+ args.content = Tools.trim(content);
+ } else {
+ args.content = content;
+ }
+ if (!args.no_events) {
+ editor.fire('GetContent', args);
+ }
+ return args.content;
+ };
+ var getContent$1 = function (editor, args) {
+ if (args === void 0) {
+ args = {};
+ }
+ return Option.from(editor.getBody()).fold(constant(args.format === 'tree' ? new Node$2('body', 11) : ''), function (body) {
+ return getContentFromBody(editor, args, body);
+ });
+ };
+
+ 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$$1) {
+ if (filter$$1.name === node.name) {
+ if (nodeMatches[filter$$1.name]) {
+ nodeMatches[filter$$1.name].nodes.push(node);
+ } else {
+ nodeMatches[filter$$1.name] = {
+ filter: filter$$1,
+ nodes: [node]
+ };
+ }
+ }
+ });
+ each(attributeFilters, function (filter$$1) {
+ if (typeof node.attr(filter$$1.name) === 'string') {
+ if (attrMatches[filter$$1.name]) {
+ attrMatches[filter$$1.name].nodes.push(node);
+ } else {
+ attrMatches[filter$$1.name] = {
+ filter: filter$$1,
+ nodes: [node]
+ };
+ }
+ }
+ });
+ });
+ }
+ for (var name in nodeMatches) {
+ if (nodeMatches.hasOwnProperty(name)) {
+ matches.push(nodeMatches[name]);
+ }
+ }
+ for (var name in attrMatches) {
+ if (attrMatches.hasOwnProperty(name)) {
+ matches.push(attrMatches[name]);
+ }
+ }
+ 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$1 = 'html';
+ var isTreeNode = function (content) {
+ return content instanceof Node$2;
+ };
+ var moveSelection = function (editor) {
+ if (EditorFocus.hasFocus(editor)) {
+ CaretFinder.firstPositionIn(editor.getBody()).each(function (pos) {
+ var node = pos.getNode();
+ var caretPos = NodeType.isTable(node) ? CaretFinder.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 = Settings.getForcedRootBlock(editor);
+ if (forcedRootBlockName && editor.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) {
+ content = padd;
+ content = editor.dom.createHTML(forcedRootBlockName, editor.settings.forced_root_block_attrs, content);
+ } else if (!content) {
+ content = '
';
+ }
+ setEditorHtml(editor, content);
+ editor.fire('SetContent', args);
+ } else {
+ if (args.format !== 'raw') {
+ content = Serializer({ validate: editor.validate }, editor.schema).serialize(editor.parser.parse(content, {
+ isRootContent: true,
+ insert: true
+ }));
+ }
+ args.content = isWsPreserveElement(Element$$1.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 = Serializer({ validate: editor.validate }, editor.schema).serialize(content);
+ args.content = isWsPreserveElement(Element$$1.fromDom(body)) ? html : Tools.trim(html);
+ setEditorHtml(editor, args.content);
+ if (!args.no_events) {
+ editor.fire('SetContent', args);
+ }
+ return content;
+ };
+ var setContent$1 = function (editor, content, args) {
+ if (args === void 0) {
+ args = {};
+ }
+ args.format = args.format ? args.format : defaultFormat$1;
+ args.set = true;
+ args.content = isTreeNode(content) ? '' : content;
+ if (!isTreeNode(content) && !args.no_events) {
+ editor.fire('BeforeSetContent', args);
+ content = args.content;
+ }
+ return Option.from(editor.getBody()).fold(constant(content), function (body) {
+ return isTreeNode(content) ? setContentTree(editor, body, content, args) : setContentString(editor, body, content, args);
+ });
+ };
+
+ var DOM$6 = DOMUtils$1.DOM;
+ var restoreOriginalStyles = function (editor) {
+ DOM$6.setStyle(editor.id, 'display', editor.orgDisplay);
+ };
+ var safeDestroy = function (x) {
+ return Option.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$6.unbind(form, 'submit reset', editor.formEventDelegate);
+ }
+ };
+ var remove$9 = 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$6.remove(element.nextSibling);
+ }
+ if (!editor.inline && body) {
+ restoreOriginalStyles(editor);
+ }
+ Events.fireRemove(editor);
+ editor.editorManager.remove(editor);
+ DOM$6.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 DOM$7 = DOMUtils$1.DOM;
+ var extend$4 = Tools.extend, each$l = Tools.each;
+ var resolve$4 = Tools.resolve;
+ var ie$2 = Env.ie;
+ var Editor = function (id, settings, editorManager) {
+ var self = this;
+ var documentBaseUrl = self.documentBaseUrl = editorManager.documentBaseURL;
+ var baseUri = editorManager.baseURI;
+ settings = getEditorSettings(self, id, documentBaseUrl, editorManager.defaultSettings, settings);
+ self.settings = settings;
+ AddOnManager.language = settings.language || 'en';
+ AddOnManager.languageLoad = settings.language_load;
+ AddOnManager.baseURL = editorManager.baseURL;
+ self.id = id;
+ self.setDirty(false);
+ self.plugins = {};
+ self.documentBaseURI = new URI(settings.document_base_url, { base_uri: baseUri });
+ self.baseURI = baseUri;
+ self.contentCSS = [];
+ self.contentStyles = [];
+ self.shortcuts = new Shortcuts(self);
+ self.loadedCSS = {};
+ self.editorCommands = new EditorCommands(self);
+ self.suffix = editorManager.suffix;
+ self.editorManager = editorManager;
+ self.inline = settings.inline;
+ self.buttons = {};
+ self.menuItems = {};
+ if (settings.cache_suffix) {
+ Env.cacheSuffix = settings.cache_suffix.replace(/^[\?\&]+/, '');
+ }
+ if (settings.override_viewport === false) {
+ Env.overrideViewPort = false;
+ }
+ editorManager.fire('SetupEditor', { editor: self });
+ self.execCallback('setup', self);
+ self.$ = DomQuery.overrideDefaults(function () {
+ return {
+ context: self.inline ? self.getBody() : self.getDoc(),
+ element: self.getBody()
+ };
+ });
+ };
+ Editor.prototype = {
+ render: function () {
+ Render.render(this);
+ },
+ focus: function (skipFocus) {
+ EditorFocus.focus(this, skipFocus);
+ },
+ hasFocus: function () {
+ return EditorFocus.hasFocus(this);
+ },
+ 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$4(scope) : 0;
+ callback = resolve$4(callback);
+ self.callbackLookup = self.callbackLookup || {};
+ self.callbackLookup[name] = {
+ func: callback,
+ scope: scope
+ };
+ }
+ return callback.apply(scope || self, Array.prototype.slice.call(arguments, 1));
+ },
+ translate: function (text) {
+ if (text && Tools.is(text, 'string')) {
+ var lang_1 = this.settings.language || 'en', i18n_1 = this.editorManager.i18n;
+ text = i18n_1.data[lang_1 + '.' + text] || text.replace(/\{\#([^\}]+)\}/g, function (a, b) {
+ return i18n_1.data[lang_1 + '.' + b] || '{#' + b + '}';
+ });
+ }
+ return this.editorManager.translate(text);
+ },
+ getLang: function (name, defaultVal) {
+ return this.editorManager.i18n.data[(this.settings.language || 'en') + '.' + name] || (defaultVal !== undefined ? defaultVal : '{#' + name + '}');
+ },
+ getParam: function (name, defaultVal, type) {
+ return getParam(this, name, defaultVal, type);
+ },
+ nodeChanged: function (args) {
+ this._nodeChangeDispatcher.nodeChanged(args);
+ },
+ addButton: function (name, settings) {
+ var self = this;
+ if (settings.cmd) {
+ settings.onclick = function () {
+ self.execCommand(settings.cmd);
+ };
+ }
+ if (settings.stateSelector && typeof settings.active === 'undefined') {
+ settings.active = false;
+ }
+ if (!settings.text && !settings.icon) {
+ settings.icon = name;
+ }
+ settings.tooltip = settings.tooltip || settings.title;
+ self.buttons[name] = settings;
+ },
+ addSidebar: function (name, settings) {
+ return Sidebar.add(this, name, settings);
+ },
+ addMenuItem: function (name, settings) {
+ var self = this;
+ if (settings.cmd) {
+ settings.onclick = function () {
+ self.execCommand(settings.cmd);
+ };
+ }
+ self.menuItems[name] = settings;
+ },
+ addContextToolbar: function (predicate, items) {
+ var self = this;
+ var selector;
+ self.contextToolbars = self.contextToolbars || [];
+ if (typeof predicate === 'string') {
+ selector = predicate;
+ predicate = function (elm) {
+ return self.dom.is(elm, selector);
+ };
+ }
+ self.contextToolbars.push({
+ id: Uuid.uuid('mcet'),
+ predicate: predicate,
+ items: items
+ });
+ },
+ addCommand: function (name, callback, scope) {
+ this.editorCommands.addCommand(name, callback, scope);
+ },
+ addQueryStateHandler: function (name, callback, scope) {
+ this.editorCommands.addQueryStateHandler(name, callback, scope);
+ },
+ addQueryValueHandler: function (name, callback, scope) {
+ this.editorCommands.addQueryValueHandler(name, callback, scope);
+ },
+ addShortcut: function (pattern, desc, cmdFunc, scope) {
+ this.shortcuts.add(pattern, desc, cmdFunc, scope);
+ },
+ execCommand: function (cmd, ui, value, args) {
+ return this.editorCommands.execCommand(cmd, ui, value, args);
+ },
+ queryCommandState: function (cmd) {
+ return this.editorCommands.queryCommandState(cmd);
+ },
+ queryCommandValue: function (cmd) {
+ return this.editorCommands.queryCommandValue(cmd);
+ },
+ queryCommandSupported: function (cmd) {
+ return this.editorCommands.queryCommandSupported(cmd);
+ },
+ show: function () {
+ var self = this;
+ if (self.hidden) {
+ self.hidden = false;
+ if (self.inline) {
+ self.getBody().contentEditable = true;
+ } else {
+ DOM$7.show(self.getContainer());
+ DOM$7.hide(self.id);
+ }
+ self.load();
+ self.fire('show');
+ }
+ },
+ hide: function () {
+ var self = this, doc = self.getDoc();
+ if (!self.hidden) {
+ if (ie$2 && 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$7.hide(self.getContainer());
+ DOM$7.setStyle(self.id, 'display', self.orgDisplay);
+ }
+ self.hidden = true;
+ self.fire('hide');
+ }
+ },
+ isHidden: function () {
+ return !!this.hidden;
+ },
+ setProgressState: function (state, time) {
+ this.fire('ProgressState', {
+ state: state,
+ time: time
+ });
+ },
+ load: function (args) {
+ var self = this;
+ var elm = self.getElement(), html;
+ if (self.removed) {
+ return '';
+ }
+ if (elm) {
+ args = args || {};
+ args.load = true;
+ html = self.setContent(elm.value !== undefined ? elm.value : elm.innerHTML, args);
+ args.element = elm;
+ if (!args.no_events) {
+ self.fire('LoadContent', args);
+ }
+ args.element = elm = null;
+ return html;
+ }
+ },
+ 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 (!/TEXTAREA|INPUT/i.test(elm.nodeName)) {
+ if (args.is_removing || !self.inline) {
+ elm.innerHTML = html;
+ }
+ if (form = DOM$7.getParent(self.id, 'form')) {
+ each$l(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;
+ },
+ setContent: function (content, args) {
+ return setContent$1(this, content, args);
+ },
+ getContent: function (args) {
+ return getContent$1(this, args);
+ },
+ insertContent: function (content, args) {
+ if (args) {
+ content = extend$4({ content: content }, args);
+ }
+ this.execCommand('mceInsertContent', false, content);
+ },
+ isDirty: function () {
+ return !this.isNotDirty;
+ },
+ setDirty: function (state) {
+ var oldState = !this.isNotDirty;
+ this.isNotDirty = !state;
+ if (state && state !== oldState) {
+ this.fire('dirty');
+ }
+ },
+ setMode: function (mode) {
+ setMode(this, mode);
+ },
+ getContainer: function () {
+ var self = this;
+ if (!self.container) {
+ self.container = DOM$7.get(self.editorContainer || self.id + '_parent');
+ }
+ return self.container;
+ },
+ getContentAreaContainer: function () {
+ return this.contentAreaContainer;
+ },
+ getElement: function () {
+ if (!this.targetElm) {
+ this.targetElm = DOM$7.get(this.id);
+ }
+ return this.targetElm;
+ },
+ getWin: function () {
+ var self = this;
+ var elm;
+ if (!self.contentWindow) {
+ elm = self.iframeElement;
+ if (elm) {
+ self.contentWindow = elm.contentWindow;
+ }
+ }
+ return self.contentWindow;
+ },
+ getDoc: function () {
+ var self = this;
+ var win;
+ if (!self.contentDocument) {
+ win = self.getWin();
+ if (win) {
+ self.contentDocument = win.document;
+ }
+ }
+ return self.contentDocument;
+ },
+ getBody: function () {
+ var doc = this.getDoc();
+ return this.bodyElement || (doc ? doc.body : null);
+ },
+ 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;
+ },
+ addVisual: function (elm) {
+ var self = this;
+ var settings = self.settings;
+ var dom = self.dom;
+ var cls;
+ elm = elm || self.getBody();
+ if (self.hasVisual === undefined) {
+ self.hasVisual = settings.visual;
+ }
+ each$l(dom.select('table,a', elm), function (elm) {
+ var value;
+ switch (elm.nodeName) {
+ case 'TABLE':
+ cls = settings.visual_table_class || 'mce-item-table';
+ value = dom.getAttrib(elm, 'border');
+ if ((!value || value === '0') && self.hasVisual) {
dom.addClass(elm, cls);
} else {
dom.removeClass(elm, cls);
}
+ return;
+ case 'A':
+ if (!dom.getAttrib(elm, 'href')) {
+ value = dom.getAttrib(elm, 'name') || elm.id;
+ cls = settings.visual_anchor_class || 'mce-item-anchor';
+ if (value && self.hasVisual) {
+ dom.addClass(elm, cls);
+ } else {
+ dom.removeClass(elm, cls);
+ }
+ }
+ return;
}
- return;
- }
- });
- self.fire('VisualAid', {
- element: elm,
- hasVisual: self.hasVisual
- });
- },
- remove: function () {
- remove$9(this);
- },
- destroy: function (automatic) {
- destroy(this, automatic);
- },
- uploadImages: function (callback) {
- return this.editorUpload.uploadImages(callback);
- },
- _scanForImages: function () {
- return this.editorUpload.scanForImages();
- }
- };
- extend$4(Editor.prototype, EditorObservable$1);
-
- var isEditorUIElement = function (elm) {
- return elm.className.toString().indexOf('mce-') !== -1;
- };
- var $_598dic7xjnlpayi4 = { isEditorUIElement: isEditorUIElement };
-
- var isManualNodeChange = function (e) {
- return e.type === 'nodechange' && e.selectionChange;
- };
- var registerPageMouseUp = function (editor, throttledStore) {
- var mouseUpPage = function () {
- throttledStore.throttle();
+ });
+ self.fire('VisualAid', {
+ element: elm,
+ hasVisual: self.hasVisual
+ });
+ },
+ remove: function () {
+ remove$9(this);
+ },
+ destroy: function (automatic) {
+ destroy(this, automatic);
+ },
+ uploadImages: function (callback) {
+ return this.editorUpload.uploadImages(callback);
+ },
+ _scanForImages: function () {
+ return this.editorUpload.scanForImages();
+ }
};
- DOMUtils$1.DOM.bind(document, 'mouseup', mouseUpPage);
- editor.on('remove', function () {
- DOMUtils$1.DOM.unbind(document, 'mouseup', mouseUpPage);
- });
- };
- var registerFocusOut = function (editor) {
- editor.on('focusout', function () {
- $_13pqgk4ojnlpaxqr.store(editor);
- });
- };
- var registerMouseUp = function (editor, throttledStore) {
- editor.on('mouseup touchend', function (e) {
- throttledStore.throttle();
- });
- };
- var registerEditorEvents = function (editor, throttledStore) {
- var browser = $_766rx4ojnlpawtd.detect().browser;
- if (browser.isIE()) {
- registerFocusOut(editor);
- } else {
- registerMouseUp(editor, throttledStore);
- }
- editor.on('keyup nodechange', function (e) {
- if (!isManualNodeChange(e)) {
- $_13pqgk4ojnlpaxqr.store(editor);
- }
- });
- };
- var register$3 = function (editor) {
- var throttledStore = first$1(function () {
- $_13pqgk4ojnlpaxqr.store(editor);
- }, 0);
- if (editor.inline) {
- registerPageMouseUp(editor, throttledStore);
- }
- editor.on('init', function () {
- registerEditorEvents(editor, throttledStore);
- });
- editor.on('remove', function () {
- throttledStore.cancel();
- });
- };
- var $_8hqfi17yjnlpayi5 = { register: register$3 };
+ extend$4(Editor.prototype, EditorObservable$1);
- var documentFocusInHandler;
- var DOM$8 = DOMUtils$1.DOM;
- var isEditorUIElement$1 = function (elm) {
- return $_598dic7xjnlpayi4.isEditorUIElement(elm);
- };
- var isUIElement = function (editor, elm) {
- var customSelector = editor ? editor.settings.custom_ui_selector : '';
- var parent$$1 = DOM$8.getParent(elm, function (elm) {
- return isEditorUIElement$1(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false);
- });
- return parent$$1 !== null;
- };
- var getActiveElement = function () {
- try {
- return document.activeElement;
- } catch (ex) {
- return document.body;
- }
- };
- var registerEvents = function (editorManager, e) {
- var editor = e.editor;
- $_8hqfi17yjnlpayi5.register(editor);
- editor.on('focusin', function () {
- var self$$1 = this;
- var focusedEditor = editorManager.focusedEditor;
- if (focusedEditor !== self$$1) {
- if (focusedEditor) {
- focusedEditor.fire('blur', { focusedEditor: self$$1 });
- }
- editorManager.setActive(self$$1);
- editorManager.focusedEditor = self$$1;
- self$$1.fire('focus', { blurredEditor: focusedEditor });
- self$$1.focus(true);
+ var isEditorUIElement = function (elm) {
+ return elm.className.toString().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$1.DOM.bind(document, 'mouseup', mouseUpPage);
+ editor.on('remove', function () {
+ DOMUtils$1.DOM.unbind(document, 'mouseup', mouseUpPage);
+ });
+ };
+ var registerFocusOut = function (editor) {
+ editor.on('focusout', function () {
+ SelectionBookmark.store(editor);
+ });
+ };
+ var registerMouseUp = function (editor, throttledStore) {
+ editor.on('mouseup touchend', function (e) {
+ throttledStore.throttle();
+ });
+ };
+ var registerEditorEvents = function (editor, throttledStore) {
+ var browser = PlatformDetection$1.detect().browser;
+ if (browser.isIE()) {
+ registerFocusOut(editor);
+ } else {
+ registerMouseUp(editor, throttledStore);
}
- });
- editor.on('focusout', function () {
- var self$$1 = this;
- $_2nbnh1ijnlpawpi.setEditorTimeout(self$$1, function () {
- var focusedEditor = editorManager.focusedEditor;
- if (!isUIElement(self$$1, getActiveElement()) && focusedEditor === self$$1) {
- self$$1.fire('blur', { focusedEditor: null });
- editorManager.focusedEditor = null;
+ editor.on('keyup nodechange', function (e) {
+ if (!isManualNodeChange(e)) {
+ SelectionBookmark.store(editor);
}
});
- });
- if (!documentFocusInHandler) {
- documentFocusInHandler = function (e) {
- var activeEditor = editorManager.activeEditor;
- var target;
- target = e.target;
- if (activeEditor && target.ownerDocument === document) {
- if (target !== document.body && !isUIElement(activeEditor, target) && editorManager.focusedEditor === activeEditor) {
- activeEditor.fire('blur', { focusedEditor: null });
+ };
+ var register$3 = function (editor) {
+ var throttledStore = first$1(function () {
+ SelectionBookmark.store(editor);
+ }, 0);
+ if (editor.inline) {
+ registerPageMouseUp(editor, throttledStore);
+ }
+ editor.on('init', function () {
+ registerEditorEvents(editor, throttledStore);
+ });
+ editor.on('remove', function () {
+ throttledStore.cancel();
+ });
+ };
+ var SelectionRestore = { register: register$3 };
+
+ var documentFocusInHandler;
+ var DOM$8 = DOMUtils$1.DOM;
+ var isEditorUIElement$1 = function (elm) {
+ return FocusManager.isEditorUIElement(elm);
+ };
+ var isUIElement = function (editor, elm) {
+ var customSelector = editor ? editor.settings.custom_ui_selector : '';
+ var parent$$1 = DOM$8.getParent(elm, function (elm) {
+ return isEditorUIElement$1(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false);
+ });
+ return parent$$1 !== null;
+ };
+ var getActiveElement = function () {
+ try {
+ return document.activeElement;
+ } catch (ex) {
+ return document.body;
+ }
+ };
+ var registerEvents = function (editorManager, e) {
+ var editor = e.editor;
+ SelectionRestore.register(editor);
+ editor.on('focusin', function () {
+ var self$$1 = this;
+ var focusedEditor = editorManager.focusedEditor;
+ if (focusedEditor !== self$$1) {
+ if (focusedEditor) {
+ focusedEditor.fire('blur', { focusedEditor: self$$1 });
+ }
+ editorManager.setActive(self$$1);
+ editorManager.focusedEditor = self$$1;
+ self$$1.fire('focus', { blurredEditor: focusedEditor });
+ self$$1.focus(true);
+ }
+ });
+ editor.on('focusout', function () {
+ var self$$1 = this;
+ Delay.setEditorTimeout(self$$1, function () {
+ var focusedEditor = editorManager.focusedEditor;
+ if (!isUIElement(self$$1, getActiveElement()) && focusedEditor === self$$1) {
+ self$$1.fire('blur', { focusedEditor: null });
editorManager.focusedEditor = null;
}
- }
- };
- DOM$8.bind(document, 'focusin', documentFocusInHandler);
- }
- };
- var unregisterDocumentEvents = function (editorManager, e) {
- if (editorManager.focusedEditor === e.editor) {
- editorManager.focusedEditor = null;
- }
- if (!editorManager.activeEditor) {
- DOM$8.unbind(document, 'focusin', documentFocusInHandler);
- documentFocusInHandler = null;
- }
- };
- var setup$15 = function (editorManager) {
- editorManager.on('AddEditor', curry(registerEvents, editorManager));
- editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager));
- };
- var $_8pld3r7wjnlpayhz = {
- setup: setup$15,
- isEditorUIElement: isEditorUIElement$1,
- isUIElement: isUIElement
- };
-
- var data = {};
- var code = 'en';
- var $_f6nmn17zjnlpayic = {
- setCode: function (newCode) {
- if (newCode) {
- code = newCode;
- this.rtl = this.data[newCode] ? this.data[newCode]._dir === 'rtl' : false;
- }
- },
- getCode: function () {
- return code;
- },
- rtl: false,
- add: function (code, items) {
- var langData = data[code];
- if (!langData) {
- data[code] = langData = {};
- }
- for (var name in items) {
- langData[name] = items[name];
- }
- this.setCode(code);
- },
- translate: function (text) {
- var langData = data[code] || {};
- var toString = function (obj) {
- if ($_1q1txeljnlpawsa.is(obj, 'function')) {
- return Object.prototype.toString.call(obj);
- }
- return !isEmpty(obj) ? '' + obj : '';
- };
- var isEmpty = function (text) {
- return text === '' || text === null || $_1q1txeljnlpawsa.is(text, 'undefined');
- };
- var getLangData = function (text) {
- text = toString(text);
- return $_1q1txeljnlpawsa.hasOwn(langData, text) ? toString(langData[text]) : text;
- };
- if (isEmpty(text)) {
- return '';
- }
- if ($_1q1txeljnlpawsa.is(text, 'object') && $_1q1txeljnlpawsa.hasOwn(text, 'raw')) {
- return toString(text.raw);
- }
- if ($_1q1txeljnlpawsa.is(text, 'array')) {
- var values_1 = text.slice(1);
- text = getLangData(text[0]).replace(/\{([0-9]+)\}/g, function ($1, $2) {
- return $_1q1txeljnlpawsa.hasOwn(values_1, $2) ? toString(values_1[$2]) : $1;
});
+ });
+ if (!documentFocusInHandler) {
+ documentFocusInHandler = function (e) {
+ var activeEditor = editorManager.activeEditor;
+ var target;
+ target = e.target;
+ if (activeEditor && target.ownerDocument === document) {
+ if (target !== document.body && !isUIElement(activeEditor, target) && editorManager.focusedEditor === activeEditor) {
+ activeEditor.fire('blur', { focusedEditor: null });
+ editorManager.focusedEditor = null;
+ }
+ }
+ };
+ DOM$8.bind(document, 'focusin', documentFocusInHandler);
}
- return getLangData(text).replace(/{context:\w+}$/, '');
- },
- data: data
- };
+ };
+ var unregisterDocumentEvents = function (editorManager, e) {
+ if (editorManager.focusedEditor === e.editor) {
+ editorManager.focusedEditor = null;
+ }
+ if (!editorManager.activeEditor) {
+ DOM$8.unbind(document, 'focusin', documentFocusInHandler);
+ documentFocusInHandler = null;
+ }
+ };
+ var setup$g = function (editorManager) {
+ editorManager.on('AddEditor', curry(registerEvents, editorManager));
+ editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager));
+ };
+ var FocusController = {
+ setup: setup$g,
+ isEditorUIElement: isEditorUIElement$1,
+ isUIElement: isUIElement
+ };
- var DOM$9 = DOMUtils$1.DOM;
- var explode$4 = $_1q1txeljnlpawsa.explode;
- var each$22 = $_1q1txeljnlpawsa.each;
- var extend$5 = $_1q1txeljnlpawsa.extend;
- var instanceCounter = 0;
- var beforeUnloadDelegate;
- var EditorManager;
- var boundGlobalEvents = false;
- var legacyEditors = [];
- var editors = [];
- var isValidLegacyKey = function (id) {
- return id !== 'length';
- };
- var globalEventDelegate = function (e) {
- each$22(EditorManager.get(), function (editor) {
- if (e.type === 'scroll') {
- editor.fire('ScrollWindow', e);
- } else {
- editor.fire('ResizeWindow', e);
+ var data = {};
+ var code = 'en';
+ var I18n = {
+ setCode: function (newCode) {
+ if (newCode) {
+ code = newCode;
+ this.rtl = this.data[newCode] ? this.data[newCode]._dir === 'rtl' : false;
+ }
+ },
+ getCode: function () {
+ return code;
+ },
+ rtl: false,
+ add: function (code, items) {
+ var langData = data[code];
+ if (!langData) {
+ data[code] = langData = {};
+ }
+ for (var name in items) {
+ langData[name] = items[name];
+ }
+ this.setCode(code);
+ },
+ translate: function (text) {
+ var langData = data[code] || {};
+ var toString = function (obj) {
+ if (Tools.is(obj, 'function')) {
+ return Object.prototype.toString.call(obj);
+ }
+ return !isEmpty(obj) ? '' + obj : '';
+ };
+ var isEmpty = function (text) {
+ return text === '' || text === null || Tools.is(text, 'undefined');
+ };
+ var getLangData = function (text) {
+ text = toString(text);
+ return Tools.hasOwn(langData, text) ? toString(langData[text]) : text;
+ };
+ if (isEmpty(text)) {
+ return '';
+ }
+ if (Tools.is(text, 'object') && Tools.hasOwn(text, 'raw')) {
+ return toString(text.raw);
+ }
+ if (Tools.is(text, 'array')) {
+ var values_1 = text.slice(1);
+ text = getLangData(text[0]).replace(/\{([0-9]+)\}/g, function ($1, $2) {
+ return Tools.hasOwn(values_1, $2) ? toString(values_1[$2]) : $1;
+ });
+ }
+ return getLangData(text).replace(/{context:\w+}$/, '');
+ },
+ data: data
+ };
+
+ var DOM$9 = DOMUtils$1.DOM;
+ var explode$4 = Tools.explode, each$m = Tools.each, extend$5 = Tools.extend;
+ var instanceCounter = 0, beforeUnloadDelegate, EditorManager, boundGlobalEvents = false;
+ var legacyEditors = [];
+ var editors = [];
+ var isValidLegacyKey = function (id) {
+ return id !== 'length';
+ };
+ var globalEventDelegate = function (e) {
+ each$m(EditorManager.get(), function (editor) {
+ if (e.type === 'scroll') {
+ editor.fire('ScrollWindow', e);
+ } else {
+ editor.fire('ResizeWindow', e);
+ }
+ });
+ };
+ 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 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;
- };
- EditorManager = {
- defaultSettings: {},
- $: DomQuery,
- majorVersion: '4',
- minorVersion: '8.4',
- releaseDate: '2018-10-23',
- editors: legacyEditors,
- i18n: $_f6nmn17zjnlpayic,
- activeEditor: null,
- settings: {},
- setup: function () {
- var self$$1 = this;
- var baseURL, documentBaseURL, suffix = '', preInit, src;
- documentBaseURL = URI.getDocumentBaseUrl(document.location);
- if (/^[^:]+:\/\/\/?[^\/]+\//.test(documentBaseURL)) {
- documentBaseURL = documentBaseURL.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, '');
- if (!/[\/\\]$/.test(documentBaseURL)) {
- documentBaseURL += '/';
+ };
+ 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;
}
}
- 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++) {
- src = scripts[i].src;
- var srcScript = src.substring(src.lastIndexOf('/'));
- if (/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(src)) {
- if (srcScript.indexOf('.min') !== -1) {
+ 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;
+ };
+ EditorManager = {
+ defaultSettings: {},
+ $: DomQuery,
+ majorVersion: '4',
+ minorVersion: '9.2',
+ releaseDate: '2018-12-17',
+ editors: legacyEditors,
+ i18n: I18n,
+ activeEditor: null,
+ settings: {},
+ setup: function () {
+ var self$$1 = this;
+ var baseURL, documentBaseURL, suffix = '', preInit, src;
+ documentBaseURL = URI.getDocumentBaseUrl(document.location);
+ if (/^[^:]+:\/\/\/?[^\/]+\//.test(documentBaseURL)) {
+ documentBaseURL = documentBaseURL.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, '');
+ if (!/[\/\\]$/.test(documentBaseURL)) {
+ documentBaseURL += '/';
+ }
+ }
+ 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++) {
+ src = scripts[i].src;
+ 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) {
+ src = document.currentScript.src;
+ if (src.indexOf('.min') !== -1) {
suffix = '.min';
}
baseURL = src.substring(0, src.lastIndexOf('/'));
+ }
+ }
+ self$$1.baseURL = new URI(documentBaseURL).toAbsolute(baseURL);
+ self$$1.documentBaseURL = documentBaseURL;
+ self$$1.baseURI = new URI(self$$1.baseURL);
+ self$$1.suffix = suffix;
+ FocusController.setup(self$$1);
+ },
+ overrideDefaults: function (defaultSettings) {
+ var baseUrl, suffix;
+ baseUrl = defaultSettings.base_url;
+ if (baseUrl) {
+ this.baseURL = new URI(this.documentBaseURL).toAbsolute(baseUrl.replace(/\/+$/, ''));
+ this.baseURI = new URI(this.baseURL);
+ }
+ suffix = defaultSettings.suffix;
+ if (defaultSettings.suffix) {
+ this.suffix = suffix;
+ }
+ this.defaultSettings = defaultSettings;
+ var pluginBaseUrls = defaultSettings.plugin_base_urls;
+ for (var name$$1 in pluginBaseUrls) {
+ AddOnManager.PluginManager.urls[name$$1] = pluginBaseUrls[name$$1];
+ }
+ },
+ init: function (settings) {
+ var self$$1 = this;
+ var result, invalidInlineTargets;
+ invalidInlineTargets = Tools.makeMap('area base basefont br col frame hr img input isindex link meta param embed source wbr track ' + 'colgroup option tbody tfoot thead tr 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 = elm.name;
+ if (id && !DOM$9.get(id)) {
+ id = elm.name;
+ } else {
+ id = DOM$9.uniqueId();
+ }
+ elm.setAttribute('id', id);
+ }
+ return id;
+ };
+ var execCallback = function (name$$1) {
+ var callback = settings[name$$1];
+ if (!callback) {
+ return;
+ }
+ return callback.apply(self$$1, Array.prototype.slice.call(arguments, 2));
+ };
+ var hasClass = function (elm, className) {
+ return className.constructor === RegExp ? className.test(elm.className) : DOM$9.hasClass(elm, className);
+ };
+ var findTargets = function (settings) {
+ var l, targets = [];
+ if (Env.ie && Env.ie < 11) {
+ ErrorReporter.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 [];
+ }
+ if (settings.types) {
+ each$m(settings.types, function (type) {
+ targets = targets.concat(DOM$9.select(type.selector));
+ });
+ return targets;
+ } else if (settings.selector) {
+ return DOM$9.select(settings.selector);
+ } else if (settings.target) {
+ return [settings.target];
+ }
+ switch (settings.mode) {
+ case 'exact':
+ l = settings.elements || '';
+ if (l.length > 0) {
+ each$m(explode$4(l), function (id) {
+ var elm;
+ if (elm = DOM$9.get(id)) {
+ targets.push(elm);
+ } else {
+ each$m(document.forms, function (f) {
+ each$m(f.elements, function (e) {
+ if (e.name === id) {
+ id = 'mce_editor_' + instanceCounter++;
+ DOM$9.setAttrib(e, 'id', id);
+ targets.push(e);
+ }
+ });
+ });
+ }
+ });
+ }
+ break;
+ case 'textareas':
+ case 'specific_textareas':
+ each$m(DOM$9.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;
}
- }
- if (!baseURL && document.currentScript) {
- src = document.currentScript.src;
- if (src.indexOf('.min') !== -1) {
- suffix = '.min';
- }
- baseURL = src.substring(0, src.lastIndexOf('/'));
- }
- }
- self$$1.baseURL = new URI(documentBaseURL).toAbsolute(baseURL);
- self$$1.documentBaseURL = documentBaseURL;
- self$$1.baseURI = new URI(self$$1.baseURL);
- self$$1.suffix = suffix;
- $_8pld3r7wjnlpayhz.setup(self$$1);
- },
- overrideDefaults: function (defaultSettings) {
- var baseUrl, suffix;
- baseUrl = defaultSettings.base_url;
- if (baseUrl) {
- this.baseURL = new URI(this.documentBaseURL).toAbsolute(baseUrl.replace(/\/+$/, ''));
- this.baseURI = new URI(this.baseURL);
- }
- suffix = defaultSettings.suffix;
- if (defaultSettings.suffix) {
- this.suffix = suffix;
- }
- this.defaultSettings = defaultSettings;
- var pluginBaseUrls = defaultSettings.plugin_base_urls;
- for (var name$$1 in pluginBaseUrls) {
- AddOnManager.PluginManager.urls[name$$1] = pluginBaseUrls[name$$1];
- }
- },
- init: function (settings) {
- var self$$1 = this;
- var result, invalidInlineTargets;
- invalidInlineTargets = $_1q1txeljnlpawsa.makeMap('area base basefont br col frame hr img input isindex link meta param embed source wbr track ' + 'colgroup option tbody tfoot thead tr 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 = elm.name;
- if (id && !DOM$9.get(id)) {
- id = elm.name;
- } else {
- id = DOM$9.uniqueId();
- }
- elm.setAttribute('id', id);
- }
- return id;
- };
- var execCallback = function (name$$1) {
- var callback = settings[name$$1];
- if (!callback) {
- return;
- }
- return callback.apply(self$$1, Array.prototype.slice.call(arguments, 2));
- };
- var hasClass = function (elm, className) {
- return className.constructor === RegExp ? className.test(elm.className) : DOM$9.hasClass(elm, className);
- };
- var findTargets = function (settings) {
- var l, targets = [];
- if ($_cseqobajnlpawll.ie && $_cseqobajnlpawll.ie < 11) {
- $_2xhw4u57jnlpaxu1.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 [];
- }
- if (settings.types) {
- each$22(settings.types, function (type) {
- targets = targets.concat(DOM$9.select(type.selector));
- });
return targets;
- } else if (settings.selector) {
- return DOM$9.select(settings.selector);
- } else if (settings.target) {
- return [settings.target];
- }
- switch (settings.mode) {
- case 'exact':
- l = settings.elements || '';
- if (l.length > 0) {
- each$22(explode$4(l), function (id) {
- var elm;
- if (elm = DOM$9.get(id)) {
- targets.push(elm);
+ };
+ 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$$1);
+ editors.push(editor);
+ editor.on('init', function () {
+ if (++initCount === targets.length) {
+ provideResults(editors);
+ }
+ });
+ editor.targetElm = editor.targetElm || targetElm;
+ editor.render();
+ };
+ DOM$9.unbind(window, 'ready', initEditors);
+ execCallback('onpageload');
+ targets = DomQuery.unique(findTargets(settings));
+ if (settings.types) {
+ each$m(settings.types, function (type) {
+ Tools.each(targets, function (elm) {
+ if (DOM$9.is(elm, type.selector)) {
+ createEditor(createId(elm), extend$5({}, settings, type), elm);
+ return false;
+ }
+ return true;
+ });
+ });
+ return;
+ }
+ Tools.each(targets, function (elm) {
+ purgeDestroyedEditor(self$$1.get(elm.id));
+ });
+ targets = Tools.grep(targets, function (elm) {
+ return !self$$1.get(elm.id);
+ });
+ if (targets.length === 0) {
+ provideResults([]);
+ } else {
+ each$m(targets, function (elm) {
+ if (isInvalidInlineTarget(settings, elm)) {
+ ErrorReporter.initError('Could not initialize inline editor on invalid inline target element', elm);
} else {
- each$22(document.forms, function (f) {
- each$22(f.elements, function (e) {
- if (e.name === id) {
- id = 'mce_editor_' + instanceCounter++;
- DOM$9.setAttrib(e, 'id', id);
- targets.push(e);
- }
- });
- });
+ createEditor(createId(elm), settings, elm);
}
});
}
- break;
- case 'textareas':
- case 'specific_textareas':
- each$22(DOM$9.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$$1);
- editors.push(editor);
- editor.on('init', function () {
- if (++initCount === targets.length) {
- provideResults(editors);
- }
- });
- editor.targetElm = editor.targetElm || targetElm;
- editor.render();
};
- DOM$9.unbind(window, 'ready', initEditors);
- execCallback('onpageload');
- targets = DomQuery.unique(findTargets(settings));
- if (settings.types) {
- each$22(settings.types, function (type) {
- $_1q1txeljnlpawsa.each(targets, function (elm) {
- if (DOM$9.is(elm, type.selector)) {
- createEditor(createId(elm), extend$5({}, settings, type), elm);
- return false;
- }
- return true;
- });
+ self$$1.settings = settings;
+ DOM$9.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$$1 = this;
+ var existingEditor;
+ existingEditor = legacyEditors[editor.id];
+ if (existingEditor === editor) {
+ return editor;
+ }
+ if (self$$1.get(editor.id) === null) {
+ if (isValidLegacyKey(editor.id)) {
+ legacyEditors[editor.id] = editor;
+ }
+ legacyEditors.push(editor);
+ editors.push(editor);
+ }
+ toggleGlobalEvents(true);
+ self$$1.activeEditor = editor;
+ self$$1.fire('AddEditor', { editor: editor });
+ if (!beforeUnloadDelegate) {
+ beforeUnloadDelegate = function () {
+ self$$1.fire('BeforeUnload');
+ };
+ DOM$9.bind(window, 'beforeunload', beforeUnloadDelegate);
+ }
+ return editor;
+ },
+ createEditor: function (id, settings) {
+ return this.add(new Editor(id, settings, this));
+ },
+ remove: function (selector) {
+ var self$$1 = this;
+ var i, editor;
+ if (!selector) {
+ for (i = editors.length - 1; i >= 0; i--) {
+ self$$1.remove(editors[i]);
+ }
+ return;
+ }
+ if (isString(selector)) {
+ each$m(DOM$9.select(selector), function (elm) {
+ editor = self$$1.get(elm.id);
+ if (editor) {
+ self$$1.remove(editor);
+ }
});
return;
}
- $_1q1txeljnlpawsa.each(targets, function (elm) {
- purgeDestroyedEditor(self$$1.get(elm.id));
- });
- targets = $_1q1txeljnlpawsa.grep(targets, function (elm) {
- return !self$$1.get(elm.id);
- });
- if (targets.length === 0) {
- provideResults([]);
- } else {
- each$22(targets, function (elm) {
- if (isInvalidInlineTarget(settings, elm)) {
- $_2xhw4u57jnlpaxu1.initError('Could not initialize inline editor on invalid inline target element', elm);
- } else {
- createEditor(createId(elm), settings, elm);
- }
- });
+ editor = selector;
+ if (isNull(self$$1.get(editor.id))) {
+ return null;
}
- };
- self$$1.settings = settings;
- DOM$9.bind(window, 'ready', initEditors);
- return new promiseObj(function (resolve) {
- if (result) {
- resolve(result);
- } else {
- provideResults = function (editors) {
- resolve(editors);
- };
+ if (removeEditorFromList(editor)) {
+ self$$1.fire('RemoveEditor', { editor: editor });
}
- });
- },
- 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$$1 = this;
- var existingEditor;
- existingEditor = legacyEditors[editor.id];
- if (existingEditor === editor) {
+ if (editors.length === 0) {
+ DOM$9.unbind(window, 'beforeunload', beforeUnloadDelegate);
+ }
+ editor.remove();
+ toggleGlobalEvents(editors.length > 0);
return editor;
- }
- if (self$$1.get(editor.id) === null) {
- if (isValidLegacyKey(editor.id)) {
- legacyEditors[editor.id] = editor;
- }
- legacyEditors.push(editor);
- editors.push(editor);
- }
- toggleGlobalEvents(true);
- self$$1.activeEditor = editor;
- self$$1.fire('AddEditor', { editor: editor });
- if (!beforeUnloadDelegate) {
- beforeUnloadDelegate = function () {
- self$$1.fire('BeforeUnload');
- };
- DOM$9.bind(window, 'beforeunload', beforeUnloadDelegate);
- }
- return editor;
- },
- createEditor: function (id, settings) {
- return this.add(new Editor(id, settings, this));
- },
- remove: function (selector) {
- var self$$1 = this;
- var i, editor;
- if (!selector) {
- for (i = editors.length - 1; i >= 0; i--) {
- self$$1.remove(editors[i]);
- }
- return;
- }
- if (isString(selector)) {
- each$22(DOM$9.select(selector), function (elm) {
- editor = self$$1.get(elm.id);
- if (editor) {
- self$$1.remove(editor);
+ },
+ execCommand: function (cmd, ui, value) {
+ var self$$1 = this, editor = self$$1.get(value);
+ switch (cmd) {
+ case 'mceAddEditor':
+ if (!self$$1.get(value)) {
+ new Editor(value, self$$1.settings, self$$1).render();
+ }
+ return true;
+ case 'mceRemoveEditor':
+ if (editor) {
+ editor.remove();
+ }
+ return true;
+ case 'mceToggleEditor':
+ if (!editor) {
+ self$$1.execCommand('mceAddEditor', 0, value);
+ return true;
+ }
+ if (editor.isHidden()) {
+ editor.show();
+ } else {
+ editor.hide();
}
- });
- return;
- }
- editor = selector;
- if (isNull(self$$1.get(editor.id))) {
- return null;
- }
- if (removeEditorFromList(editor)) {
- self$$1.fire('RemoveEditor', { editor: editor });
- }
- if (editors.length === 0) {
- DOM$9.unbind(window, 'beforeunload', beforeUnloadDelegate);
- }
- editor.remove();
- toggleGlobalEvents(editors.length > 0);
- return editor;
- },
- execCommand: function (cmd, ui, value) {
- var self$$1 = this, editor = self$$1.get(value);
- switch (cmd) {
- case 'mceAddEditor':
- if (!self$$1.get(value)) {
- new Editor(value, self$$1.settings, self$$1).render();
- }
- return true;
- case 'mceRemoveEditor':
- if (editor) {
- editor.remove();
- }
- return true;
- case 'mceToggleEditor':
- if (!editor) {
- self$$1.execCommand('mceAddEditor', 0, value);
return true;
}
- if (editor.isHidden()) {
- editor.show();
- } else {
- editor.hide();
+ if (self$$1.activeEditor) {
+ return self$$1.activeEditor.execCommand(cmd, ui, value);
}
- return true;
- }
- if (self$$1.activeEditor) {
- return self$$1.activeEditor.execCommand(cmd, ui, value);
- }
- return false;
- },
- triggerSave: function () {
- each$22(editors, function (editor) {
- editor.save();
- });
- },
- addI18n: function (code, items) {
- $_f6nmn17zjnlpayic.add(code, items);
- },
- translate: function (text) {
- return $_f6nmn17zjnlpayic.translate(text);
- },
- setActive: function (editor) {
- var activeEditor = this.activeEditor;
- if (this.activeEditor !== editor) {
- if (activeEditor) {
- activeEditor.fire('deactivate', { relatedTarget: editor });
+ return false;
+ },
+ triggerSave: function () {
+ each$m(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 });
}
- editor.fire('activate', { relatedTarget: activeEditor });
+ this.activeEditor = editor;
}
- this.activeEditor = editor;
- }
- };
- extend$5(EditorManager, $_c8v03c4tjnlpaxrw);
- EditorManager.setup();
- var EditorManager$1 = EditorManager;
+ };
+ extend$5(EditorManager, Observable);
+ EditorManager.setup();
+ var EditorManager$1 = EditorManager;
- function RangeUtils(dom) {
- var walk = function (rng, callback) {
- return $_6wozuu3djnlpaxew.walk(dom, rng, callback);
- };
- var split = $_fvyfxh69jnlpay1e.split;
- var normalize = function (rng) {
- return $_afh56j4mjnlpaxpx.normalize(dom, rng).fold(constant(false), function (normalizedRng) {
- rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset);
- rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset);
- return true;
- });
- };
- return {
- walk: walk,
- split: split,
- normalize: normalize
- };
- }
- (function (RangeUtils) {
- RangeUtils.compareRanges = $_3s8g9y4njnlpaxqj.isEq;
- RangeUtils.getCaretRangeFromPoint = $_445zg66wjnlpay63.fromPoint;
- RangeUtils.getSelectedNode = getSelectedNode;
- RangeUtils.getNode = getNode;
- }(RangeUtils || (RangeUtils = {})));
- var RangeUtils$1 = RangeUtils;
+ function RangeUtils(dom) {
+ var walk = function (rng, callback) {
+ return RangeWalk.walk(dom, rng, callback);
+ };
+ var split = SplitRange.split;
+ var normalize = function (rng) {
+ return NormalizeRange.normalize(dom, rng).fold(constant(false), function (normalizedRng) {
+ rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset);
+ rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset);
+ return true;
+ });
+ };
+ return {
+ walk: walk,
+ split: split,
+ normalize: normalize
+ };
+ }
+ (function (RangeUtils) {
+ RangeUtils.compareRanges = RangeCompare.isEq;
+ RangeUtils.getCaretRangeFromPoint = CaretRangeFromPoint.fromPoint;
+ RangeUtils.getSelectedNode = getSelectedNode;
+ RangeUtils.getNode = getNode;
+ }(RangeUtils || (RangeUtils = {})));
+ var RangeUtils$1 = RangeUtils;
- var min = Math.min;
- var max = Math.max;
- var round$2 = Math.round;
- var relativePosition = function (rect, targetRect, rel) {
- var x, y, w, h, targetW, targetH;
- x = targetRect.x;
- y = targetRect.y;
- w = rect.w;
- h = rect.h;
- targetW = targetRect.w;
- targetH = targetRect.h;
- rel = (rel || '').split('');
- if (rel[0] === 'b') {
- y += targetH;
- }
- if (rel[1] === 'r') {
- x += targetW;
- }
- if (rel[0] === 'c') {
- y += round$2(targetH / 2);
- }
- if (rel[1] === 'c') {
- x += round$2(targetW / 2);
- }
- if (rel[3] === 'b') {
- y -= h;
- }
- if (rel[4] === 'r') {
- x -= w;
- }
- if (rel[3] === 'c') {
- y -= round$2(h / 2);
- }
- if (rel[4] === 'c') {
- x -= round$2(w / 2);
- }
- return create$3(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];
+ var min = Math.min, max = Math.max, round$2 = Math.round;
+ var relativePosition = function (rect, targetRect, rel) {
+ var x, y, w, h, targetW, targetH;
+ x = targetRect.x;
+ y = targetRect.y;
+ w = rect.w;
+ h = rect.h;
+ targetW = targetRect.w;
+ targetH = targetRect.h;
+ rel = (rel || '').split('');
+ if (rel[0] === 'b') {
+ y += targetH;
+ }
+ if (rel[1] === 'r') {
+ x += targetW;
+ }
+ if (rel[0] === 'c') {
+ y += round$2(targetH / 2);
+ }
+ if (rel[1] === 'c') {
+ x += round$2(targetW / 2);
+ }
+ if (rel[3] === 'b') {
+ y -= h;
+ }
+ if (rel[4] === 'r') {
+ x -= w;
+ }
+ if (rel[3] === 'c') {
+ y -= round$2(h / 2);
+ }
+ if (rel[4] === 'c') {
+ x -= round$2(w / 2);
+ }
+ return create$3(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$3(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2);
- };
- var intersect = function (rect, cropRect) {
- var x1, y1, x2, y2;
- x1 = max(rect.x, cropRect.x);
- y1 = max(rect.y, cropRect.y);
- x2 = min(rect.x + rect.w, cropRect.x + cropRect.w);
- y2 = min(rect.y + rect.h, cropRect.y + cropRect.h);
- if (x2 - x1 < 0 || y2 - y1 < 0) {
return null;
- }
- return create$3(x1, y1, x2 - x1, y2 - y1);
- };
- var clamp$1 = function (rect, clampRect, fixedSize) {
- var underflowX1, underflowY1, overflowX2, overflowY2, x1, y1, x2, y2, cx2, cy2;
- x1 = rect.x;
- y1 = rect.y;
- x2 = rect.x + rect.w;
- y2 = rect.y + rect.h;
- cx2 = clampRect.x + clampRect.w;
- cy2 = clampRect.y + clampRect.h;
- underflowX1 = max(0, clampRect.x - x1);
- underflowY1 = max(0, clampRect.y - y1);
- overflowX2 = max(0, x2 - cx2);
- 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$3(x1, y1, x2 - x1, y2 - y1);
- };
- var create$3 = function (x, y, w, h) {
- return {
- x: x,
- y: y,
- w: w,
- h: h
};
- };
- var fromClientRect = function (clientRect) {
- return create$3(clientRect.left, clientRect.top, clientRect.width, clientRect.height);
- };
- var $_f1a1rs81jnlpayiu = {
- inflate: inflate,
- relativePosition: relativePosition,
- findBestRelativePosition: findBestRelativePosition,
- intersect: intersect,
- clamp: clamp$1,
- create: create$3,
- fromClientRect: fromClientRect
- };
+ var inflate = function (rect, w, h) {
+ return create$3(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2);
+ };
+ var intersect = function (rect, cropRect) {
+ var x1, y1, x2, y2;
+ x1 = max(rect.x, cropRect.x);
+ y1 = max(rect.y, cropRect.y);
+ x2 = min(rect.x + rect.w, cropRect.x + cropRect.w);
+ y2 = min(rect.y + rect.h, cropRect.y + cropRect.h);
+ if (x2 - x1 < 0 || y2 - y1 < 0) {
+ return null;
+ }
+ return create$3(x1, y1, x2 - x1, y2 - y1);
+ };
+ var clamp$1 = function (rect, clampRect, fixedSize) {
+ var underflowX1, underflowY1, overflowX2, overflowY2, x1, y1, x2, y2, cx2, cy2;
+ x1 = rect.x;
+ y1 = rect.y;
+ x2 = rect.x + rect.w;
+ y2 = rect.y + rect.h;
+ cx2 = clampRect.x + clampRect.w;
+ cy2 = clampRect.y + clampRect.h;
+ underflowX1 = max(0, clampRect.x - x1);
+ underflowY1 = max(0, clampRect.y - y1);
+ overflowX2 = max(0, x2 - cx2);
+ 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$3(x1, y1, x2 - x1, y2 - y1);
+ };
+ var create$3 = function (x, y, w, h) {
+ return {
+ x: x,
+ y: y,
+ w: w,
+ h: h
+ };
+ };
+ var fromClientRect = function (clientRect) {
+ return create$3(clientRect.left, clientRect.top, clientRect.width, clientRect.height);
+ };
+ var Rect = {
+ inflate: inflate,
+ relativePosition: relativePosition,
+ findBestRelativePosition: findBestRelativePosition,
+ intersect: intersect,
+ clamp: clamp$1,
+ create: create$3,
+ fromClientRect: fromClientRect
+ };
- var types = {};
- var $_4cmhbp82jnlpayiz = {
- add: function (type, typeClass) {
- types[type.toLowerCase()] = typeClass;
- },
- has: function (type) {
- return !!types[type.toLowerCase()];
- },
- get: function (type) {
- var lctype = type.toLowerCase();
- var controlType = types.hasOwnProperty(lctype) ? types[lctype] : null;
- if (controlType === null) {
- throw new Error('Could not find module for type: ' + type);
- }
- return controlType;
- },
- create: function (type, settings) {
- var ControlType;
- if (typeof type === 'string') {
- settings = settings || {};
- settings.type = type;
- } else {
- settings = type;
- type = settings.type;
- }
- type = type.toLowerCase();
- ControlType = types[type];
- if (!ControlType) {
- throw new Error('Could not find control by type: ' + type);
- }
- ControlType = new ControlType(settings);
- ControlType.type = type;
- return ControlType;
- }
- };
-
- var each$23 = $_1q1txeljnlpawsa.each;
- var extend$6 = $_1q1txeljnlpawsa.extend;
- var extendClass;
- var initializing;
- var Class$1 = function () {
- };
- Class$1.extend = extendClass = function (prop) {
- var self = this;
- var _super = self.prototype;
- var prototype, name, member;
- var Class = function () {
- var i, mixins, mixin;
- var self = this;
- if (!initializing) {
- if (self.init) {
- self.init.apply(self, arguments);
+ var types = {};
+ var Factory = {
+ add: function (type, typeClass) {
+ types[type.toLowerCase()] = typeClass;
+ },
+ has: function (type) {
+ return !!types[type.toLowerCase()];
+ },
+ get: function (type) {
+ var lctype = type.toLowerCase();
+ var controlType = types.hasOwnProperty(lctype) ? types[lctype] : null;
+ if (controlType === null) {
+ throw new Error('Could not find module for type: ' + type);
}
- mixins = self.Mixins;
- if (mixins) {
- i = mixins.length;
- while (i--) {
- mixin = mixins[i];
- if (mixin.init) {
- mixin.init.apply(self, arguments);
+ return controlType;
+ },
+ create: function (type, settings) {
+ var ControlType;
+ if (typeof type === 'string') {
+ settings = settings || {};
+ settings.type = type;
+ } else {
+ settings = type;
+ type = settings.type;
+ }
+ type = type.toLowerCase();
+ ControlType = types[type];
+ if (!ControlType) {
+ throw new Error('Could not find control by type: ' + type);
+ }
+ ControlType = new ControlType(settings);
+ ControlType.type = type;
+ return ControlType;
+ }
+ };
+
+ var each$n = Tools.each, extend$6 = Tools.extend;
+ var extendClass, initializing;
+ var Class = function () {
+ };
+ Class.extend = extendClass = function (prop) {
+ var self = this;
+ var _super = self.prototype;
+ var prototype, name, member;
+ 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;
- var ret;
- self._super = _super[name];
- ret = fn.apply(self, arguments);
- self._super = tmp;
- return ret;
};
- };
- initializing = true;
- prototype = new self();
- initializing = false;
- if (prop.Mixins) {
- each$23(prop.Mixins, function (mixin) {
- for (var name_1 in mixin) {
- if (name_1 !== 'init') {
- prop[name_1] = mixin[name_1];
- }
- }
- });
- if (_super.Mixins) {
- prop.Mixins = _super.Mixins.concat(prop.Mixins);
- }
- }
- if (prop.Methods) {
- each$23(prop.Methods.split(','), function (name) {
- prop[name] = dummy;
- });
- }
- if (prop.Properties) {
- each$23(prop.Properties.split(','), function (name) {
- var fieldName = '_' + name;
- prop[name] = function (value) {
+ var dummy = function () {
+ return this;
+ };
+ var createMethod = function (name, fn) {
+ return function () {
var self = this;
- if (value !== undefined) {
- self[fieldName] = value;
- return self;
+ var tmp = self._super;
+ var ret;
+ self._super = _super[name];
+ ret = fn.apply(self, arguments);
+ self._super = tmp;
+ return ret;
+ };
+ };
+ initializing = true;
+ prototype = new self();
+ initializing = false;
+ if (prop.Mixins) {
+ each$n(prop.Mixins, function (mixin) {
+ for (var name_1 in mixin) {
+ if (name_1 !== 'init') {
+ prop[name_1] = mixin[name_1];
+ }
}
- return self[fieldName];
- };
- });
- }
- if (prop.Statics) {
- each$23(prop.Statics, function (func, name) {
- Class[name] = func;
- });
- }
- if (prop.Defaults && _super.Defaults) {
- prop.Defaults = extend$6({}, _super.Defaults, prop.Defaults);
- }
- for (name in prop) {
- member = prop[name];
- if (typeof member === 'function' && _super[name]) {
- prototype[name] = createMethod(name, member);
- } else {
- prototype[name] = member;
+ });
+ if (_super.Mixins) {
+ prop.Mixins = _super.Mixins.concat(prop.Mixins);
+ }
}
- }
- Class.prototype = prototype;
- Class.constructor = Class;
- Class.extend = extendClass;
- return Class;
- };
+ if (prop.Methods) {
+ each$n(prop.Methods.split(','), function (name) {
+ prop[name] = dummy;
+ });
+ }
+ if (prop.Properties) {
+ each$n(prop.Properties.split(','), function (name) {
+ var fieldName = '_' + name;
+ prop[name] = function (value) {
+ var self = this;
+ if (value !== undefined) {
+ self[fieldName] = value;
+ return self;
+ }
+ return self[fieldName];
+ };
+ });
+ }
+ if (prop.Statics) {
+ each$n(prop.Statics, function (func, name) {
+ Class[name] = func;
+ });
+ }
+ if (prop.Defaults && _super.Defaults) {
+ prop.Defaults = extend$6({}, _super.Defaults, prop.Defaults);
+ }
+ for (name in prop) {
+ member = prop[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;
- var max$1 = Math.max;
- var round$3 = 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, d, minRGB, maxRGB;
- h = 0;
- s = 0;
- v = 0;
- r = r / 255;
- g = g / 255;
- b = b / 255;
- minRGB = min$1(r, min$1(g, b));
- maxRGB = max$1(r, max$1(g, b));
- if (minRGB === maxRGB) {
- v = minRGB;
+ var min$1 = Math.min, max$1 = Math.max, round$3 = 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, d, minRGB, maxRGB;
+ h = 0;
+ s = 0;
+ v = 0;
+ r = r / 255;
+ g = g / 255;
+ b = b / 255;
+ minRGB = min$1(r, min$1(g, b));
+ maxRGB = max$1(r, max$1(g, b));
+ if (minRGB === maxRGB) {
+ v = minRGB;
+ return {
+ h: 0,
+ s: 0,
+ v: v * 100
+ };
+ }
+ 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: 0,
- s: 0,
- v: v * 100
+ h: round$3(h),
+ s: round$3(s * 100),
+ v: round$3(v * 100)
};
- }
- 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$3(h),
- s: round$3(s * 100),
- v: round$3(v * 100)
};
- };
- var hsvToRgb = function (hue, saturation, brightness) {
- var side, chroma, x, match;
- 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$3(255 * brightness);
- return;
- }
- side = hue / 60;
- chroma = brightness * saturation;
- x = chroma * (1 - Math.abs(side % 2 - 1));
- 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$3(255 * (r + match));
- g = round$3(255 * (g + match));
- b = round$3(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);
+ var hsvToRgb = function (hue, saturation, brightness) {
+ var side, chroma, x, match;
+ 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$3(255 * brightness);
+ return;
}
- } 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);
+ side = hue / 60;
+ chroma = brightness * saturation;
+ x = chroma * (1 - Math.abs(side % 2 - 1));
+ 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$3(255 * (r + match));
+ g = round$3(255 * (g + match));
+ b = round$3(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);
}
- r = r < 0 ? 0 : r > 255 ? 255 : r;
- g = g < 0 ? 0 : g > 255 ? 255 : g;
- b = b < 0 ? 0 : b > 255 ? 255 : b;
+ self.toRgb = toRgb;
+ self.toHsv = toHsv;
+ self.toHex = toHex;
+ self.parse = parse;
return self;
};
- if (value) {
- parse(value);
- }
- self.toRgb = toRgb;
- self.toHsv = toHsv;
- self.toHex = toHex;
- self.parse = parse;
- return self;
- };
- var serialize = function (o, quote) {
- var i, v, t, name;
- quote = quote || '"';
- if (o === null) {
- return 'null';
- }
- t = typeof o;
- if (t === 'string') {
- v = '\bb\tt\nn\ff\rr""\'\'\\\\';
- return quote + o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g, function (a, b) {
- if (quote === '"' && a === '\'') {
- return a;
- }
- i = v.indexOf(b);
- if (i + 1) {
- return '\\' + v.charAt(i + 1);
- }
- a = b.charCodeAt().toString(16);
- return '\\u' + '0000'.substring(a.length) + a;
- }) + quote;
- }
- if (t === 'object') {
- if (o.hasOwnProperty && Object.prototype.toString.call(o) === '[object Array]') {
- for (i = 0, v = '['; i < o.length; i++) {
- v += (i > 0 ? ',' : '') + serialize(o[i], quote);
- }
- return v + ']';
+ var serialize = function (o, quote) {
+ var i, v, t, name;
+ quote = quote || '"';
+ if (o === null) {
+ return 'null';
}
- v = '{';
- for (name in o) {
- if (o.hasOwnProperty(name)) {
- v += typeof o[name] !== 'function' ? (v.length > 1 ? ',' + quote : quote) + name + quote + ':' + serialize(o[name], quote) : '';
- }
- }
- return v + '}';
- }
- return '' + o;
- };
- var $_aw5rjw85jnlpayja = {
- serialize: serialize,
- parse: function (text) {
- try {
- return JSON.parse(text);
- } catch (ex) {
- }
- }
- };
-
- var $_oa3la86jnlpayji = {
- callbacks: {},
- count: 0,
- send: function (settings) {
- var self = this, dom = DOMUtils$1.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 = {
- 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);
+ t = typeof o;
+ if (t === 'string') {
+ v = '\bb\tt\nn\ff\rr""\'\'\\\\';
+ return quote + o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g, function (a, b) {
+ if (quote === '"' && a === '\'') {
+ return a;
+ }
+ i = v.indexOf(b);
+ if (i + 1) {
+ return '\\' + v.charAt(i + 1);
+ }
+ a = b.charCodeAt().toString(16);
+ return '\\u' + '0000'.substring(a.length) + a;
+ }) + quote;
+ }
+ if (t === 'object') {
+ if (o.hasOwnProperty && Object.prototype.toString.call(o) === '[object Array]') {
+ for (i = 0, v = '['; i < o.length; i++) {
+ v += (i > 0 ? ',' : '') + serialize(o[i], quote);
+ }
+ return v + ']';
+ }
+ v = '{';
+ for (name in o) {
+ if (o.hasOwnProperty(name)) {
+ v += typeof o[name] !== 'function' ? (v.length > 1 ? ',' + quote : quote) + name + quote + ':' + serialize(o[name], quote) : '';
+ }
+ }
+ return v + '}';
+ }
+ return '' + o;
+ };
+ var JSON$1 = {
+ 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$1.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 = {
+ 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 {
+ 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 ? false : true;
+ settings.data = settings.data || '';
+ XHR.fire('beforeInitialize', { settings: settings });
+ xhr = XMLHttpRequest();
+ if (xhr) {
+ 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();
}
- xhr = null;
- } else {
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 ? false : true;
- settings.data = settings.data || '';
- XHR.fire('beforeInitialize', { settings: settings });
- xhr = XMLHttpRequest();
- if (xhr) {
- 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) {
- $_1q1txeljnlpawsa.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();
- }
- setTimeout(ready, 10);
}
- }
- };
- $_1q1txeljnlpawsa.extend(XHR, $_c8v03c4tjnlpaxrw);
+ };
+ Tools.extend(XHR, Observable);
- var extend$7 = $_1q1txeljnlpawsa.extend;
- var JSONRequest = function (settings) {
- this.settings = extend$7({}, 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;
- args = extend$7(this.settings, args);
- args.success = function (c, x) {
- c = $_aw5rjw85jnlpayja.parse(c);
- if (typeof c === 'undefined') {
- c = { error: 'JSON Parse error.' };
- }
- if (c.error) {
- ecb.call(args.error_scope || args.scope, c.error, x);
- } else {
- scb.call(args.success_scope || args.scope, c.result);
- }
- };
- args.error = function (ty, x) {
- if (ecb) {
- ecb.call(args.error_scope || args.scope, ty, x);
- }
- };
- args.data = $_aw5rjw85jnlpayja.serialize({
- id: args.id || 'c' + this.count++,
- method: args.method,
- params: args.params
- });
- args.content_type = 'application/json';
- XHR.send(args);
- }
- };
-
- var create$4 = 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$$1;
- try {
- localStorage$$1 = window.localStorage;
- } catch (e) {
- localStorage$$1 = create$4();
- }
- var LocalStorage = localStorage$$1;
-
- var tinymce = EditorManager$1;
- var publicApi = {
- geom: { Rect: $_f1a1rs81jnlpayiu },
- util: {
- Promise: promiseObj,
- Delay: $_2nbnh1ijnlpawpi,
- Tools: $_1q1txeljnlpawsa,
- VK: $_1qv0695yjnlpaxyk,
- URI: URI,
- Class: Class$1,
- EventDispatcher: Dispatcher,
- Observable: $_c8v03c4tjnlpaxrw,
- I18n: $_f6nmn17zjnlpayic,
- XHR: XHR,
- JSON: $_aw5rjw85jnlpayja,
- JSONRequest: JSONRequest,
- JSONP: $_oa3la86jnlpayji,
- LocalStorage: LocalStorage,
- Color: Color
- },
- dom: {
- EventUtils: EventUtils,
- Sizzle: Sizzle,
- DomQuery: DomQuery,
- TreeWalker: TreeWalker,
- DOMUtils: DOMUtils$1,
- ScriptLoader: ScriptLoader,
- RangeUtils: RangeUtils$1,
- Serializer: DomSerializer$1,
- ControlSelection: ControlSelection,
- BookmarkManager: BookmarkManager$1,
- Selection: Selection$1,
- Event: EventUtils.Event
- },
- html: {
- Styles: Styles,
- Entities: $_bea7j51sjnlpax2u,
- Node: Node$2,
- Schema: Schema,
- SaxParser: SaxParser$1,
- DomParser: DomParser,
- Writer: Writer,
- Serializer: HtmlSerializer
- },
- ui: { Factory: $_4cmhbp82jnlpayiz },
- Env: $_cseqobajnlpawll,
- AddOnManager: AddOnManager,
- Annotator: Annotator,
- Formatter: Formatter,
- UndoManager: UndoManager,
- EditorCommands: EditorCommands,
- WindowManager: WindowManager,
- NotificationManager: NotificationManager,
- EditorObservable: EditorObservable$1,
- Shortcuts: Shortcuts,
- Editor: Editor,
- FocusManager: $_598dic7xjnlpayi4,
- EditorManager: EditorManager$1,
- DOM: DOMUtils$1.DOM,
- ScriptLoader: ScriptLoader.ScriptLoader,
- PluginManager: AddOnManager.PluginManager,
- ThemeManager: AddOnManager.ThemeManager,
- trim: $_1q1txeljnlpawsa.trim,
- isArray: $_1q1txeljnlpawsa.isArray,
- is: $_1q1txeljnlpawsa.is,
- toArray: $_1q1txeljnlpawsa.toArray,
- makeMap: $_1q1txeljnlpawsa.makeMap,
- each: $_1q1txeljnlpawsa.each,
- map: $_1q1txeljnlpawsa.map,
- grep: $_1q1txeljnlpawsa.grep,
- inArray: $_1q1txeljnlpawsa.inArray,
- extend: $_1q1txeljnlpawsa.extend,
- create: $_1q1txeljnlpawsa.create,
- walk: $_1q1txeljnlpawsa.walk,
- createNS: $_1q1txeljnlpawsa.createNS,
- resolve: $_1q1txeljnlpawsa.resolve,
- explode: $_1q1txeljnlpawsa.explode,
- _addCacheSuffix: $_1q1txeljnlpawsa._addCacheSuffix,
- isOpera: $_cseqobajnlpawll.opera,
- isWebKit: $_cseqobajnlpawll.webkit,
- isIE: $_cseqobajnlpawll.ie,
- isGecko: $_cseqobajnlpawll.gecko,
- isMac: $_cseqobajnlpawll.mac
- };
- tinymce = $_1q1txeljnlpawsa.extend(tinymce, publicApi);
- var Tinymce = tinymce;
-
- var exportToModuleLoaders = function (tinymce) {
- if (typeof module === 'object') {
- try {
- module.exports = tinymce;
- } catch (_) {
+ var extend$7 = Tools.extend;
+ var JSONRequest = function (settings) {
+ this.settings = extend$7({}, 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;
+ args = extend$7(this.settings, args);
+ args.success = function (c, x) {
+ c = JSON$1.parse(c);
+ if (typeof c === 'undefined') {
+ c = { error: 'JSON Parse error.' };
+ }
+ if (c.error) {
+ ecb.call(args.error_scope || args.scope, c.error, x);
+ } else {
+ scb.call(args.success_scope || args.scope, c.result);
+ }
+ };
+ args.error = function (ty, x) {
+ if (ecb) {
+ ecb.call(args.error_scope || args.scope, ty, x);
+ }
+ };
+ args.data = JSON$1.serialize({
+ id: args.id || 'c' + this.count++,
+ method: args.method,
+ params: args.params
+ });
+ args.content_type = 'application/json';
+ XHR.send(args);
}
+ };
+
+ var create$4 = 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$$1;
+ try {
+ localStorage$$1 = window.localStorage;
+ } catch (e) {
+ localStorage$$1 = create$4();
}
- };
- var exportToWindowGlobal = function (tinymce) {
- window.tinymce = tinymce;
- window.tinyMCE = tinymce;
- };
- exportToWindowGlobal(Tinymce);
- exportToModuleLoaders(Tinymce);
+ var LocalStorage = localStorage$$1;
+
+ var tinymce = EditorManager$1;
+ var publicApi = {
+ geom: { Rect: Rect },
+ util: {
+ Promise: promiseObj,
+ Delay: Delay,
+ Tools: Tools,
+ VK: VK,
+ URI: URI,
+ Class: Class,
+ EventDispatcher: Dispatcher,
+ Observable: Observable,
+ I18n: I18n,
+ XHR: XHR,
+ JSON: JSON$1,
+ JSONRequest: JSONRequest,
+ JSONP: JSONP,
+ LocalStorage: LocalStorage,
+ Color: Color
+ },
+ dom: {
+ EventUtils: EventUtils,
+ Sizzle: Sizzle,
+ DomQuery: DomQuery,
+ TreeWalker: TreeWalker,
+ DOMUtils: DOMUtils$1,
+ ScriptLoader: ScriptLoader,
+ RangeUtils: RangeUtils$1,
+ Serializer: Serializer$1,
+ ControlSelection: ControlSelection,
+ BookmarkManager: BookmarkManager$1,
+ Selection: Selection,
+ Event: EventUtils.Event
+ },
+ html: {
+ Styles: Styles,
+ Entities: Entities,
+ Node: Node$2,
+ Schema: Schema,
+ SaxParser: SaxParser$1,
+ DomParser: DomParser,
+ Writer: Writer,
+ Serializer: Serializer
+ },
+ ui: { Factory: Factory },
+ Env: Env,
+ AddOnManager: AddOnManager,
+ Annotator: Annotator,
+ Formatter: Formatter,
+ UndoManager: UndoManager,
+ EditorCommands: EditorCommands,
+ WindowManager: WindowManager,
+ NotificationManager: NotificationManager,
+ EditorObservable: EditorObservable$1,
+ Shortcuts: Shortcuts,
+ Editor: Editor,
+ FocusManager: FocusManager,
+ EditorManager: EditorManager$1,
+ DOM: DOMUtils$1.DOM,
+ ScriptLoader: ScriptLoader.ScriptLoader,
+ PluginManager: AddOnManager.PluginManager,
+ ThemeManager: AddOnManager.ThemeManager,
+ 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
+ };
+ tinymce = Tools.extend(tinymce, publicApi);
+ var Tinymce = tinymce;
+
+ 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);
}());
})();
@@ -62545,7 +62205,7 @@ exports.MarkerCluster = MarkerCluster;
branding: false,
language: 'fr_FR',
selector: 'input.description',
- content_css: '/assets/application-3f59179b0c2a06bb661d73a1de82e1f5c30bdb9d70ad1ec1ee9f383e4b4d373f.css',
+ content_css: '/assets/application-5758a3be3fc4c726f3fa040065dd207d269a61ffaeef8e18cf7bae20669ce52d.css',
entity_encoding: 'raw',
add_unload_trigger: true,
browser_spellcheck: true,
diff --git a/public/assets/application-f586e2a35afa70504e05ea3a2dc1a9a508dadcb36c9365a3785696e4197a9348.js.gz b/public/assets/application-f586e2a35afa70504e05ea3a2dc1a9a508dadcb36c9365a3785696e4197a9348.js.gz
new file mode 100644
index 00000000..28e322b1
Binary files /dev/null and b/public/assets/application-f586e2a35afa70504e05ea3a2dc1a9a508dadcb36c9365a3785696e4197a9348.js.gz differ
diff --git a/public/assets/font-awesome/fa-brands-400-05dbc51654b96590d176c27efbcef2cf4ac0497499a9f28b731b73eea399070c.woff2 b/public/assets/font-awesome/fa-brands-400-05dbc51654b96590d176c27efbcef2cf4ac0497499a9f28b731b73eea399070c.woff2
deleted file mode 100644
index 4a07e407..00000000
Binary files a/public/assets/font-awesome/fa-brands-400-05dbc51654b96590d176c27efbcef2cf4ac0497499a9f28b731b73eea399070c.woff2 and /dev/null differ
diff --git a/public/assets/font-awesome/fa-brands-400-9158ee2ef88ea648444ba1c9fcea310baa1e5e4e5fe86e338dcd29fcb081cfc7.eot b/public/assets/font-awesome/fa-brands-400-3b3fbc59f287f33a3870175b19eb94d7cbb546af2fdbab29df91ba834352d3ea.ttf
similarity index 81%
rename from public/assets/font-awesome/fa-brands-400-9158ee2ef88ea648444ba1c9fcea310baa1e5e4e5fe86e338dcd29fcb081cfc7.eot
rename to public/assets/font-awesome/fa-brands-400-3b3fbc59f287f33a3870175b19eb94d7cbb546af2fdbab29df91ba834352d3ea.ttf
index 1a675a4f..9ab77d5e 100644
Binary files a/public/assets/font-awesome/fa-brands-400-9158ee2ef88ea648444ba1c9fcea310baa1e5e4e5fe86e338dcd29fcb081cfc7.eot and b/public/assets/font-awesome/fa-brands-400-3b3fbc59f287f33a3870175b19eb94d7cbb546af2fdbab29df91ba834352d3ea.ttf differ
diff --git a/public/assets/font-awesome/fa-brands-400-3b3fbc59f287f33a3870175b19eb94d7cbb546af2fdbab29df91ba834352d3ea.ttf.gz b/public/assets/font-awesome/fa-brands-400-3b3fbc59f287f33a3870175b19eb94d7cbb546af2fdbab29df91ba834352d3ea.ttf.gz
new file mode 100644
index 00000000..7c7c0eac
Binary files /dev/null and b/public/assets/font-awesome/fa-brands-400-3b3fbc59f287f33a3870175b19eb94d7cbb546af2fdbab29df91ba834352d3ea.ttf.gz differ
diff --git a/public/assets/font-awesome/fa-brands-400-7aadbc4ac7f80413de00052694c1a44e0b0dbf0e2d7f739c628b88b28bb72bfa.svg.gz b/public/assets/font-awesome/fa-brands-400-7aadbc4ac7f80413de00052694c1a44e0b0dbf0e2d7f739c628b88b28bb72bfa.svg.gz
deleted file mode 100644
index f66dd397..00000000
Binary files a/public/assets/font-awesome/fa-brands-400-7aadbc4ac7f80413de00052694c1a44e0b0dbf0e2d7f739c628b88b28bb72bfa.svg.gz and /dev/null differ
diff --git a/public/assets/font-awesome/fa-brands-400-9158ee2ef88ea648444ba1c9fcea310baa1e5e4e5fe86e338dcd29fcb081cfc7.eot.gz b/public/assets/font-awesome/fa-brands-400-9158ee2ef88ea648444ba1c9fcea310baa1e5e4e5fe86e338dcd29fcb081cfc7.eot.gz
deleted file mode 100644
index ce3a7f76..00000000
Binary files a/public/assets/font-awesome/fa-brands-400-9158ee2ef88ea648444ba1c9fcea310baa1e5e4e5fe86e338dcd29fcb081cfc7.eot.gz and /dev/null differ
diff --git a/public/assets/font-awesome/fa-brands-400-dbd08d025602b79ce71910b2a68577959cbf2ef02fc664e243bf50277754fdfc.ttf b/public/assets/font-awesome/fa-brands-400-c563adbadc5eafb6708b610268fbd393d59ae41e220aae5aac99ca2d45a6e151.eot
similarity index 81%
rename from public/assets/font-awesome/fa-brands-400-dbd08d025602b79ce71910b2a68577959cbf2ef02fc664e243bf50277754fdfc.ttf
rename to public/assets/font-awesome/fa-brands-400-c563adbadc5eafb6708b610268fbd393d59ae41e220aae5aac99ca2d45a6e151.eot
index 953d567b..5f0393eb 100644
Binary files a/public/assets/font-awesome/fa-brands-400-dbd08d025602b79ce71910b2a68577959cbf2ef02fc664e243bf50277754fdfc.ttf and b/public/assets/font-awesome/fa-brands-400-c563adbadc5eafb6708b610268fbd393d59ae41e220aae5aac99ca2d45a6e151.eot differ
diff --git a/public/assets/font-awesome/fa-brands-400-c563adbadc5eafb6708b610268fbd393d59ae41e220aae5aac99ca2d45a6e151.eot.gz b/public/assets/font-awesome/fa-brands-400-c563adbadc5eafb6708b610268fbd393d59ae41e220aae5aac99ca2d45a6e151.eot.gz
new file mode 100644
index 00000000..65cba34a
Binary files /dev/null and b/public/assets/font-awesome/fa-brands-400-c563adbadc5eafb6708b610268fbd393d59ae41e220aae5aac99ca2d45a6e151.eot.gz differ
diff --git a/public/assets/font-awesome/fa-brands-400-c885e9f2017a2ed7075db9e876d40a04aa3208114443803bdb120a34afd3b1d6.woff2 b/public/assets/font-awesome/fa-brands-400-c885e9f2017a2ed7075db9e876d40a04aa3208114443803bdb120a34afd3b1d6.woff2
new file mode 100644
index 00000000..555267a6
Binary files /dev/null and b/public/assets/font-awesome/fa-brands-400-c885e9f2017a2ed7075db9e876d40a04aa3208114443803bdb120a34afd3b1d6.woff2 differ
diff --git a/public/assets/font-awesome/fa-brands-400-ca441c07992a7160e4d2622e78f8970c9b92f176694c8dc07592326496a801d6.woff b/public/assets/font-awesome/fa-brands-400-ca441c07992a7160e4d2622e78f8970c9b92f176694c8dc07592326496a801d6.woff
deleted file mode 100644
index 1ae52634..00000000
Binary files a/public/assets/font-awesome/fa-brands-400-ca441c07992a7160e4d2622e78f8970c9b92f176694c8dc07592326496a801d6.woff and /dev/null differ
diff --git a/public/assets/font-awesome/fa-brands-400-ca734c792a24c20ff91ec878fd146b3354d4859f728f481c1089a3e2ffa2d30f.woff b/public/assets/font-awesome/fa-brands-400-ca734c792a24c20ff91ec878fd146b3354d4859f728f481c1089a3e2ffa2d30f.woff
new file mode 100644
index 00000000..5b17df23
Binary files /dev/null and b/public/assets/font-awesome/fa-brands-400-ca734c792a24c20ff91ec878fd146b3354d4859f728f481c1089a3e2ffa2d30f.woff differ
diff --git a/public/assets/font-awesome/fa-brands-400-dbd08d025602b79ce71910b2a68577959cbf2ef02fc664e243bf50277754fdfc.ttf.gz b/public/assets/font-awesome/fa-brands-400-dbd08d025602b79ce71910b2a68577959cbf2ef02fc664e243bf50277754fdfc.ttf.gz
deleted file mode 100644
index e8dd224c..00000000
Binary files a/public/assets/font-awesome/fa-brands-400-dbd08d025602b79ce71910b2a68577959cbf2ef02fc664e243bf50277754fdfc.ttf.gz and /dev/null differ
diff --git a/public/assets/font-awesome/fa-brands-400-7aadbc4ac7f80413de00052694c1a44e0b0dbf0e2d7f739c628b88b28bb72bfa.svg b/public/assets/font-awesome/fa-brands-400-f6ae6226846422df4abf64b65814d3ccd3570af5e0350983fdb01fbc0dd055d6.svg
similarity index 95%
rename from public/assets/font-awesome/fa-brands-400-7aadbc4ac7f80413de00052694c1a44e0b0dbf0e2d7f739c628b88b28bb72bfa.svg
rename to public/assets/font-awesome/fa-brands-400-f6ae6226846422df4abf64b65814d3ccd3570af5e0350983fdb01fbc0dd055d6.svg
index 5b60e84a..7f23efa3 100644
--- a/public/assets/font-awesome/fa-brands-400-7aadbc4ac7f80413de00052694c1a44e0b0dbf0e2d7f739c628b88b28bb72bfa.svg
+++ b/public/assets/font-awesome/fa-brands-400-f6ae6226846422df4abf64b65814d3ccd3570af5e0350983fdb01fbc0dd055d6.svg
@@ -1,4 +1,8 @@
+
"),r=e.settings.icon?i+"ico "+i+"i-"+r:"",e.aria("role",e.parent()instanceof Vr?"menuitem":"button"),''},postRender:function(){var r=this;return r.on("click",function(t){t.control===r&&function(t,e){for(;t;){if(e===t)return!0;t=t.parentNode}return!1}(t.target,r.getEl())&&(r.focus(),r.showMenu(!t.aria),t.aria&&r.menu.items().filter(":visible")[0].focus())}),r.on("mouseenter",function(t){var e,n=t.control,i=r.parent();n&&i&&n instanceof qr&&n.parent()===i&&(i.items().filter("MenuButton").each(function(t){t.hideMenu&&t!==n&&(t.menu&&t.menu.visible()&&(e=!0),t.hideMenu())}),e&&(n.focus(),n.showMenu()))}),r._super()},bindStates:function(){var t=this;return t.state.on("change:menu",function(){t.menu&&t.menu.remove(),t.menu=null}),t._super()},remove:function(){this._super(),this.menu&&this.menu.remove()}});function Yr(i,r){var o,s,a=this,l=ce.classPrefix;a.show=function(t,e){function n(){o&&(Nt(i).append(''),e&&e())}return a.hide(),o=!0,t?s=c.setTimeout(n,t):n(),a},a.hide=function(){var t=i.lastChild;return c.clearTimeout(s),t&&-1!==t.className.indexOf("throbber")&&t.parentNode.removeChild(t),o=!1,a}}var $r=Ve.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"application",bodyRole:"menu",ariaRoot:!0},init:function(t){if(t.autohide=!0,t.constrainToViewport=!0,"function"==typeof t.items&&(t.itemsFactory=t.items,t.items=[]),t.itemDefaults)for(var e=t.items,n=e.length;n--;)e[n]=R.extend({},t.itemDefaults,e[n]);this._super(t),this.classes.add("menu"),t.animate&&11!==h.ie&&this.classes.add("animate")},repaint:function(){return this.classes.toggle("menu-align",!0),this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){this.hideAll(),this.fire("select")},load:function(){var e,n=this;function i(){n.throbber&&(n.throbber.hide(),n.throbber=null)}n.settings.itemsFactory&&(n.throbber||(n.throbber=new Yr(n.getEl("body"),!0),0===n.items().length?(n.throbber.show(),n.fire("loading")):n.throbber.show(100,function(){n.items().remove(),n.fire("loading")}),n.on("hide close",i)),n.requestTime=e=(new Date).getTime(),n.settings.itemsFactory(function(t){0!==t.length?n.requestTime===e&&(n.getEl().style.width="",n.getEl("body").style.width="",i(),n.items().remove(),n.getEl("body").innerHTML="",n.add(t),n.renderNew(),n.fire("loaded")):n.hide()}))},hideAll:function(){return this.find("menuitem").exec("hideMenu"),this._super()},preRender:function(){var n=this;return n.items().each(function(t){var e=t.settings;if(e.icon||e.image||e.selectable)return!(n._hasIcons=!0)}),n.settings.itemsFactory&&n.on("postrender",function(){n.settings.itemsFactory&&n.load()}),n.on("show hide",function(t){t.control===n&&("show"===t.type?c.setTimeout(function(){n.classes.add("in")},0):n.classes.remove("in"))}),n._super()}}),Xr=qr.extend({init:function(i){var e,r,o,n,s=this;s._super(i),i=s.settings,s._values=e=i.values,e&&("undefined"!=typeof i.value&&function t(e){for(var n=0;n").replace(new RegExp(c("]mce~match!"),"g"),"")}return s&&e.parent().classes.add("menu-has-icons"),i.image&&(a=" style=\"background-image: url('"+i.image+"')\""),l&&(l=function(t){var e,n,i={};for(i=h.mac?{alt:"⌥",ctrl:"⌘",shift:"⇧",meta:"⌘"}:{meta:"Ctrl"},t=t.split("+"),e=0;e\xa0":"",o=f(e.encode(d(o))),u=f(e.encode(d(u))),''+t+("-"!==o?'
'+o+"":"")+(l?'":"")+(i.menu?'
':"")+(u?'":"")+"
"},postRender:function(){var e=this,n=e.settings,t=n.textStyle;if("function"==typeof t&&(t=t.call(this)),t){var i=e.getEl("text");i&&(i.setAttribute("style",t),e._textStyle=t)}return e.on("mouseenter click",function(t){t.control===e&&(n.menu||"click"!==t.type?(e.showMenu(),t.aria&&e.menu.focus(!0)):(e.fire("select"),c.requestAnimationFrame(function(){e.parent().hideAll()})))}),e._super(),e},hover:function(){return this.parent().items().each(function(t){t.classes.remove("selected")}),this.classes.toggle("selected",!0),this},active:function(t){return function(t,e){var n=t._textStyle;if(n){var i=t.getEl("text");i.setAttribute("style",n),e&&(i.style.color="",i.style.backgroundColor="")}}(this,t),void 0!==t&&this.aria("checked",t),this._super(t)},remove:function(){this._super(),this.menu&&this.menu.remove()}}),Jr=Wn.extend({Defaults:{classes:"radio",role:"radio"}}),Gr=be.extend({renderHtml:function(){var t=this,e=t.classPrefix;return t.classes.add("resizehandle"),"both"===t.settings.direction&&t.classes.add("resizehandle-both"),t.canFocus=!1,'
'},postRender:function(){var e=this;e._super(),e.resizeDragHelper=new Ce(this._id,{start:function(){e.fire("ResizeStart")},drag:function(t){"both"!==e.settings.direction&&(t.deltaX=0),e.fire("Resize",t)},stop:function(){e.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}});function Kr(t){var e="";if(t)for(var n=0;n'+t[n]+"";return e}var Zr=be.extend({Defaults:{classes:"selectbox",role:"selectbox",options:[]},init:function(t){var n=this;n._super(t),n.settings.size&&(n.size=n.settings.size),n.settings.options&&(n._options=n.settings.options),n.on("keydown",function(t){var e;13===t.keyCode&&(t.preventDefault(),n.parents().reverse().each(function(t){if(t.toJSON)return e=t,!1}),n.fire("submit",{data:e.toJSON()}))})},options:function(t){return arguments.length?(this.state.set("options",t),this):this.state.get("options")},renderHtml:function(){var t,e=this,n="";return t=Kr(e._options),e.size&&(n=' size = "'+e.size+'"'),'"},bindStates:function(){var e=this;return e.state.on("change:options",function(t){e.getEl().innerHTML=Kr(t.value)}),e._super()}});function Qr(t,e,n){return t'},reset:function(){this.value(this._initValue).repaint()},postRender:function(){var t,e,n,i,r,o,s,a,l,u,c,d,f,h,m=this;t=m._minValue,e=m._maxValue,"v"===m.settings.orientation?(n="screenY",i="top",r="height",o="h"):(n="screenX",i="left",r="width",o="w"),m._super(),function(o,s){function e(t){var e,n,i,r;e=Qr(e=(((e=m.value())+(r=n=o))/((i=s)-r)+.05*t)*(i-n)-n,o,s),m.value(e),m.fire("dragstart",{value:e}),m.fire("drag",{value:e}),m.fire("dragend",{value:e})}m.on("keydown",function(t){switch(t.keyCode){case 37:case 38:e(-1);break;case 39:case 40:e(1)}})}(t,e),s=t,a=e,l=m.getEl("handle"),m._dragHelper=new Ce(m._id,{handle:m._id+"-handle",start:function(t){u=t[n],c=parseInt(m.getEl("handle").style[i],10),d=(m.layoutRect()[o]||100)-St.getSize(l)[r],m.fire("dragstart",{value:h})},drag:function(t){var e=t[n]-u;f=Qr(c+e,0,d),l.style[i]=f+"px",h=s+f/d*(a-s),m.value(h),m.tooltip().text(""+m.settings.previewFilter(h)).show().moveRel(l,"bc tc"),m.fire("drag",{value:h})},stop:function(){m.tooltip().hide(),m.fire("dragend",{value:h})}})},repaint:function(){this._super(),eo(this,this.value())},bindStates:function(){var e=this;return e.state.on("change:value",function(t){eo(e,t.value)}),e._super()}}),io=be.extend({renderHtml:function(){return this.classes.add("spacer"),this.canFocus=!1,''}}),ro=qr.extend({Defaults:{classes:"widget btn splitbtn",role:"button"},repaint:function(){var t,e,n=this.getEl(),i=this.layoutRect();return this._super(),t=n.firstChild,e=n.lastChild,Nt(t).css({width:i.w-St.getSize(e).width,height:i.h-2}),Nt(e).css({height:i.h-2}),this},activeMenu:function(t){Nt(this.getEl().lastChild).toggleClass(this.classPrefix+"active",t)},renderHtml:function(){var t,e,n=this,i=n._id,r=n.classPrefix,o=n.state.get("icon"),s=n.state.get("text"),a=n.settings,l="";return(t=a.image)?(o="none","string"!=typeof t&&(t=window.getSelection?t[0]:t[1]),t=" style=\"background-image: url('"+t+"')\""):t="",o=a.icon?r+"ico "+r+"i-"+o:"",s&&(n.classes.add("btn-has-text"),l=''+n.encode(s)+""),e="boolean"==typeof a.active?' aria-pressed="'+a.active+'"':"",''},postRender:function(){var n=this.settings.onclick;return this.on("click",function(t){var e=t.target;if(t.control===this)for(;e;){if(t.aria&&"down"!==t.aria.key||"BUTTON"===e.nodeName&&-1===e.className.indexOf("open"))return t.stopImmediatePropagation(),void(n&&n.call(this,t));e=e.parentNode}}),delete this.settings.onclick,this._super()}}),oo=lr.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"},isNative:function(){return!0}}),so=We.extend({Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(n){var t;this.activeTabId&&(t=this.getEl(this.activeTabId),Nt(t).removeClass(this.classPrefix+"active"),t.setAttribute("aria-selected","false")),this.activeTabId="t"+n,(t=this.getEl("t"+n)).setAttribute("aria-selected","true"),Nt(t).addClass(this.classPrefix+"active"),this.items()[n].show().fire("showtab"),this.reflow(),this.items().each(function(t,e){n!==e&&t.hide()})},renderHtml:function(){var i=this,t=i._layout,r="",o=i.classPrefix;return i.preRender(),t.preRender(i),i.items().each(function(t,e){var n=i._id+"-t"+e;t.aria("role","tabpanel"),t.aria("labelledby",n),r+=''+i.encode(t.settings.title)+"
"}),'"},postRender:function(){var i=this;i._super(),i.settings.activeTab=i.settings.activeTab||0,i.activateTab(i.settings.activeTab),this.on("click",function(t){var e=t.target.parentNode;if(e&&e.id===i._id+"-head")for(var n=e.childNodes.length;n--;)e.childNodes[n]===t.target&&i.activateTab(n)})},initLayoutRect:function(){var t,e,n,i=this;e=(e=St.getSize(i.getEl("head")).width)<0?0:e,n=0,i.items().each(function(t){e=Math.max(e,t.layoutRect().minW),n=Math.max(n,t.layoutRect().minH)}),i.items().each(function(t){t.settings.x=0,t.settings.y=0,t.settings.w=e,t.settings.h=n,t.layoutRect({x:0,y:0,w:e,h:n})});var r=St.getSize(i.getEl("head")).height;return i.settings.minWidth=e,i.settings.minHeight=n+r,(t=i._super()).deltaH+=r,t.innerH=t.h-t.deltaH,t}}),ao=be.extend({init:function(t){var n=this;n._super(t),n.classes.add("textbox"),t.multiline?n.classes.add("multiline"):(n.on("keydown",function(t){var e;13===t.keyCode&&(t.preventDefault(),n.parents().reverse().each(function(t){if(t.toJSON)return e=t,!1}),n.fire("submit",{data:e.toJSON()}))}),n.on("keyup",function(t){n.state.set("value",t.target.value)}))},repaint:function(){var t,e,n,i,r,o=this,s=0;t=o.getEl().style,e=o._layoutRect,r=o._lastRepaintRect||{};var a=document;return!o.settings.multiline&&a.all&&(!a.documentMode||a.documentMode<=8)&&(t.lineHeight=e.h-s+"px"),i=(n=o.borderBox).left+n.right+8,s=n.top+n.bottom+(o.settings.multiline?8:0),e.x!==r.x&&(t.left=e.x+"px",r.x=e.x),e.y!==r.y&&(t.top=e.y+"px",r.y=e.y),e.w!==r.w&&(t.width=e.w-i+"px",r.w=e.w),e.h!==r.h&&(t.height=e.h-s+"px",r.h=e.h),o._lastRepaintRect=r,o.fire("repaint",{},!1),o},renderHtml:function(){var e,t,n=this,i=n.settings;return e={id:n._id,hidefocus:"1"},R.each(["rows","spellcheck","maxLength","size","readonly","min","max","step","list","pattern","placeholder","required","multiple"],function(t){e[t]=i[t]}),n.disabled()&&(e.disabled="disabled"),i.subtype&&(e.type=i.subtype),(t=St.create(i.multiline?"textarea":"input",e)).value=n.state.get("value"),t.className=n.classes.toString(),t.outerHTML},value:function(t){return arguments.length?(this.state.set("value",t),this):(this.state.get("rendered")&&this.state.set("value",this.getEl().value),this.state.get("value"))},postRender:function(){var e=this;e.getEl().value=e.state.get("value"),e._super(),e.$el.on("change",function(t){e.state.set("value",t.target.value),e.fire("change",t)})},bindStates:function(){var e=this;return e.state.on("change:value",function(t){e.getEl().value!==t.value&&(e.getEl().value=t.value)}),e.state.on("change:disabled",function(t){e.getEl().disabled=t.value}),e._super()},remove:function(){this.$el.off(),this._super()}}),lo=function(){return{Selector:qt,Collection:Xt,ReflowQueue:ee,Control:ce,Factory:Ee,KeyboardNavigation:Te,Container:De,DragHelper:Ce,Scrollable:Pe,Panel:We,Movable:pe,Resizable:Ae,FloatPanel:Ve,Window:Je,MessageBox:Ge,Tooltip:ve,Widget:be,Progress:ye,Notification:we,Layout:Sn,AbsoluteLayout:Nn,Button:On,ButtonGroup:Pn,Checkbox:Wn,ComboBox:Bn,ColorBox:Ln,PanelButton:In,ColorButton:Fn,ColorPicker:Vn,Path:Yn,ElementPath:$n,FormItem:Xn,Form:jn,FieldSet:Jn,FilePicker:or,FitLayout:sr,FlexLayout:ar,FlowLayout:lr,FormatControls:Br,GridLayout:Lr,Iframe:Ir,InfoBox:zr,Label:Fr,Toolbar:Ur,MenuBar:Vr,MenuButton:qr,MenuItem:jr,Throbber:Yr,Menu:$r,ListBox:Xr,Radio:Jr,ResizeHandle:Gr,SelectBox:Zr,Slider:no,Spacer:io,SplitButton:ro,StackLayout:oo,TabPanel:so,TextBox:ao,DropZone:qn,BrowseButton:Dn}},uo=function(n){n.ui?R.each(lo(),function(t,e){n.ui[e]=t}):n.ui=lo()};R.each(lo(),function(t,e){Ee.add(e,t)}),uo(window.tinymce?window.tinymce:{}),o.add("inlite",function(t){var e=Mn();return Br.setup(t),_n(t,e),Ke(t,e)})}();
diff --git a/public/assets/tinymce/themes/inlite/theme-f03666288dc2af6a86b25c01f85c9085d48620cecb2e3a2b4e82a03efaba5c25.js.gz b/public/assets/tinymce/themes/inlite/theme-f03666288dc2af6a86b25c01f85c9085d48620cecb2e3a2b4e82a03efaba5c25.js.gz
deleted file mode 100644
index 639234c1..00000000
Binary files a/public/assets/tinymce/themes/inlite/theme-f03666288dc2af6a86b25c01f85c9085d48620cecb2e3a2b4e82a03efaba5c25.js.gz and /dev/null differ
diff --git a/public/assets/tinymce/themes/inlite/theme.js b/public/assets/tinymce/themes/inlite/theme.js
index f5177f38..4a24e3a7 120000
--- a/public/assets/tinymce/themes/inlite/theme.js
+++ b/public/assets/tinymce/themes/inlite/theme.js
@@ -1 +1 @@
-theme-f03666288dc2af6a86b25c01f85c9085d48620cecb2e3a2b4e82a03efaba5c25.js
\ No newline at end of file
+theme-e54b5b473507ed972a017eef84a50331b6a3bb4a785f2986e6d1b49015967ae7.js
\ No newline at end of file
diff --git a/public/assets/tinymce/themes/inlite/theme.js.gz b/public/assets/tinymce/themes/inlite/theme.js.gz
index 18bee624..43f4a35e 120000
--- a/public/assets/tinymce/themes/inlite/theme.js.gz
+++ b/public/assets/tinymce/themes/inlite/theme.js.gz
@@ -1 +1 @@
-theme-f03666288dc2af6a86b25c01f85c9085d48620cecb2e3a2b4e82a03efaba5c25.js.gz
\ No newline at end of file
+theme-e54b5b473507ed972a017eef84a50331b6a3bb4a785f2986e6d1b49015967ae7.js.gz
\ No newline at end of file
diff --git a/public/assets/tinymce/themes/mobile/theme-95bcdf6b66dcd44073798fd6c04d0696ee3620cb694d052652dbefa051fecf80.js b/public/assets/tinymce/themes/mobile/theme-95bcdf6b66dcd44073798fd6c04d0696ee3620cb694d052652dbefa051fecf80.js
new file mode 100644
index 00000000..66f0f3e1
--- /dev/null
+++ b/public/assets/tinymce/themes/mobile/theme-95bcdf6b66dcd44073798fd6c04d0696ee3620cb694d052652dbefa051fecf80.js
@@ -0,0 +1 @@
+!function(){"use strict";var I=function(){for(var n=[],e=0;e "+r.toString()},function(n,e){return"state("+n+")"})}).join("\n")+"}"},toDsl:function(){return Ot.objOf(bn(a,function(n){return n.fold(function(n,e,t,r){return kt.field(n,t,r)},function(n,e){return kt.state(n)})}))}}},Ht=function(t,i){var e=function(n,e){return(o=Ft(t),{extract:function(t,r,n){var e=bn(n,function(n,e){return o.extract(t.concat(["["+e+"]"]),r,n)});return lt(e)},toString:function(){return"array("+o.toString()+")"},toDsl:function(){return Ot.arrOf(o)}}).extract(n,h,e);var o};return{extract:function(t,r,o){var n=N(o);return e(t,n).bind(function(n){var e=bn(n,function(n){return At.field(n,n,ot(),i)});return Vt(e).extract(t,r,o)})},toString:function(){return"setOf("+i.toString()+")"},toDsl:function(){return Ot.setOf(t,i)}}},zt=A(Ft(nt.value)),jt=At.state,Lt=At.field,Ut=function(t,e,r,o,i){return yt(o,i).fold(function(){return n=o,e=i,It(t,function(){return'The chosen schema: "'+e+'" did not exist in branches: '+Dt(n)});var n,e},function(n){return Vt(n).extract(t.concat(["branch: "+i]),e,r)})},Pt=function(o,i){return{extract:function(e,t,r){return yt(r,o).fold(function(){return n=o,It(e,function(){return'Choice schema did not contain choice key: "'+n+'"'});var n},function(n){return Ut(e,t,r,i,n)})},toString:function(){return"chooseOn("+o+"). Possible values: "+N(i)},toDsl:function(){return Ot.choiceOf(o,i)}}},$t=Ft(nt.value),Wt=function(n,e,t,r){return e.extract([n],t,r).fold(function(n){return nt.error({input:r,errors:n})},nt.value)},Gt=function(n,e,t){return Wt(n,e,A,t)},_t=function(n){return n.fold(function(n){throw new Error(Kt(n))},h)},qt=function(n,e,t){return _t(Wt(n,e,h,t))},Yt=function(n,e,t){return _t(Gt(n,e,t))},Kt=function(n){return"Errors: \n"+(e=n.errors,t=10 ")+")\n"+n.getErrorInfo()}))+"\n\nInput object: "+Dt(n.input);var e,t},Xt=function(n,e){return Pt(n,e)},Jt=A($t),Qt=(i=w,u="function",Ft(function(n){var e=typeof n;return i(n)?nt.value(n):nt.error("Expected type: "+u+" but got: "+e)})),Zt=function(n){return Lt(n,n,ot(),zt())},nr=function(n,e){return Lt(n,n,ot(),e)},er=function(n){return nr(n,Qt)},tr=function(n,e){return Lt(n,n,ot(),Vt(e))},rr=function(n){return Lt(n,n,it(),zt())},or=function(n,e){return Lt(n,n,it(),Vt(e))},ir=function(n,e){return Lt(n,n,it(),Nt(e))},ur=function(n,e){return Lt(n,n,rt(e),zt())},ar=function(n,e,t){return Lt(n,n,rt(e),t)},cr=function(n,e){return jt(n,e)},sr=function(n){if(!Tt(n,"can")&&!Tt(n,"abort")&&!Tt(n,"run"))throw new Error("EventHandler defined by: "+Et(n,null,2)+" does not have can, abort, or run!");return qt("Extracting event.handler",Nt([ur("can",A(!0)),ur("abort",A(!1)),ur("run",I)]),n)},fr=function(t){var e,r,o,i,n=(e=t,r=function(n){return n.can},function(){for(var t=[],n=0;n"),innerHtml:n.innerHtml().getOr(""),defChildren:n.defChildren().fold(function(){return""},function(n){return Et(n,null,2)}),domChildren:n.domChildren().fold(function(){return""},function(n){return 0===n.length?"0 children, but still specified":String(n.length)})}},Cr=Ce([],["classes","attributes","styles","value","innerHtml","defChildren","domChildren"]),Er=function(e,n,t){return n.fold(function(){return t.fold(function(){return{}},function(n){return wt(e,n)})},function(n){return t.fold(function(){return wt(e,n)},function(n){return wt(e,n)})})},Dr=function(t,r,o){return wr(function(n,e){o(n,t,r)})},Ir=function(n,e,t,r,o,i){var u,a,c=n,s=or(e,[(u="config",a=n,Lt(u,u,it(),a))]);return Br(c,s,e,t,r,o,i)},Ar=function(o,i,u){var n,e,t,r,a,c;return n=function(t){for(var n=[],e=1;e"}),Jt()),rc=ur("defaults",A({})),oc=ur("overrides",A({})),ic=Vt([Za,nc,ec,tc,rc,oc]),uc=Vt([Za,nc,ec,rc,oc]),ac=Vt([Za,nc,ec,tc,rc,oc]),cc=Vt([Za,nc,ec,Zt("unit"),tc,rc,oc]),sc=function(n){var e=function(n){return n.name()};return n.fold(e,e,e,e)},fc=function(t,r){return function(n){var e=Yt("Converting part type",r,n);return t(e)}},lc=fc(Qa.required,ic),dc=(fc(Qa.external,uc),fc(Qa.optional,ac)),mc=fc(Qa.group,cc),gc=A("entirety"),vc=function(n,e,t,r){var o=t;return k(e.defaults()(n,t,r),t,{uid:n.partUids()[e.name()]},e.overrides()(n,t,r),{"debug.sketcher":wt("part-"+e.name(),o)})},pc=function(o,n){var i={};return yn(n,function(n){var e;(e=n,e.fold(F.some,F.none,F.some,F.some)).each(function(t){var r=hc(o,t.pname());i[t.name()]=function(n){var e=qt("Part: "+t.name()+" in "+o,Vt(t.schema()),n);return k(r,{config:n,validated:e})}})}),i},hc=function(n,e){return{uiType:Ka(),owner:n,name:e}},bc=function(n,e,t){return r=e,i={},o={},yn(t,function(n){n.fold(function(r){i[r.pname()]=qa(!0,function(n,e,t){return r.factory().sketch(vc(n,r,e,t))})},function(n){var e=r.parts()[n.name()]();o[n.name()]=A(vc(r,n,e[gc()]()))},function(r){i[r.pname()]=qa(!1,function(n,e,t){return r.factory().sketch(vc(n,r,e,t))})},function(o){i[o.pname()]=Ya(!0,function(e,n,t){var r=e[o.name()]();return bn(r,function(n){return o.factory().sketch(k(o.defaults()(e,n),n,o.overrides()(e,n)))})})})}),{internals:A(i),externals:A(o)};var r,i,o},yc=function(n,e,t){return _a(F.some(n),e,e.components(),t)},wc=function(n,e,t){var r=e.partUids()[t];return n.getSystem().getByUid(r).toOption()},xc=function(n,e,t){return wc(n,e,t).getOrDie("Could not find part: "+t)},Sc=function(e,n){var t=bn(n,sc);return xt(bn(t,function(n){return{key:n,value:e+"-"+n}}))},Tc=function(e){return Lt("partUids","partUids",at(function(n){return Sc(n.uid,e)}),Jt())},Oc=Ja("alloy-premade"),kc=Ja("api"),Cc=function(n){return wt(Oc,n)},Ec=function(o){return n=function(n){for(var e=[],t=1;t'),action:e,buttonBehaviours:k(Lr([$c.config({})]),t)})},Kc={forToolbar:Yc,forToolbarCommand:function(n,e){return Yc(e,function(){n.execCommand(e)},{})},forToolbarStateAction:function(n,e,t,r){var o=qc(t);return Yc(e,r,o)},forToolbarStateCommand:function(n,e){var t=qc(e);return Yc(e,function(){n.execCommand(e)},t)}},Xc=function(t,r){return{left:A(t),top:A(r),translate:function(n,e){return Xc(t+n,r+e)}}},Jc=Xc,Qc=function(n,e,t){return Math.max(e,Math.min(t,n))},Zc=function(n,e,t,r,o,i,u){var a=t-e;if(rn.right)return t+1;var c,s,f,l,d=Math.min(n.right,Math.max(r,n.left))-n.left,m=Qc(d/n.width*a+e,e-1,t+1),g=Math.round(m);return i&&e<=m&&m<=t?(c=m,s=e,f=t,l=o,u.fold(function(){var n=c-s,e=Math.round(n/l)*l;return Qc(s+e,s-1,f+1)},function(n){var e=(c-n)%l,t=Math.round(e/l),r=Math.floor((c-n)/l),o=Math.floor((f-n)/l),i=n+Math.min(o,r+t)*l;return Math.max(n,i)})):g},ns="slider.change.value",es=$n.detect().deviceType.isTouch(),ts=function(n){return function(n){var e=n.event().raw();if(es){var t=e;return t.touches!==undefined&&1===t.touches.length?F.some(t.touches[0]).map(function(n){return Jc(n.clientX,n.clientY)}):F.none()}var r=e;return r.clientX!==undefined?F.some(r).map(function(n){return Jc(n.clientX,n.clientY)}):F.none()}(n).map(function(n){return n.left()})},rs=function(n,e){oe(n,ns,{value:e})},os=function(i,u,a,n){return ts(n).map(function(n){var e,t,r,o;return e=i,r=n,o=Zc(a,(t=u).min(),t.max(),r,t.stepSize(),t.snapToGrid(),t.snapStart()),rs(e,o),n})},is=function(n,e){var t,r,o,i,u=(t=e.value().get(),r=e.min(),o=e.max(),i=e.stepSize(),tr.max()?wc(e,r,"right-edge").fold(function(){return t.width},function(n){return f(n)-t.left}):(r.value().get()-r.min())/s*t.width);return i.left-u.left+a},u=function(n){var e=i(n),t=o(n),r=Es(t.element())/2;xi(t.element(),"left",e-r+"px")},r=function(n,e){var t=c.value().get(),r=o(n);return t!==e||ki(r.element(),"left").isNone()?(c.value().set(e),u(n),c.onChange()(n,r,e),F.some(!0)):F.none()},a=Ds?[mr(L(),function(n,e){c.onDragStart()(n,o(n))}),mr(P(),function(n,e){c.onDragEnd()(n,o(n))})]:[mr($(),function(n,e){e.stop(),c.onDragStart()(n,o(n)),c.mouseIsDown().set(!0)}),mr(G(),function(n,e){c.onDragEnd()(n,o(n)),c.mouseIsDown().set(!1)})];return{uid:c.uid(),dom:c.dom(),components:n,behaviours:k(Lr(En([Ds?[]:[ja.config({mode:"special",focusIn:function(n){return wc(n,c,"spectrum").map(ja.focusIn).map(A(!0))}})],[Ss.config({store:{mode:"manual",getValue:function(n){return c.value().get()}}})]])),Ua(c.sliderBehaviours())),events:lr([mr(ns,function(n,e){r(n,e.event().value())}),br(function(n,e){c.value().set(c.getInitialValue()());var t=o(n);u(n),c.onInit()(n,t,c.value().get())})].concat(a)),apis:{resetToMin:function(n){r(n,c.min())},resetToMax:function(n){r(n,c.max())},refresh:u},domModification:{styles:{position:"relative"}}}},apis:{resetToMin:function(n,e){n.resetToMin(e)},resetToMax:function(n,e){n.resetToMax(e)},refresh:function(n,e){n.refresh(e)}}}),As=function(e,t,r){return Kc.forToolbar(t,function(){var n=r();e.setContextToolbar([{label:t+" group",items:n}])},{})},Ms=function(n){return[(o=n,i=function(n){return n<0?"black":360'),components:[Is.parts()["left-edge"](_c('')),Is.parts().spectrum({dom:Gc(''),components:[_c('')],behaviours:Lr([ci.config({toggleClass:mi.resolve("thumb-active")})])}),Is.parts()["right-edge"](_c('')),Is.parts().thumb({dom:Gc(''),behaviours:Lr([ci.config({toggleClass:mi.resolve("thumb-active")})])})],onChange:function(n,e,t){var r=i(t);xi(e.element(),"background-color",r),o.onChange(n,e,r)},onDragStart:function(n,e){ci.on(e)},onDragEnd:function(n,e){ci.off(e)},onInit:function(n,e,t){var r=i(t);xi(e.element(),"background-color",r)},stepSize:10,min:0,max:360,getInitialValue:o.getInitialValue,sliderBehaviours:Lr([fi(Is.refresh)])}))];var o,i},Bs=function(n,r){var e={onChange:function(n,e,t){r.undoManager.transact(function(){r.formatter.apply("forecolor",{value:t}),r.nodeChanged()})},getInitialValue:function(){return-1}};return As(n,"color",function(){return Ms(e)})},Rs=Nt([Zt("getInitialValue"),Zt("onChange"),Zt("category"),Zt("sizes")]),Fs=function(n){var o=qt("SizeSlider",Rs,n);return Is.sketch({dom:{tag:"div",classes:[mi.resolve("slider-"+o.category+"-size-container"),mi.resolve("slider"),mi.resolve("slider-size-container")]},onChange:function(n,e,t){var r;0<=(r=t)&&r'),components:[_c('')]}),Is.parts().thumb({dom:Gc(''),behaviours:Lr([ci.config({toggleClass:mi.resolve("thumb-active")})])})]})},Ns=["9px","10px","11px","12px","14px","16px","18px","20px","24px","32px","36px"],Vs=function(n){var e,t,r=n.selection.getStart(),o=se.fromDom(r),i=se.fromDom(n.getBody()),u=(e=function(n){return Ve(i,n)},(ve(t=o)?F.some(t):ze(t)).map(function(n){return go(n,function(n){return ki(n,"font-size").isSome()},e).bind(function(n){return ki(n,"font-size")}).getOrThunk(function(){return Ti(n,"font-size")})}).getOr(""));return Tn(Ns,function(n){return u===n}).getOr("medium")},Hs={candidates:A(Ns),get:function(n){var e,t=Vs(n);return(e=t,On(Ns,function(n){return n===e})).getOr(2)},apply:function(r,n){var e;(e=n,F.from(Ns[e])).each(function(n){var e,t;t=n,Vs(e=r)!==t&&e.execCommand("fontSize",!1,t)})}},zs=Hs.candidates(),js=function(n){return[_c(''),(e=n,Fs({onChange:e.onChange,sizes:zs,category:"font",getInitialValue:e.getInitialValue})),_c('')];var e},Ls=function(n){var e=n.uid!==undefined&&Tt(n,"uid")?n.uid:Fc("memento");return{get:function(n){return n.getSystem().getByUid(e).getOrDie()},getOpt:function(n){return n.getSystem().getByUid(e).fold(F.none,F.some)},asSpec:function(){return k(n,{uid:e})}}};function Us(n,e){return $s(document.createElement("canvas"),n,e)}function Ps(n){return n.getContext("2d")}function $s(n,e,t){return n.width=e,n.height=t,n}var Ws={create:Us,clone:function(n){var e;return Ps(e=Us(n.width,n.height)).drawImage(n,0,0),e},resize:$s,get2dContext:Ps,get3dContext:function(n){var e=null;try{e=n.getContext("webgl")||n.getContext("experimental-webgl")}catch(t){}return e||(e=null),e}},Gs={getWidth:function(n){return n.naturalWidth||n.width},getHeight:function(n){return n.naturalHeight||n.height}},_s=window.Promise?window.Promise:function(){var n=function(n){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof n)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],s(n,r(o,this),r(u,this))},e=n.immediateFn||"function"==typeof window.setImmediate&&window.setImmediate||function(n){setTimeout(n,1)};function r(n,e){return function(){n.apply(e,arguments)}}var t=Array.isArray||function(n){return"[object Array]"===Object.prototype.toString.call(n)};function i(r){var o=this;null!==this._state?e(function(){var n=o._state?r.onFulfilled:r.onRejected;if(null!==n){var e;try{e=n(o._value)}catch(t){return void r.reject(t)}r.resolve(e)}else(o._state?r.resolve:r.reject)(o._value)}):this._deferreds.push(r)}function o(n){try{if(n===this)throw new TypeError("A promise cannot be resolved with itself.");if(n&&("object"==typeof n||"function"==typeof n)){var e=n.then;if("function"==typeof e)return void s(r(e,n),r(o,this),r(u,this))}this._state=!0,this._value=n,a.call(this)}catch(t){u.call(this,t)}}function u(n){this._state=!1,this._value=n,a.call(this)}function a(){for(var n=0,e=this._deferreds.length;n'),components:[e.asSpec()],action:function(n){e.get(n).element().dom().click()}})},df=function(n){return n.dom().textContent},mf=function(n){return 0'),action:function(n){var e=t.get(n);Ss.setValue(e,"")}}));return{name:n,spec:kf.sketch({dom:Gc(''),components:[t.asSpec(),r.asSpec()],containerBehaviours:Lr([ci.config({toggleClass:mi.resolve("input-container-empty")}),Of.config({find:function(n){return F.some(t.get(n))}}),xf("input-clearing",[mr(Y(),function(n){var e=t.get(n);(0"},Jf=function(o,n,e){return k({"debug.sketcher":{Form:e},uid:o.uid(),dom:o.dom(),components:n,behaviours:k(Lr([Ss.config({store:{mode:"manual",getValue:function(n){var e,t,r=(e=o,t=n.getSystem(),H(e.partUids(),function(n,e){return A(t.getByUid(n))}));return H(r,function(n,e){return n().bind(Of.getCurrent).map(Ss.getValue)})},setValue:function(t,n){V(n,function(e,n){wc(t,o,n).each(function(n){Of.getCurrent(n).each(function(n){Ss.setValue(n,e)})})})}}})]),Ua(o.formBehaviours())),apis:{getField:function(n,e){return wc(n,o,e).bind(Of.getCurrent)}}})},Qf=(Ec(function(n,e,t){return n.getField(e,t)}),function(n){var i,e=(i=[],{field:function(n,e){return i.push(n),t="form",r=Xf(n),o=e,{uiType:Ka(),owner:t,name:r,config:o,validated:{}};var t,r,o},record:function(){return i}}),t=n(e),r=e.record(),o=bn(r,function(n){return lc({name:n,pname:Xf(n)})});return Vc("form",Kf,o,Jf,t)}),Zf=function(){var e=fo(F.none()),t=function(){e.get().each(function(n){n.destroy()})};return{clear:function(){t(),e.set(F.none())},isSet:function(){return e.get().isSome()},set:function(n){t(),e.set(F.some(n))},run:function(n){e.get().each(n)}}},nl=function(){var e=fo(F.none());return{clear:function(){e.set(F.none())},set:function(n){e.set(F.some(n))},isSet:function(){return e.get().isSome()},on:function(n){e.get().each(n)}}},el=function(n){return{xValue:n,points:[]}},tl=function(n,e){if(e===n.xValue)return n;var t=0'),action:function(n){oe(n,r,{direction:e})},buttonBehaviours:Lr([Yf.config({disableClass:mi.resolve("toolbar-navigation-disabled"),disabled:!t})])})},i=function(n,o){var i=Ni(n.element(),"."+mi.resolve("serialised-dialog-screen"));zi(n.element(),"."+mi.resolve("serialised-dialog-chain")).each(function(r){0<=u.state.currentScreen.get()+o&&u.state.currentScreen.get()+o'),components:[kf.sketch({dom:Gc(''),components:bn(u.fields,function(n,e){return e<=u.maxFieldIndex?kf.sketch({dom:Gc(''),components:En([[o(-1,"previous",0'),behaviours:Lr([au.config({highlightClass:mi.resolve("dot-active"),itemClass:mi.resolve("dot-item")})]),components:Dn(u.fields,function(n,e){return e<=u.maxFieldIndex?[_c('')]:[]})});return{dom:Gc(''),components:[c.asSpec(),s.asSpec()],behaviours:Lr([ja.config({mode:"special",focusIn:function(n){var e=c.get(n);ja.focusIn(e)}}),xf("serializer-wrapper-events",[mr(L(),function(n,e){var t=e.event();u.state.dialogSwipeState.set(el(t.touches[0].clientX))}),mr(U(),function(n,e){var t=e.event();u.state.dialogSwipeState.on(function(n){e.event().prevent(),u.state.dialogSwipeState.set(tl(n,t.raw().touches[0].clientX))})}),mr(P(),function(r){u.state.dialogSwipeState.on(function(n){var e=c.get(r),t=-1*rl(n);i(e,t)})})])])}},il=Z(function(t,r){return[{label:"the link group",items:[ol({fields:[Nf("url","Type or paste URL"),Nf("text","Link text"),Nf("title","Link title"),Nf("target","Link target"),(n="link",{name:n,spec:Cf.sketch({dom:{tag:"span",styles:{display:"none"}},getInitialValue:function(){return F.none()}})})],maxFieldIndex:["url","text","title","target"].length-1,getInitialValue:function(){return F.some(hf.getInfo(r))},onExecute:function(n){var e=Ss.getValue(n);hf.applyInfo(r,e),t.restoreToolbar(),r.focus()}})]}];var n}),ul=[{title:"Headings",items:[{title:"Heading 1",format:"h1"},{title:"Heading 2",format:"h2"},{title:"Heading 3",format:"h3"},{title:"Heading 4",format:"h4"},{title:"Heading 5",format:"h5"},{title:"Heading 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}],al=lr([(nf=Gn(),ef=function(n,e){var t,r,o=e.event().originator(),i=e.event().target();return r=i,!(Ve(t=o,n.element())&&!Ve(t,r)&&(console.warn(Gn()+" did not get interpreted by the desired target. \nOriginator: "+Do(o)+"\nTarget: "+Do(i)+"\nCheck the "+Gn()+" event handlers"),1))},{key:nf,value:sr({can:ef})})]),cl=Object.freeze({events:al}),sl=h,fl=Hr(["debugInfo","triggerFocus","triggerEvent","triggerEscape","addToWorld","removeFromWorld","addToGui","removeFromGui","build","getByUid","getByDom","broadcast","broadcastOn","isConnected"]),ll=function(e){var n=function(n){return function(){throw new Error("The component must be in a context to send: "+n+"\n"+Do(e().element())+" is not in context.")}};return fl({debugInfo:A("fake"),triggerEvent:n("triggerEvent"),triggerFocus:n("triggerFocus"),triggerEscape:n("triggerEscape"),build:n("build"),addToWorld:n("addToWorld"),removeFromWorld:n("removeFromWorld"),addToGui:n("addToGui"),removeFromGui:n("removeFromGui"),getByUid:n("getByUid"),getByDom:n("getByDom"),broadcast:n("broadcast"),broadcastOn:n("broadcastOn"),isConnected:A(!1)})},dl=function(n,o){var i={};return V(n,function(n,r){V(n,function(n,e){var t=bt(e,[])(i);i[e]=t.concat([o(r,n)])})}),i},ml=function(n,e){return 1 "):r[0].name();return wt(o,{handler:e,purpose:A(t)})})});return St(e,{})},Tl=function(n){return Gt("custom.definition",Nt([Lt("dom","dom",ot(),Nt([Zt("tag"),ur("styles",{}),ur("classes",[]),ur("attributes",{}),rr("value"),rr("innerHtml")])),Zt("components"),Zt("uid"),ur("events",{}),ur("apis",A({})),Lt("eventOrder","eventOrder",(e={"alloy.execute":["disabling","alloy.base.behaviour","toggling"],"alloy.focus":["alloy.base.behaviour","focusing","keying"],"alloy.system.init":["alloy.base.behaviour","disabling","toggling","representing"],input:["alloy.base.behaviour","representing","streaming","invalidating"],"alloy.system.detached":["alloy.base.behaviour","representing"]},tt.mergeWithThunk(A(e))),Jt()),rr("domModification"),Yo("originalSpec"),ur("debug.sketcher","unknown")]),n);var e},Ol=function(n){var e,t={tag:n.dom().tag(),classes:n.dom().classes(),attributes:k((e=n,wt(Ac(),e.uid())),n.dom().attributes()),styles:n.dom().styles(),domChildren:bn(n.components(),function(n){return n.element()})};return Or(k(t,n.dom().innerHtml().map(function(n){return wt("innerHtml",n)}).getOr({}),n.dom().value().map(function(n){return wt("value",n)}).getOr({})))},kl=function(e,n){yn(n,function(n){to(e,n)})},Cl=function(e,n){yn(n,function(n){ro(e,n)})},El=function(e){if(e.domChildren().isSome()&&e.defChildren().isSome())throw new Error("Cannot specify children and child specs! Must be one or the other.\nDef: "+(n=kr(e),Et(n,null,2)));return e.domChildren().fold(function(){var n=e.defChildren().getOr([]);return bn(n,Il)},function(n){return n});var n},Dl=function(n){var e=se.fromTag(n.tag());qr(e,n.attributes().getOr({})),kl(e,n.classes().getOr([])),Si(e,n.styles().getOr({})),ko(e,n.innerHtml().getOr(""));var t=El(n);return $e(e,t),n.value().each(function(n){Df(e,n)}),e},Il=function(n){var e=Or(n);return Dl(e)},Al=function(n,e){return t=n,o=bn(r=e,function(n){return or(n.name(),[Zt("config"),ur("state",zr)])}),i=Gt("component.behaviours",Vt(o),t.behaviours).fold(function(n){throw new Error(Kt(n)+"\nComplete spec:\n"+Et(t,null,2))},function(n){return n}),{list:r,data:H(i,function(n){var e=n().map(function(n){return{config:n.config(),state:n.state().init(n.config())}});return function(){return e}})};var t,r,o,i},Ml=function(n){var e,t,r=(e=yt(n,"behaviours").getOr({}),t=wn(N(e),function(n){return e[n]!==undefined}),bn(t,function(n){return e[n].me}));return Al(n,r)},Bl=Hr(["getSystem","config","hasConfigured","spec","connect","disconnect","element","syncComponents","readState","components","events"]),Rl=function(n,e,t){var r,o,i,u,a=Ol(n),c=function(e,n,t,r){var o=k({},n);yn(t,function(n){o[n.name()]=n.exhibit(e,r)});var i=dl(o,function(n,e){return{name:function(){return n},modification:e}}),u=H(i,function(n,e){return Dn(n,function(e){return e.modification().fold(function(){return[]},function(n){return[e]})})}),a=j(u,function(e,t){return yt(vl,t).fold(function(){return nt.error("Unknown field type: "+t)},function(n){return n(e,t)})});return St(a,{}).map(Cr)}(t,{"alloy.base.modification":(r=n,r.domModification().fold(function(){return Cr({})},Cr))},e,a).getOrDie();return i=c,u=k({tag:(o=a).tag(),classes:i.classes().getOr([]).concat(o.classes().getOr([])),attributes:C(o.attributes().getOr({}),i.attributes().getOr({})),styles:C(o.styles().getOr({}),i.styles().getOr({}))},i.innerHtml().or(o.innerHtml()).map(function(n){return wt("innerHtml",n)}).getOr({}),Er("domChildren",i.domChildren(),o.domChildren()),Er("defChildren",i.defChildren(),o.defChildren()),i.value().or(o.value()).map(function(n){return wt("value",n)}).getOr({})),Or(u)},Fl=function(n,e,t){var r,o,i,u,a,c,s={"alloy.base.behaviour":(r=n,r.events())};return(o=t,i=n.eventOrder(),u=e,a=s,c=yl(o,u,a),Sl(c,i)).getOrDie()},Nl=function(n){var e,t,r,o,i,u,a,c,s,f,l,d,m,g,v=sl(n),p=(e=v,t=bt("components",[])(e),bn(t,zl)),h=k(cl,v,wt("components",p));return nt.value((r=h,i=fo(ll(o=function(){return g})),u=_t(Tl(k(r,{behaviours:undefined}))),a=Ml(r),c=a.list,s=a.data,f=Rl(u,c,s),l=Dl(f),d=Fl(u,c,s),m=fo(u.components()),g=Bl({getSystem:i.get,config:function(n){if(n===Dc())return u.apis();if(b(n))throw new Error("Invalid input: only API constant is allowed");var e=s;return(w(e[n.name()])?e[n.name()]:function(){throw new Error("Could not find "+n.name()+" in "+Et(r,null,2))})()},hasConfigured:function(n){return w(s[n.name()])},spec:A(r),readState:function(n){return s[n]().map(function(n){return n.state.readState()}).getOr("not enabled")},connect:function(n){i.set(n)},disconnect:function(){i.set(ll(o))},element:A(l),syncComponents:function(){var n=je(l),e=Dn(n,function(n){return i.get().getByDom(n).fold(function(){return[]},function(n){return[n]})});m.set(e)},components:m.get,events:A(d)})))},Vl=function(n){var e=se.fromText(n);return Hl({element:e})},Hl=function(n){var t=Yt("external.component",Nt([Zt("element"),rr("uid")]),n),e=fo(ll());t.uid().each(function(n){var e;e=t.element(),_r(e,Bc,n)});var r=Bl({getSystem:e.get,config:F.none,hasConfigured:A(!1),connect:function(n){e.set(n)},disconnect:function(){e.set(ll(function(){return r}))},element:A(t.element()),spec:A(n),readState:A("No state"),syncComponents:I,components:A([]),events:A({})});return Cc(r)},zl=function(e){return(n=e,yt(n,Oc)).fold(function(){var n=k({uid:Fc("")},e);return Nl(n).getOrDie()},function(n){return n});var n},jl=Cc,Ll="alloy.item-hover",Ul="alloy.item-focus",Pl=function(n){(yo(n.element()).isNone()||bi.isFocused(n))&&(bi.isFocused(n)||bi.focus(n),oe(n,Ll,{item:n}))},$l=function(n){oe(n,Ul,{item:n})},Wl=A(Ll),Gl=A(Ul),_l=[Zt("data"),Zt("components"),Zt("dom"),rr("toggling"),ur("itemBehaviours",{}),ur("ignoreFocus",!1),ur("domModification",{}),qo("builder",function(n){return{dom:k(n.dom(),{attributes:{role:n.toggling().isSome()?"menuitemcheckbox":"menuitem"}}),behaviours:k(Lr([n.toggling().fold(ci.revoke,function(n){return ci.config(k({aria:{mode:"checked"}},n))}),bi.config({ignore:n.ignoreFocus(),onFocus:function(n){$l(n)}}),ja.config({mode:"execution"}),Ss.config({store:{mode:"memory",initialValue:n.data()}})]),n.itemBehaviours()),events:lr([(e=Jn(),r=ie,mr(e,function(e,t){var n=t.event();e.getSystem().getByDom(n.target()).each(function(n){r(e,n,t)})})),hr($()),mr(_(),Pl),mr(Kn(),bi.focus)]),components:n.components(),domModification:n.domModification(),eventOrder:n.eventOrder()};var e,r}),ur("eventOrder",{})],ql=[Zt("dom"),Zt("components"),qo("builder",function(n){return{dom:n.dom(),components:n.components(),events:lr([(e=Kn(),mr(e,function(n,e){e.stop()}))])};var e})],Yl=A([lc({name:"widget",overrides:function(e){return{behaviours:Lr([Ss.config({store:{mode:"manual",getValue:function(n){return e.data()},setValue:function(){}}})])}}})]),Kl=[Zt("uid"),Zt("data"),Zt("components"),Zt("dom"),ur("autofocus",!1),ur("domModification",{}),Tc(Yl()),qo("builder",function(t){var n=bc(0,t,Yl()),e=yc("item-widget",t,n.internals()),r=function(n){return wc(n,t,"widget").map(function(n){return ja.focusIn(n),n})},o=function(n,e){return mu(e.event().target())||t.autofocus()&&e.setSource(n.element()),F.none()};return k({dom:t.dom(),components:e,domModification:t.domModification(),events:lr([xr(function(n,e){r(n).each(function(n){e.stop()})}),mr(_(),Pl),mr(Kn(),function(n,e){t.autofocus()?r(n):bi.focus(n)})]),behaviours:Lr([Ss.config({store:{mode:"memory",initialValue:t.data()}}),bi.config({onFocus:function(n){$l(n)}}),ja.config({mode:"special",focusIn:t.autofocus()?function(n){r(n)}:Wr(),onLeft:o,onRight:o,onEscape:function(n,e){return bi.isFocused(n)||t.autofocus()?(t.autofocus()&&e.setSource(n.element()),F.none()):(bi.focus(n),F.some(!0))}})])})})],Xl=Xt("type",{widget:Kl,item:_l,separator:ql}),Jl=A([mc({factory:{sketch:function(n){var e=Yt("menu.spec item",Xl,n);return e.builder()(e)}},name:"items",unit:"item",defaults:function(n,e){var t=Fc("");return k({uid:t},e)},overrides:function(n,e){return{type:e.type,ignoreFocus:n.fakeFocus(),domModification:{classes:[n.markers().item()]}}}})]),Ql=A([Zt("value"),Zt("items"),Zt("dom"),Zt("components"),ur("eventOrder",{}),La("menuBehaviours",[au,Ss,Of,ja]),ar("movement",{mode:"menu",moveOnTab:!0},Xt("mode",{grid:[Ko(),qo("config",function(n,e){return{mode:"flatgrid",selector:"."+n.markers().item(),initSize:{numColumns:e.initSize().numColumns(),numRows:e.initSize().numRows()},focusManager:n.focusManager()}})],menu:[ur("moveOnTab",!0),qo("config",function(n,e){return{mode:"menu",selector:"."+n.markers().item(),moveOnTab:e.moveOnTab(),focusManager:n.focusManager()}})]})),nr("markers",Lo()),ur("fakeFocus",!1),ur("focusManager",cu()),$o("onHighlight")]),Zl=A("alloy.menu-focus"),nd=Uc({name:"Menu",configFields:Ql(),partFields:Jl(),factory:function(n,e,t,r){return k({dom:k(n.dom(),{attributes:{role:"menu"}}),uid:n.uid(),behaviours:k(Lr([au.config({highlightClass:n.markers().selectedItem(),itemClass:n.markers().item(),onHighlight:n.onHighlight()}),Ss.config({store:{mode:"memory",initialValue:n.value()}}),Of.config({find:F.some}),ja.config(n.movement().config()(n,n.movement()))]),Ua(n.menuBehaviours())),events:lr([mr(Gl(),function(e,t){var n=t.event();e.getSystem().getByDom(n.target()).each(function(n){au.highlight(e,n),t.stop(),oe(e,Zl(),{menu:e,item:n})})}),mr(Wl(),function(n,e){var t=e.event().item();au.highlight(n,t)})]),components:e,eventOrder:n.eventOrder()})}}),ed=function(n,e,t,r){var o=n.getSystem().build(r);Ke(n,o,t)},td=function(n,e){return n.components()},rd=Pr({fields:[],name:"replacing",apis:Object.freeze({append:function(n,e,t,r){ed(n,0,Pe,r)},prepend:function(n,e,t,r){ed(n,0,Ue,r)},remove:function(n,e,t,r){var o=td(n,e);Tn(o,function(n){return Ve(r.element(),n.element())}).each(Je)},set:function(e,n,t,r){var o,i,u,a,c,s;i=(o=e).components(),yn(i,Xe),We(o.element()),o.syncComponents(),u=function(){var n=bn(r,e.getSystem().build);yn(n,function(n){Ye(e,n)})},a=e.element(),c=He(a),s=bo(c).bind(function(e){var n=function(n){return Ve(e,n)};return n(a)?F.some(a):vo(a,n)}),u(a),s.each(function(e){bo(c).filter(function(n){return Ve(n,e)}).fold(function(){po(e)},I)})},contents:td})}),od=function(t,r,o,n){return yt(o,n).bind(function(n){return yt(t,n).bind(function(n){var e=od(t,r,o,n);return F.some([n].concat(e))})}).getOr([])},id=function(n,e){var t={};V(n,function(n,e){yn(n,function(n){t[n]=e})});var r=e,o=z(e,function(n,e){return{k:n,v:e}}),i=H(o,function(n,e){return[e].concat(od(t,r,o,e))});return H(t,function(n){return yt(i,n).getOr([n])})},ud=function(){var i=fo({}),u=fo({}),a=fo({}),c=fo(F.none()),s=fo({}),n=function(n){return yt(u.get(),n)};return{setContents:function(n,e,t,r){c.set(F.some(n)),i.set(t),u.set(e),s.set(r);var o=id(r,t);a.set(o)},expand:function(t){return yt(i.get(),t).map(function(n){var e=yt(a.get(),t).getOr([]);return[n].concat(e)})},refresh:function(n){return yt(a.get(),n)},collapse:function(n){return yt(a.get(),n).bind(function(n){return 1");r[t[0]]=wt(t[1],n),r[t[1]]=wt(t[0],n)}),r},createBistate:function(n,e,t){return xt([{key:n,value:wt(e,t)},{key:e,value:wt(n,t)}])},createTristate:function(n,e,t,r){return xt([{key:n,value:xt([{key:e,value:r},{key:t,value:r}])},{key:e,value:xt([{key:n,value:r},{key:t,value:r}])},{key:t,value:xt([{key:n,value:r},{key:e,value:r}])}])}}}),bd=mi.resolve("scrollable"),yd={register:function(n){to(n,bd)},deregister:function(n){ro(n,bd)},scrollable:A(bd)},wd=function(n){return yt(n,"format").getOr(n.title)},xd=function(n,e,t,r,o){return{data:{value:n,text:e},type:"item",dom:{tag:"div",classes:o?[mi.resolve("styles-item-is-menu")]:[]},toggling:{toggleOnExecute:!1,toggleClass:mi.resolve("format-matches"),selected:t},itemBehaviours:Lr(o?[]:[si(n,function(n,e){(e?ci.on:ci.off)(n)})]),components:[{dom:{tag:"div",attributes:{style:r},innerHtml:e}}]}},Sd=function(n,e,t,r){return{value:n,dom:{tag:"div"},components:[Pc.sketch({dom:{tag:"div",classes:[mi.resolve("styles-collapser")]},components:r?[{dom:{tag:"span",classes:[mi.resolve("styles-collapse-icon")]}},Vl(n)]:[Vl(n)],action:function(n){if(r){var e=t().get(n);cd.collapseMenu(e)}}}),{dom:{tag:"div",classes:[mi.resolve("styles-menu-items-container")]},components:[nd.parts().items({})],behaviours:Lr([xf("adhoc-scrollable-menu",[br(function(n,e){xi(n.element(),"overflow-y","auto"),xi(n.element(),"-webkit-overflow-scrolling","touch"),yd.register(n.element())}),yr(function(n){Ci(n.element(),"overflow-y"),Ci(n.element(),"-webkit-overflow-scrolling"),yd.deregister(n.element())})])])}],items:e,menuBehaviours:Lr([hd.config({initialState:"after",routes:hd.createTristate("before","current","after",{transition:{property:"transform",transitionClass:"transitioning"}})})])}},Td=function(r){var o,i,n,e,t,u=(o=r.formats,i=function(){return a},n=Sd("Styles",[].concat(bn(o.items,function(n){return xd(wd(n),n.title,n.isSelected(),n.getPreview(),Tt(o.expansions,wd(n)))})),i,!1),e=H(o.menus,function(n,e){var t=bn(n,function(n){return xd(wd(n),n.title,n.isSelected!==undefined&&n.isSelected(),n.getPreview!==undefined?n.getPreview():"",Tt(o.expansions,wd(n)))});return Sd(e,t,i,!0)}),t=k(e,wt("styles",n)),{tmenu:cd.tieredData("styles",t,o.expansions)}),a=Ls(cd.sketch({dom:{tag:"div",classes:[mi.resolve("styles-menu")]},components:[],fakeFocus:!0,stayInDom:!0,onExecute:function(n,e){var t=Ss.getValue(e);return r.handle(e,t.value),F.none()},onEscape:function(){return F.none()},onOpenMenu:function(n,e){var t=Es(n.element());Cs(e.element(),t),hd.jumpTo(e,"current")},onOpenSubmenu:function(n,e,t){var r=Es(n.element()),o=Hi(e.element(),'[role="menu"]').getOrDie("hacky"),i=n.getSystem().getByDom(o).getOrDie();Cs(t.element(),r),hd.progressTo(i,"before"),hd.jumpTo(t,"after"),hd.progressTo(t,"current")},onCollapseMenu:function(n,e,t){var r=Hi(e.element(),'[role="menu"]').getOrDie("hacky"),o=n.getSystem().getByDom(r).getOrDie();hd.progressTo(o,"after"),hd.progressTo(t,"current")},navigateOnHover:!1,openImmediately:!0,data:u.tmenu,markers:{backgroundMenu:mi.resolve("styles-background-menu"),menu:mi.resolve("styles-menu"),selectedMenu:mi.resolve("styles-selected-menu"),item:mi.resolve("styles-item"),selectedItem:mi.resolve("styles-selected-item")}}));return a.asSpec()},Od=function(n){return Tt(n,"items")?(t=k(pt(e=n,["items"]),{menu:!0}),r=kd(e.items),{item:t,menus:k(r.menus,wt(e.title,r.items)),expansions:k(r.expansions,wt(e.title,e.title))}):{item:n,menus:{},expansions:{}};var e,t,r},kd=function(n){return xn(n,function(n,e){var t=Od(e);return{menus:k(n.menus,t.menus),items:[t.item].concat(n.items),expansions:k(n.expansions,t.expansions)}},{menus:{},expansions:{},items:[]})},Cd={expand:kd},Ed=function(u,n){var a=function(n){return function(){return u.formatter.match(n)}},c=function(n){return function(){return u.formatter.getCssText(n)}},e=yt(n,"style_formats").getOr(ul),s=function(n){return bn(n,function(n){if(Tt(n,"items")){var e=s(n.items);return k(k(n,{isSelected:A(!1),getPreview:A("")}),{items:e})}return Tt(n,"format")?k(i=n,{isSelected:a(i.format),getPreview:c(i.format)}):(r=Ja((t=n).title),o=k(t,{format:r,isSelected:a(r),getPreview:c(r)}),u.formatter.register(r,o),o);var t,r,o,i})};return s(e)},Dd=function(t,n,r){var e,o,i,u=(e=t,i=(o=function(n){return Dn(n,function(n){return n.items!==undefined?0e.innerHeight||n.bottom()>e.innerHeight?n.bottom()-e.innerHeight+50:0;0!==t&&e.scrollTo(e.pageXOffset,e.pageYOffset+t)})})].concat(!0===Yd?[]:[jd(se.fromDom(r.win()),"blur",function(){t.getByDom(e).each(ci.off)}),jd(i,"select",n),jd(r.doc(),"selectionchange",n)]);return{destroy:function(){yn(a,function(n){n.unbind()})}}},Xd=function(n,e){var t=parseInt(Yr(n,e),10);return isNaN(t)?0:t},Jd=(tf=pe,rf="text",of=function(n){return tf(n)?F.from(n.dom().nodeValue):F.none()},uf=$n.detect().browser,{get:function(n){if(!tf(n))throw new Error("Can only get "+rf+" value of a "+rf+" node");return af(n).getOr("")},getOption:af=uf.isIE()&&10===uf.version.major?function(n){try{return of(n)}catch(e){return F.none()}}:of,set:function(n,e){if(!tf(n))throw new Error("Can only set raw "+rf+" value of a "+rf+" node");n.dom().nodeValue=e}}),Qd=function(n){return Jd.getOption(n)},Zd=et([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),nm={before:Zd.before,on:Zd.on,after:Zd.after,cata:function(n,e,t,r){return n.fold(e,t,r)},getStart:function(n){return n.fold(h,h,h)}},em=et([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),tm=we("start","soffset","finish","foffset"),rm=em.relative,om=em.exact,im=function(n,e,t,r){var o,i,u,a,c,s=(i=e,u=t,a=r,(c=He(o=n).dom().createRange()).setStart(o.dom(),i),c.setEnd(u.dom(),a),c),f=Ve(n,t)&&e===r;return s.collapsed&&!f},um=function(n,e,t){var r,o,i=n.document.createRange();return r=i,e.fold(function(n){r.setStartBefore(n.dom())},function(n,e){r.setStart(n.dom(),e)},function(n){r.setStartAfter(n.dom())}),o=i,t.fold(function(n){o.setEndBefore(n.dom())},function(n,e){o.setEnd(n.dom(),e)},function(n){o.setEndAfter(n.dom())}),i},am=function(n,e,t,r,o){var i=n.document.createRange();return i.setStart(e.dom(),t),i.setEnd(r.dom(),o),i},cm=function(n){return{left:A(n.left),top:A(n.top),right:A(n.right),bottom:A(n.bottom),width:A(n.width),height:A(n.height)}},sm=et([{ltr:["start","soffset","finish","foffset"]},{rtl:["start","soffset","finish","foffset"]}]),fm=function(n,e,t){return e(se.fromDom(t.startContainer),t.startOffset,se.fromDom(t.endContainer),t.endOffset)},lm=function(n,e){var o,t,r,i=(o=n,e.match({domRange:function(n){return{ltr:A(n),rtl:F.none}},relative:function(n,e){return{ltr:Z(function(){return um(o,n,e)}),rtl:Z(function(){return F.some(um(o,e,n))})}},exact:function(n,e,t,r){return{ltr:Z(function(){return am(o,n,e,t,r)}),rtl:Z(function(){return F.some(am(o,t,r,n,e))})}}}));return(r=(t=i).ltr()).collapsed?t.rtl().filter(function(n){return!1===n.collapsed}).map(function(n){return sm.rtl(se.fromDom(n.endContainer),n.endOffset,se.fromDom(n.startContainer),n.startOffset)}).getOrThunk(function(){return fm(0,sm.ltr,r)}):fm(0,sm.ltr,r)},dm=(document.caretPositionFromPoint||document.caretRangeFromPoint,function(n,e){var t=me(n);return"input"===t?nm.after(n):hn(["br","img"],t)?0===e?nm.before(n):nm.after(n):nm.on(n,e)}),mm=function(n,e,t,r,o){var i,u,a=am(n,e,t,r,o);i=n,u=a,F.from(i.getSelection()).each(function(n){n.removeAllRanges(),n.addRange(u)})},gm=function(n,e,t,r,o){var i,u,a,c,l,s=(i=r,u=o,a=dm(e,t),c=dm(i,u),rm(a,c));lm(l=n,s).match({ltr:function(n,e,t,r){mm(l,n,e,t,r)},rtl:function(n,e,t,r){var o,i,u,a,c,s=l.getSelection();if(s.setBaseAndExtent)s.setBaseAndExtent(n.dom(),e,t.dom(),r);else if(s.extend)try{i=n,u=e,a=t,c=r,(o=s).collapse(i.dom(),u),o.extend(a.dom(),c)}catch(f){mm(l,t,r,n,e)}else mm(l,t,r,n,e)}})},vm=function(n){var e=se.fromDom(n.anchorNode),t=se.fromDom(n.focusNode);return im(e,n.anchorOffset,t,n.focusOffset)?F.some(tm(se.fromDom(n.anchorNode),n.anchorOffset,se.fromDom(n.focusNode),n.focusOffset)):function(n){if(0e.innerHeight||t.bottom()>e.innerHeight?Math.min(r,t.bottom()-e.innerHeight+50):0);0!==o&&u.scrollTo(u.pageXOffset,u.pageYOffset+o)})}),Om(e,n.innerHeight)});return Om(e,n.innerHeight),{toEditing:function(){Sm(u)},destroy:function(){t.unbind()}}},Dm=function(n){return F.some(se.fromDom(n.dom().contentWindow.document.body))},Im=function(n){return F.some(se.fromDom(n.dom().contentWindow.document))},Am=function(n){return F.from(n.dom().contentWindow)},Mm=function(n){return Am(n).bind(pm)},Bm=function(n){return n.getFrame()},Rm=function(n,t){return function(e){return e[n].getOrThunk(function(){var n=Bm(e);return function(){return t(n)}})()}},Fm=function(n,e,t,r){return n[t].getOrThunk(function(){return function(n){return jd(e,r,n)}})},Nm=function(n){return{left:A(n.left),top:A(n.top),right:A(n.right),bottom:A(n.bottom),width:A(n.width),height:A(n.height)}},Vm={getBody:Rm("getBody",Dm),getDoc:Rm("getDoc",Im),getWin:Rm("getWin",Am),getSelection:Rm("getSelection",Mm),getFrame:Bm,getActiveApi:function(a){var c=Bm(a);return Dm(c).bind(function(u){return Im(c).bind(function(i){return Am(c).map(function(o){var n=se.fromDom(i.dom().documentElement),e=a.getCursorBox.getOrThunk(function(){return function(){return(n=o,pm(n).map(function(n){return om(n.start(),n.soffset(),n.finish(),n.foffset())})).bind(function(n){return hm(o,n).orThunk(function(){return pm(o).filter(function(n){return Ve(n.start(),n.finish())&&n.soffset()===n.foffset()}).bind(function(n){var e=n.start().dom().getBoundingClientRect();return 0'),containerBehaviours:Lr([ci.config({toggleClass:mi.resolve("mask-tap-icon-selected"),toggleOnExecute:!1})])})),u=(t=n,r=200,o=null,{cancel:function(){null!==o&&(clearTimeout(o),o=null)},throttle:function(){for(var n=[],e=0;e'),components:[kf.sketch({dom:Gc(''),components:[Pc.sketch({dom:Gc(''),components:[i.asSpec()],action:function(n){u.throttle()},buttonBehaviours:Lr([ci.config({toggleClass:mi.resolve("mask-tap-icon-selected")})])})]})]})},qm=Vt([tr("editor",[Zt("getFrame"),rr("getBody"),rr("getDoc"),rr("getWin"),rr("getSelection"),rr("setSelection"),rr("clearSelection"),rr("cursorSaver"),rr("onKeyup"),rr("onNodeChanged"),rr("getCursorBox"),Zt("onDomChanged"),ur("onTouchContent",I),ur("onTapContent",I),ur("onTouchToolstrip",I),ur("onScrollToCursor",A({unbind:I})),ur("onScrollToElement",A({unbind:I})),ur("onToEditing",A({unbind:I})),ur("onToReading",A({unbind:I})),ur("onToolbarScrollStart",h)]),Zt("socket"),Zt("toolstrip"),Zt("dropup"),Zt("toolbar"),Zt("container"),Zt("alloy"),cr("win",function(n){return He(n.socket).dom().defaultView}),cr("body",function(n){return se.fromDom(n.socket.dom().ownerDocument.body)}),ur("translate",h),ur("setReadOnly",I),ur("readOnlyOnInit",A(!0))]),Ym=function(n){var e=qt("Getting AndroidWebapp schema",qm,n);xi(e.toolstrip,"width","100%");var t=zl(_m(function(){e.setReadOnly(e.readOnlyOnInit()),o.enter()},e.translate));e.alloy.add(t);var r={show:function(){e.alloy.add(t)},hide:function(){e.alloy.remove(t)}};Pe(e.container,t.element());var o=Wm(e,r);return{setReadOnly:e.setReadOnly,refreshStructure:I,enter:o.enter,exit:o.exit,destroy:I}},Km=A([ur("shell",!0),La("toolbarBehaviours",[rd])]),Xm=A([dc({name:"groups",overrides:function(n){return{behaviours:Lr([rd.config({})])}}})]),Jm=Uc({name:"Toolbar",configFields:Km(),partFields:Xm(),factory:function(e,n,t,r){var o=function(n){return e.shell()?F.some(n):wc(n,e,"groups")},i=e.shell()?{behaviours:[rd.config({})],components:[]}:{behaviours:[],components:n};return{uid:e.uid(),dom:e.dom(),components:i.components,behaviours:k(Lr(i.behaviours),Ua(e.toolbarBehaviours())),apis:{setGroups:function(n,e){o(n).fold(function(){throw console.error("Toolbar was defined to not be a shell, but no groups container was specified in components"),new Error("Toolbar was defined to not be a shell, but no groups container was specified in components")},function(n){rd.set(n,e)})}},domModification:{attributes:{role:"group"}}}},apis:{setGroups:function(n,e,t){n.setGroups(e,t)}}}),Qm=A([Zt("items"),(cf=["itemClass"],tr("markers",bn(cf,Zt))),La("tgroupBehaviours",[ja])]),Zm=A([mc({name:"items",unit:"item",overrides:function(n){return{domModification:{classes:[n.markers().itemClass()]}}}})]),ng=Uc({name:"ToolbarGroup",configFields:Qm(),partFields:Zm(),factory:function(n,e,t,r){return k({dom:{attributes:{role:"toolbar"}}},{uid:n.uid(),dom:n.dom(),components:e,behaviours:k(Lr([ja.config({mode:"flow",selector:"."+n.markers().itemClass()})]),Ua(n.tgroupBehaviours())),"debug.sketcher":t["debug.sketcher"]})}}),eg="data-"+mi.resolve("horizontal-scroll"),tg=function(n){return"true"===Yr(n,eg)?0<(t=n).dom().scrollLeft||function(n){n.dom().scrollLeft=1;var e=0!==n.dom().scrollLeft;return n.dom().scrollLeft=0,e}(t):0<(e=n).dom().scrollTop||function(n){n.dom().scrollTop=1;var e=0!==n.dom().scrollTop;return n.dom().scrollTop=0,e}(e);var e,t},rg={exclusive:function(n,e){return jd(n,"touchmove",function(n){ji(n.target(),e).filter(tg).fold(function(){n.raw().preventDefault()},I)})},markAsHorizontal:function(n){_r(n,eg,"true")}};function og(){var e=function(n){var e=!0===n.scrollable?"${prefix}-toolbar-scrollable-group":"";return{dom:Gc(''),tgroupBehaviours:Lr([xf("adhoc-scrollable-toolbar",!0===n.scrollable?[wr(function(n,e){xi(n.element(),"overflow-x","auto"),rg.markAsHorizontal(n.element()),yd.register(n.element())})]:[])]),components:[kf.sketch({components:[ng.parts().items({})]})],markers:{itemClass:mi.resolve("toolbar-group-item")},items:n.items}},t=zl(Jm.sketch({dom:Gc(''),components:[Jm.parts().groups({})],toolbarBehaviours:Lr([ci.config({toggleClass:mi.resolve("context-toolbar"),toggleOnExecute:!1,aria:{mode:"none"}}),ja.config({mode:"cyclic"})]),shell:!0})),n=zl(kf.sketch({dom:{classes:[mi.resolve("toolstrip")]},components:[jl(t)],containerBehaviours:Lr([ci.config({toggleClass:mi.resolve("android-selection-context-toolbar"),toggleOnExecute:!1})])})),r=function(){Jm.setGroups(t,o.get()),ci.off(t)},o=fo([]);return{wrapper:A(n),toolbar:A(t),createGroups:function(n){return bn(n,v(ng.sketch,e))},setGroups:function(n){o.set(n),r()},setContextToolbar:function(n){ci.on(t),Jm.setGroups(t,n)},restoreToolbar:function(){ci.isOn(t)&&r()},refresh:function(){},focus:function(){ja.focusIn(t)}}}var ig=function(n,e){rd.append(n,jl(e))},ug=function(n,e){rd.remove(n,e)},ag=function(n){return zl(Pc.sketch({dom:Gc(''),action:function(){n.run(function(n){n.setReadOnly(!1)})}}))},cg=function(){return zl(kf.sketch({dom:Gc(''),components:[],containerBehaviours:Lr([rd.config({})])}))},sg=function(n,e,t,r){(!0===t?so.toAlpha:so.toOmega)(r),(t?ig:ug)(n,e)},fg=function(e,n){return n.getAnimationRoot().fold(function(){return e.element()},function(n){return n(e)})},lg=function(n){return n.dimension().property()},dg=function(n,e){return n.dimension().getDimension()(e)},mg=function(n,e){var t=fg(n,e);Cl(t,[e.shrinkingClass(),e.growingClass()])},gg=function(n,e){ro(n.element(),e.openClass()),to(n.element(),e.closedClass()),xi(n.element(),lg(e),"0px"),Ei(n.element())},vg=function(n,e){ro(n.element(),e.closedClass()),to(n.element(),e.openClass()),Ci(n.element(),lg(e))},pg=function(n,e,t){t.setCollapsed(),xi(n.element(),lg(e),dg(e,n.element())),Ei(n.element());var r=fg(n,e);to(r,e.shrinkingClass()),gg(n,e),e.onStartShrink()(n)},hg=function(n,e,t){var r=function(n,e){vg(n,e);var t=dg(e,n.element());return gg(n,e),t}(n,e),o=fg(n,e);to(o,e.growingClass()),vg(n,e),xi(n.element(),lg(e),r),t.setExpanded(),e.onStartGrow()(n)},bg=function(n,e,t){var r=fg(n,e);return!0===io(r,e.growingClass())},yg=function(n,e,t){var r=fg(n,e);return!0===io(r,e.shrinkingClass())},wg=Object.freeze({grow:function(n,e,t){t.isExpanded()||hg(n,e,t)},shrink:function(n,e,t){t.isExpanded()&&pg(n,e,t)},immediateShrink:function(n,e,t){var r,o;t.isExpanded()&&(r=n,o=e,t.setCollapsed(),xi(r.element(),lg(o),dg(o,r.element())),Ei(r.element()),mg(r,o),gg(r,o),o.onStartShrink()(r),o.onShrunk()(r))},hasGrown:function(n,e,t){return t.isExpanded()},hasShrunk:function(n,e,t){return t.isCollapsed()},isGrowing:bg,isShrinking:yg,isTransitioning:function(n,e,t){return!0===bg(n,e)||!0===yg(n,e)},toggleGrow:function(n,e,t){(t.isExpanded()?pg:hg)(n,e,t)},disableTransitions:mg}),xg=Object.freeze({exhibit:function(n,e){var t=e.expanded();return Cr(t?{classes:[e.openClass()],styles:{}}:{classes:[e.closedClass()],styles:wt(e.dimension().property(),"0px")})},events:function(t,r){return lr([mr(J(),function(n,e){e.event().raw().propertyName===t.dimension().property()&&(mg(n,t),r.isExpanded()&&Ci(n.element(),t.dimension().property()),(r.isExpanded()?t.onGrown():t.onShrunk())(n))})])}}),Sg=[Zt("closedClass"),Zt("openClass"),Zt("shrinkingClass"),Zt("growingClass"),rr("getAnimationRoot"),$o("onShrunk"),$o("onStartShrink"),$o("onGrown"),$o("onStartGrow"),ur("expanded",!1),nr("dimension",Xt("property",{width:[qo("property","width"),qo("getDimension",function(n){return Es(n)+"px"})],height:[qo("property","height"),qo("getDimension",function(n){return Bi(n)+"px"})]}))],Tg=Pr({fields:Sg,name:"sliding",active:xg,apis:wg,state:Object.freeze({init:function(n){var e=fo(n.expanded());return jr({isExpanded:function(){return!0===e.get()},isCollapsed:function(){return!1===e.get()},setCollapsed:l(e.set,!1),setExpanded:l(e.set,!0),readState:function(){return"expanded: "+e.get()}})}})}),Og=function(e,t){var r=zl(kf.sketch({dom:{tag:"div",classes:[mi.resolve("dropup")]},components:[],containerBehaviours:Lr([rd.config({}),Tg.config({closedClass:mi.resolve("dropup-closed"),openClass:mi.resolve("dropup-open"),shrinkingClass:mi.resolve("dropup-shrinking"),growingClass:mi.resolve("dropup-growing"),dimension:{property:"height"},onShrunk:function(n){e(),t(),rd.set(n,[])},onGrown:function(n){e(),t()}}),fi(function(n,e){o(I)})])})),o=function(n){window.requestAnimationFrame(function(){n(),Tg.shrink(r)})};return{appear:function(n,e,t){!0===Tg.hasShrunk(r)&&!1===Tg.isTransitioning(r)&&window.requestAnimationFrame(function(){e(t),rd.set(r,[n()]),Tg.grow(r)})},disappear:o,component:A(r),element:r.element}},kg=$n.detect().browser.isFirefox(),Cg=Nt([er("triggerEvent"),er("broadcastEvent"),ur("stopBackspace",!0)]),Eg=function(e,n){var t,r,o,i,u,a=qt("Getting GUI events settings",Cg,n),c=$n.detect().deviceType.isTouch()?["touchstart","touchmove","touchend","gesturestart"]:["mousedown","mouseup","mouseover","mousemove","mouseout","click"],s=_d(a),f=bn(c.concat(["selectstart","input","contextmenu","change","transitionend","drag","dragstart","dragend","dragenter","dragleave","dragover","drop"]),function(n){return jd(e,n,function(e){s.fireIfReady(e,n).each(function(n){n&&e.kill()}),a.triggerEvent(n,e)&&e.kill()})}),l=jd(e,"keydown",function(n){var e;a.triggerEvent("keydown",n)?n.kill():!0!==a.stopBackspace||8!==(e=n).raw().which||hn(["input","textarea"],me(e.target()))||n.prevent()}),d=(t=e,r=function(n){a.triggerEvent("focusin",n)&&n.kill()},kg?Ld(t,"focus",r):jd(t,"focusin",r)),m=(o=e,i=function(n){a.triggerEvent("focusout",n)&&n.kill(),setTimeout(function(){a.triggerEvent(_n(),n)},0)},kg?Ld(o,"blur",i):jd(o,"focusout",i)),g=(u=e.dom().ownerDocument.defaultView,se.fromDom(u)),v=jd(g,"scroll",function(n){a.broadcastEvent(ne(),n)&&n.kill()});return{unbind:function(){yn(f,function(n){n.unbind()}),l.unbind(),d.unbind(),m.unbind(),v.unbind()}}},Dg=function(n,e){var t=yt(n,"target").map(function(n){return n()}).getOr(e);return fo(t)},Ig=et([{stopped:[]},{resume:["element"]},{complete:[]}]),Ag=function(n,r,e,t,o,i){var u,a,c,s,f=n(r,t),l=(u=e,a=o,c=fo(!1),s=fo(!1),{stop:function(){c.set(!0)},cut:function(){s.set(!0)},isStopped:c.get,isCut:s.get,event:A(u),setSource:a.set,getSource:a.get});return f.fold(function(){return i.logEventNoHandlers(r,t),Ig.complete()},function(e){var t=e.descHandler();return hl(t)(l),l.isStopped()?(i.logEventStopped(r,e.element(),t.purpose()),Ig.stopped()):l.isCut()?(i.logEventCut(r,e.element(),t.purpose()),Ig.complete()):ze(e.element()).fold(function(){return i.logNoParent(r,e.element(),t.purpose()),Ig.complete()},function(n){return i.logEventResponse(r,e.element(),t.purpose()),Ig.resume(n)})})},Mg=function(e,t,r,n,o,i){return Ag(e,t,r,n,o,i).fold(function(){return!0},function(n){return Mg(e,t,r,n,o,i)},function(){return!1})},Bg=function(n,e,t){var r,o,i=(r=e,o=fo(!1),{stop:function(){o.set(!0)},cut:I,isStopped:o.get,isCut:A(!1),event:A(r),setSource:c("Cannot set source of a broadcasted event"),getSource:c("Cannot get source of a broadcasted event")});return yn(n,function(n){var e=n.descHandler();hl(e)(i)}),i.isStopped()},Rg=function(n,e,t,r,o){var i=Dg(t,r);return Mg(n,e,t,r,i,o)},Fg=function(n,e,t){return go(n,function(n){return e(n).isSome()},t).bind(e)},Ng=we("element","descHandler"),Vg=function(n,e){return{id:A(n),descHandler:A(e)}};function Hg(){var i={};return{registerId:function(r,o,n){V(n,function(n,e){var t=i[e]!==undefined?i[e]:{};t[o]=pl(n,r),i[e]=t})},unregisterId:function(t){V(i,function(n,e){n.hasOwnProperty(t)&&delete n[t]})},filterByType:function(n){return yt(i,n).map(function(n){return j(n,function(n,e){return Vg(e,n)})}).getOr([])},find:function(n,e,t){var o=ht(e)(i);return Fg(t,function(n){return t=o,Rc(r=n).fold(function(){return F.none()},function(n){var e=ht(n);return t.bind(e).map(function(n){return Ng(r,n)})});var t,r},n)}}}function zg(){var r=Hg(),o={},i=function(r){var n=r.element();return Rc(n).fold(function(){return n="uid-",e=r.element(),t=Ja(Mc+n),_r(e,Bc,t),t;var n,e,t},function(n){return n})},u=function(n){Rc(n.element()).each(function(n){o[n]=undefined,r.unregisterId(n)})};return{find:function(n,e,t){return r.find(n,e,t)},filter:function(n){return r.filterByType(n)},register:function(n){var e=i(n);Tt(o,e)&&function(n,e){var t=o[e];if(t!==n)throw new Error('The tagId "'+e+'" is already used by: '+Do(t.element())+"\nCannot use it for: "+Do(n.element())+"\nThe conflicting element is"+(he(t.element())?" ":" not ")+"already in the DOM");u(n)}(n,e);var t=[n];r.registerId(t,e,n.events()),o[e]=n},unregister:u,getById:function(n){return ht(n)(o)}}}var jg=function(t){var r=function(e){return ze(t.element()).fold(function(){return!0},function(n){return Ve(e,n)})},o=zg(),s=function(n,e){return o.find(r,n,e)},n=Eg(t.element(),{triggerEvent:function(u,a){return Ho(u,a.target(),function(n){return e=s,t=u,o=n,i=(r=a).target(),Rg(e,t,r,i,o);var e,t,r,o,i})},broadcastEvent:function(n,e){var t=o.filter(n);return Bg(t,e)}}),i=fl({debugInfo:A("real"),triggerEvent:function(e,t,r){Ho(e,t,function(n){Rg(s,e,r,t,n)})},triggerFocus:function(a,c){Rc(a).fold(function(){po(a)},function(n){Ho(Gn(),a,function(n){var e,t,r,o,i,u;e=s,t=Gn(),r={originator:A(c),kill:I,prevent:I,target:A(a)},i=n,u=Dg(r,o=a),Ag(e,t,r,o,u,i)})})},triggerEscape:function(n,e){i.triggerEvent("keydown",n.element(),e.event())},getByUid:function(n){return m(n)},getByDom:function(n){return g(n)},build:zl,addToGui:function(n){a(n)},removeFromGui:function(n){c(n)},addToWorld:function(n){e(n)},removeFromWorld:function(n){u(n)},broadcast:function(n){l(n)},broadcastOn:function(n,e){d(n,e)},isConnected:A(!0)}),e=function(n){n.connect(i),pe(n.element())||(o.register(n),yn(n.components(),e),i.triggerEvent(Zn(),n.element(),{target:A(n.element())}))},u=function(n){pe(n.element())||(yn(n.components(),u),o.unregister(n)),n.disconnect()},a=function(n){Ye(t,n)},c=function(n){Je(n)},f=function(t){var n=o.filter(qn());yn(n,function(n){var e=n.descHandler();hl(e)(t)})},l=function(n){f({universal:A(!0),data:A(n)})},d=function(n,e){f({universal:A(!1),channels:A(n),data:A(e)})},m=function(n){return o.getById(n).fold(function(){return nt.error(new Error('Could not find component with uid: "'+n+'" in system.'))},nt.value)},g=function(n){var e=Rc(n).getOr("not found");return m(e)};return e(t),{root:A(t),element:t.element,destroy:function(){n.unbind(),Ge(t.element())},add:a,remove:c,getByUid:m,getByDom:g,addToWorld:e,removeFromWorld:u,broadcast:l,broadcastOn:d}},Lg=A(mi.resolve("readonly-mode")),Ug=A(mi.resolve("edit-mode"));function Pg(n){var e=zl(kf.sketch({dom:{classes:[mi.resolve("outer-container")].concat(n.classes)},containerBehaviours:Lr([so.config({alpha:Lg(),omega:Ug()})])}));return jg(e)}var $g=function(n,e){var t=se.fromTag("input");Si(t,{opacity:"0",position:"absolute",top:"-1000px",left:"-1000px"}),Pe(n,t),po(t),e(t),Ge(t)},Wg=function(n){var e=n.getSelection();if(0Math.abs(t-o))&&(clearInterval(s),a(o))}})},t)}}},nv=function(e,t){return Mo([{width:320,height:480,keyboard:{portrait:300,landscape:240}},{width:320,height:568,keyboard:{portrait:300,landscape:240}},{width:375,height:667,keyboard:{portrait:305,landscape:240}},{width:414,height:736,keyboard:{portrait:320,landscape:240}},{width:768,height:1024,keyboard:{portrait:320,landscape:400}},{width:1024,height:1366,keyboard:{portrait:380,landscape:460}}],function(n){return e<=n.width&&t<=n.height?F.some(n.keyboard):F.none()}).getOr({portrait:t/5,landscape:e/4})},ev=function(n){var e,t=Pd(n).isPortrait(),r=nv((e=n).screen.width,e.screen.height),o=t?r.portrait:r.landscape;return(t?n.screen.height:n.screen.width)-n.innerHeight>o?0:o},tv=function(n,e){var t=He(n).dom().defaultView;return Bi(n)+Bi(e)-ev(t)},rv=tv,ov=function(n,e,t){var r=tv(e,t),o=Bi(e)+Bi(t)-r;xi(n,"padding-bottom",o+"px")},iv=et([{fixed:["element","property","offsetY"]},{scroller:["element","offsetY"]}]),uv="data-"+mi.resolve("position-y-fixed"),av="data-"+mi.resolve("y-property"),cv="data-"+mi.resolve("scrolling"),sv="data-"+mi.resolve("last-window-height"),fv=function(n){return Xd(n,uv)},lv=function(n,e){var t=Yr(n,av);return iv.fixed(n,t,e)},dv=function(n,e){return iv.scroller(n,e)},mv=function(n){var e=fv(n);return("true"===Yr(n,cv)?dv:lv)(n,e)},gv=function(n,e,t){var r=He(n).dom().defaultView.innerHeight;return _r(n,sv,r+"px"),r-e-t},vv=function(n){var e=Ni(n,"["+uv+"]");return bn(e,mv)},pv=function(r,o,i,u){var n,e,t,a,c,s,f,l,d=He(r).dom().defaultView,m=(l=Yr(f=i,"style"),Si(f,{position:"absolute",top:"0px"}),_r(f,uv,"0px"),_r(f,av,"top"),{restore:function(){_r(f,"style",l||""),Xr(f,uv),Xr(f,av)}}),g=Bi(i),v=Bi(u),p=gv(r,g,v),h=(t=g,a=p,s=Yr(c=r,"style"),yd.register(c),Si(c,{position:"absolute",height:a+"px",width:"100%",top:t+"px"}),_r(c,uv,t+"px"),_r(c,cv,"true"),_r(c,av,"top"),{restore:function(){yd.deregister(c),_r(c,"style",s||""),Xr(c,uv),Xr(c,cv),Xr(c,av)}}),b=(e=Yr(n=u,"style"),Si(n,{position:"absolute",bottom:"0px"}),_r(n,uv,"0px"),_r(n,av,"bottom"),{restore:function(){_r(n,"style",e||""),Xr(n,uv),Xr(n,av)}}),y=!0,w=function(){var n=d.innerHeight;return Xd(r,sv)=u.length&&r(o)}))})})},Iv=function(n,c){return n.fold(function(n,e,t){return xi(n,e,c+(r=t)+"px"),Jg.pure(r);var r},function(n,e){return o=c+(r=e),i=ki(t=n,"top").getOr(r),u=o-parseInt(i,10),a=t.dom().scrollTop+u,Tv(t,a,o);var t,r,o,i,u,a})},Av=function(n,e){var t=vv(n),r=bn(t,function(n){return Iv(n,e)});return Dv(r,Jg.nu)},Mv=function(e,t,n,r,o,i){var u,a,c=(u=function(n){return Cv(e,t,n)},a=fo(Kg.pure({})),{start:function(e){var n=Kg.nu(function(n){return u(e).get(n)});a.set(n)},idle:function(n){a.get().get(function(){n()})}}),s=Gm(function(){c.idle(function(){Av(n,r.pageYOffset).get(function(){var n;(n=xm(i),F.from(n[0]).bind(function(n){var e=n.top()-t.dom().scrollTop;return e>r.innerHeight+5||e<-5?F.some({top:A(e),bottom:A(e+n.height())}):F.none()})).each(function(n){t.dom().scrollTop=t.dom().scrollTop+n.top()}),c.start(0),o.refresh()})})},1e3),f=jd(se.fromDom(r),"scroll",function(){r.pageYOffset<0||s.throttle()});return Av(n,r.pageYOffset).get(h),{unbind:f.unbind}},Bv=function(n){var t=n.cWin(),e=n.ceBody(),r=n.socket(),o=n.toolstrip(),i=n.toolbar(),u=n.contentElement(),a=n.keyboardType(),c=n.outerWindow(),s=n.dropup(),f=pv(r,e,o,s),l=a(n.outerBody(),t,be(),u,o,i),d=$d(c,{onChange:I,onReady:f.refresh});d.onAdjustment(function(){f.refresh()});var m=jd(se.fromDom(c),"resize",function(){f.isExpanding()&&f.refresh()}),g=Mv(o,r,n.outerBody(),c,f,t),v=function(t,e){var n=t.document,r=se.fromTag("div");to(r,mi.resolve("unfocused-selections")),Pe(se.fromDom(n.documentElement),r);var o=jd(r,"touchstart",function(n){n.prevent(),Gg(t,e),u()}),i=function(n){var e=se.fromTag("span");return kl(e,[mi.resolve("layer-editor"),mi.resolve("unfocused-selection")]),Si(e,{left:n.left()+"px",top:n.top()+"px",width:n.width()+"px",height:n.height()+"px"}),e},u=function(){We(r)};return{update:function(){u();var n=xm(t),e=bn(n,i);$e(r,e)},isActive:function(){return 0 "+r.toString()},function(n,e){return"state("+n+")"})}).join("\n")+"}"},toDsl:function(){return Mt.objOf(yn(a,function(n){return n.fold(function(n,e,t,r){return It.field(n,t,r)},function(n,e){return It.state(n)})}))}}},Wt=function(t,i){var e=function(n,e){return(o=Ut(t),{extract:function(t,r,n){var e=yn(n,function(n,e){return o.extract(t.concat(["["+e+"]"]),r,n)});return bt(e)},toString:function(){return"array("+o.toString()+")"},toDsl:function(){return Mt.arrOf(o)}}).extract(n,h,e);var o};return{extract:function(t,r,o){var n=F(o);return e(t,n).bind(function(n){var e=yn(n,function(n){return Ht.field(n,n,lt(),i)});return _t(e).extract(t,r,o)})},toString:function(){return"setOf("+i.toString()+")"},toDsl:function(){return Mt.setOf(t,i)}}},$t=E(Ut(at.value)),Gt=Ht.state,qt=Ht.field,Yt=function(t,e,r,o,i){return kt(o,i).fold(function(){return n=o,e=i,Vt(t,function(){return'The chosen schema: "'+e+'" did not exist in branches: '+Ft(n)});var n,e},function(n){return _t(n).extract(t.concat(["branch: "+i]),e,r)})},Xt=function(o,i){return{extract:function(e,t,r){return kt(r,o).fold(function(){return n=o,Vt(e,function(){return'Choice schema did not contain choice key: "'+n+'"'});var n},function(n){return Yt(e,t,r,i,n)})},toString:function(){return"chooseOn("+o+"). Possible values: "+F(i)},toDsl:function(){return Mt.choiceOf(o,i)}}},Kt=Ut(at.value),Jt=function(n,e,t,r){return e.extract([n],t,r).fold(function(n){return at.error({input:r,errors:n})},at.value)},Qt=function(n,e,t){return Jt(n,e,E,t)},Zt=function(n){return n.fold(function(n){throw new Error(tr(n))},h)},nr=function(n,e,t){return Zt(Jt(n,e,h,t))},er=function(n,e,t){return Zt(Qt(n,e,t))},tr=function(n){return"Errors: \n"+(e=n.errors,t=10 ")+")\n"+n.getErrorInfo()}))+"\n\nInput object: "+Ft(n.input);var e,t},rr=function(n,e){return Xt(n,e)},or=E(Kt),ir=(i=w,u="function",Ut(function(n){var e=typeof n;return i(n)?at.value(n):at.error("Expected type: "+u+" but got: "+e)})),ur=function(n){return qt(n,n,lt(),$t())},ar=function(n,e){return qt(n,n,lt(),e)},cr=function(n){return ar(n,ir)},sr=function(n,e){return qt(n,n,lt(),_t(e))},fr=function(n){return qt(n,n,dt(),$t())},lr=function(n,e){return qt(n,n,dt(),_t(e))},dr=function(n,e){return qt(n,n,dt(),Pt(e))},mr=function(n,e){return qt(n,n,ft(e),$t())},gr=function(n,e,t){return qt(n,n,ft(e),t)},vr=function(n,e){return Gt(n,e)},pr=function(n){if(!Rt(n,"can")&&!Rt(n,"abort")&&!Rt(n,"run"))throw new Error("EventHandler defined by: "+Bt(n,null,2)+" does not have can, abort, or run!");return nr("Extracting event.handler",Pt([mr("can",E(!0)),mr("abort",E(!1)),mr("run",k)]),n)},hr=function(t){var e,r,o,i,n=(e=t,r=function(n){return n.can},function(){for(var t=[],n=0;n"),innerHtml:n.innerHtml().getOr(""),defChildren:n.defChildren().fold(function(){return""},function(n){return Bt(n,null,2)}),domChildren:n.domChildren().fold(function(){return""},function(n){return 0===n.length?"0 children, but still specified":String(n.length)})}},Nr=De([],["classes","attributes","styles","value","innerHtml","defChildren","domChildren"]),Br=function(e,n,t){return n.fold(function(){return t.fold(function(){return{}},function(n){return Et(e,n)})},function(n){return t.fold(function(){return Et(e,n)},function(n){return Et(e,n)})})},Fr=function(t,r,o){return Er(function(n,e){o(n,t,r)})},Vr=function(n,e,t,r,o,i){var u,a,c=n,s=lr(e,[(u="config",a=n,qt(u,u,dt(),a))]);return jr(c,s,e,t,r,o,i)},Hr=function(o,i,u){var n,e,t,r,a,c;return n=function(t){for(var n=[],e=1;e"}),or()),Oc=mr("defaults",E({})),Cc=mr("overrides",E({})),kc=_t([wc,xc,Tc,Sc,Oc,Cc]),Ec=_t([wc,xc,Tc,Oc,Cc]),Dc=_t([wc,xc,Tc,Sc,Oc,Cc]),Ac=_t([wc,xc,Tc,ur("unit"),Sc,Oc,Cc]),Rc=function(n){var e=function(n){return n.name()};return n.fold(e,e,e,e)},Mc=function(t,r){return function(n){var e=er("Converting part type",r,n);return t(e)}},Ic=Mc(yc.required,kc),Nc=(Mc(yc.external,Ec),Mc(yc.optional,Dc)),Bc=Mc(yc.group,Ac),Fc=E("entirety"),Vc=function(n,e,t,r){var o=t;return C(e.defaults()(n,t,r),t,{uid:n.partUids()[e.name()]},e.overrides()(n,t,r),{"debug.sketcher":Et("part-"+e.name(),o)})},Hc=function(o,n){var i={};return wn(n,function(n){var e;(e=n,e.fold(B.some,B.none,B.some,B.some)).each(function(t){var r=zc(o,t.pname());i[t.name()]=function(n){var e=nr("Part: "+t.name()+" in "+o,_t(t.schema()),n);return C(r,{config:n,validated:e})}})}),i},zc=function(n,e){return{uiType:pc(),owner:n,name:e}},jc=function(n,e,t){return r=e,i={},o={},wn(t,function(n){n.fold(function(r){i[r.pname()]=gc(!0,function(n,e,t){return r.factory().sketch(Vc(n,r,e,t))})},function(n){var e=r.parts()[n.name()]();o[n.name()]=E(Vc(r,n,e[Fc()]()))},function(r){i[r.pname()]=gc(!1,function(n,e,t){return r.factory().sketch(Vc(n,r,e,t))})},function(o){i[o.pname()]=vc(!0,function(e,n,t){var r=e[o.name()]();return yn(r,function(n){return o.factory().sketch(C(o.defaults()(e,n),n,o.overrides()(e,n)))})})})}),{internals:E(i),externals:E(o)};var r,i,o},Lc=function(n,e,t){return mc(B.some(n),e,e.components(),t)},Uc=function(n,e,t){var r=e.partUids()[t];return n.getSystem().getByUid(r).toOption()},Pc=function(n,e,t){return Uc(n,e,t).getOrDie("Could not find part: "+t)},_c=function(e,n){var t=yn(n,Rc);return Dt(yn(t,function(n){return{key:n,value:e+"-"+n}}))},Wc=function(e){return qt("partUids","partUids",gt(function(n){return _c(n.uid,e)}),or())},$c=bc("alloy-premade"),Gc=bc("api"),qc=function(n){return Et($c,n)},Yc=function(o){return n=function(n){for(var e=[],t=1;t'),action:e,buttonBehaviours:C(qr([ls.config({})]),t)})},hs={forToolbar:ps,forToolbarCommand:function(n,e){return ps(e,function(){n.execCommand(e)},{})},forToolbarStateAction:function(n,e,t,r){var o=vs(t);return ps(e,r,o)},forToolbarStateCommand:function(n,e){var t=vs(e);return ps(e,function(){n.execCommand(e)},t)}},bs=function(t,r){return{left:E(t),top:E(r),translate:function(n,e){return bs(t+n,r+e)}}},ys=bs,ws=function(n,e,t){return Math.max(e,Math.min(t,n))},xs=function(n,e,t,r,o,i,u){var a=t-e;if(rn.right)return t+1;var c,s,f,l,d=Math.min(n.right,Math.max(r,n.left))-n.left,m=ws(d/n.width*a+e,e-1,t+1),g=Math.round(m);return i&&e<=m&&m<=t?(c=m,s=e,f=t,l=o,u.fold(function(){var n=c-s,e=Math.round(n/l)*l;return ws(s+e,s-1,f+1)},function(n){var e=(c-n)%l,t=Math.round(e/l),r=Math.floor((c-n)/l),o=Math.floor((f-n)/l),i=n+Math.min(o,r+t)*l;return Math.max(n,i)})):g},Ts="slider.change.value",Ss=Wn.detect().deviceType.isTouch(),Os=function(n){return function(n){var e=n.event().raw();if(Ss){var t=e;return t.touches!==undefined&&1===t.touches.length?B.some(t.touches[0]).map(function(n){return ys(n.clientX,n.clientY)}):B.none()}var r=e;return r.clientX!==undefined?B.some(r).map(function(n){return ys(n.clientX,n.clientY)}):B.none()}(n).map(function(n){return n.left()})},Cs=function(n,e){ie(n,Ts,{value:e})},ks=function(i,u,a,n){return Os(n).map(function(n){var e,t,r,o;return e=i,r=n,o=xs(a,(t=u).min(),t.max(),r,t.stepSize(),t.snapToGrid(),t.snapStart()),Cs(e,o),n})},Es=function(n,e){var t,r,o,i,u=(t=e.value().get(),r=e.min(),o=e.max(),i=e.stepSize(),tr.max()?Uc(e,r,"right-edge").fold(function(){return t.width},function(n){return f(n)-t.left}):(r.value().get()-r.min())/s*t.width);return i.left-u.left+a},u=function(n){var e=i(n),t=o(n),r=Xs(t.element())/2;_i.set(t.element(),"left",e-r+"px")},r=function(n,e){var t=c.value().get(),r=o(n);return t!==e||_i.getRaw(r.element(),"left").isNone()?(c.value().set(e),u(n),c.onChange()(n,r,e),B.some(!0)):B.none()},a=Ks?[wr(L(),function(n,e){c.onDragStart()(n,o(n))}),wr(P(),function(n,e){c.onDragEnd()(n,o(n))})]:[wr(_(),function(n,e){e.stop(),c.onDragStart()(n,o(n)),c.mouseIsDown().set(!0)}),wr($(),function(n,e){c.onDragEnd()(n,o(n)),c.mouseIsDown().set(!1)})];return{uid:c.uid(),dom:c.dom(),components:n,behaviours:C(qr(Dn([Ks?[]:[uc.config({mode:"special",focusIn:function(n){return Uc(n,c,"spectrum").map(uc.focusIn).map(E(!0))}})],[Ws.config({store:{mode:"manual",getValue:function(n){return c.value().get()}}})]])),cc(c.sliderBehaviours())),events:br([wr(Ts,function(n,e){r(n,e.event().value())}),Cr(function(n,e){c.value().set(c.getInitialValue()());var t=o(n);u(n),c.onInit()(n,t,c.value().get())})].concat(a)),apis:{resetToMin:function(n){r(n,c.min())},resetToMax:function(n){r(n,c.max())},refresh:u},domModification:{styles:{position:"relative"}}}},apis:{resetToMin:function(n,e){n.resetToMin(e)},resetToMax:function(n,e){n.resetToMax(e)},refresh:function(n,e){n.refresh(e)}}}),Qs=function(e,t,r){return hs.forToolbar(t,function(){var n=r();e.setContextToolbar([{label:t+" group",items:n}])},{})},Zs=function(n){return[(o=n,i=function(n){return n<0?"black":360'),components:[Js.parts()["left-edge"](gs('')),Js.parts().spectrum({dom:ms(''),components:[gs('')],behaviours:qr([ki.config({toggleClass:Mi.resolve("thumb-active")})])}),Js.parts()["right-edge"](gs('')),Js.parts().thumb({dom:ms(''),behaviours:qr([ki.config({toggleClass:Mi.resolve("thumb-active")})])})],onChange:function(n,e,t){var r=i(t);_i.set(e.element(),"background-color",r),o.onChange(n,e,r)},onDragStart:function(n,e){ki.on(e)},onDragEnd:function(n,e){ki.off(e)},onInit:function(n,e,t){var r=i(t);_i.set(e.element(),"background-color",r)},stepSize:10,min:0,max:360,getInitialValue:o.getInitialValue,sliderBehaviours:qr([Di(Js.refresh)])}))];var o,i},nf=function(n,r){var e={onChange:function(n,e,t){r.undoManager.transact(function(){r.formatter.apply("forecolor",{value:t}),r.nodeChanged()})},getInitialValue:function(){return-1}};return Qs(n,"color",function(){return Zs(e)})},ef=Pt([ur("getInitialValue"),ur("onChange"),ur("category"),ur("sizes")]),tf=function(n){var o=nr("SizeSlider",ef,n);return Js.sketch({dom:{tag:"div",classes:[Mi.resolve("slider-"+o.category+"-size-container"),Mi.resolve("slider"),Mi.resolve("slider-size-container")]},onChange:function(n,e,t){var r;0<=(r=t)&&r'),components:[gs('')]}),Js.parts().thumb({dom:ms(''),behaviours:qr([ki.config({toggleClass:Mi.resolve("thumb-active")})])})]})},rf=["9px","10px","11px","12px","14px","16px","18px","20px","24px","32px","36px"],of=function(n){var e,t,r=n.selection.getStart(),o=fe.fromDom(r),i=fe.fromDom(n.getBody()),u=(e=function(n){return ze(i,n)},t=o,(be.isElement(t)?B.some(t):$e.parent(t)).map(function(n){return Do.closest(n,function(n){return _i.getRaw(n,"font-size").isSome()},e).bind(function(n){return _i.getRaw(n,"font-size")}).getOrThunk(function(){return _i.get(n,"font-size")})}).getOr(""));return On(rf,function(n){return u===n}).getOr("medium")},uf={candidates:E(rf),get:function(n){var e,t=of(n);return(e=t,Cn(rf,function(n){return n===e})).getOr(2)},apply:function(r,n){var e;(e=n,B.from(rf[e])).each(function(n){var e,t;t=n,of(e=r)!==t&&e.execCommand("fontSize",!1,t)})}},af=uf.candidates(),cf=function(n){return[gs(''),(e=n,tf({onChange:e.onChange,sizes:af,category:"font",getInitialValue:e.getInitialValue})),gs('')];var e},sf=function(n){var e=n.uid!==undefined&&Rt(n,"uid")?n.uid:es("memento");return{get:function(n){return n.getSystem().getByUid(e).getOrDie()},getOpt:function(n){return n.getSystem().getByUid(e).fold(B.none,B.some)},asSpec:function(){return C(n,{uid:e})}}};function ff(n,e){return df(document.createElement("canvas"),n,e)}function lf(n){return n.getContext("2d")}function df(n,e,t){return n.width=e,n.height=t,n}var mf={create:ff,clone:function(n){var e;return lf(e=ff(n.width,n.height)).drawImage(n,0,0),e},resize:df,get2dContext:lf,get3dContext:function(n){var e=null;try{e=n.getContext("webgl")||n.getContext("experimental-webgl")}catch(t){}return e||(e=null),e}},gf={getWidth:function(n){return n.naturalWidth||n.width},getHeight:function(n){return n.naturalHeight||n.height}},vf=window.Promise?window.Promise:function(){var n=function(n){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof n)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],s(n,r(o,this),r(u,this))},e=n.immediateFn||"function"==typeof window.setImmediate&&window.setImmediate||function(n){setTimeout(n,1)};function r(n,e){return function(){n.apply(e,arguments)}}var t=Array.isArray||function(n){return"[object Array]"===Object.prototype.toString.call(n)};function i(r){var o=this;null!==this._state?e(function(){var n=o._state?r.onFulfilled:r.onRejected;if(null!==n){var e;try{e=n(o._value)}catch(t){return void r.reject(t)}r.resolve(e)}else(o._state?r.resolve:r.reject)(o._value)}):this._deferreds.push(r)}function o(n){try{if(n===this)throw new TypeError("A promise cannot be resolved with itself.");if(n&&("object"==typeof n||"function"==typeof n)){var e=n.then;if("function"==typeof e)return void s(r(e,n),r(o,this),r(u,this))}this._state=!0,this._value=n,a.call(this)}catch(t){u.call(this,t)}}function u(n){this._state=!1,this._value=n,a.call(this)}function a(){for(var n=0,e=this._deferreds.length;n'),components:[e.asSpec()],action:function(n){e.get(n).element().dom().click()}})},Bf=function(n){return n.dom().textContent},Ff=function(n,e){n.dom().textContent=e},Vf=function(n){return 0'),action:function(n){var e=t.get(n);Ws.setValue(e,"")}}));return{name:n,spec:Yf.sketch({dom:ms(''),components:[t.asSpec(),r.asSpec()],containerBehaviours:qr([ki.config({toggleClass:Mi.resolve("input-container-empty")}),qf.config({find:function(n){return B.some(t.get(n))}}),Wf("input-clearing",[wr(Y(),function(n){var e=t.get(n);(0"},wl=function(o,n,e){return C({"debug.sketcher":{Form:e},uid:o.uid(),dom:o.dom(),components:n,behaviours:C(qr([Ws.config({store:{mode:"manual",getValue:function(n){var e,t,r=(e=o,t=n.getSystem(),H(e.partUids(),function(n,e){return E(t.getByUid(n))}));return H(r,function(n,e){return n().bind(qf.getCurrent).map(Ws.getValue)})},setValue:function(t,n){V(n,function(e,n){Uc(t,o,n).each(function(n){qf.getCurrent(n).each(function(n){Ws.setValue(n,e)})})})}}})]),cc(o.formBehaviours())),apis:{getField:function(n,e){return Uc(n,o,e).bind(qf.getCurrent)}}})},xl=(Yc(function(n,e,t){return n.getField(e,t)}),function(n){var i,e=(i=[],{field:function(n,e){return i.push(n),t="form",r=yl(n),o=e,{uiType:pc(),owner:t,name:r,config:o,validated:{}};var t,r,o},record:function(){return i}}),t=n(e),r=e.record(),o=yn(r,function(n){return Ic({name:n,pname:yl(n)})});return rs("form",bl,o,wl,t)}),Tl=function(){var e=So(B.none()),t=function(){e.get().each(function(n){n.destroy()})};return{clear:function(){t(),e.set(B.none())},isSet:function(){return e.get().isSome()},set:function(n){t(),e.set(B.some(n))},run:function(n){e.get().each(n)}}},Sl=function(){var e=So(B.none());return{clear:function(){e.set(B.none())},set:function(n){e.set(B.some(n))},isSet:function(){return e.get().isSome()},on:function(n){e.get().each(n)}}},Ol=function(n){return{xValue:n,points:[]}},Cl=function(n,e){if(e===n.xValue)return n;var t=0'),action:function(n){ie(n,r,{direction:e})},buttonBehaviours:qr([hl.config({disableClass:Mi.resolve("toolbar-navigation-disabled"),disabled:!t})])})},i=function(n,o){var i=nu(n.element(),"."+Mi.resolve("serialised-dialog-screen"));ou(n.element(),"."+Mi.resolve("serialised-dialog-chain")).each(function(r){0<=u.state.currentScreen.get()+o&&u.state.currentScreen.get()+o'),components:[Yf.sketch({dom:ms(''),components:yn(u.fields,function(n,e){return e<=u.maxFieldIndex?Yf.sketch({dom:ms(''),components:Dn([[o(-1,"previous",0'),behaviours:qr([Eu.config({highlightClass:Mi.resolve("dot-active"),itemClass:Mi.resolve("dot-item")})]),components:An(u.fields,function(n,e){return e<=u.maxFieldIndex?[gs('')]:[]})});return{dom:ms(''),components:[c.asSpec(),s.asSpec()],behaviours:qr([uc.config({mode:"special",focusIn:function(n){var e=c.get(n);uc.focusIn(e)}}),Wf("serializer-wrapper-events",[wr(L(),function(n,e){var t=e.event();u.state.dialogSwipeState.set(Ol(t.touches[0].clientX))}),wr(U(),function(n,e){var t=e.event();u.state.dialogSwipeState.on(function(n){e.event().prevent(),u.state.dialogSwipeState.set(Cl(n,t.raw().touches[0].clientX))})}),wr(P(),function(r){u.state.dialogSwipeState.on(function(n){var e=c.get(r),t=-1*kl(n);i(e,t)})})])])}},Dl=Z(function(t,r){return[{label:"the link group",items:[El({fields:[ol("url","Type or paste URL"),ol("text","Link text"),ol("title","Link title"),ol("target","Link target"),(n="link",{name:n,spec:Xf.sketch({dom:{tag:"span",styles:{display:"none"}},getInitialValue:function(){return B.none()}})})],maxFieldIndex:["url","text","title","target"].length-1,getInitialValue:function(){return B.some(Lf.getInfo(r))},onExecute:function(n){var e=Ws.getValue(n);Lf.applyInfo(r,e),t.restoreToolbar(),r.focus()}})]}];var n}),Al=[{title:"Headings",items:[{title:"Heading 1",format:"h1"},{title:"Heading 2",format:"h2"},{title:"Heading 3",format:"h3"},{title:"Heading 4",format:"h4"},{title:"Heading 5",format:"h5"},{title:"Heading 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}],Rl=br([(Sf=Gn(),Of=function(n,e){var t,r,o=e.event().originator(),i=e.event().target();return r=i,!(ze(t=o,n.element())&&!ze(t,r)&&(console.warn(Gn()+" did not get interpreted by the desired target. \nOriginator: "+qo(o)+"\nTarget: "+qo(i)+"\nCheck the "+Gn()+" event handlers"),1))},{key:Sf,value:pr({can:Of})})]),Ml=Object.freeze({events:Rl}),Il=h,Nl=Wr(["debugInfo","triggerFocus","triggerEvent","triggerEscape","addToWorld","removeFromWorld","addToGui","removeFromGui","build","getByUid","getByDom","broadcast","broadcastOn","isConnected"]),Bl=function(e){var n=function(n){return function(){throw new Error("The component must be in a context to send: "+n+"\n"+qo(e().element())+" is not in context.")}};return Nl({debugInfo:E("fake"),triggerEvent:n("triggerEvent"),triggerFocus:n("triggerFocus"),triggerEscape:n("triggerEscape"),build:n("build"),addToWorld:n("addToWorld"),removeFromWorld:n("removeFromWorld"),addToGui:n("addToGui"),removeFromGui:n("removeFromGui"),getByUid:n("getByUid"),getByDom:n("getByDom"),broadcast:n("broadcast"),broadcastOn:n("broadcastOn"),isConnected:E(!1)})},Fl=function(n,o){var i={};return V(n,function(n,r){V(n,function(n,e){var t=Ct(e,[])(i);i[e]=t.concat([o(r,n)])})}),i},Vl=function(n,e){return 1 "):r[0].name();return Et(o,{handler:e,purpose:E(t)})})});return At(e,{})},Gl=function(n){return Qt("custom.definition",Pt([qt("dom","dom",lt(),Pt([ur("tag"),mr("styles",{}),mr("classes",[]),mr("attributes",{}),fr("value"),fr("innerHtml")])),ur("components"),ur("uid"),mr("events",{}),mr("apis",E({})),qt("eventOrder","eventOrder",(e={"alloy.execute":["disabling","alloy.base.behaviour","toggling"],"alloy.focus":["alloy.base.behaviour","focusing","keying"],"alloy.system.init":["alloy.base.behaviour","disabling","toggling","representing"],input:["alloy.base.behaviour","representing","streaming","invalidating"],"alloy.system.detached":["alloy.base.behaviour","representing"]},st.mergeWithThunk(E(e))),or()),fr("domModification"),di("originalSpec"),mr("debug.sketcher","unknown")]),n);var e},ql=function(n){var e,t={tag:n.dom().tag(),classes:n.dom().classes(),attributes:C((e=n,Et(Jc(),e.uid())),n.dom().attributes()),styles:n.dom().styles(),domChildren:yn(n.components(),function(n){return n.element()})};return Mr(C(t,n.dom().innerHtml().map(function(n){return Et("innerHtml",n)}).getOr({}),n.dom().value().map(function(n){return Et("value",n)}).getOr({})))},Yl=function(e,n){wn(n,function(n){bo.add(e,n)})},Xl=function(e,n){wn(n,function(n){bo.remove(e,n)})},Kl=function(e){if(e.domChildren().isSome()&&e.defChildren().isSome())throw new Error("Cannot specify children and child specs! Must be one or the other.\nDef: "+(n=Ir(e),Bt(n,null,2)));return e.domChildren().fold(function(){var n=e.defChildren().getOr([]);return yn(n,Ql)},function(n){return n});var n},Jl=function(n){var e=fe.fromTag(n.tag());ro.setAll(e,n.attributes().getOr({})),Yl(e,n.classes().getOr([])),_i.setAll(e,n.styles().getOr({})),_o(e,n.innerHtml().getOr(""));var t=Kl(n);return Ke(e,t),n.value().each(function(n){Kf(e,n)}),e},Ql=function(n){var e=Mr(n);return Jl(e)},Zl=function(n,e){return t=n,o=yn(r=e,function(n){return lr(n.name(),[ur("config"),mr("state",$r)])}),i=Qt("component.behaviours",_t(o),t.behaviours).fold(function(n){throw new Error(tr(n)+"\nComplete spec:\n"+Bt(t,null,2))},function(n){return n}),{list:r,data:H(i,function(n){var e=n().map(function(n){return{config:n.config(),state:n.state().init(n.config())}});return function(){return e}})};var t,r,o,i},nd=function(n){var e,t,r=(e=kt(n,"behaviours").getOr({}),t=xn(F(e),function(n){return e[n]!==undefined}),yn(t,function(n){return e[n].me}));return Zl(n,r)},ed=Wr(["getSystem","config","hasConfigured","spec","connect","disconnect","element","syncComponents","readState","components","events"]),td=function(n,e,t){var r,o,i,u,a=ql(n),c=function(e,n,t,r){var o=C({},n);wn(t,function(n){o[n.name()]=n.exhibit(e,r)});var i=Fl(o,function(n,e){return{name:function(){return n},modification:e}}),u=H(i,function(n,e){return An(n,function(e){return e.modification().fold(function(){return[]},function(n){return[e]})})}),a=j(u,function(e,t){return kt(zl,t).fold(function(){return at.error("Unknown field type: "+t)},function(n){return n(e,t)})});return At(a,{}).map(Nr)}(t,{"alloy.base.modification":(r=n,r.domModification().fold(function(){return Nr({})},Nr))},e,a).getOrDie();return i=c,u=C({tag:(o=a).tag(),classes:i.classes().getOr([]).concat(o.classes().getOr([])),attributes:D(o.attributes().getOr({}),i.attributes().getOr({})),styles:D(o.styles().getOr({}),i.styles().getOr({}))},i.innerHtml().or(o.innerHtml()).map(function(n){return Et("innerHtml",n)}).getOr({}),Br("domChildren",i.domChildren(),o.domChildren()),Br("defChildren",i.defChildren(),o.defChildren()),i.value().or(o.value()).map(function(n){return Et("value",n)}).getOr({})),Mr(u)},rd=function(n,e,t){var r,o,i,u,a,c,s={"alloy.base.behaviour":(r=n,r.events())};return(o=t,i=n.eventOrder(),u=e,a=s,c=Pl(o,u,a),$l(c,i)).getOrDie()},od=function(n){var e,t,r,o,i,u,a,c,s,f,l,d,m,g,v=Il(n),p=(e=v,t=Ct("components",[])(e),yn(t,ad)),h=C(Ml,v,Et("components",p));return at.value((r=h,i=So(Bl(o=function(){return g})),u=Zt(Gl(C(r,{behaviours:undefined}))),a=nd(r),c=a.list,s=a.data,f=td(u,c,s),l=Jl(f),d=rd(u,c,s),m=So(u.components()),g=ed({getSystem:i.get,config:function(n){if(n===Xc())return u.apis();if(b(n))throw new Error("Invalid input: only API constant is allowed");var e=s;return(w(e[n.name()])?e[n.name()]:function(){throw new Error("Could not find "+n.name()+" in "+Bt(r,null,2))})()},hasConfigured:function(n){return w(s[n.name()])},spec:E(r),readState:function(n){return s[n]().map(function(n){return n.state.readState()}).getOr("not enabled")},connect:function(n){i.set(n)},disconnect:function(){i.set(Bl(o))},element:E(l),syncComponents:function(){var n=$e.children(l),e=An(n,function(n){return i.get().getByDom(n).fold(function(){return[]},function(n){return[n]})});m.set(e)},components:m.get,events:E(d)})))},id=function(n){var e=fe.fromText(n);return ud({element:e})},ud=function(n){var t=er("external.component",Pt([ur("element"),fr("uid")]),n),e=So(Bl());t.uid().each(function(n){var e;e=t.element(),ro.set(e,Zc,n)});var r=ed({getSystem:e.get,config:B.none,hasConfigured:E(!1),connect:function(n){e.set(n)},disconnect:function(){e.set(Bl(function(){return r}))},element:E(t.element()),spec:E(n),readState:E("No state"),syncComponents:k,components:E([]),events:E({})});return qc(r)},ad=function(e){return(n=e,kt(n,$c)).fold(function(){var n=C({uid:es("")},e);return od(n).getOrDie()},function(n){return n});var n},cd=qc,sd="alloy.item-hover",fd="alloy.item-focus",ld=function(n){(Fo(n.element()).isNone()||Vi.isFocused(n))&&(Vi.isFocused(n)||Vi.focus(n),ie(n,sd,{item:n}))},dd=function(n){ie(n,fd,{item:n})},md=E(sd),gd=E(fd),vd=[ur("data"),ur("components"),ur("dom"),fr("toggling"),mr("itemBehaviours",{}),mr("ignoreFocus",!1),mr("domModification",{}),li("builder",function(n){return{dom:C(n.dom(),{attributes:{role:n.toggling().isSome()?"menuitemcheckbox":"menuitem"}}),behaviours:C(qr([n.toggling().fold(ki.revoke,function(n){return ki.config(C({aria:{mode:"checked"}},n))}),Vi.config({ignore:n.ignoreFocus(),onFocus:function(n){dd(n)}}),uc.config({mode:"execution"}),Ws.config({store:{mode:"memory",initialValue:n.data()}})]),n.itemBehaviours()),events:br([(e=Qn(),r=ue,wr(e,function(e,t){var n=t.event();e.getSystem().getByDom(n.target()).each(function(n){r(e,n,t)})})),Or(_()),wr(G(),ld),wr(Kn(),Vi.focus)]),components:n.components(),domModification:n.domModification(),eventOrder:n.eventOrder()};var e,r}),mr("eventOrder",{})],pd=[ur("dom"),ur("components"),li("builder",function(n){return{dom:n.dom(),components:n.components(),events:br([(e=Kn(),wr(e,function(n,e){e.stop()}))])};var e})],hd=E([Ic({name:"widget",overrides:function(e){return{behaviours:qr([Ws.config({store:{mode:"manual",getValue:function(n){return e.data()},setValue:function(){}}})])}}})]),bd=[ur("uid"),ur("data"),ur("components"),ur("dom"),mr("autofocus",!1),mr("domModification",{}),Wc(hd()),li("builder",function(t){var n=jc(0,t,hd()),e=Lc("item-widget",t,n.internals()),r=function(n){return Uc(n,t,"widget").map(function(n){return uc.focusIn(n),n})},o=function(n,e){return Nu(e.event().target())||t.autofocus()&&e.setSource(n.element()),B.none()};return C({dom:t.dom(),components:e,domModification:t.domModification(),events:br([Dr(function(n,e){r(n).each(function(n){e.stop()})}),wr(G(),ld),wr(Kn(),function(n,e){t.autofocus()?r(n):Vi.focus(n)})]),behaviours:qr([Ws.config({store:{mode:"memory",initialValue:t.data()}}),Vi.config({onFocus:function(n){dd(n)}}),uc.config({mode:"special",focusIn:t.autofocus()?function(n){r(n)}:Jr(),onLeft:o,onRight:o,onEscape:function(n,e){return Vi.isFocused(n)||t.autofocus()?(t.autofocus()&&e.setSource(n.element()),B.none()):(Vi.focus(n),B.some(!0))}})])})})],yd=rr("type",{widget:bd,item:vd,separator:pd}),wd=E([Bc({factory:{sketch:function(n){var e=er("menu.spec item",yd,n);return e.builder()(e)}},name:"items",unit:"item",defaults:function(n,e){var t=es("");return C({uid:t},e)},overrides:function(n,e){return{type:e.type,ignoreFocus:n.fakeFocus(),domModification:{classes:[n.markers().item()]}}}})]),xd=E([ur("value"),ur("items"),ur("dom"),ur("components"),mr("eventOrder",{}),ac("menuBehaviours",[Eu,Ws,qf,uc]),gr("movement",{mode:"menu",moveOnTab:!0},rr("mode",{grid:[mi(),li("config",function(n,e){return{mode:"flatgrid",selector:"."+n.markers().item(),initSize:{numColumns:e.initSize().numColumns(),numRows:e.initSize().numRows()},focusManager:n.focusManager()}})],menu:[mr("moveOnTab",!0),li("config",function(n,e){return{mode:"menu",selector:"."+n.markers().item(),moveOnTab:e.moveOnTab(),focusManager:n.focusManager()}})]})),ar("markers",oi()),mr("fakeFocus",!1),mr("focusManager",Du()),ai("onHighlight")]),Td=E("alloy.menu-focus"),Sd=cs({name:"Menu",configFields:xd(),partFields:wd(),factory:function(n,e,t,r){return C({dom:C(n.dom(),{attributes:{role:"menu"}}),uid:n.uid(),behaviours:C(qr([Eu.config({highlightClass:n.markers().selectedItem(),itemClass:n.markers().item(),onHighlight:n.onHighlight()}),Ws.config({store:{mode:"memory",initialValue:n.value()}}),qf.config({find:B.some}),uc.config(n.movement().config()(n,n.movement()))]),cc(n.menuBehaviours())),events:br([wr(gd(),function(e,t){var n=t.event();e.getSystem().getByDom(n.target()).each(function(n){Eu.highlight(e,n),t.stop(),ie(e,Td(),{menu:e,item:n})})}),wr(md(),function(n,e){var t=e.event().item();Eu.highlight(n,t)})]),components:e,eventOrder:n.eventOrder()})}}),Od=function(n,e,t,r){var o=n.getSystem().build(r);tt(n,o,t)},Cd=function(n,e){return n.components()},kd=Object.freeze({append:function(n,e,t,r){Od(n,0,Ye.append,r)},prepend:function(n,e,t,r){Od(n,0,Ye.prepend,r)},remove:function(n,e,t,r){var o=Cd(n,e);On(o,function(n){return ze(r.element(),n.element())}).each(ot)},set:function(e,n,t,r){var o,i,u,a,c,s;i=(o=e).components(),wn(i,rt),Qe.empty(o.element()),o.syncComponents(),u=function(){var n=yn(r,e.getSystem().build);wn(n,function(n){et(e,n)})},a=e.element(),c=$e.owner(a),s=Bo(c).bind(function(e){var n=function(n){return ze(e,n)};return n(a)?B.some(a):Do.descendant(a,n)}),u(a),s.each(function(e){Bo(c).filter(function(n){return ze(n,e)}).fold(function(){Io(e)},k)})},contents:Cd}),Ed=Xr({fields:[],name:"replacing",apis:kd}),Dd=function(t,r,o,n){return kt(o,n).bind(function(n){return kt(t,n).bind(function(n){var e=Dd(t,r,o,n);return B.some([n].concat(e))})}).getOr([])},Ad=function(n,e){var t={};V(n,function(n,e){wn(n,function(n){t[n]=e})});var r=e,o=z(e,function(n,e){return{k:n,v:e}}),i=H(o,function(n,e){return[e].concat(Dd(t,r,o,e))});return H(t,function(n){return kt(i,n).getOr([n])})},Rd=function(){var i=So({}),u=So({}),a=So({}),c=So(B.none()),s=So({}),n=function(n){return kt(u.get(),n)};return{setContents:function(n,e,t,r){c.set(B.some(n)),i.set(t),u.set(e),s.set(r);var o=Ad(r,t);a.set(o)},expand:function(t){return kt(i.get(),t).map(function(n){var e=kt(a.get(),t).getOr([]);return[n].concat(e)})},refresh:function(n){return kt(a.get(),n)},collapse:function(n){return kt(a.get(),n).bind(function(n){return 1");r[t[0]]=Et(t[1],n),r[t[1]]=Et(t[0],n)}),r},createBistate:function(n,e,t){return Dt([{key:n,value:Et(e,t)},{key:e,value:Et(n,t)}])},createTristate:function(n,e,t,r){return Dt([{key:n,value:Dt([{key:e,value:r},{key:t,value:r}])},{key:e,value:Dt([{key:n,value:r},{key:t,value:r}])},{key:t,value:Dt([{key:n,value:r},{key:e,value:r}])}])}}}),Pd=Mi.resolve("scrollable"),_d={register:function(n){bo.add(n,Pd)},deregister:function(n){bo.remove(n,Pd)},scrollable:E(Pd)},Wd=function(n){return kt(n,"format").getOr(n.title)},$d=function(n,e,t,r,o){return{data:{value:n,text:e},type:"item",dom:{tag:"div",classes:o?[Mi.resolve("styles-item-is-menu")]:[]},toggling:{toggleOnExecute:!1,toggleClass:Mi.resolve("format-matches"),selected:t},itemBehaviours:qr(o?[]:[Ei(n,function(n,e){(e?ki.on:ki.off)(n)})]),components:[{dom:{tag:"div",attributes:{style:r},innerHtml:e}}]}},Gd=function(n,e,t,r){return{value:n,dom:{tag:"div"},components:[ss.sketch({dom:{tag:"div",classes:[Mi.resolve("styles-collapser")]},components:r?[{dom:{tag:"span",classes:[Mi.resolve("styles-collapse-icon")]}},id(n)]:[id(n)],action:function(n){if(r){var e=t().get(n);Id.collapseMenu(e)}}}),{dom:{tag:"div",classes:[Mi.resolve("styles-menu-items-container")]},components:[Sd.parts().items({})],behaviours:qr([Wf("adhoc-scrollable-menu",[Cr(function(n,e){_i.set(n.element(),"overflow-y","auto"),_i.set(n.element(),"-webkit-overflow-scrolling","touch"),_d.register(n.element())}),kr(function(n){_i.remove(n.element(),"overflow-y"),_i.remove(n.element(),"-webkit-overflow-scrolling"),_d.deregister(n.element())})])])}],items:e,menuBehaviours:qr([Ud.config({initialState:"after",routes:Ud.createTristate("before","current","after",{transition:{property:"transform",transitionClass:"transitioning"}})})])}},qd=function(r){var o,i,n,e,t,u=(o=r.formats,i=function(){return a},n=Gd("Styles",[].concat(yn(o.items,function(n){return $d(Wd(n),n.title,n.isSelected(),n.getPreview(),Rt(o.expansions,Wd(n)))})),i,!1),e=H(o.menus,function(n,e){var t=yn(n,function(n){return $d(Wd(n),n.title,n.isSelected!==undefined&&n.isSelected(),n.getPreview!==undefined?n.getPreview():"",Rt(o.expansions,Wd(n)))});return Gd(e,t,i,!0)}),t=C(e,Et("styles",n)),{tmenu:Id.tieredData("styles",t,o.expansions)}),a=sf(Id.sketch({dom:{tag:"div",classes:[Mi.resolve("styles-menu")]},components:[],fakeFocus:!0,stayInDom:!0,onExecute:function(n,e){var t=Ws.getValue(e);return r.handle(e,t.value),B.none()},onEscape:function(){return B.none()},onOpenMenu:function(n,e){var t=Xs(n.element());Ys(e.element(),t),Ud.jumpTo(e,"current")},onOpenSubmenu:function(n,e,t){var r=Xs(n.element()),o=ru(e.element(),'[role="menu"]').getOrDie("hacky"),i=n.getSystem().getByDom(o).getOrDie();Ys(t.element(),r),Ud.progressTo(i,"before"),Ud.jumpTo(t,"after"),Ud.progressTo(t,"current")},onCollapseMenu:function(n,e,t){var r=ru(e.element(),'[role="menu"]').getOrDie("hacky"),o=n.getSystem().getByDom(r).getOrDie();Ud.progressTo(o,"after"),Ud.progressTo(t,"current")},navigateOnHover:!1,openImmediately:!0,data:u.tmenu,markers:{backgroundMenu:Mi.resolve("styles-background-menu"),menu:Mi.resolve("styles-menu"),selectedMenu:Mi.resolve("styles-selected-menu"),item:Mi.resolve("styles-item"),selectedItem:Mi.resolve("styles-selected-item")}}));return a.asSpec()},Yd=function(n){return Rt(n,"items")?(t=C(St(e=n,["items"]),{menu:!0}),r=Xd(e.items),{item:t,menus:C(r.menus,Et(e.title,r.items)),expansions:C(r.expansions,Et(e.title,e.title))}):{item:n,menus:{},expansions:{}};var e,t,r},Xd=function(n){return Tn(n,function(n,e){var t=Yd(e);return{menus:C(n.menus,t.menus),items:[t.item].concat(n.items),expansions:C(n.expansions,t.expansions)}},{menus:{},expansions:{},items:[]})},Kd={expand:Xd},Jd=function(u,n){var a=function(n){return function(){return u.formatter.match(n)}},c=function(n){return function(){return u.formatter.getCssText(n)}},e=kt(n,"style_formats").getOr(Al),s=function(n){return yn(n,function(n){if(Rt(n,"items")){var e=s(n.items);return C(C(n,{isSelected:E(!1),getPreview:E("")}),{items:e})}return Rt(n,"format")?C(i=n,{isSelected:a(i.format),getPreview:c(i.format)}):(r=bc((t=n).title),o=C(t,{format:r,isSelected:a(r),getPreview:c(r)}),u.formatter.register(r,o),o);var t,r,o,i})};return s(e)},Qd=function(t,n,r){var e,o,i,u=(e=t,i=(o=function(n){return An(n,function(n){return n.items!==undefined?0e.innerHeight||n.bottom()>e.innerHeight?n.bottom()-e.innerHeight+50:0;0!==t&&e.scrollTo(e.pageXOffset,e.pageYOffset+t)})})].concat(!0===wm?[]:[lm(fe.fromDom(r.win()),"blur",function(){t.getByDom(e).each(ki.off)}),lm(i,"select",n),lm(r.doc(),"selectionchange",n)]);return{destroy:function(){wn(a,function(n){n.unbind()})}}},Tm=function(n,e){var t=parseInt(ro.get(n,e),10);return isNaN(t)?0:t},Sm=(Cf=be.isText,kf="text",Ef=function(n){return Cf(n)?B.from(n.dom().nodeValue):B.none()},Df=Wn.detect().browser,{get:function(n){if(!Cf(n))throw new Error("Can only get "+kf+" value of a "+kf+" node");return Af(n).getOr("")},getOption:Af=Df.isIE()&&10===Df.version.major?function(n){try{return Ef(n)}catch(e){return B.none()}}:Ef,set:function(n,e){if(!Cf(n))throw new Error("Can only set raw "+kf+" value of a "+kf+" node");n.dom().nodeValue=e}}),Om=function(n){return Sm.getOption(n)},Cm=function(n){return"img"===be.name(n)?1:Om(n).fold(function(){return $e.children(n).length},function(n){return n.length})},km=Cm,Em=ct([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),Dm={before:Em.before,on:Em.on,after:Em.after,cata:function(n,e,t,r){return n.fold(e,t,r)},getStart:function(n){return n.fold(h,h,h)}},Am=ct([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),Rm=Te("start","soffset","finish","foffset"),Mm={domRange:Am.domRange,relative:Am.relative,exact:Am.exact,exactFromRange:function(n){return Am.exact(n.start(),n.soffset(),n.finish(),n.foffset())},range:Rm,getWin:function(n){var e=n.match({domRange:function(n){return fe.fromDom(n.startContainer)},relative:function(n,e){return Dm.getStart(n)},exact:function(n,e,t,r){return n}});return $e.defaultView(e)}},Im=function(n,e,t,r){var o=$e.owner(n).dom().createRange();return o.setStart(n.dom(),e),o.setEnd(t.dom(),r),o},Nm=function(n,e,t,r){var o=Im(n,e,t,r),i=ze(n,t)&&e===r;return o.collapsed&&!i},Bm=function(n,e){n.selectNodeContents(e.dom())},Fm=function(n){n.deleteContents()},Vm=function(n){return{left:E(n.left),top:E(n.top),right:E(n.right),bottom:E(n.bottom),width:E(n.width),height:E(n.height)}},Hm={create:function(n){return n.document.createRange()},replaceWith:function(n,e){Fm(n),n.insertNode(e.dom())},selectNodeContents:function(n,e){var t=n.document.createRange();return Bm(t,e),t},selectNodeContentsUsing:Bm,relativeToNative:function(n,e,t){var r,o,i=n.document.createRange();return r=i,e.fold(function(n){r.setStartBefore(n.dom())},function(n,e){r.setStart(n.dom(),e)},function(n){r.setStartAfter(n.dom())}),o=i,t.fold(function(n){o.setEndBefore(n.dom())},function(n,e){o.setEnd(n.dom(),e)},function(n){o.setEndAfter(n.dom())}),i},exactToNative:function(n,e,t,r,o){var i=n.document.createRange();return i.setStart(e.dom(),t),i.setEnd(r.dom(),o),i},deleteContents:Fm,cloneFragment:function(n){var e=n.cloneContents();return fe.fromDom(e)},getFirstRect:function(n){var e=n.getClientRects(),t=0e.innerHeight||t.bottom()>e.innerHeight?Math.min(r,t.bottom()-e.innerHeight+50):0);0!==o&&u.scrollTo(u.pageXOffset,u.pageYOffset+o)})}),ag(e,n.innerHeight)});return ag(e,n.innerHeight),{toEditing:function(){ig(u)},destroy:function(){t.unbind()}}},lg=function(n){return B.some(fe.fromDom(n.dom().contentWindow.document.body))},dg=function(n){return B.some(fe.fromDom(n.dom().contentWindow.document))},mg=function(n){return B.from(n.dom().contentWindow)},gg=function(n){return mg(n).bind(Qm)},vg=function(n){return n.getFrame()},pg=function(n,t){return function(e){return e[n].getOrThunk(function(){var n=vg(e);return function(){return t(n)}})()}},hg=function(n,e,t,r){return n[t].getOrThunk(function(){return function(n){return lm(e,r,n)}})},bg=function(n){return{left:E(n.left),top:E(n.top),right:E(n.right),bottom:E(n.bottom),width:E(n.width),height:E(n.height)}},yg={getBody:pg("getBody",lg),getDoc:pg("getDoc",dg),getWin:pg("getWin",mg),getSelection:pg("getSelection",gg),getFrame:vg,getActiveApi:function(a){var c=vg(a);return lg(c).bind(function(u){return dg(c).bind(function(i){return mg(c).map(function(o){var n=fe.fromDom(i.dom().documentElement),e=a.getCursorBox.getOrThunk(function(){return function(){return Zm(o).bind(function(n){return eg(o,n).orThunk(function(){return Qm(o).filter(function(n){return ze(n.start(),n.finish())&&n.soffset()===n.foffset()}).bind(function(n){var e=n.start().dom().getBoundingClientRect();return 0'),containerBehaviours:qr([ki.config({toggleClass:Mi.resolve("mask-tap-icon-selected"),toggleOnExecute:!1})])})),u=(t=n,r=200,o=null,{cancel:function(){null!==o&&(clearTimeout(o),o=null)},throttle:function(){for(var n=[],e=0;e'),components:[Yf.sketch({dom:ms(''),components:[ss.sketch({dom:ms(''),components:[i.asSpec()],action:function(n){u.throttle()},buttonBehaviours:qr([ki.config({toggleClass:Mi.resolve("mask-tap-icon-selected")})])})]})]})},Rg=_t([sr("editor",[ur("getFrame"),fr("getBody"),fr("getDoc"),fr("getWin"),fr("getSelection"),fr("setSelection"),fr("clearSelection"),fr("cursorSaver"),fr("onKeyup"),fr("onNodeChanged"),fr("getCursorBox"),ur("onDomChanged"),mr("onTouchContent",k),mr("onTapContent",k),mr("onTouchToolstrip",k),mr("onScrollToCursor",E({unbind:k})),mr("onScrollToElement",E({unbind:k})),mr("onToEditing",E({unbind:k})),mr("onToReading",E({unbind:k})),mr("onToolbarScrollStart",h)]),ur("socket"),ur("toolstrip"),ur("dropup"),ur("toolbar"),ur("container"),ur("alloy"),vr("win",function(n){return $e.owner(n.socket).dom().defaultView}),vr("body",function(n){return fe.fromDom(n.socket.dom().ownerDocument.body)}),mr("translate",h),mr("setReadOnly",k),mr("readOnlyOnInit",E(!0))]),Mg=function(n){var e=nr("Getting AndroidWebapp schema",Rg,n);_i.set(e.toolstrip,"width","100%");var t=ad(Ag(function(){e.setReadOnly(e.readOnlyOnInit()),o.enter()},e.translate));e.alloy.add(t);var r={show:function(){e.alloy.add(t)},hide:function(){e.alloy.remove(t)}};Ye.append(e.container,t.element());var o=Eg(e,r);return{setReadOnly:e.setReadOnly,refreshStructure:k,enter:o.enter,exit:o.exit,destroy:k}},Ig=E([mr("shell",!0),ac("toolbarBehaviours",[Ed])]),Ng=E([Nc({name:"groups",overrides:function(n){return{behaviours:qr([Ed.config({})])}}})]),Bg=cs({name:"Toolbar",configFields:Ig(),partFields:Ng(),factory:function(e,n,t,r){var o=function(n){return e.shell()?B.some(n):Uc(n,e,"groups")},i=e.shell()?{behaviours:[Ed.config({})],components:[]}:{behaviours:[],components:n};return{uid:e.uid(),dom:e.dom(),components:i.components,behaviours:C(qr(i.behaviours),cc(e.toolbarBehaviours())),apis:{setGroups:function(n,e){o(n).fold(function(){throw console.error("Toolbar was defined to not be a shell, but no groups container was specified in components"),new Error("Toolbar was defined to not be a shell, but no groups container was specified in components")},function(n){Ed.set(n,e)})}},domModification:{attributes:{role:"group"}}}},apis:{setGroups:function(n,e,t){n.setGroups(e,t)}}}),Fg=E([ur("items"),(Rf=["itemClass"],sr("markers",yn(Rf,ur))),ac("tgroupBehaviours",[uc])]),Vg=E([Bc({name:"items",unit:"item",overrides:function(n){return{domModification:{classes:[n.markers().itemClass()]}}}})]),Hg=cs({name:"ToolbarGroup",configFields:Fg(),partFields:Vg(),factory:function(n,e,t,r){return C({dom:{attributes:{role:"toolbar"}}},{uid:n.uid(),dom:n.dom(),components:e,behaviours:C(qr([uc.config({mode:"flow",selector:"."+n.markers().itemClass()})]),cc(n.tgroupBehaviours())),"debug.sketcher":t["debug.sketcher"]})}}),zg="data-"+Mi.resolve("horizontal-scroll"),jg=function(n){return"true"===ro.get(n,zg)?0<(t=n).dom().scrollLeft||function(n){n.dom().scrollLeft=1;var e=0!==n.dom().scrollLeft;return n.dom().scrollLeft=0,e}(t):0<(e=n).dom().scrollTop||function(n){n.dom().scrollTop=1;var e=0!==n.dom().scrollTop;return n.dom().scrollTop=0,e}(e);var e,t},Lg={exclusive:function(n,e){return lm(n,"touchmove",function(n){iu(n.target(),e).filter(jg).fold(function(){n.raw().preventDefault()},k)})},markAsHorizontal:function(n){ro.set(n,zg,"true")}};function Ug(){var e=function(n){var e=!0===n.scrollable?"${prefix}-toolbar-scrollable-group":"";return{dom:ms(''),tgroupBehaviours:qr([Wf("adhoc-scrollable-toolbar",!0===n.scrollable?[Er(function(n,e){_i.set(n.element(),"overflow-x","auto"),Lg.markAsHorizontal(n.element()),_d.register(n.element())})]:[])]),components:[Yf.sketch({components:[Hg.parts().items({})]})],markers:{itemClass:Mi.resolve("toolbar-group-item")},items:n.items}},t=ad(Bg.sketch({dom:ms(''),components:[Bg.parts().groups({})],toolbarBehaviours:qr([ki.config({toggleClass:Mi.resolve("context-toolbar"),toggleOnExecute:!1,aria:{mode:"none"}}),uc.config({mode:"cyclic"})]),shell:!0})),n=ad(Yf.sketch({dom:{classes:[Mi.resolve("toolstrip")]},components:[cd(t)],containerBehaviours:qr([ki.config({toggleClass:Mi.resolve("android-selection-context-toolbar"),toggleOnExecute:!1})])})),r=function(){Bg.setGroups(t,o.get()),ki.off(t)},o=So([]);return{wrapper:E(n),toolbar:E(t),createGroups:function(n){return yn(n,v(Hg.sketch,e))},setGroups:function(n){o.set(n),r()},setContextToolbar:function(n){ki.on(t),Bg.setGroups(t,n)},restoreToolbar:function(){ki.isOn(t)&&r()},refresh:function(){},focus:function(){uc.focusIn(t)}}}var Pg=function(n,e){Ed.append(n,cd(e))},_g=function(n,e){Ed.remove(n,e)},Wg=function(n){return ad(ss.sketch({dom:ms(''),action:function(){n.run(function(n){n.setReadOnly(!1)})}}))},$g=function(){return ad(Yf.sketch({dom:ms(''),components:[],containerBehaviours:qr([Ed.config({})])}))},Gg=function(n,e,t,r){(!0===t?To.toAlpha:To.toOmega)(r),(t?Pg:_g)(n,e)},qg=function(e,n){return n.getAnimationRoot().fold(function(){return e.element()},function(n){return n(e)})},Yg=function(n){return n.dimension().property()},Xg=function(n,e){return n.dimension().getDimension()(e)},Kg=function(n,e){var t=qg(n,e);Xl(t,[e.shrinkingClass(),e.growingClass()])},Jg=function(n,e){bo.remove(n.element(),e.openClass()),bo.add(n.element(),e.closedClass()),_i.set(n.element(),Yg(e),"0px"),_i.reflow(n.element())},Qg=function(n,e){bo.remove(n.element(),e.closedClass()),bo.add(n.element(),e.openClass()),_i.remove(n.element(),Yg(e))},Zg=function(n,e,t){t.setCollapsed(),_i.set(n.element(),Yg(e),Xg(e,n.element())),_i.reflow(n.element());var r=qg(n,e);bo.add(r,e.shrinkingClass()),Jg(n,e),e.onStartShrink()(n)},nv=function(n,e,t){var r=function(n,e){Qg(n,e);var t=Xg(e,n.element());return Jg(n,e),t}(n,e),o=qg(n,e);bo.add(o,e.growingClass()),Qg(n,e),_i.set(n.element(),Yg(e),r),t.setExpanded(),e.onStartGrow()(n)},ev=function(n,e,t){var r=qg(n,e);return!0===bo.has(r,e.growingClass())},tv=function(n,e,t){var r=qg(n,e);return!0===bo.has(r,e.shrinkingClass())},rv=Object.freeze({grow:function(n,e,t){t.isExpanded()||nv(n,e,t)},shrink:function(n,e,t){t.isExpanded()&&Zg(n,e,t)},immediateShrink:function(n,e,t){var r,o;t.isExpanded()&&(r=n,o=e,t.setCollapsed(),_i.set(r.element(),Yg(o),Xg(o,r.element())),_i.reflow(r.element()),Kg(r,o),Jg(r,o),o.onStartShrink()(r),o.onShrunk()(r))},hasGrown:function(n,e,t){return t.isExpanded()},hasShrunk:function(n,e,t){return t.isCollapsed()},isGrowing:ev,isShrinking:tv,isTransitioning:function(n,e,t){return!0===ev(n,e)||!0===tv(n,e)},toggleGrow:function(n,e,t){(t.isExpanded()?Zg:nv)(n,e,t)},disableTransitions:Kg}),ov=Object.freeze({exhibit:function(n,e){var t=e.expanded();return Nr(t?{classes:[e.openClass()],styles:{}}:{classes:[e.closedClass()],styles:Et(e.dimension().property(),"0px")})},events:function(t,r){return br([wr(J(),function(n,e){e.event().raw().propertyName===t.dimension().property()&&(Kg(n,t),r.isExpanded()&&_i.remove(n.element(),t.dimension().property()),(r.isExpanded()?t.onGrown():t.onShrunk())(n))})])}}),iv=[ur("closedClass"),ur("openClass"),ur("shrinkingClass"),ur("growingClass"),fr("getAnimationRoot"),ai("onShrunk"),ai("onStartShrink"),ai("onGrown"),ai("onStartGrow"),mr("expanded",!1),ar("dimension",rr("property",{width:[li("property","width"),li("getDimension",function(n){return Xs(n)+"px"})],height:[li("property","height"),li("getDimension",function(n){return Yi(n)+"px"})]}))],uv=Object.freeze({init:function(n){var e=So(n.expanded());return Gr({isExpanded:function(){return!0===e.get()},isCollapsed:function(){return!1===e.get()},setCollapsed:l(e.set,!1),setExpanded:l(e.set,!0),readState:function(){return"expanded: "+e.get()}})}}),av=Xr({fields:iv,name:"sliding",active:ov,apis:rv,state:uv}),cv=function(e,t){var r=ad(Yf.sketch({dom:{tag:"div",classes:[Mi.resolve("dropup")]},components:[],containerBehaviours:qr([Ed.config({}),av.config({closedClass:Mi.resolve("dropup-closed"),openClass:Mi.resolve("dropup-open"),shrinkingClass:Mi.resolve("dropup-shrinking"),growingClass:Mi.resolve("dropup-growing"),dimension:{property:"height"},onShrunk:function(n){e(),t(),Ed.set(n,[])},onGrown:function(n){e(),t()}}),Di(function(n,e){o(k)})])})),o=function(n){window.requestAnimationFrame(function(){n(),av.shrink(r)})};return{appear:function(n,e,t){!0===av.hasShrunk(r)&&!1===av.isTransitioning(r)&&window.requestAnimationFrame(function(){e(t),Ed.set(r,[n()]),av.grow(r)})},disappear:o,component:E(r),element:r.element}},sv=Wn.detect().browser.isFirefox(),fv=Pt([cr("triggerEvent"),cr("broadcastEvent"),mr("stopBackspace",!0)]),lv=function(e,n){var t,r,o,i,u=nr("Getting GUI events settings",fv,n),a=Wn.detect().deviceType.isTouch()?["touchstart","touchmove","touchend","gesturestart"]:["mousedown","mouseup","mouseover","mousemove","mouseout","click"],c=bm(u),s=yn(a.concat(["selectstart","input","contextmenu","change","transitionend","drag","dragstart","dragend","dragenter","dragleave","dragover","drop"]),function(n){return lm(e,n,function(e){c.fireIfReady(e,n).each(function(n){n&&e.kill()}),u.triggerEvent(n,e)&&e.kill()})}),f=lm(e,"keydown",function(n){var e;u.triggerEvent("keydown",n)?n.kill():!0!==u.stopBackspace||8!==(e=n).raw().which||hn(["input","textarea"],be.name(e.target()))||n.prevent()}),l=(t=e,r=function(n){u.triggerEvent("focusin",n)&&n.kill()},sv?dm(t,"focus",r):lm(t,"focusin",r)),d=(o=e,i=function(n){u.triggerEvent("focusout",n)&&n.kill(),setTimeout(function(){u.triggerEvent(qn(),n)},0)},sv?dm(o,"blur",i):lm(o,"focusout",i)),m=$e.defaultView(e),g=lm(m,"scroll",function(n){u.broadcastEvent(ee(),n)&&n.kill()});return{unbind:function(){wn(s,function(n){n.unbind()}),f.unbind(),l.unbind(),d.unbind(),g.unbind()}}},dv=function(n,e){var t=kt(n,"target").map(function(n){return n()}).getOr(e);return So(t)},mv=ct([{stopped:[]},{resume:["element"]},{complete:[]}]),gv=function(n,r,e,t,o,i){var u,a,c,s,f=n(r,t),l=(u=e,a=o,c=So(!1),s=So(!1),{stop:function(){c.set(!0)},cut:function(){s.set(!0)},isStopped:c.get,isCut:s.get,event:E(u),setSource:a.set,getSource:a.get});return f.fold(function(){return i.logEventNoHandlers(r,t),mv.complete()},function(e){var t=e.descHandler();return Ll(t)(l),l.isStopped()?(i.logEventStopped(r,e.element(),t.purpose()),mv.stopped()):l.isCut()?(i.logEventCut(r,e.element(),t.purpose()),mv.complete()):$e.parent(e.element()).fold(function(){return i.logNoParent(r,e.element(),t.purpose()),mv.complete()},function(n){return i.logEventResponse(r,e.element(),t.purpose()),mv.resume(n)})})},vv=function(e,t,r,n,o,i){return gv(e,t,r,n,o,i).fold(function(){return!0},function(n){return vv(e,t,r,n,o,i)},function(){return!1})},pv=function(n,e,t){var r,o,i=(r=e,o=So(!1),{stop:function(){o.set(!0)},cut:k,isStopped:o.get,isCut:E(!1),event:E(r),setSource:c("Cannot set source of a broadcasted event"),getSource:c("Cannot get source of a broadcasted event")});return wn(n,function(n){var e=n.descHandler();Ll(e)(i)}),i.isStopped()},hv=function(n,e,t,r,o){var i=dv(t,r);return vv(n,e,t,r,i,o)},bv=function(n,e,t){return Do.closest(n,function(n){return e(n).isSome()},t).bind(e)},yv=Te("element","descHandler"),wv=function(n,e){return{id:E(n),descHandler:E(e)}};function xv(){var i={};return{registerId:function(r,o,n){V(n,function(n,e){var t=i[e]!==undefined?i[e]:{};t[o]=jl(n,r),i[e]=t})},unregisterId:function(t){V(i,function(n,e){n.hasOwnProperty(t)&&delete n[t]})},filterByType:function(n){return kt(i,n).map(function(n){return j(n,function(n,e){return wv(e,n)})}).getOr([])},find:function(n,e,t){var o=Ot(e)(i);return bv(t,function(n){return t=o,ns(r=n).fold(function(){return B.none()},function(n){var e=Ot(n);return t.bind(e).map(function(n){return yv(r,n)})});var t,r},n)}}}function Tv(){var r=xv(),o={},i=function(r){var n=r.element();return ns(n).fold(function(){return n="uid-",e=r.element(),t=bc(Qc+n),ro.set(e,Zc,t),t;var n,e,t},function(n){return n})},u=function(n){ns(n.element()).each(function(n){o[n]=undefined,r.unregisterId(n)})};return{find:function(n,e,t){return r.find(n,e,t)},filter:function(n){return r.filterByType(n)},register:function(n){var e=i(n);Rt(o,e)&&function(n,e){var t=o[e];if(t!==n)throw new Error('The tagId "'+e+'" is already used by: '+qo(t.element())+"\nCannot use it for: "+qo(n.element())+"\nThe conflicting element is"+(xe.inBody(t.element())?" ":" not ")+"already in the DOM");u(n)}(n,e);var t=[n];r.registerId(t,e,n.events()),o[e]=n},unregister:u,getById:function(n){return Ot(n)(o)}}}var Sv=function(t){var r=function(e){return $e.parent(t.element()).fold(function(){return!0},function(n){return ze(e,n)})},o=Tv(),s=function(n,e){return o.find(r,n,e)},n=lv(t.element(),{triggerEvent:function(u,a){return ei(u,a.target(),function(n){return e=s,t=u,o=n,i=(r=a).target(),hv(e,t,r,i,o);var e,t,r,o,i})},broadcastEvent:function(n,e){var t=o.filter(n);return pv(t,e)}}),i=Nl({debugInfo:E("real"),triggerEvent:function(e,t,r){ei(e,t,function(n){hv(s,e,r,t,n)})},triggerFocus:function(a,c){ns(a).fold(function(){Io(a)},function(n){ei(Gn(),a,function(n){var e,t,r,o,i,u;e=s,t=Gn(),r={originator:E(c),kill:k,prevent:k,target:E(a)},i=n,u=dv(r,o=a),gv(e,t,r,o,u,i)})})},triggerEscape:function(n,e){i.triggerEvent("keydown",n.element(),e.event())},getByUid:function(n){return m(n)},getByDom:function(n){return g(n)},build:ad,addToGui:function(n){a(n)},removeFromGui:function(n){c(n)},addToWorld:function(n){e(n)},removeFromWorld:function(n){u(n)},broadcast:function(n){l(n)},broadcastOn:function(n,e){d(n,e)},isConnected:E(!0)}),e=function(n){n.connect(i),be.isText(n.element())||(o.register(n),wn(n.components(),e),i.triggerEvent(ne(),n.element(),{target:E(n.element())}))},u=function(n){be.isText(n.element())||(wn(n.components(),u),o.unregister(n)),n.disconnect()},a=function(n){et(t,n)},c=function(n){ot(n)},f=function(t){var n=o.filter(Yn());wn(n,function(n){var e=n.descHandler();Ll(e)(t)})},l=function(n){f({universal:E(!0),data:E(n)})},d=function(n,e){f({universal:E(!1),channels:E(n),data:E(e)})},m=function(n){return o.getById(n).fold(function(){return at.error(new Error('Could not find component with uid: "'+n+'" in system.'))},at.value)},g=function(n){var e=ns(n).getOr("not found");return m(e)};return e(t),{root:E(t),element:t.element,destroy:function(){n.unbind(),Qe.remove(t.element())},add:a,remove:c,getByUid:m,getByDom:g,addToWorld:e,removeFromWorld:u,broadcast:l,broadcastOn:d}},Ov=E(Mi.resolve("readonly-mode")),Cv=E(Mi.resolve("edit-mode"));function kv(n){var e=ad(Yf.sketch({dom:{classes:[Mi.resolve("outer-container")].concat(n.classes)},containerBehaviours:qr([To.config({alpha:Ov(),omega:Cv()})])}));return Sv(e)}var Ev=function(n,e){var t=fe.fromTag("input");_i.setAll(t,{opacity:"0",position:"absolute",top:"-1000px",left:"-1000px"}),Ye.append(n,t),Io(t),e(t),Qe.remove(t)},Dv=function(n){var e=n.getSelection();if(0Math.abs(t-o))&&(clearInterval(s),a(o))}})},t)}}},zv=function(e,t){return Ko([{width:320,height:480,keyboard:{portrait:300,landscape:240}},{width:320,height:568,keyboard:{portrait:300,landscape:240}},{width:375,height:667,keyboard:{portrait:305,landscape:240}},{width:414,height:736,keyboard:{portrait:320,landscape:240}},{width:768,height:1024,keyboard:{portrait:320,landscape:400}},{width:1024,height:1366,keyboard:{portrait:380,landscape:460}}],function(n){return e<=n.width&&t<=n.height?B.some(n.keyboard):B.none()}).getOr({portrait:t/5,landscape:e/4})},jv=function(n){var e,t=gm(n).isPortrait(),r=zv((e=n).screen.width,e.screen.height),o=t?r.portrait:r.landscape;return(t?n.screen.height:n.screen.width)-n.innerHeight>o?0:o},Lv=function(n,e){var t=$e.owner(n).dom().defaultView;return Yi(n)+Yi(e)-jv(t)},Uv=Lv,Pv=function(n,e,t){var r=Lv(e,t),o=Yi(e)+Yi(t)-r;_i.set(n,"padding-bottom",o+"px")},_v=ct([{fixed:["element","property","offsetY"]},{scroller:["element","offsetY"]}]),Wv="data-"+Mi.resolve("position-y-fixed"),$v="data-"+Mi.resolve("y-property"),Gv="data-"+Mi.resolve("scrolling"),qv="data-"+Mi.resolve("last-window-height"),Yv=function(n){return Tm(n,Wv)},Xv=function(n,e){var t=ro.get(n,$v);return _v.fixed(n,t,e)},Kv=function(n,e){return _v.scroller(n,e)},Jv=function(n){var e=Yv(n);return("true"===ro.get(n,Gv)?Kv:Xv)(n,e)},Qv=function(n,e,t){var r=$e.owner(n).dom().defaultView.innerHeight;return ro.set(n,qv,r+"px"),r-e-t},Zv=function(n){var e=nu(n,"["+Wv+"]");return yn(e,Jv)},np=function(r,o,i,u){var n,e,t,a,c,s,f,l,d=$e.owner(r).dom().defaultView,m=(l=ro.get(f=i,"style"),_i.setAll(f,{position:"absolute",top:"0px"}),ro.set(f,Wv,"0px"),ro.set(f,$v,"top"),{restore:function(){ro.set(f,"style",l||""),ro.remove(f,Wv),ro.remove(f,$v)}}),g=Yi(i),v=Yi(u),p=Qv(r,g,v),h=(t=g,a=p,s=ro.get(c=r,"style"),_d.register(c),_i.setAll(c,{position:"absolute",height:a+"px",width:"100%",top:t+"px"}),ro.set(c,Wv,t+"px"),ro.set(c,Gv,"true"),ro.set(c,$v,"top"),{restore:function(){_d.deregister(c),ro.set(c,"style",s||""),ro.remove(c,Wv),ro.remove(c,Gv),ro.remove(c,$v)}}),b=(e=ro.get(n=u,"style"),_i.setAll(n,{position:"absolute",bottom:"0px"}),ro.set(n,Wv,"0px"),ro.set(n,$v,"bottom"),{restore:function(){ro.set(n,"style",e||""),ro.remove(n,Wv),ro.remove(n,$v)}}),y=!0,w=function(){var n=d.innerHeight;return Tm(r,qv)=u.length&&r(o)}))})})},mp=function(n,c){return n.fold(function(n,e,t){return r=n,o=e,u=c+(i=t),_i.set(r,o,u+"px"),Fv.pure(i);var r,o,i,u},function(n,e){return t=n,o=c+(r=e),i=_i.getRaw(t,"top").getOr(r),u=o-parseInt(i,10),a=t.dom().scrollTop+u,ap(t,a,o);var t,r,o,i,u,a})},gp=function(n,e){var t=Zv(n),r=yn(t,function(n){return mp(n,e)});return dp(r,Fv.nu)},vp=function(e,t,n,r,o,i){var u,a,c=(u=function(n){return fp(e,t,n)},a=So(Nv.pure({})),{start:function(e){var n=Nv.nu(function(n){return u(e).get(n)});a.set(n)},idle:function(n){a.get().get(function(){n()})}}),s=Dg(function(){c.idle(function(){gp(n,r.pageYOffset).get(function(){var n;(n=og(i),B.from(n[0]).bind(function(n){var e=n.top()-t.dom().scrollTop;return e>r.innerHeight+5||e<-5?B.some({top:E(e),bottom:E(e+n.height())}):B.none()})).each(function(n){t.dom().scrollTop=t.dom().scrollTop+n.top()}),c.start(0),o.refresh()})})},1e3),f=lm(fe.fromDom(r),"scroll",function(){r.pageYOffset<0||s.throttle()});return gp(n,r.pageYOffset).get(h),{unbind:f.unbind}},pp=function(n){var t=n.cWin(),e=n.ceBody(),r=n.socket(),o=n.toolstrip(),i=n.toolbar(),u=n.contentElement(),a=n.keyboardType(),c=n.outerWindow(),s=n.dropup(),f=np(r,e,o,s),l=a(n.outerBody(),t,xe.body(),u,o,i),d=vm(c,{onChange:k,onReady:f.refresh});d.onAdjustment(function(){f.refresh()});var m=lm(fe.fromDom(c),"resize",function(){f.isExpanding()&&f.refresh()}),g=vp(o,r,n.outerBody(),c,f,t),v=function(t,e){var n=t.document,r=fe.fromTag("div");bo.add(r,Mi.resolve("unfocused-selections")),Ye.append(fe.fromDom(n.documentElement),r);var o=lm(r,"touchstart",function(n){n.prevent(),Av(t,e),u()}),i=function(n){var e=fe.fromTag("span");return Yl(e,[Mi.resolve("layer-editor"),Mi.resolve("unfocused-selection")]),_i.setAll(e,{left:n.left()+"px",top:n.top()+"px",width:n.width()+"px",height:n.height()+"px"}),e},u=function(){Qe.empty(r)};return{update:function(){u();var n=og(t),e=yn(n,i);Ke(r,e)},isActive:function(){return 0<$e.children(r).length},destroy:function(){o.unbind(),Qe.remove(r)},clear:u}}(t,u),p=function(){v.clear()};return{toEditing:function(){l.toEditing(),p()},toReading:function(){l.toReading()},onToolbarTouch:function(n){l.onToolbarTouch(n)},refreshSelection:function(){v.isActive()&&v.update()},clearSelection:p,highlightSelection:function(){v.update()},scrollIntoView:function(n,e){lp(t,r,s,n,e)},updateToolbarPadding:k,setViewportOffset:function(n){f.setViewportOffset(n),sp(r,n).get(h)},syncHeight:function(){_i.set(u,"height",u.dom().contentWindow.document.body.scrollHeight+"px")},refreshStructure:f.refresh,destroy:function(){f.restore(),d.destroy(),g.unbind(),m.unbind(),l.destroy(),v.destroy(),Ev(xe.body(),No)}}},hp=function(r,n){var o=kg(),i=Sl(),u=Sl(),a=Tl(),c=Tl();return{enter:function(){n.hide();var t=fe.fromDom(document);yg.getActiveApi(r.editor).each(function(n){i.set({socketHeight:_i.getRaw(r.socket,"height"),iframeHeight:_i.getRaw(n.frame(),"height"),outerScroll:document.body.scrollTop}),u.set({exclusives:Lg.exclusive(t,"."+_d.scrollable())}),bo.add(r.container,Mi.resolve("fullscreen-maximized")),Og(r.container,n.body()),o.maximize(),_i.set(r.socket,"overflow","scroll"),_i.set(r.socket,"-webkit-overflow-scrolling","touch"),Io(n.body());var e=De(["cWin","ceBody","socket","toolstrip","toolbar","dropup","contentElement","cursor","keyboardType","isScrolling","outerWindow","outerBody"],[]);a.set(pp(e({cWin:n.win(),ceBody:n.body(),socket:r.socket,toolstrip:r.toolstrip,toolbar:r.toolbar,dropup:r.dropup.element(),contentElement:n.frame(),cursor:k,outerBody:r.body,outerWindow:r.win,keyboardType:Rv.stubborn,isScrolling:function(){return u.get().exists(function(n){return n.socket.isScrolling()})}}))),a.run(function(n){n.syncHeight()}),c.set(Mv(n,a,r.toolstrip,r.socket,r.dropup))})},refreshStructure:function(){a.run(function(n){n.refreshStructure()})},exit:function(){o.restore(),c.clear(),a.clear(),n.show(),i.on(function(n){n.socketHeight.each(function(n){_i.set(r.socket,"height",n)}),n.iframeHeight.each(function(n){_i.set(r.editor.getFrame(),"height",n)}),document.body.scrollTop=n.scrollTop}),i.clear(),u.on(function(n){n.exclusives.unbind()}),u.clear(),bo.remove(r.container,Mi.resolve("fullscreen-maximized")),Cg(),_d.deregister(r.toolbar),_i.remove(r.socket,"overflow"),_i.remove(r.socket,"-webkit-overflow-scrolling"),No(r.editor.getFrame()),yg.getActiveApi(r.editor).each(function(n){n.clearSelection()})}}},bp=function(n){var e=nr("Getting IosWebapp schema",Rg,n);_i.set(e.toolstrip,"width","100%"),_i.set(e.container,"position","relative");var t=ad(Ag(function(){e.setReadOnly(e.readOnlyOnInit()),r.enter()},e.translate));e.alloy.add(t);var r=hp(e,{show:function(){e.alloy.add(t)},hide:function(){e.alloy.remove(t)}});return{setReadOnly:e.setReadOnly,refreshStructure:r.refreshStructure,enter:r.enter,exit:r.exit,destroy:k}},yp=tinymce.util.Tools.resolve("tinymce.EditorManager"),wp=function(n){var e=kt(n.settings,"skin_url").fold(function(){return yp.baseURL+"/skins/lightgray"},function(n){return n});return{content:e+"/content.mobile.min.css",ui:e+"/skin.mobile.min.css"}},xp=function(n,e,t){n.system().broadcastOn([jo.formatChanged()],{command:e,state:t})},Tp=function(r,n){var e=F(n.formatter.get());wn(e,function(e){n.formatter.formatChanged(e,function(n){xp(r,e,n)})}),wn(["ul","ol"],function(t){n.selection.selectorChanged(t,function(n,e){xp(r,t,n)})})},Sp=(E(["x-small","small","medium","large","x-large"]),function(n){var e=function(){n._skinLoaded=!0,n.fire("SkinLoaded")};return function(){n.initialized?e():n.on("init",e)}}),Op=E("toReading"),Cp=E("toEditing");Ho.add("mobile",function(C){return{getNotificationManagerImpl:function(){return{open:h,close:k,reposition:k,getArgs:h}},renderUI:function(n){var e=wp(C);0==(!1===C.settings.skin)?(C.contentCSS.push(e.content),Vo.DOM.styleSheetLoader.load(e.ui,Sp(C))):Sp(C)();var t,r,o,i,u,a,c,s,f,l,d,m,g,v,p=function(){C.fire("scrollIntoView")},h=fe.fromTag("div"),b=Wn.detect().os.isAndroid()?(s=p,f=kv({classes:[Mi.resolve("android-container")]}),l=Ug(),d=Tl(),m=Wg(d),g=$g(),v=cv(k,s),f.add(l.wrapper()),f.add(g),f.add(v.component()),{system:E(f),element:f.element,init:function(n){d.set(Mg(n))},exit:function(){d.run(function(n){n.exit(),Ed.remove(g,m)})},setToolbarGroups:function(n){var e=l.createGroups(n);l.setGroups(e)},setContextToolbar:function(n){var e=l.createGroups(n);l.setContextToolbar(e)},focusToolbar:function(){l.focus()},restoreToolbar:function(){l.restoreToolbar()},updateMode:function(n){Gg(g,m,n,f.root())},socket:E(g),dropup:E(v)}):(t=p,r=kv({classes:[Mi.resolve("ios-container")]}),o=Ug(),i=Tl(),u=Wg(i),a=$g(),c=cv(function(){i.run(function(n){n.refreshStructure()})},t),r.add(o.wrapper()),r.add(a),r.add(c.component()),{system:E(r),element:r.element,init:function(n){i.set(bp(n))},exit:function(){i.run(function(n){Ed.remove(a,u),n.exit()})},setToolbarGroups:function(n){var e=o.createGroups(n);o.setGroups(e)},setContextToolbar:function(n){var e=o.createGroups(n);o.setContextToolbar(e)},focusToolbar:function(){o.focus()},restoreToolbar:function(){o.restoreToolbar()},updateMode:function(n){Gg(a,u,n,r.root())},socket:E(a),dropup:E(c)}),y=fe.fromDom(n.targetNode);Ye.after(y,h),function(n,e){Ye.append(n,e.element());var t=$e.children(e.element());wn(t,function(n){e.getByDom(n).each(nt)})}(h,b.system());var w=n.targetNode.ownerDocument.defaultView,x=vm(w,{onChange:function(){b.system().broadcastOn([jo.orientationChanged()],{width:pm(w)})},onReady:k}),T=function(n,e,t,r){!1===r&&C.selection.collapse();var o=S(n,e,t);b.setToolbarGroups(!0===r?o.readOnly:o.main),C.setMode(!0===r?"readonly":"design"),C.fire(!0===r?Op():Cp()),b.updateMode(r)},S=function(n,e,t){var r=n.get(),o={readOnly:r.backToMask.concat(e.get()),main:r.backToMask.concat(t.get())};return o},O=function(n,e){return C.on(n,e),{unbind:function(){C.off(n)}}};return C.on("init",function(){b.init({editor:{getFrame:function(){return fe.fromDom(C.contentAreaContainer.querySelector("iframe"))},onDomChanged:function(){return{unbind:k}},onToReading:function(n){return O(Op(),n)},onToEditing:function(n){return O(Cp(),n)},onScrollToCursor:function(e){return C.on("scrollIntoView",function(n){e(n)}),{unbind:function(){C.off("scrollIntoView"),x.destroy()}}},onTouchToolstrip:function(){t()},onTouchContent:function(){var n,e=fe.fromDom(C.editorContainer.querySelector("."+Mi.resolve("toolbar")));(n=e,Fo(n).bind(function(n){return b.system().getByDom(n).toOption()})).each(ue),b.restoreToolbar(),t()},onTapContent:function(n){var e=n.target();"img"===be.name(e)?(C.selection.select(e.dom()),n.kill()):"a"===be.name(e)&&b.system().getByDom(fe.fromDom(C.editorContainer)).each(function(n){To.isAlpha(n)&&zo(e.dom())})}},container:fe.fromDom(C.editorContainer),socket:fe.fromDom(C.contentAreaContainer),toolstrip:fe.fromDom(C.editorContainer.querySelector("."+Mi.resolve("toolstrip"))),toolbar:fe.fromDom(C.editorContainer.querySelector("."+Mi.resolve("toolbar"))),dropup:b.dropup(),alloy:b.system(),translate:k,setReadOnly:function(n){T(c,a,u,n)},readOnlyOnInit:function(){return!1}});var t=function(){b.dropup().disappear(function(){b.system().broadcastOn([jo.dropupDismissed()],{})})},n={label:"The first group",scrollable:!1,items:[hs.forToolbar("back",function(){C.selection.collapse(),b.exit()},{})]},e={label:"Back to read only",scrollable:!1,items:[hs.forToolbar("readonly-back",function(){T(c,a,u,!0)},{})]},r=rm(b,C),o=om(C.settings,r),i={label:"The extra group",scrollable:!1,items:[]},u=So([{label:"the action group",scrollable:!0,items:o},i]),a=So([{label:"The read only mode group",scrollable:!0,items:[]},i]),c=So({backToMask:[n],backToReadOnly:[e]});Tp(b,C)}),{iframeContainer:b.socket().element().dom(),editorContainer:b.element().dom()}}}})}();
diff --git a/public/assets/tinymce/themes/mobile/theme-b6c700a5ea0f122d7f0d860d4a7b814836e505231e5c029aece27fe6873d815e.js.gz b/public/assets/tinymce/themes/mobile/theme-b6c700a5ea0f122d7f0d860d4a7b814836e505231e5c029aece27fe6873d815e.js.gz
deleted file mode 100644
index 5184dedc..00000000
Binary files a/public/assets/tinymce/themes/mobile/theme-b6c700a5ea0f122d7f0d860d4a7b814836e505231e5c029aece27fe6873d815e.js.gz and /dev/null differ
diff --git a/public/assets/tinymce/themes/mobile/theme.js b/public/assets/tinymce/themes/mobile/theme.js
index 1ea14095..bec79271 120000
--- a/public/assets/tinymce/themes/mobile/theme.js
+++ b/public/assets/tinymce/themes/mobile/theme.js
@@ -1 +1 @@
-theme-b6c700a5ea0f122d7f0d860d4a7b814836e505231e5c029aece27fe6873d815e.js
\ No newline at end of file
+theme-95bcdf6b66dcd44073798fd6c04d0696ee3620cb694d052652dbefa051fecf80.js
\ No newline at end of file
diff --git a/public/assets/tinymce/themes/mobile/theme.js.gz b/public/assets/tinymce/themes/mobile/theme.js.gz
index d48e57ca..267a4c70 120000
--- a/public/assets/tinymce/themes/mobile/theme.js.gz
+++ b/public/assets/tinymce/themes/mobile/theme.js.gz
@@ -1 +1 @@
-theme-b6c700a5ea0f122d7f0d860d4a7b814836e505231e5c029aece27fe6873d815e.js.gz
\ No newline at end of file
+theme-95bcdf6b66dcd44073798fd6c04d0696ee3620cb694d052652dbefa051fecf80.js.gz
\ No newline at end of file
diff --git a/public/assets/tinymce/themes/modern/theme-17b1c26a5228e485e18dfcdf763d08b4546836a017ae7b0225ea47706171f10b.js b/public/assets/tinymce/themes/modern/theme-17b1c26a5228e485e18dfcdf763d08b4546836a017ae7b0225ea47706171f10b.js
new file mode 100644
index 00000000..a91aa1ef
--- /dev/null
+++ b/public/assets/tinymce/themes/modern/theme-17b1c26a5228e485e18dfcdf763d08b4546836a017ae7b0225ea47706171f10b.js
@@ -0,0 +1 @@
+!function(){"use strict";var e,t,n,i,r,o=tinymce.util.Tools.resolve("tinymce.ThemeManager"),h=tinymce.util.Tools.resolve("tinymce.EditorManager"),w=tinymce.util.Tools.resolve("tinymce.util.Tools"),d=function(e){return!1!==c(e)},c=function(e){return e.getParam("menubar")},f=function(e){return e.getParam("toolbar_items_size")},m=function(e){return e.getParam("menu")},g=function(e){return!1===e.settings.skin},p=function(e){var t=e.getParam("resize","vertical");return!1===t?"none":"both"===t?"both":"vertical"},v=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),b=tinymce.util.Tools.resolve("tinymce.ui.Factory"),y=tinymce.util.Tools.resolve("tinymce.util.I18n"),s=function(e){return e.fire("SkinLoaded")},x=function(e){return e.fire("ResizeEditor")},_=function(e){return e.fire("BeforeRenderUI")},a=function(t,n){return function(){var e=t.find(n)[0];e&&e.focus(!0)}},R=function(e,t){e.shortcuts.add("Alt+F9","",a(t,"menubar")),e.shortcuts.add("Alt+F10,F10","",a(t,"toolbar")),e.shortcuts.add("Alt+F11","",a(t,"elementpath")),t.on("cancel",function(){e.focus()})},C=tinymce.util.Tools.resolve("tinymce.geom.Rect"),u=tinymce.util.Tools.resolve("tinymce.util.Delay"),E=function(){for(var e=[],t=0;tTiny']),u=t.getParam("branding",!0,"boolean")?{type:"label",classes:"branding",html:" "+l}:null;i.add({type:"panel",name:"statusbar",classes:"statusbar",layout:"flow",border:"1 0 0 0",ariaRoot:!0,items:[{type:"elementpath",editor:t},r,u]})}return _(t),t.on("SwitchMode",(a=i,function(e){a.find("*").disabled("readonly"===e.mode)})),i.renderBefore(n.targetNode).reflow(),t.getParam("readonly",!1,"boolean")&&t.setMode("readonly"),n.width&&ve.setStyle(i.getEl(),"width",n.width),t.on("remove",function(){i.remove(),i=null}),R(t,i),V(t),{iframeContainer:i.find("#iframe")[0].getEl(),editorContainer:i.getEl()}},xe=tinymce.util.Tools.resolve("tinymce.dom.DomQuery"),we=0,_e={id:function(){return"mceu_"+we++},create:function(e,t,n){var i=document.createElement(e);return v.DOM.setAttribs(i,t),"string"==typeof n?i.innerHTML=n:w.each(n,function(e){e.nodeType&&i.appendChild(e)}),i},createFragment:function(e){return v.DOM.createFragment(e)},getWindowSize:function(){return v.DOM.getViewPort()},getSize:function(e){var t,n;if(e.getBoundingClientRect){var i=e.getBoundingClientRect();t=Math.max(i.width||i.right-i.left,e.offsetWidth),n=Math.max(i.height||i.bottom-i.bottom,e.offsetHeight)}else t=e.offsetWidth,n=e.offsetHeight;return{width:t,height:n}},getPos:function(e,t){return v.DOM.getPos(e,t||_e.getContainer())},getContainer:function(){return de.container?de.container:document.body},getViewPort:function(e){return v.DOM.getViewPort(e)},get:function(e){return document.getElementById(e)},addClass:function(e,t){return v.DOM.addClass(e,t)},removeClass:function(e,t){return v.DOM.removeClass(e,t)},hasClass:function(e,t){return v.DOM.hasClass(e,t)},toggleClass:function(e,t,n){return v.DOM.toggleClass(e,t,n)},css:function(e,t,n){return v.DOM.setStyle(e,t,n)},getRuntimeStyle:function(e,t){return v.DOM.getStyle(e,t,!0)},on:function(e,t,n,i){return v.DOM.bind(e,t,n,i)},off:function(e,t,n){return v.DOM.unbind(e,t,n)},fire:function(e,t,n){return v.DOM.fire(e,t,n)},innerHtml:function(e,t){v.DOM.setHTML(e,t)}},Re=function(e){return"static"===_e.getRuntimeStyle(e,"position")},Ce=function(e){return e.state.get("fixed")};function Ee(e,t,n){var i,r,o,s,a,l,u,c,d,f;return d=ke(),o=(r=_e.getPos(t,O.getUiContainer(e))).x,s=r.y,Ce(e)&&Re(document.body)&&(o-=d.x,s-=d.y),i=e.getEl(),a=(f=_e.getSize(i)).width,l=f.height,u=(f=_e.getSize(t)).width,c=f.height,"b"===(n=(n||"").split(""))[0]&&(s+=c),"r"===n[1]&&(o+=u),"c"===n[0]&&(s+=Math.round(c/2)),"c"===n[1]&&(o+=Math.round(u/2)),"b"===n[3]&&(s-=l),"r"===n[4]&&(o-=a),"c"===n[3]&&(s-=Math.round(l/2)),"c"===n[4]&&(o-=Math.round(a/2)),{x:o,y:s,w:a,h:l}}var ke=function(){var e=window;return{x:Math.max(e.pageXOffset,document.body.scrollLeft,document.documentElement.scrollLeft),y:Math.max(e.pageYOffset,document.body.scrollTop,document.documentElement.scrollTop),w:e.innerWidth||document.documentElement.clientWidth,h:e.innerHeight||document.documentElement.clientHeight}},He=function(e){var t,n=O.getUiContainer(e);return n&&!Ce(e)?{x:0,y:0,w:(t=n).scrollWidth-1,h:t.scrollHeight-1}:ke()},Se={testMoveRel:function(e,t){for(var n=He(this),i=0;in.x&&r.x+r.wn.y&&r.y+r.h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,Ie=/^\s*|\s*$/g,Fe=Te.extend({init:function(e){var o=this.match;function s(e,t,n){var i;function r(e){e&&t.push(e)}return r(function(t){if(t)return t=t.toLowerCase(),function(e){return"*"===t||e.type===t}}((i=Le.exec(e.replace(Ie,"")))[1])),r(function(t){if(t)return function(e){return e._name===t}}(i[2])),r(function(n){if(n)return n=n.split("."),function(e){for(var t=n.length;t--;)if(!e.classes.contains(n[t]))return!1;return!0}}(i[3])),r(function(n,i,r){if(n)return function(e){var t=e[n]?e[n]():"";return i?"="===i?t===r:"*="===i?0<=t.indexOf(r):"~="===i?0<=(" "+t+" ").indexOf(" "+r+" "):"!="===i?t!==r:"^="===i?0===t.indexOf(r):"$="===i&&t.substr(t.length-r.length)===r:!!r}}(i[4],i[5],i[6])),r(function(i){var t;if(i)return(i=/(?:not\((.+)\))|(.+)/i.exec(i))[1]?(t=a(i[1],[]),function(e){return!o(e,t)}):(i=i[2],function(e,t,n){return"first"===i?0===t:"last"===i?t===n-1:"even"===i?t%2==0:"odd"===i?t%2==1:!!e[i]&&e[i]()})}(i[7])),t.pseudo=!!i[7],t.direct=n,t}function a(e,t){var n,i,r,o=[];do{if(ze.exec(""),(i=ze.exec(e))&&(e=i[3],o.push(i[1]),i[2])){n=i[3];break}}while(i);for(n&&a(n,t),e=[],r=0;r"!==o[r]&&e.push(s(o[r],[],">"===o[r-1]));return t.push(e),t}this._selectors=a(e,[])},match:function(e,t){var n,i,r,o,s,a,l,u,c,d,f,h,m;for(n=0,i=(t=t||this._selectors).length;na.maxW?a.maxW:n,a.w=n,a.innerW=n-i),(n=e.h)!==undefined&&(n=(n=na.maxH?a.maxH:n,a.h=n,a.innerH=n-r),(n=e.innerW)!==undefined&&(n=(n=na.maxW-i?a.maxW-i:n,a.innerW=n,a.w=n+i),(n=e.innerH)!==undefined&&(n=(n=na.maxH-r?a.maxH-r:n,a.innerH=n,a.h=n+r),e.contentW!==undefined&&(a.contentW=e.contentW),e.contentH!==undefined&&(a.contentH=e.contentH),(t=s._lastLayoutRect).x===a.x&&t.y===a.y&&t.w===a.w&&t.h===a.h||((o=Je.repaintControls)&&o.map&&!o.map[s._id]&&(o.push(s),o.map[s._id]=!0),t.x=a.x,t.y=a.y,t.w=a.w,t.h=a.h),s):a},repaint:function(){var e,t,n,i,r,o,s,a,l,u,c=this;l=document.createRange?function(e){return e}:Math.round,e=c.getEl().style,i=c._layoutRect,a=c._lastRepaintRect||{},o=(r=c.borderBox).left+r.right,s=r.top+r.bottom,i.x!==a.x&&(e.left=l(i.x)+"px",a.x=i.x),i.y!==a.y&&(e.top=l(i.y)+"px",a.y=i.y),i.w!==a.w&&(u=l(i.w-o),e.width=(0<=u?u:0)+"px",a.w=i.w),i.h!==a.h&&(u=l(i.h-s),e.height=(0<=u?u:0)+"px",a.h=i.h),c._hasBody&&i.innerW!==a.innerW&&(u=l(i.innerW),(n=c.getEl("body"))&&((t=n.style).width=(0<=u?u:0)+"px"),a.innerW=i.innerW),c._hasBody&&i.innerH!==a.innerH&&(u=l(i.innerH),(n=n||c.getEl("body"))&&((t=t||n.style).height=(0<=u?u:0)+"px"),a.innerH=i.innerH),c._lastRepaintRect=a,c.fire("repaint",{},!1)},updateLayoutRect:function(){var e=this;e.parent()._lastRect=null,_e.css(e.getEl(),{width:"",height:""}),e._layoutRect=e._lastRepaintRect=e._lastLayoutRect=null,e.initLayoutRect()},on:function(e,t){var n,i,r,o=this;return it(o).on(e,"string"!=typeof(n=t)?n:function(e){return i||o.parentsAndSelf().each(function(e){var t=e.settings.callbacks;if(t&&(i=t[n]))return r=e,!1}),i?i.call(r,e):(e.action=n,void this.fire("execute",e))}),o},off:function(e,t){return it(this).off(e,t),this},fire:function(e,t,n){if((t=t||{}).control||(t.control=this),t=it(this).fire(e,t),!1!==n&&this.parent)for(var i=this.parent();i&&!t.isPropagationStopped();)i.fire(e,t,!1),i=i.parent();return t},hasEventListeners:function(e){return it(this).has(e)},parents:function(e){var t,n=new Ye;for(t=this.parent();t;t=t.parent())n.add(t);return e&&(n=n.filter(e)),n},parentsAndSelf:function(e){return new Ye(this).add(this.parents(e))},next:function(){var e=this.parent().items();return e[e.indexOf(this)+1]},prev:function(){var e=this.parent().items();return e[e.indexOf(this)-1]},innerHtml:function(e){return this.$el.html(e),this},getEl:function(e){var t=e?this._id+"-"+e:this._id;return this._elmCache[t]||(this._elmCache[t]=xe("#"+t)[0]),this._elmCache[t]},show:function(){return this.visible(!0)},hide:function(){return this.visible(!1)},focus:function(){try{this.getEl().focus()}catch(e){}return this},blur:function(){return this.getEl().blur(),this},aria:function(e,t){var n=this,i=n.getEl(n.ariaTarget);return void 0===t?n._aria[e]:(n._aria[e]=t,n.state.get("rendered")&&i.setAttribute("role"===e?e:"aria-"+e,t),n)},encode:function(e,t){return!1!==t&&(e=this.translate(e)),(e||"").replace(/[&<>"]/g,function(e){return""+e.charCodeAt(0)+";"})},translate:function(e){return Je.translate?Je.translate(e):e},before:function(e){var t=this.parent();return t&&t.insert(e,t.items().indexOf(this),!0),this},after:function(e){var t=this.parent();return t&&t.insert(e,t.items().indexOf(this)),this},remove:function(){var t,e,n=this,i=n.getEl(),r=n.parent();if(n.items){var o=n.items().toArray();for(e=o.length;e--;)o[e].remove()}r&&r.items&&(t=[],r.items().each(function(e){e!==n&&t.push(e)}),r.items().set(t),r._lastRect=null),n._eventsRoot&&n._eventsRoot===n&&xe(i).off();var s=n.getRoot().controlIdLookup;return s&&delete s[n._id],i&&i.parentNode&&i.parentNode.removeChild(i),n.state.set("rendered",!1),n.state.destroy(),n.fire("remove"),n},renderBefore:function(e){return xe(e).before(this.renderHtml()),this.postRender(),this},renderTo:function(e){return xe(e||this.getContainerElm()).append(this.renderHtml()),this.postRender(),this},preRender:function(){},render:function(){},renderHtml:function(){return''},postRender:function(){var e,t,n,i,r,o=this,s=o.settings;for(i in o.$el=xe(o.getEl()),o.state.set("rendered",!0),s)0===i.indexOf("on")&&o.on(i.substr(2),s[i]);if(o._eventsRoot){for(n=o.parent();!r&&n;n=n.parent())r=n._eventsRoot;if(r)for(i in r._nativeEvents)o._nativeEvents[i]=!0}rt(o),s.style&&(e=o.getEl())&&(e.setAttribute("style",s.style),e.style.cssText=s.style),o.settings.border&&(t=o.borderBox,o.$el.css({"border-top-width":t.top,"border-right-width":t.right,"border-bottom-width":t.bottom,"border-left-width":t.left}));var a=o.getRoot();for(var l in a.controlIdLookup||(a.controlIdLookup={}),(a.controlIdLookup[o._id]=o)._aria)o.aria(l,o._aria[l]);!1===o.state.get("visible")&&(o.getEl().style.display="none"),o.bindStates(),o.state.on("change:visible",function(e){var t,n=e.value;o.state.get("rendered")&&(o.getEl().style.display=!1===n?"none":"",o.getEl().getBoundingClientRect()),(t=o.parent())&&(t._lastRect=null),o.fire(n?"show":"hide"),Ze.add(o)}),o.fire("postrender",{},!1)},bindStates:function(){},scrollIntoView:function(e){var t,n,i,r,o,s,a=this.getEl(),l=a.parentNode,u=function(e,t){var n,i,r=e;for(n=i=0;r&&r!==t&&r.nodeType;)n+=r.offsetLeft||0,i+=r.offsetTop||0,r=r.offsetParent;return{x:n,y:i}}(a,l);return t=u.x,n=u.y,i=a.offsetWidth,r=a.offsetHeight,o=l.clientWidth,s=l.clientHeight,"end"===e?(t-=o-i,n-=s-r):"center"===e&&(t-=o/2-i/2,n-=s/2-r/2),l.scrollLeft=t,l.scrollTop=n,this},getRoot:function(){for(var e,t=this,n=[];t;){if(t.rootControl){e=t.rootControl;break}n.push(t),t=(e=t).parent()}e||(e=this);for(var i=n.length;i--;)n[i].rootControl=e;return e},reflow:function(){Ze.remove(this);var e=this.parent();return e&&e._layout&&!e._layout.isNative()&&e.reflow(),this}};function it(n){return n._eventDispatcher||(n._eventDispatcher=new Me({scope:n,toggleEvent:function(e,t){t&&Me.isNative(e)&&(n._nativeEvents||(n._nativeEvents={}),n._nativeEvents[e]=!0,n.state.get("rendered")&&rt(n))}})),n._eventDispatcher}function rt(a){var e,t,n,l,i,r;function o(e){var t=a.getParentCtrl(e.target);t&&t.fire(e.type,e)}function s(){var e=l._lastHoverCtrl;e&&(e.fire("mouseleave",{target:e.getEl()}),e.parents().each(function(e){e.fire("mouseleave",{target:e.getEl()})}),l._lastHoverCtrl=null)}function u(e){var t,n,i,r=a.getParentCtrl(e.target),o=l._lastHoverCtrl,s=0;if(r!==o){if((n=(l._lastHoverCtrl=r).parents().toArray().reverse()).push(r),o){for((i=o.parents().toArray().reverse()).push(o),s=0;s=t.length&&(e=0),t[e]&&t[e].focus(),e}function h(e,t){var n=-1,i=d();t=t||c(i.getEl());for(var r=0;r'+(e.settings.html||"")+t.renderHtml(e)+"
"},postRender:function(){var e,t=this;return t.items().exec("postRender"),t._super(),t._layout.postRender(t),t.state.set("rendered",!0),t.settings.style&&t.$el.css(t.settings.style),t.settings.border&&(e=t.borderBox,t.$el.css({"border-top-width":e.top,"border-right-width":e.right,"border-bottom-width":e.bottom,"border-left-width":e.left})),t.parent()||(t.keyboardNav=at({root:t})),t},initLayoutRect:function(){var e=this._super();return this._layout.recalc(this),e},recalc:function(){var e=this,t=e._layoutRect,n=e._lastRect;if(!n||n.w!==t.w||n.h!==t.h)return e._layout.recalc(e),t=e.layoutRect(),e._lastRect={x:t.x,y:t.y,w:t.w,h:t.h},!0},reflow:function(){var e;if(Ze.remove(this),this.visible()){for(ot.repaintControls=[],ot.repaintControls.map={},this.recalc(),e=ot.repaintControls.length;e--;)ot.repaintControls[e].repaint();"flow"!==this.settings.layout&&"stack"!==this.settings.layout&&this.repaint(),ot.repaintControls=[]}return this}});function ct(e){var t,n;if(e.changedTouches)for(t="screenX screenY pageX pageY clientX clientY".split(" "),n=0;n").css({position:"absolute",top:0,left:0,width:f.width,height:f.height,zIndex:2147483647,opacity:1e-4,cursor:d}).appendTo(x.body),xe(x).on("mousemove touchmove",v).on("mouseup touchend",p),h.start(e)},v=function(e){if(ct(e),e.button!==g)return p(e);e.deltaX=e.screenX-b,e.deltaY=e.screenY-y,e.preventDefault(),h.drag(e)},p=function(e){ct(e),xe(x).off("mousemove touchmove",v).off("mouseup touchend",p),m.remove(),h.stop&&h.stop(e)},this.destroy=function(){xe(w).off()},xe(w).on("mousedown touchstart",t)}var ft,ht,mt,gt,pt={init:function(){this.on("repaint",this.renderScroll)},renderScroll:function(){var p=this,v=2;function n(){var m,g,e;function t(e,t,n,i,r,o){var s,a,l,u,c,d,f,h;if(a=p.getEl("scroll"+e)){if(f=t.toLowerCase(),h=n.toLowerCase(),xe(p.getEl("absend")).css(f,p.layoutRect()[i]-1),!r)return void xe(a).css("display","none");xe(a).css("display","block"),s=p.getEl("body"),l=p.getEl("scroll"+e+"t"),u=s["client"+n]-2*v,c=(u-=m&&g?a["client"+o]:0)/s["scroll"+n],(d={})[f]=s["offset"+t]+v,d[h]=u,xe(a).css(d),(d={})[f]=s["scroll"+t]*c,d[h]=u*c,xe(l).css(d)}}e=p.getEl("body"),m=e.scrollWidth>e.clientWidth,g=e.scrollHeight>e.clientHeight,t("h","Left","Width","contentW",m,"Height"),t("v","Top","Height","contentH",g,"Width")}p.settings.autoScroll&&(p._hasScroll||(p._hasScroll=!0,function(){function e(s,a,l,u,c){var d,e=p._id+"-scroll"+s,t=p.classPrefix;xe(p.getEl()).append(''),p.draghelper=new dt(e+"t",{start:function(){d=p.getEl("body")["scroll"+a],xe("#"+e).addClass(t+"active")},drag:function(e){var t,n,i,r,o=p.layoutRect();n=o.contentW>o.innerW,i=o.contentH>o.innerH,r=p.getEl("body")["client"+l]-2*v,t=(r-=n&&i?p.getEl("scroll"+s)["client"+c]:0)/p.getEl("body")["scroll"+l],p.getEl("body")["scroll"+a]=d+e["delta"+u]/t},stop:function(){xe("#"+e).removeClass(t+"active")}})}p.classes.add("scroll"),e("v","Top","Height","Y","Width"),e("h","Left","Width","X","Height")}(),p.on("wheel",function(e){var t=p.getEl("body");t.scrollLeft+=10*(e.deltaX||0),t.scrollTop+=10*e.deltaY,n()}),xe(p.getEl("body")).on("scroll",n)),n())}},vt=ut.extend({Defaults:{layout:"fit",containerCls:"panel"},Mixins:[pt],renderHtml:function(){var e=this,t=e._layout,n=e.settings.html;return e.preRender(),t.preRender(e),void 0===n?n=''+t.renderHtml(e)+"
":("function"==typeof n&&(n=n.call(e)),e._hasBody=!1),''+(e._preBodyHtml||"")+n+"
"}}),bt={resizeToContent:function(){this._layoutRect.autoResize=!0,this._lastRect=null,this.reflow()},resizeTo:function(e,t){if(e<=1||t<=1){var n=_e.getWindowSize();e=e<=1?e*n.w:e,t=t<=1?t*n.h:t}return this._layoutRect.autoResize=!1,this.layoutRect({minW:e,minH:t,w:e,h:t}).reflow()},resizeBy:function(e,t){var n=this.layoutRect();return this.resizeTo(n.w+e,n.h+t)}},yt=[],xt=[];function wt(e,t){for(;e;){if(e===t)return!0;e=e.parent()}}function _t(){ft||(ft=function(e){2!==e.button&&function(e){for(var t=yt.length;t--;){var n=yt[t],i=n.getParentCtrl(e.target);if(n.settings.autohide){if(i&&(wt(i,n)||n.parent()===i))continue;(e=n.fire("autohide",{target:e.target})).isDefaultPrevented()||n.hide()}}}(e)},xe(document).on("click touchstart",ft))}function Rt(r){var e=_e.getViewPort().y;function t(e,t){for(var n,i=0;ie&&(r.fixed(!1).layoutRect({y:r._autoFixY}).repaint(),t(!1,r._autoFixY-e)):(r._autoFixY=r.layoutRect().y,r._autoFixY').appendTo(i.getContainerElm())),u.setTimeout(function(){t.addClass(n+"in"),xe(i.getEl()).addClass(n+"in")}),gt=!0),Ct(!0,i)}}),i.on("show",function(){i.parents().each(function(e){if(e.state.get("fixed"))return i.fixed(!0),!1})}),e.popover&&(i._preBodyHtml='',i.classes.add("popover").add("bottom").add(i.isRtl()?"end":"start")),i.aria("label",e.ariaLabel),i.aria("labelledby",i._id),i.aria("describedby",i.describedBy||i._id+"-none")},fixed:function(e){var t=this;if(t.state.get("fixed")!==e){if(t.state.get("rendered")){var n=_e.getViewPort();e?t.layoutRect().y-=n.y:t.layoutRect().y+=n.y}t.classes.toggle("fixed",e),t.state.set("fixed",e)}return t},show:function(){var e,t=this._super();for(e=yt.length;e--&&yt[e]!==this;);return-1===e&&yt.push(this),t},hide:function(){return kt(this),Ct(!1,this),this._super()},hideAll:function(){Et.hideAll()},close:function(){return this.fire("close").isDefaultPrevented()||(this.remove(),Ct(!1,this)),this},remove:function(){kt(this),this._super()},postRender:function(){return this.settings.bodyRole&&this.getEl("body").setAttribute("role",this.settings.bodyRole),this._super()}});function kt(e){var t;for(t=yt.length;t--;)yt[t]===e&&yt.splice(t,1);for(t=xt.length;t--;)xt[t]===e&&xt.splice(t,1)}Et.hideAll=function(){for(var e=yt.length;e--;){var t=yt[e];t&&t.settings.autohide&&(t.hide(),yt.splice(e,1))}};var Ht=function(s,n,e){var a,i,l=v.DOM,t=s.getParam("fixed_toolbar_container");t&&(i=l.select(t)[0]);var r=function(){if(a&&a.moveRel&&a.visible()&&!a._fixed){var e=s.selection.getScrollContainer(),t=s.getBody(),n=0,i=0;if(e){var r=l.getPos(t),o=l.getPos(e);n=Math.max(0,o.x-r.x),i=Math.max(0,o.y-r.y)}a.fixed(!1).moveRel(t,s.rtl?["tr-br","br-tr"]:["tl-bl","bl-tl","tr-br"]).moveBy(n,i)}},o=function(){a&&(a.show(),r(),l.addClass(s.getBody(),"mce-edit-focus"))},u=function(){a&&(a.hide(),Et.hideAll(),l.removeClass(s.getBody(),"mce-edit-focus"))},c=function(){var e,t;a?a.visible()||o():(a=n.panel=b.create({type:i?"panel":"floatpanel",role:"application",classes:"tinymce tinymce-inline",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:(e=i,t=s,!(!e||t.settings.ui_container)),border:1,items:[!1===d(s)?null:{type:"menubar",border:"0 0 1 0",items:oe(s)},L(s,f(s))]}),O.setUiContainer(s,a),_(s),i?a.renderTo(i).reflow():a.renderTo().reflow(),R(s,a),o(),V(s),s.on("nodeChange",r),s.on("ResizeWindow",r),s.on("activate",o),s.on("deactivate",u),s.nodeChanged())};return s.settings.content_editable=!0,s.on("focus",function(){!1===g(s)&&e.skinUiCss?l.styleSheetLoader.load(e.skinUiCss,c,c):c()}),s.on("blur hide",u),s.on("remove",function(){a&&(a.remove(),a=null)}),!1===g(s)&&e.skinUiCss?l.styleSheetLoader.load(e.skinUiCss,pe(s)):pe(s)(),{}};function St(i,r){var o,s,a=this,l=ot.classPrefix;a.show=function(e,t){function n(){o&&(xe(i).append(''),t&&t())}return a.hide(),o=!0,e?s=u.setTimeout(n,e):n(),a},a.hide=function(){var e=i.lastChild;return u.clearTimeout(s),e&&-1!==e.className.indexOf("throbber")&&e.parentNode.removeChild(e),o=!1,a}}var Tt=function(e,t){var n;e.on("ProgressState",function(e){n=n||new St(t.panel.getEl("body")),e.state?n.show(e.time):n.hide()})},Mt=function(e,t,n){var i=function(e){var t=e.settings,n=t.skin,i=t.skin_url;if(!1!==n){var r=n||"lightgray";i=i?e.documentBaseURI.toAbsolute(i):h.baseURL+"/skins/"+r}return i}(e);return i&&(n.skinUiCss=i+"/skin.min.css",e.contentCSS.push(i+"/content"+(e.inline?".inline":"")+".min.css")),Tt(e,t),e.getParam("inline",!1,"boolean")?Ht(e,t,n):ye(e,t,n)},Nt=ot.extend({Mixins:[Se],Defaults:{classes:"widget tooltip tooltip-n"},renderHtml:function(){var e=this,t=e.classPrefix;return''+e.encode(e.state.get("text"))+"
"},bindStates:function(){var t=this;return t.state.on("change:text",function(e){t.getEl().lastChild.innerHTML=t.encode(e.value)}),t._super()},repaint:function(){var e,t;e=this.getEl().style,t=this._layoutRect,e.left=t.x+"px",e.top=t.y+"px",e.zIndex=131070}}),Pt=ot.extend({init:function(i){var r=this;r._super(i),i=r.settings,r.canFocus=!0,i.tooltip&&!1!==Pt.tooltips&&(r.on("mouseenter",function(e){var t=r.tooltip().moveTo(-65535);if(e.control===r){var n=t.text(i.tooltip).show().testMoveRel(r.getEl(),["bc-tc","bc-tl","bc-tr"]);t.classes.toggle("tooltip-n","bc-tc"===n),t.classes.toggle("tooltip-nw","bc-tl"===n),t.classes.toggle("tooltip-ne","bc-tr"===n),t.moveRel(r.getEl(),n)}else t.hide()}),r.on("mouseleave mousedown click",function(){r.tooltip().remove(),r._tooltip=null})),r.aria("label",i.ariaLabel||i.tooltip)},tooltip:function(){return this._tooltip||(this._tooltip=new Nt({type:"tooltip"}),O.inheritUiContainer(this,this._tooltip),this._tooltip.renderTo()),this._tooltip},postRender:function(){var e=this,t=e.settings;e._super(),e.parent()||!t.width&&!t.height||(e.initLayoutRect(),e.repaint()),t.autofocus&&e.focus()},bindStates:function(){var t=this;function n(e){t.aria("disabled",e),t.classes.toggle("disabled",e)}function i(e){t.aria("pressed",e),t.classes.toggle("active",e)}return t.state.on("change:disabled",function(e){n(e.value)}),t.state.on("change:active",function(e){i(e.value)}),t.state.get("disabled")&&n(!0),t.state.get("active")&&i(!0),t._super()},remove:function(){this._super(),this._tooltip&&(this._tooltip.remove(),this._tooltip=null)}}),Wt=Pt.extend({Defaults:{value:0},init:function(e){this._super(e),this.classes.add("progress"),this.settings.filter||(this.settings.filter=function(e){return Math.round(e)})},renderHtml:function(){var e=this._id,t=this.classPrefix;return''},postRender:function(){return this._super(),this.value(this.settings.value),this},bindStates:function(){var t=this;function n(e){e=t.settings.filter(e),t.getEl().lastChild.innerHTML=e+"%",t.getEl().firstChild.firstChild.style.width=e+"%"}return t.state.on("change:value",function(e){n(e.value)}),n(t.state.get("value")),t._super()}}),Dt=function(e,t){e.getEl().lastChild.textContent=t+(e.progressBar?" "+e.progressBar.value()+"%":"")},Ot=ot.extend({Mixins:[Se],Defaults:{classes:"widget notification"},init:function(e){var t=this;t._super(e),t.maxWidth=e.maxWidth,e.text&&t.text(e.text),e.icon&&(t.icon=e.icon),e.color&&(t.color=e.color),e.type&&t.classes.add("notification-"+e.type),e.timeout&&(e.timeout<0||0'),e=' style="max-width: '+t.maxWidth+"px;"+(t.color?"background-color: "+t.color+';"':'"'),t.closeButton&&(r=''),t.progressBar&&(o=t.progressBar.renderHtml()),''+i+'
'+t.state.get("text")+"
"+o+r+'
'},postRender:function(){var e=this;return u.setTimeout(function(){e.$el.addClass(e.classPrefix+"in"),Dt(e,e.state.get("text"))},100),e._super()},bindStates:function(){var t=this;return t.state.on("change:text",function(e){t.getEl().firstChild.innerHTML=e.value,Dt(t,e.value)}),t.progressBar&&(t.progressBar.bindStates(),t.progressBar.state.on("change:value",function(e){Dt(t,t.state.get("text"))})),t._super()},close:function(){return this.fire("close").isDefaultPrevented()||this.remove(),this},repaint:function(){var e,t;e=this.getEl().style,t=this._layoutRect,e.left=t.x+"px",e.top=t.y+"px",e.zIndex=65534}});function At(o){var s=function(e){return e.inline?e.getElement():e.getContentAreaContainer()};return{open:function(e,t){var n,i=w.extend(e,{maxWidth:(n=s(o),_e.getSize(n).width)}),r=new Ot(i);return 0<(r.args=i).timeout&&(r.timer=setTimeout(function(){r.close(),t()},i.timeout)),r.on("close",function(){t()}),r.renderTo(),r},close:function(e){e.close()},reposition:function(e){G(e,function(e){e.moveTo(0,0)}),function(n){if(0e.w&&(n=e.x-Math.max(0,t/2),r.layoutRect({w:t,x:n}),i=!0),o&&(o.layoutRect({w:r.layoutRect().innerW}).recalc(),(t=o.layoutRect().minW+e.deltaW)>e.w&&(n=e.x-Math.max(0,t-e.w),r.layoutRect({w:t,x:n}),i=!0)),i&&r.recalc()},initLayoutRect:function(){var e,t=this,n=t._super(),i=0;if(t.settings.title&&!t._fullscreen){e=t.getEl("head");var r=_e.getSize(e);n.headerW=r.width,n.headerH=r.height,i+=n.headerH}t.statusbar&&(i+=t.statusbar.layoutRect().h),n.deltaH+=i,n.minH+=i,n.h+=i;var o=_e.getWindowSize();return n.x=t.settings.x||Math.max(0,o.w/2-n.w/2),n.y=t.settings.y||Math.max(0,o.h/2-n.h/2),n},renderHtml:function(){var e=this,t=e._layout,n=e._id,i=e.classPrefix,r=e.settings,o="",s="",a=r.html;return e.preRender(),t.preRender(e),r.title&&(o=''),r.url&&(a=''),void 0===a&&(a=t.renderHtml(e)),e.statusbar&&(s=e.statusbar.renderHtml()),'"},fullscreen:function(e){var n,t,i=this,r=document.documentElement,o=i.classPrefix;if(e!==i._fullscreen)if(xe(window).on("resize",function(){var e;if(i._fullscreen)if(n)i._timer||(i._timer=u.setTimeout(function(){var e=_e.getWindowSize();i.moveTo(0,0).resizeTo(e.w,e.h),i._timer=0},50));else{e=(new Date).getTime();var t=_e.getWindowSize();i.moveTo(0,0).resizeTo(t.w,t.h),50<(new Date).getTime()-e&&(n=!0)}}),t=i.layoutRect(),i._fullscreen=e){i._initial={x:t.x,y:t.y,w:t.w,h:t.h},i.borderBox=Ne("0"),i.getEl("head").style.display="none",t.deltaH-=t.headerH+2,xe([r,document.body]).addClass(o+"fullscreen"),i.classes.add("fullscreen");var s=_e.getWindowSize();i.moveTo(0,0).resizeTo(s.w,s.h)}else i.borderBox=Ne(i.settings.border),i.getEl("head").style.display="",t.deltaH+=t.headerH,xe([r,document.body]).removeClass(o+"fullscreen"),i.classes.remove("fullscreen"),i.moveTo(i._initial.x,i._initial.y).resizeTo(i._initial.w,i._initial.h);return i.reflow()},postRender:function(){var t,n=this;setTimeout(function(){n.classes.add("in"),n.fire("open")},0),n._super(),n.statusbar&&n.statusbar.postRender(),n.focus(),this.dragHelper=new dt(n._id+"-dragh",{start:function(){t={x:n.layoutRect().x,y:n.layoutRect().y}},drag:function(e){n.moveTo(t.x+e.deltaX,t.y+e.deltaY)}}),n.on("submit",function(e){e.isDefaultPrevented()||n.close()}),Bt.push(n),zt(!0)},submit:function(){return this.fire("submit",{data:this.toJSON()})},remove:function(){var e,t=this;for(t.dragHelper.destroy(),t._super(),t.statusbar&&this.statusbar.remove(),It(t.classPrefix,!1),e=Bt.length;e--;)Bt[e]===t&&Bt.splice(e,1);zt(0'+this._super(e)}}),Jt=Pt.extend({Defaults:{classes:"widget btn",role:"button"},init:function(e){var t,n=this;n._super(e),e=n.settings,t=n.settings.size,n.on("click mousedown",function(e){e.preventDefault()}),n.on("touchstart",function(e){n.fire("click",e),e.preventDefault()}),e.subtype&&n.classes.add(e.subtype),t&&n.classes.add("btn-"+t),e.icon&&n.icon(e.icon)},icon:function(e){return arguments.length?(this.state.set("icon",e),this):this.state.get("icon")},repaint:function(){var e,t=this.getEl().firstChild;t&&((e=t.style).width=e.height="100%"),this._super()},renderHtml:function(){var e,t,n=this,i=n._id,r=n.classPrefix,o=n.state.get("icon"),s=n.state.get("text"),a="",l=n.settings;return(e=l.image)?(o="none","string"!=typeof e&&(e=window.getSelection?e[0]:e[1]),e=" style=\"background-image: url('"+e+"')\""):e="",s&&(n.classes.add("btn-has-text"),a=''+n.encode(s)+""),o=o?r+"ico "+r+"i-"+o:"",t="boolean"==typeof l.active?' aria-pressed="'+l.active+'"':"",'"},bindStates:function(){var o=this,n=o.$,i=o.classPrefix+"txt";function s(e){var t=n("span."+i,o.getEl());e?(t[0]||(n("button:first",o.getEl()).append(''),t=n("span."+i,o.getEl())),t.html(o.encode(e))):t.remove(),o.classes.toggle("btn-has-text",!!e)}return o.state.on("change:text",function(e){s(e.value)}),o.state.on("change:icon",function(e){var t=e.value,n=o.classPrefix;t=(o.settings.icon=t)?n+"ico "+n+"i-"+o.settings.icon:"";var i=o.getEl().firstChild,r=i.getElementsByTagName("i")[0];t?(r&&r===i.firstChild||(r=document.createElement("i"),i.insertBefore(r,i.firstChild)),r.className=t):r&&i.removeChild(r),s(o.state.get("text"))}),o._super()}}),Gt=Jt.extend({init:function(e){e=w.extend({text:"Browse...",multiple:!1,accept:null},e),this._super(e),this.classes.add("browsebutton"),e.multiple&&this.classes.add("multiple")},postRender:function(){var n=this,t=_e.create("input",{type:"file",id:n._id+"-browse",accept:n.settings.accept});n._super(),xe(t).on("change",function(e){var t=e.target.files;n.value=function(){return t.length?n.settings.multiple?t:t[0]:null},e.preventDefault(),t.length&&n.fire("change",e)}),xe(t).on("click",function(e){e.stopPropagation()}),xe(n.getEl("button")).on("click",function(e){e.stopPropagation(),t.click()}),n.getEl().appendChild(t)},remove:function(){xe(this.getEl("button")).off(),xe(this.getEl("input")).off(),this._super()}}),Kt=ut.extend({Defaults:{defaultType:"button",role:"group"},renderHtml:function(){var e=this,t=e._layout;return e.classes.add("btn-group"),e.preRender(),t.preRender(e),''+(e.settings.html||"")+t.renderHtml(e)+"
"}}),Zt=Pt.extend({Defaults:{classes:"checkbox",role:"checkbox",checked:!1},init:function(e){var t=this;t._super(e),t.on("click mousedown",function(e){e.preventDefault()}),t.on("click",function(e){e.preventDefault(),t.disabled()||t.checked(!t.checked())}),t.checked(t.settings.checked)},checked:function(e){return arguments.length?(this.state.set("checked",e),this):this.state.get("checked")},value:function(e){return arguments.length?this.checked(e):this.checked()},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return''+e.encode(e.state.get("text"))+"
"},bindStates:function(){var o=this;function t(e){o.classes.toggle("checked",e),o.aria("checked",e)}return o.state.on("change:text",function(e){o.getEl("al").firstChild.data=o.translate(e.value)}),o.state.on("change:checked change:value",function(e){o.fire("change"),t(e.value)}),o.state.on("change:icon",function(e){var t=e.value,n=o.classPrefix;if(void 0===t)return o.settings.icon;t=(o.settings.icon=t)?n+"ico "+n+"i-"+o.settings.icon:"";var i=o.getEl().firstChild,r=i.getElementsByTagName("i")[0];t?(r&&r===i.firstChild||(r=document.createElement("i"),i.insertBefore(r,i.firstChild)),r.className=t):r&&i.removeChild(r)}),o.state.get("checked")&&t(!0),o._super()}}),Qt=tinymce.util.Tools.resolve("tinymce.util.VK"),en=Pt.extend({init:function(i){var r=this;r._super(i),i=r.settings,r.classes.add("combobox"),r.subinput=!0,r.ariaTarget="inp",i.menu=i.menu||i.values,i.menu&&(i.icon="caret"),r.on("click",function(e){var t=e.target,n=r.getEl();if(xe.contains(n,t)||t===n)for(;t&&t!==n;)t.id&&-1!==t.id.indexOf("-open")&&(r.fire("action"),i.menu&&(r.showMenu(),e.aria&&r.menu.items()[0].focus())),t=t.parentNode}),r.on("keydown",function(e){var t;13===e.keyCode&&"INPUT"===e.target.nodeName&&(e.preventDefault(),r.parents().reverse().each(function(e){if(e.toJSON)return t=e,!1}),r.fire("submit",{data:t.toJSON()}))}),r.on("keyup",function(e){if("INPUT"===e.target.nodeName){var t=r.state.get("value"),n=e.target.value;n!==t&&(r.state.set("value",n),r.fire("autocomplete",e))}}),r.on("mouseover",function(e){var t=r.tooltip().moveTo(-65535);if(r.statusLevel()&&-1!==e.target.className.indexOf(r.classPrefix+"status")){var n=r.statusMessage()||"Ok",i=t.text(n).show().testMoveRel(e.target,["bc-tc","bc-tl","bc-tr"]);t.classes.toggle("tooltip-n","bc-tc"===i),t.classes.toggle("tooltip-nw","bc-tl"===i),t.classes.toggle("tooltip-ne","bc-tr"===i),t.moveRel(e.target,i)}})},statusLevel:function(e){return 0',i.disabled()&&(u+=' disabled="disabled"'),(e=o.icon)&&"caret"!==e&&(e=s+"ico "+s+"i-"+o.icon),t=i.state.get("text"),(e||t)&&(l='",i.classes.add("has-open")),''+n+l+"
"},value:function(e){return arguments.length?(this.state.set("value",e),this):(this.state.get("rendered")&&this.state.set("value",this.getEl("inp").value),this.state.get("value"))},showAutoComplete:function(e,i){var r=this;if(0!==e.length){r.menu?r.menu.items().remove():r.menu=b.create({type:"menu",classes:"combobox-menu",layout:"flow"}).parent(r).renderTo(),w.each(e,function(e){var t,n;r.menu.add({text:e.title,url:e.previewUrl,match:i,classes:"menu-item-ellipsis",onclick:(t=e.value,n=e.title,function(){r.fire("selectitem",{title:n,value:t})})})}),r.menu.renderNew(),r.hideMenu(),r.menu.on("cancel",function(e){e.control.parent()===r.menu&&(e.stopPropagation(),r.focus(),r.hideMenu())}),r.menu.on("select",function(){r.focus()});var t=r.layoutRect().w;r.menu.layoutRect({w:t,minW:0,maxW:t}),r.menu.repaint(),r.menu.reflow(),r.menu.show(),r.menu.moveRel(r.getEl(),r.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])}else r.hideMenu()},hideMenu:function(){this.menu&&this.menu.hide()},bindStates:function(){var r=this;r.state.on("change:value",function(e){r.getEl("inp").value!==e.value&&(r.getEl("inp").value=e.value)}),r.state.on("change:disabled",function(e){r.getEl("inp").disabled=e.value}),r.state.on("change:statusLevel",function(e){var t=r.getEl("status"),n=r.classPrefix,i=e.value;_e.css(t,"display","none"===i?"none":""),_e.toggleClass(t,n+"i-checkmark","ok"===i),_e.toggleClass(t,n+"i-warning","warn"===i),_e.toggleClass(t,n+"i-error","error"===i),r.classes.toggle("has-status","none"!==i),r.repaint()}),_e.on(r.getEl("status"),"mouseleave",function(){r.tooltip().hide()}),r.on("cancel",function(e){r.menu&&r.menu.visible()&&(e.stopPropagation(),r.hideMenu())});var n=function(e,t){t&&0'+e.encode(i)+""),''},postRender:function(){var t=this,n=t.settings.onclick;return t.on("click",function(e){e.aria&&"down"===e.aria.key||e.control!==t||rn.getParent(e.target,"."+t.classPrefix+"open")||(e.stopImmediatePropagation(),n.call(t,e))}),delete t.settings.onclick,t._super()}}),sn=tinymce.util.Tools.resolve("tinymce.util.Color"),an=Pt.extend({Defaults:{classes:"widget colorpicker"},init:function(e){this._super(e)},postRender:function(){var n,i,r,o,s,a=this,l=a.color();function u(e,t){var n,i,r=_e.getPos(e);return n=t.pageX-r.x,i=t.pageY-r.y,{x:n=Math.max(0,Math.min(n/e.clientWidth,1)),y:i=Math.max(0,Math.min(i/e.clientHeight,1))}}function c(e,t){var n=(360-e.h)/360;_e.css(r,{top:100*n+"%"}),t||_e.css(s,{left:e.s+"%",top:100-e.v+"%"}),o.style.background=sn({s:100,v:100,h:e.h}).toHex(),a.color().parse({s:e.s,v:e.v,h:e.h})}function e(e){var t;t=u(o,e),n.s=100*t.x,n.v=100*(1-t.y),c(n),a.fire("change")}function t(e){var t;t=u(i,e),(n=l.toHsv()).h=360*(1-t.y),c(n,!0),a.fire("change")}i=a.getEl("h"),r=a.getEl("hp"),o=a.getEl("sv"),s=a.getEl("svp"),a._repaint=function(){c(n=l.toHsv())},a._super(),a._svdraghelper=new dt(a._id+"-sv",{start:e,drag:e}),a._hdraghelper=new dt(a._id+"-h",{start:t,drag:t}),a._repaint()},rgb:function(){return this.color().toRgb()},value:function(e){if(!arguments.length)return this.color().toHex();this.color().parse(e),this._rendered&&this._repaint()},color:function(){return this._color||(this._color=sn()),this._color},renderHtml:function(){var e,t=this._id,o=this.classPrefix,s="#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000";return e=''+function(){var e,t,n,i,r="";for(n="filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=",e=0,t=(i=s.split(",")).length-1;e
';return r}()+'','"}}),ln=Pt.extend({init:function(e){e=w.extend({height:100,text:"Drop an image here",multiple:!1,accept:null},e),this._super(e),this.classes.add("dropzone"),e.multiple&&this.classes.add("multiple")},renderHtml:function(){var e,t,n=this.settings;return e={id:this._id,hidefocus:"1"},t=_e.create("div",e,""+this.translate(n.text)+""),n.height&&_e.css(t,"height",n.height+"px"),n.width&&_e.css(t,"width",n.width+"px"),t.className=this.classes,t.outerHTML},postRender:function(){var i=this,e=function(e){e.preventDefault(),i.classes.toggle("dragenter"),i.getEl().className=i.classes};i._super(),i.$el.on("dragover",function(e){e.preventDefault()}),i.$el.on("dragenter",e),i.$el.on("dragleave",e),i.$el.on("drop",function(e){if(e.preventDefault(),!i.state.get("disabled")){var t=function(e){var t=i.settings.accept;if("string"!=typeof t)return e;var n=new RegExp("("+t.split(/\s*,\s*/).join("|")+")$","i");return w.grep(e,function(e){return n.test(e.name)})}(e.dataTransfer.files);i.value=function(){return t.length?i.settings.multiple?t:t[0]:null},t.length&&i.fire("change",e)}})},remove:function(){this.$el.off(),this._super()}}),un=Pt.extend({init:function(e){var n=this;e.delimiter||(e.delimiter="\xbb"),n._super(e),n.classes.add("path"),n.canFocus=!0,n.on("click",function(e){var t;(t=e.target.getAttribute("data-index"))&&n.fire("select",{value:n.row()[t],index:t})}),n.row(n.settings.row)},focus:function(){return this.getEl().firstChild.focus(),this},row:function(e){return arguments.length?(this.state.set("row",e),this):this.state.get("row")},renderHtml:function(){return''+this._getDataPathHtml(this.state.get("row"))+"
"},bindStates:function(){var t=this;return t.state.on("change:row",function(e){t.innerHtml(t._getDataPathHtml(e.value))}),t._super()},_getDataPathHtml:function(e){var t,n,i=e||[],r="",o=this.classPrefix;for(t=0,n=i.length;t '+this.settings.delimiter+" ":"")+''+i[t].name+"
";return r||(r='\xa0
'),r}}),cn=un.extend({postRender:function(){var o=this,s=o.settings.editor;function a(e){if(1===e.nodeType){if("BR"===e.nodeName||e.getAttribute("data-mce-bogus"))return!0;if("bookmark"===e.getAttribute("data-mce-type"))return!0}return!1}return!1!==s.settings.elementpath&&(o.on("select",function(e){s.focus(),s.selection.select(this.row()[e.index].element),s.nodeChanged()}),s.on("nodeChange",function(e){for(var t=[],n=e.parents,i=n.length;i--;)if(1===n[i].nodeType&&!a(n[i])){var r=s.fire("ResolveName",{name:n[i].nodeName.toLowerCase(),target:n[i]});if(r.isDefaultPrevented()||t.push({name:r.name,element:n[i]}),r.isPropagationStopped())break}o.row(t)})),o._super()}}),dn=ut.extend({Defaults:{layout:"flex",align:"center",defaults:{flex:1}},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.classes.add("formitem"),t.preRender(e),''+(e.settings.title?'
'+e.settings.title+"
":"")+'
'+(e.settings.html||"")+t.renderHtml(e)+"
"}}),fn=ut.extend({Defaults:{containerCls:"form",layout:"flex",direction:"column",align:"stretch",flex:1,padding:15,labelGap:30,spacing:10,callbacks:{submit:function(){this.submit()}}},preRender:function(){var i=this,e=i.items();i.settings.formItemDefaults||(i.settings.formItemDefaults={layout:"flex",autoResize:"overflow",defaults:{flex:1}}),e.each(function(e){var t,n=e.settings.label;n&&((t=new dn(w.extend({items:{type:"label",id:e._id+"-l",text:n,flex:0,forId:e._id,disabled:e.disabled()}},i.settings.formItemDefaults))).type="formitem",e.aria("labelledby",e._id+"-l"),"undefined"==typeof e.settings.flex&&(e.settings.flex=1),i.replace(e,t),t.add(e))})},submit:function(){return this.fire("submit",{data:this.toJSON()})},postRender:function(){this._super(),this.fromJSON(this.settings.data)},bindStates:function(){var n=this;function e(){var e,t,i=0,r=[];if(!1!==n.settings.labelGapCalc)for(("children"===n.settings.labelGapCalc?n.find("formitem"):n.items()).filter("formitem").each(function(e){var t=e.items()[0],n=t.getEl().clientWidth;i=i'+(e.settings.title?'":"")+''+(e.settings.html||"")+t.renderHtml(e)+"
"}}),mn=0,gn=function(e){if(null===e||e===undefined)throw new Error("Node cannot be null or undefined");return{dom:k(e)}},pn={fromHtml:function(e,t){var n=(t||document).createElement("div");if(n.innerHTML=e,!n.hasChildNodes()||1",l)),null!==u&&a.push(fi("",u)),a))],o=function(e,t){return 0===e.length||0===t.length?e.concat(t):e.concat(c,t)},s=[],G(n,function(e){s=o(s,e)}),s):pi(e,d(ci))},gi=function(e,t){var n,i,r,o=ci[t];/^https?/.test(e)&&(o?(n=o,i=e,r=X(n,i),-1===r?W.none():W.some(r)).isNone()&&(ci[t]=o.slice(0,5).concat(e)):ci[t]=[e])},pi=function(e,t){var n=e.toLowerCase(),i=w.grep(t,function(e){return-1!==e.title.toLowerCase().indexOf(n)});return 1===i.length&&i[0].title===e?[]:i},vi=function(o,e,n){var i=e.filepicker_validator_handler;i&&o.state.on("change:value",function(e){var t;0!==(t=e.value).length?i({url:t,type:n},function(e){var t,n,i,r=(n=(t=e).status,i=t.message,"valid"===n?{status:"ok",message:i}:"unknown"===n?{status:"warn",message:i}:"invalid"===n?{status:"warn",message:i}:{status:"none",message:""});o.statusMessage(r.message),o.statusLevel(r.status)}):o.statusLevel("none")})},bi=en.extend({Statics:{clearHistory:function(){ci={}}},init:function(e){var t,n,i,r,o,s,a,l,u=this,c=window.tinymce?window.tinymce.activeEditor:h.activeEditor,d=c.settings,f=e.filetype;e.spellcheck=!1,(i=d.file_picker_types||d.file_browser_callback_types)&&(i=w.makeMap(i,/[, ]/)),i&&!i[f]||(!(n=d.file_picker_callback)||i&&!i[f]?!(n=d.file_browser_callback)||i&&!i[f]||(t=function(){n(u.getEl("inp").id,u.value(),f,window)}):t=function(){var e=u.fire("beforecall").meta;e=w.extend({filetype:f},e),n.call(c,function(e,t){u.value(e).fire("change",{meta:t})},u.value(),e)}),t&&(e.icon="browse",e.onaction=t),u._super(e),u.classes.add("filepicker"),r=u,o=d,s=c.getBody(),a=f,l=function(e){var t=ui(s),n=mi(e,t,a,o);r.showAutoComplete(n,e)},r.on("autocomplete",function(){l(r.value())}),r.on("selectitem",function(e){var t=e.value;r.value(t.url);var n,i=(n=t.title).raw?n.raw:n;"image"===a?r.fire("change",{meta:{alt:i,attach:t.attach}}):r.fire("change",{meta:{text:i,attach:t.attach}}),r.focus()}),r.on("click",function(e){0===r.value().length&&"INPUT"===e.target.nodeName&&l("")}),r.on("PostRender",function(){r.getRoot().on("submit",function(e){e.isDefaultPrevented()||gi(r.value(),a)})}),vi(u,d,f)}}),yi=jt.extend({recalc:function(e){var t=e.layoutRect(),n=e.paddingBox;e.items().filter(":visible").each(function(e){e.layoutRect({x:n.left,y:n.top,w:t.innerW-n.right-n.left,h:t.innerH-n.top-n.bottom}),e.recalc&&e.recalc()})}}),xi=jt.extend({recalc:function(e){var t,n,i,r,o,s,a,l,u,c,d,f,h,m,g,p,v,b,y,x,w,_,R,C,E,k,H,S,T,M,N,P,W,D,O,A,B,L=[],z=Math.max,I=Math.min;for(i=e.items().filter(":visible"),r=e.layoutRect(),o=e.paddingBox,s=e.settings,f=e.isRtl()?s.direction||"row-reversed":s.direction,a=s.align,l=e.isRtl()?s.pack||"end":s.pack,u=s.spacing||0,"row-reversed"!==f&&"column-reverse"!==f||(i=i.set(i.toArray().reverse()),f=f.split("-")[0]),"column"===f?(C="y",_="h",R="minH",E="maxH",H="innerH",k="top",S="deltaH",T="contentH",D="left",P="w",M="x",N="innerW",W="minW",O="right",A="deltaW",B="contentW"):(C="x",_="w",R="minW",E="maxW",H="innerW",k="left",S="deltaW",T="contentW",D="top",P="h",M="y",N="innerH",W="minH",O="bottom",A="deltaH",B="contentH"),d=r[H]-o[k]-o[k],w=c=0,t=0,n=i.length;tT[d]?C:T[d],M[f]=E>M[f]?E:M[f];for(k=o.innerW-p.left-p.right,d=_=0;d'},src:function(e){this.getEl().src=e},html:function(e,t){var n=this,i=this.getEl().contentWindow.document.body;return i?(i.innerHTML=e,t&&t()):u.setTimeout(function(){n.html(e)}),this}}),Qi=Pt.extend({init:function(e){this._super(e),this.classes.add("widget").add("infobox"),this.canFocus=!1},severity:function(e){this.classes.remove("error"),this.classes.remove("warning"),this.classes.remove("success"),this.classes.add(e)},help:function(e){this.state.set("help",e)},renderHtml:function(){var e=this,t=e.classPrefix;return''+e.encode(e.state.get("text"))+'
'},bindStates:function(){var t=this;return t.state.on("change:text",function(e){t.getEl("body").firstChild.data=t.encode(e.value),t.state.get("rendered")&&t.updateLayoutRect()}),t.state.on("change:help",function(e){t.classes.toggle("has-help",e.value),t.state.get("rendered")&&t.updateLayoutRect()}),t._super()}}),er=Pt.extend({init:function(e){var t=this;t._super(e),t.classes.add("widget").add("label"),t.canFocus=!1,e.multiline&&t.classes.add("autoscroll"),e.strong&&t.classes.add("strong")},initLayoutRect:function(){var e=this,t=e._super();return e.settings.multiline&&(_e.getSize(e.getEl()).width>t.maxW&&(t.minW=t.maxW,e.classes.add("multiline")),e.getEl().style.width=t.minW+"px",t.startMinH=t.h=t.minH=Math.min(t.maxH,_e.getSize(e.getEl()).height)),t},repaint:function(){return this.settings.multiline||(this.getEl().style.lineHeight=this.layoutRect().h+"px"),this._super()},severity:function(e){this.classes.remove("error"),this.classes.remove("warning"),this.classes.remove("success"),this.classes.add(e)},renderHtml:function(){var e,t,n=this,i=n.settings.forId,r=n.settings.html?n.settings.html:n.encode(n.state.get("text"));return!i&&(t=n.settings.forName)&&(e=n.getRoot().find("#"+t)[0])&&(i=e._id),i?'":''+r+""},bindStates:function(){var t=this;return t.state.on("change:text",function(e){t.innerHtml(t.encode(e.value)),t.state.get("rendered")&&t.updateLayoutRect()}),t._super()}}),tr=ut.extend({Defaults:{role:"toolbar",layout:"flow"},init:function(e){this._super(e),this.classes.add("toolbar")},postRender:function(){return this.items().each(function(e){e.classes.add("toolbar-item")}),this._super()}}),nr=tr.extend({Defaults:{role:"menubar",containerCls:"menubar",ariaRoot:!0,defaults:{type:"menubutton"}}}),ir=Jt.extend({init:function(e){var t=this;t._renderOpen=!0,t._super(e),e=t.settings,t.classes.add("menubtn"),e.fixedWidth&&t.classes.add("fixed-width"),t.aria("haspopup",!0),t.state.set("menu",e.menu||t.render())},showMenu:function(e){var t,n=this;if(n.menu&&n.menu.visible()&&!1!==e)return n.hideMenu();n.menu||(t=n.state.get("menu")||[],n.classes.add("opened"),t.length?t={type:"menu",animate:!0,items:t}:(t.type=t.type||"menu",t.animate=!0),t.renderTo?n.menu=t.parent(n).show().renderTo():n.menu=b.create(t).parent(n).renderTo(),n.fire("createmenu"),n.menu.reflow(),n.menu.on("cancel",function(e){e.control.parent()===n.menu&&(e.stopPropagation(),n.focus(),n.hideMenu())}),n.menu.on("select",function(){n.focus()}),n.menu.on("show hide",function(e){"hide"===e.type&&e.control.parent()===n&&n.classes.remove("opened-under"),e.control===n.menu&&(n.activeMenu("show"===e.type),n.classes.toggle("opened","show"===e.type)),n.aria("expanded","show"===e.type)}).fire("show")),n.menu.show(),n.menu.layoutRect({w:n.layoutRect().w}),n.menu.repaint(),n.menu.moveRel(n.getEl(),n.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"]);var i=n.menu.layoutRect(),r=n.$el.offset().top+n.layoutRect().h;r>i.y&&r'+t.encode(o)+""),r=t.settings.icon?i+"ico "+i+"i-"+r:"",t.aria("role",t.parent()instanceof nr?"menuitem":"button"),''},postRender:function(){var r=this;return r.on("click",function(e){e.control===r&&function(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1}(e.target,r.getEl())&&(r.focus(),r.showMenu(!e.aria),e.aria&&r.menu.items().filter(":visible")[0].focus())}),r.on("mouseenter",function(e){var t,n=e.control,i=r.parent();n&&i&&n instanceof ir&&n.parent()===i&&(i.items().filter("MenuButton").each(function(e){e.hideMenu&&e!==n&&(e.menu&&e.menu.visible()&&(t=!0),e.hideMenu())}),t&&(n.focus(),n.showMenu()))}),r._super()},bindStates:function(){var e=this;return e.state.on("change:menu",function(){e.menu&&e.menu.remove(),e.menu=null}),e._super()},remove:function(){this._super(),this.menu&&this.menu.remove()}}),rr=Et.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"application",bodyRole:"menu",ariaRoot:!0},init:function(e){if(e.autohide=!0,e.constrainToViewport=!0,"function"==typeof e.items&&(e.itemsFactory=e.items,e.items=[]),e.itemDefaults)for(var t=e.items,n=t.length;n--;)t[n]=w.extend({},e.itemDefaults,t[n]);this._super(e),this.classes.add("menu"),e.animate&&11!==de.ie&&this.classes.add("animate")},repaint:function(){return this.classes.toggle("menu-align",!0),this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){this.hideAll(),this.fire("select")},load:function(){var t,n=this;function i(){n.throbber&&(n.throbber.hide(),n.throbber=null)}n.settings.itemsFactory&&(n.throbber||(n.throbber=new St(n.getEl("body"),!0),0===n.items().length?(n.throbber.show(),n.fire("loading")):n.throbber.show(100,function(){n.items().remove(),n.fire("loading")}),n.on("hide close",i)),n.requestTime=t=(new Date).getTime(),n.settings.itemsFactory(function(e){0!==e.length?n.requestTime===t&&(n.getEl().style.width="",n.getEl("body").style.width="",i(),n.items().remove(),n.getEl("body").innerHTML="",n.add(e),n.renderNew(),n.fire("loaded")):n.hide()}))},hideAll:function(){return this.find("menuitem").exec("hideMenu"),this._super()},preRender:function(){var n=this;return n.items().each(function(e){var t=e.settings;if(t.icon||t.image||t.selectable)return!(n._hasIcons=!0)}),n.settings.itemsFactory&&n.on("postrender",function(){n.settings.itemsFactory&&n.load()}),n.on("show hide",function(e){e.control===n&&("show"===e.type?u.setTimeout(function(){n.classes.add("in")},0):n.classes.remove("in"))}),n._super()}}),or=ir.extend({init:function(i){var t,r,o,n,s=this;s._super(i),i=s.settings,s._values=t=i.values,t&&("undefined"!=typeof i.value&&function e(t){for(var n=0;n").replace(new RegExp(c("]mce~match!"),"g"),"")}return s&&t.parent().classes.add("menu-has-icons"),i.image&&(a=" style=\"background-image: url('"+i.image+"')\""),l&&(l=function(e){var t,n,i={};for(i=de.mac?{alt:"⌥",ctrl:"⌘",shift:"⇧",meta:"⌘"}:{meta:"Ctrl"},e=e.split("+"),t=0;t\xa0":"",o=f(t.encode(d(o))),u=f(t.encode(d(u))),''+e+("-"!==o?'
'+o+"":"")+(l?'":"")+(i.menu?'
':"")+(u?'":"")+"
"},postRender:function(){var t=this,n=t.settings,e=n.textStyle;if("function"==typeof e&&(e=e.call(this)),e){var i=t.getEl("text");i&&(i.setAttribute("style",e),t._textStyle=e)}return t.on("mouseenter click",function(e){e.control===t&&(n.menu||"click"!==e.type?(t.showMenu(),e.aria&&t.menu.focus(!0)):(t.fire("select"),u.requestAnimationFrame(function(){t.parent().hideAll()})))}),t._super(),t},hover:function(){return this.parent().items().each(function(e){e.classes.remove("selected")}),this.classes.toggle("selected",!0),this},active:function(e){return function(e,t){var n=e._textStyle;if(n){var i=e.getEl("text");i.setAttribute("style",n),t&&(i.style.color="",i.style.backgroundColor="")}}(this,e),void 0!==e&&this.aria("checked",e),this._super(e)},remove:function(){this._super(),this.menu&&this.menu.remove()}}),ar=Zt.extend({Defaults:{classes:"radio",role:"radio"}}),lr=Pt.extend({renderHtml:function(){var e=this,t=e.classPrefix;return e.classes.add("resizehandle"),"both"===e.settings.direction&&e.classes.add("resizehandle-both"),e.canFocus=!1,'
'},postRender:function(){var t=this;t._super(),t.resizeDragHelper=new dt(this._id,{start:function(){t.fire("ResizeStart")},drag:function(e){"both"!==t.settings.direction&&(e.deltaX=0),t.fire("Resize",e)},stop:function(){t.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}});function ur(e){var t="";if(e)for(var n=0;n'+e[n]+"";return t}var cr=Pt.extend({Defaults:{classes:"selectbox",role:"selectbox",options:[]},init:function(e){var n=this;n._super(e),n.settings.size&&(n.size=n.settings.size),n.settings.options&&(n._options=n.settings.options),n.on("keydown",function(e){var t;13===e.keyCode&&(e.preventDefault(),n.parents().reverse().each(function(e){if(e.toJSON)return t=e,!1}),n.fire("submit",{data:t.toJSON()}))})},options:function(e){return arguments.length?(this.state.set("options",e),this):this.state.get("options")},renderHtml:function(){var e,t=this,n="";return e=ur(t._options),t.size&&(n=' size = "'+t.size+'"'),'"},bindStates:function(){var t=this;return t.state.on("change:options",function(e){t.getEl().innerHTML=ur(e.value)}),t._super()}});function dr(e,t,n){return e'},reset:function(){this.value(this._initValue).repaint()},postRender:function(){var e,t,n,i,r,o,s,a,l,u,c,d,f,h,m=this;e=m._minValue,t=m._maxValue,"v"===m.settings.orientation?(n="screenY",i="top",r="height",o="h"):(n="screenX",i="left",r="width",o="w"),m._super(),function(o,s){function t(e){var t,n,i,r;t=dr(t=(((t=m.value())+(r=n=o))/((i=s)-r)+.05*e)*(i-n)-n,o,s),m.value(t),m.fire("dragstart",{value:t}),m.fire("drag",{value:t}),m.fire("dragend",{value:t})}m.on("keydown",function(e){switch(e.keyCode){case 37:case 38:t(-1);break;case 39:case 40:t(1)}})}(e,t),s=e,a=t,l=m.getEl("handle"),m._dragHelper=new dt(m._id,{handle:m._id+"-handle",start:function(e){u=e[n],c=parseInt(m.getEl("handle").style[i],10),d=(m.layoutRect()[o]||100)-_e.getSize(l)[r],m.fire("dragstart",{value:h})},drag:function(e){var t=e[n]-u;f=dr(c+t,0,d),l.style[i]=f+"px",h=s+f/d*(a-s),m.value(h),m.tooltip().text(""+m.settings.previewFilter(h)).show().moveRel(l,"bc tc"),m.fire("drag",{value:h})},stop:function(){m.tooltip().hide(),m.fire("dragend",{value:h})}})},repaint:function(){this._super(),hr(this,this.value())},bindStates:function(){var t=this;return t.state.on("change:value",function(e){hr(t,e.value)}),t._super()}}),gr=Pt.extend({renderHtml:function(){return this.classes.add("spacer"),this.canFocus=!1,''}}),pr=ir.extend({Defaults:{classes:"widget btn splitbtn",role:"button"},repaint:function(){var e,t,n=this.getEl(),i=this.layoutRect();return this._super(),e=n.firstChild,t=n.lastChild,xe(e).css({width:i.w-_e.getSize(t).width,height:i.h-2}),xe(t).css({height:i.h-2}),this},activeMenu:function(e){xe(this.getEl().lastChild).toggleClass(this.classPrefix+"active",e)},renderHtml:function(){var e,t,n=this,i=n._id,r=n.classPrefix,o=n.state.get("icon"),s=n.state.get("text"),a=n.settings,l="";return(e=a.image)?(o="none","string"!=typeof e&&(e=window.getSelection?e[0]:e[1]),e=" style=\"background-image: url('"+e+"')\""):e="",o=a.icon?r+"ico "+r+"i-"+o:"",s&&(n.classes.add("btn-has-text"),l=''+n.encode(s)+""),t="boolean"==typeof a.active?' aria-pressed="'+a.active+'"':"",''},postRender:function(){var n=this.settings.onclick;return this.on("click",function(e){var t=e.target;if(e.control===this)for(;t;){if(e.aria&&"down"!==e.aria.key||"BUTTON"===t.nodeName&&-1===t.className.indexOf("open"))return e.stopImmediatePropagation(),void(n&&n.call(this,e));t=t.parentNode}}),delete this.settings.onclick,this._super()}}),vr=wi.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"},isNative:function(){return!0}}),br=vt.extend({Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(n){var e;this.activeTabId&&(e=this.getEl(this.activeTabId),xe(e).removeClass(this.classPrefix+"active"),e.setAttribute("aria-selected","false")),this.activeTabId="t"+n,(e=this.getEl("t"+n)).setAttribute("aria-selected","true"),xe(e).addClass(this.classPrefix+"active"),this.items()[n].show().fire("showtab"),this.reflow(),this.items().each(function(e,t){n!==t&&e.hide()})},renderHtml:function(){var i=this,e=i._layout,r="",o=i.classPrefix;return i.preRender(),e.preRender(i),i.items().each(function(e,t){var n=i._id+"-t"+t;e.aria("role","tabpanel"),e.aria("labelledby",n),r+=''+i.encode(e.settings.title)+"
"}),'"},postRender:function(){var i=this;i._super(),i.settings.activeTab=i.settings.activeTab||0,i.activateTab(i.settings.activeTab),this.on("click",function(e){var t=e.target.parentNode;if(t&&t.id===i._id+"-head")for(var n=t.childNodes.length;n--;)t.childNodes[n]===e.target&&i.activateTab(n)})},initLayoutRect:function(){var e,t,n,i=this;t=(t=_e.getSize(i.getEl("head")).width)<0?0:t,n=0,i.items().each(function(e){t=Math.max(t,e.layoutRect().minW),n=Math.max(n,e.layoutRect().minH)}),i.items().each(function(e){e.settings.x=0,e.settings.y=0,e.settings.w=t,e.settings.h=n,e.layoutRect({x:0,y:0,w:t,h:n})});var r=_e.getSize(i.getEl("head")).height;return i.settings.minWidth=t,i.settings.minHeight=n+r,(e=i._super()).deltaH+=r,e.innerH=e.h-e.deltaH,e}}),yr=Pt.extend({init:function(e){var n=this;n._super(e),n.classes.add("textbox"),e.multiline?n.classes.add("multiline"):(n.on("keydown",function(e){var t;13===e.keyCode&&(e.preventDefault(),n.parents().reverse().each(function(e){if(e.toJSON)return t=e,!1}),n.fire("submit",{data:t.toJSON()}))}),n.on("keyup",function(e){n.state.set("value",e.target.value)}))},repaint:function(){var e,t,n,i,r,o=this,s=0;e=o.getEl().style,t=o._layoutRect,r=o._lastRepaintRect||{};var a=document;return!o.settings.multiline&&a.all&&(!a.documentMode||a.documentMode<=8)&&(e.lineHeight=t.h-s+"px"),i=(n=o.borderBox).left+n.right+8,s=n.top+n.bottom+(o.settings.multiline?8:0),t.x!==r.x&&(e.left=t.x+"px",r.x=t.x),t.y!==r.y&&(e.top=t.y+"px",r.y=t.y),t.w!==r.w&&(e.width=t.w-i+"px",r.w=t.w),t.h!==r.h&&(e.height=t.h-s+"px",r.h=t.h),o._lastRepaintRect=r,o.fire("repaint",{},!1),o},renderHtml:function(){var t,e,n=this,i=n.settings;return t={id:n._id,hidefocus:"1"},w.each(["rows","spellcheck","maxLength","size","readonly","min","max","step","list","pattern","placeholder","required","multiple"],function(e){t[e]=i[e]}),n.disabled()&&(t.disabled="disabled"),i.subtype&&(t.type=i.subtype),(e=_e.create(i.multiline?"textarea":"input",t)).value=n.state.get("value"),e.className=n.classes.toString(),e.outerHTML},value:function(e){return arguments.length?(this.state.set("value",e),this):(this.state.get("rendered")&&this.state.set("value",this.getEl().value),this.state.get("value"))},postRender:function(){var t=this;t.getEl().value=t.state.get("value"),t._super(),t.$el.on("change",function(e){t.state.set("value",e.target.value),t.fire("change",e)})},bindStates:function(){var t=this;return t.state.on("change:value",function(e){t.getEl().value!==e.value&&(t.getEl().value=e.value)}),t.state.on("change:disabled",function(e){t.getEl().disabled=e.value}),t._super()},remove:function(){this.$el.off(),this._super()}}),xr=function(){return{Selector:Fe,Collection:Ye,ReflowQueue:Ze,Control:ot,Factory:b,KeyboardNavigation:at,Container:ut,DragHelper:dt,Scrollable:pt,Panel:vt,Movable:Se,Resizable:bt,FloatPanel:Et,Window:Ft,MessageBox:$t,Tooltip:Nt,Widget:Pt,Progress:Wt,Notification:Ot,Layout:Xt,AbsoluteLayout:jt,Button:Jt,ButtonGroup:Kt,Checkbox:Zt,ComboBox:en,ColorBox:tn,PanelButton:nn,ColorButton:on,ColorPicker:an,Path:un,ElementPath:cn,FormItem:dn,Form:fn,FieldSet:hn,FilePicker:bi,FitLayout:yi,FlexLayout:xi,FlowLayout:wi,FormatControls:Gi,GridLayout:Ki,Iframe:Zi,InfoBox:Qi,Label:er,Toolbar:tr,MenuBar:nr,MenuButton:ir,MenuItem:sr,Throbber:St,Menu:rr,ListBox:or,Radio:ar,ResizeHandle:lr,SelectBox:cr,Slider:mr,Spacer:gr,SplitButton:pr,StackLayout:vr,TabPanel:br,TextBox:yr,DropZone:ln,BrowseButton:Gt}},wr=function(n){n.ui?w.each(xr(),function(e,t){n.ui[t]=e}):n.ui=xr()};w.each(xr(),function(e,t){b.add(t,e)}),wr(window.tinymce?window.tinymce:{}),o.add("modern",function(e){return Gi.setup(e),qt(e)})}();
diff --git a/public/assets/tinymce/themes/modern/theme-17b1c26a5228e485e18dfcdf763d08b4546836a017ae7b0225ea47706171f10b.js.gz b/public/assets/tinymce/themes/modern/theme-17b1c26a5228e485e18dfcdf763d08b4546836a017ae7b0225ea47706171f10b.js.gz
new file mode 100644
index 00000000..bf9cd144
Binary files /dev/null and b/public/assets/tinymce/themes/modern/theme-17b1c26a5228e485e18dfcdf763d08b4546836a017ae7b0225ea47706171f10b.js.gz differ
diff --git a/public/assets/tinymce/themes/modern/theme-5cc969a29b5a13fd548061371e12843a7027ab8cc6b35f95e2df52ea1b221a5e.js b/public/assets/tinymce/themes/modern/theme-5cc969a29b5a13fd548061371e12843a7027ab8cc6b35f95e2df52ea1b221a5e.js
deleted file mode 100644
index b98487f4..00000000
--- a/public/assets/tinymce/themes/modern/theme-5cc969a29b5a13fd548061371e12843a7027ab8cc6b35f95e2df52ea1b221a5e.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(){"use strict";var e,t,n,i,r,o=tinymce.util.Tools.resolve("tinymce.ThemeManager"),h=tinymce.util.Tools.resolve("tinymce.EditorManager"),w=tinymce.util.Tools.resolve("tinymce.util.Tools"),d=function(e){return!1!==c(e)},c=function(e){return e.getParam("menubar")},f=function(e){return e.getParam("toolbar_items_size")},m=function(e){return e.getParam("menu")},g=function(e){return!1===e.settings.skin},p=function(e){var t=e.getParam("resize","vertical");return!1===t?"none":"both"===t?"both":"vertical"},v=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),b=tinymce.util.Tools.resolve("tinymce.ui.Factory"),y=tinymce.util.Tools.resolve("tinymce.util.I18n"),s=function(e){return e.fire("SkinLoaded")},x=function(e){return e.fire("ResizeEditor")},_=function(e){return e.fire("BeforeRenderUI")},a=function(t,n){return function(){var e=t.find(n)[0];e&&e.focus(!0)}},C=function(e,t){e.shortcuts.add("Alt+F9","",a(t,"menubar")),e.shortcuts.add("Alt+F10,F10","",a(t,"toolbar")),e.shortcuts.add("Alt+F11","",a(t,"elementpath")),t.on("cancel",function(){e.focus()})},R=tinymce.util.Tools.resolve("tinymce.geom.Rect"),u=tinymce.util.Tools.resolve("tinymce.util.Delay"),E=function(){for(var e=[],t=0;ttinymce']),u=t.getParam("branding",!0,"boolean")?{type:"label",classes:"branding",html:" "+l}:null;i.add({type:"panel",name:"statusbar",classes:"statusbar",layout:"flow",border:"1 0 0 0",ariaRoot:!0,items:[{type:"elementpath",editor:t},r,u]})}return _(t),t.on("SwitchMode",(a=i,function(e){a.find("*").disabled("readonly"===e.mode)})),i.renderBefore(n.targetNode).reflow(),t.getParam("readonly",!1,"boolean")&&t.setMode("readonly"),n.width&&be.setStyle(i.getEl(),"width",n.width),t.on("remove",function(){i.remove(),i=null}),C(t,i),V(t),{iframeContainer:i.find("#iframe")[0].getEl(),editorContainer:i.getEl()}},we=tinymce.util.Tools.resolve("tinymce.dom.DomQuery"),_e=0,Ce={id:function(){return"mceu_"+_e++},create:function(e,t,n){var i=document.createElement(e);return v.DOM.setAttribs(i,t),"string"==typeof n?i.innerHTML=n:w.each(n,function(e){e.nodeType&&i.appendChild(e)}),i},createFragment:function(e){return v.DOM.createFragment(e)},getWindowSize:function(){return v.DOM.getViewPort()},getSize:function(e){var t,n;if(e.getBoundingClientRect){var i=e.getBoundingClientRect();t=Math.max(i.width||i.right-i.left,e.offsetWidth),n=Math.max(i.height||i.bottom-i.bottom,e.offsetHeight)}else t=e.offsetWidth,n=e.offsetHeight;return{width:t,height:n}},getPos:function(e,t){return v.DOM.getPos(e,t||Ce.getContainer())},getContainer:function(){return fe.container?fe.container:document.body},getViewPort:function(e){return v.DOM.getViewPort(e)},get:function(e){return document.getElementById(e)},addClass:function(e,t){return v.DOM.addClass(e,t)},removeClass:function(e,t){return v.DOM.removeClass(e,t)},hasClass:function(e,t){return v.DOM.hasClass(e,t)},toggleClass:function(e,t,n){return v.DOM.toggleClass(e,t,n)},css:function(e,t,n){return v.DOM.setStyle(e,t,n)},getRuntimeStyle:function(e,t){return v.DOM.getStyle(e,t,!0)},on:function(e,t,n,i){return v.DOM.bind(e,t,n,i)},off:function(e,t,n){return v.DOM.unbind(e,t,n)},fire:function(e,t,n){return v.DOM.fire(e,t,n)},innerHtml:function(e,t){v.DOM.setHTML(e,t)}},Re=function(e){return"static"===Ce.getRuntimeStyle(e,"position")},Ee=function(e){return e.state.get("fixed")};function ke(e,t,n){var i,r,o,s,a,l,u,c,d,f;return d=Te(),o=(r=Ce.getPos(t,O.getUiContainer(e))).x,s=r.y,Ee(e)&&Re(document.body)&&(o-=d.x,s-=d.y),i=e.getEl(),a=(f=Ce.getSize(i)).width,l=f.height,u=(f=Ce.getSize(t)).width,c=f.height,"b"===(n=(n||"").split(""))[0]&&(s+=c),"r"===n[1]&&(o+=u),"c"===n[0]&&(s+=Math.round(c/2)),"c"===n[1]&&(o+=Math.round(u/2)),"b"===n[3]&&(s-=l),"r"===n[4]&&(o-=a),"c"===n[3]&&(s-=Math.round(l/2)),"c"===n[4]&&(o-=Math.round(a/2)),{x:o,y:s,w:a,h:l}}var Te=function(){var e=window,t=Math.max(e.pageXOffset,document.body.scrollLeft,document.documentElement.scrollLeft),n=Math.max(e.pageYOffset,document.body.scrollTop,document.documentElement.scrollTop);return{x:t,y:n,w:t+(e.innerWidth||document.documentElement.clientWidth),h:n+(e.innerHeight||document.documentElement.clientHeight)}},He=function(e){var t,n=O.getUiContainer(e);return n&&!Ee(e)?{x:0,y:0,w:(t=n).scrollWidth-1,h:t.scrollHeight-1}:Te()},Se={testMoveRel:function(e,t){for(var n=He(this),i=0;in.x&&r.x+r.wn.y&&r.y+r.h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,Fe=/^\s*|\s*$/g,Ue=Me.extend({init:function(e){var o=this.match;function s(e,t,n){var i;function r(e){e&&t.push(e)}return r(function(t){if(t)return t=t.toLowerCase(),function(e){return"*"===t||e.type===t}}((i=Ie.exec(e.replace(Fe,"")))[1])),r(function(t){if(t)return function(e){return e._name===t}}(i[2])),r(function(n){if(n)return n=n.split("."),function(e){for(var t=n.length;t--;)if(!e.classes.contains(n[t]))return!1;return!0}}(i[3])),r(function(n,i,r){if(n)return function(e){var t=e[n]?e[n]():"";return i?"="===i?t===r:"*="===i?0<=t.indexOf(r):"~="===i?0<=(" "+t+" ").indexOf(" "+r+" "):"!="===i?t!==r:"^="===i?0===t.indexOf(r):"$="===i&&t.substr(t.length-r.length)===r:!!r}}(i[4],i[5],i[6])),r(function(i){var t;if(i)return(i=/(?:not\((.+)\))|(.+)/i.exec(i))[1]?(t=a(i[1],[]),function(e){return!o(e,t)}):(i=i[2],function(e,t,n){return"first"===i?0===t:"last"===i?t===n-1:"even"===i?t%2==0:"odd"===i?t%2==1:!!e[i]&&e[i]()})}(i[7])),t.pseudo=!!i[7],t.direct=n,t}function a(e,t){var n,i,r,o=[];do{if(ze.exec(""),(i=ze.exec(e))&&(e=i[3],o.push(i[1]),i[2])){n=i[3];break}}while(i);for(n&&a(n,t),e=[],r=0;r"!==o[r]&&e.push(s(o[r],[],">"===o[r-1]));return t.push(e),t}this._selectors=a(e,[])},match:function(e,t){var n,i,r,o,s,a,l,u,c,d,f,h,m;for(n=0,i=(t=t||this._selectors).length;na.maxW?a.maxW:n,a.w=n,a.innerW=n-i),(n=e.h)!==undefined&&(n=(n=na.maxH?a.maxH:n,a.h=n,a.innerH=n-r),(n=e.innerW)!==undefined&&(n=(n=na.maxW-i?a.maxW-i:n,a.innerW=n,a.w=n+i),(n=e.innerH)!==undefined&&(n=(n=na.maxH-r?a.maxH-r:n,a.innerH=n,a.h=n+r),e.contentW!==undefined&&(a.contentW=e.contentW),e.contentH!==undefined&&(a.contentH=e.contentH),(t=s._lastLayoutRect).x===a.x&&t.y===a.y&&t.w===a.w&&t.h===a.h||((o=Ge.repaintControls)&&o.map&&!o.map[s._id]&&(o.push(s),o.map[s._id]=!0),t.x=a.x,t.y=a.y,t.w=a.w,t.h=a.h),s):a},repaint:function(){var e,t,n,i,r,o,s,a,l,u,c=this;l=document.createRange?function(e){return e}:Math.round,e=c.getEl().style,i=c._layoutRect,a=c._lastRepaintRect||{},o=(r=c.borderBox).left+r.right,s=r.top+r.bottom,i.x!==a.x&&(e.left=l(i.x)+"px",a.x=i.x),i.y!==a.y&&(e.top=l(i.y)+"px",a.y=i.y),i.w!==a.w&&(u=l(i.w-o),e.width=(0<=u?u:0)+"px",a.w=i.w),i.h!==a.h&&(u=l(i.h-s),e.height=(0<=u?u:0)+"px",a.h=i.h),c._hasBody&&i.innerW!==a.innerW&&(u=l(i.innerW),(n=c.getEl("body"))&&((t=n.style).width=(0<=u?u:0)+"px"),a.innerW=i.innerW),c._hasBody&&i.innerH!==a.innerH&&(u=l(i.innerH),(n=n||c.getEl("body"))&&((t=t||n.style).height=(0<=u?u:0)+"px"),a.innerH=i.innerH),c._lastRepaintRect=a,c.fire("repaint",{},!1)},updateLayoutRect:function(){var e=this;e.parent()._lastRect=null,Ce.css(e.getEl(),{width:"",height:""}),e._layoutRect=e._lastRepaintRect=e._lastLayoutRect=null,e.initLayoutRect()},on:function(e,t){var n,i,r,o=this;return rt(o).on(e,"string"!=typeof(n=t)?n:function(e){return i||o.parentsAndSelf().each(function(e){var t=e.settings.callbacks;if(t&&(i=t[n]))return r=e,!1}),i?i.call(r,e):(e.action=n,void this.fire("execute",e))}),o},off:function(e,t){return rt(this).off(e,t),this},fire:function(e,t,n){if((t=t||{}).control||(t.control=this),t=rt(this).fire(e,t),!1!==n&&this.parent)for(var i=this.parent();i&&!t.isPropagationStopped();)i.fire(e,t,!1),i=i.parent();return t},hasEventListeners:function(e){return rt(this).has(e)},parents:function(e){var t,n=new $e;for(t=this.parent();t;t=t.parent())n.add(t);return e&&(n=n.filter(e)),n},parentsAndSelf:function(e){return new $e(this).add(this.parents(e))},next:function(){var e=this.parent().items();return e[e.indexOf(this)+1]},prev:function(){var e=this.parent().items();return e[e.indexOf(this)-1]},innerHtml:function(e){return this.$el.html(e),this},getEl:function(e){var t=e?this._id+"-"+e:this._id;return this._elmCache[t]||(this._elmCache[t]=we("#"+t)[0]),this._elmCache[t]},show:function(){return this.visible(!0)},hide:function(){return this.visible(!1)},focus:function(){try{this.getEl().focus()}catch(e){}return this},blur:function(){return this.getEl().blur(),this},aria:function(e,t){var n=this,i=n.getEl(n.ariaTarget);return void 0===t?n._aria[e]:(n._aria[e]=t,n.state.get("rendered")&&i.setAttribute("role"===e?e:"aria-"+e,t),n)},encode:function(e,t){return!1!==t&&(e=this.translate(e)),(e||"").replace(/[&<>"]/g,function(e){return""+e.charCodeAt(0)+";"})},translate:function(e){return Ge.translate?Ge.translate(e):e},before:function(e){var t=this.parent();return t&&t.insert(e,t.items().indexOf(this),!0),this},after:function(e){var t=this.parent();return t&&t.insert(e,t.items().indexOf(this)),this},remove:function(){var t,e,n=this,i=n.getEl(),r=n.parent();if(n.items){var o=n.items().toArray();for(e=o.length;e--;)o[e].remove()}r&&r.items&&(t=[],r.items().each(function(e){e!==n&&t.push(e)}),r.items().set(t),r._lastRect=null),n._eventsRoot&&n._eventsRoot===n&&we(i).off();var s=n.getRoot().controlIdLookup;return s&&delete s[n._id],i&&i.parentNode&&i.parentNode.removeChild(i),n.state.set("rendered",!1),n.state.destroy(),n.fire("remove"),n},renderBefore:function(e){return we(e).before(this.renderHtml()),this.postRender(),this},renderTo:function(e){return we(e||this.getContainerElm()).append(this.renderHtml()),this.postRender(),this},preRender:function(){},render:function(){},renderHtml:function(){return''},postRender:function(){var e,t,n,i,r,o=this,s=o.settings;for(i in o.$el=we(o.getEl()),o.state.set("rendered",!0),s)0===i.indexOf("on")&&o.on(i.substr(2),s[i]);if(o._eventsRoot){for(n=o.parent();!r&&n;n=n.parent())r=n._eventsRoot;if(r)for(i in r._nativeEvents)o._nativeEvents[i]=!0}ot(o),s.style&&(e=o.getEl())&&(e.setAttribute("style",s.style),e.style.cssText=s.style),o.settings.border&&(t=o.borderBox,o.$el.css({"border-top-width":t.top,"border-right-width":t.right,"border-bottom-width":t.bottom,"border-left-width":t.left}));var a=o.getRoot();for(var l in a.controlIdLookup||(a.controlIdLookup={}),(a.controlIdLookup[o._id]=o)._aria)o.aria(l,o._aria[l]);!1===o.state.get("visible")&&(o.getEl().style.display="none"),o.bindStates(),o.state.on("change:visible",function(e){var t,n=e.value;o.state.get("rendered")&&(o.getEl().style.display=!1===n?"none":"",o.getEl().getBoundingClientRect()),(t=o.parent())&&(t._lastRect=null),o.fire(n?"show":"hide"),Qe.add(o)}),o.fire("postrender",{},!1)},bindStates:function(){},scrollIntoView:function(e){var t,n,i,r,o,s,a=this.getEl(),l=a.parentNode,u=function(e,t){var n,i,r=e;for(n=i=0;r&&r!==t&&r.nodeType;)n+=r.offsetLeft||0,i+=r.offsetTop||0,r=r.offsetParent;return{x:n,y:i}}(a,l);return t=u.x,n=u.y,i=a.offsetWidth,r=a.offsetHeight,o=l.clientWidth,s=l.clientHeight,"end"===e?(t-=o-i,n-=s-r):"center"===e&&(t-=o/2-i/2,n-=s/2-r/2),l.scrollLeft=t,l.scrollTop=n,this},getRoot:function(){for(var e,t=this,n=[];t;){if(t.rootControl){e=t.rootControl;break}n.push(t),t=(e=t).parent()}e||(e=this);for(var i=n.length;i--;)n[i].rootControl=e;return e},reflow:function(){Qe.remove(this);var e=this.parent();return e&&e._layout&&!e._layout.isNative()&&e.reflow(),this}};function rt(n){return n._eventDispatcher||(n._eventDispatcher=new Ne({scope:n,toggleEvent:function(e,t){t&&Ne.isNative(e)&&(n._nativeEvents||(n._nativeEvents={}),n._nativeEvents[e]=!0,n.state.get("rendered")&&ot(n))}})),n._eventDispatcher}function ot(a){var e,t,n,l,i,r;function o(e){var t=a.getParentCtrl(e.target);t&&t.fire(e.type,e)}function s(){var e=l._lastHoverCtrl;e&&(e.fire("mouseleave",{target:e.getEl()}),e.parents().each(function(e){e.fire("mouseleave",{target:e.getEl()})}),l._lastHoverCtrl=null)}function u(e){var t,n,i,r=a.getParentCtrl(e.target),o=l._lastHoverCtrl,s=0;if(r!==o){if((n=(l._lastHoverCtrl=r).parents().toArray().reverse()).push(r),o){for((i=o.parents().toArray().reverse()).push(o),s=0;s=t.length&&(e=0),t[e]&&t[e].focus(),e}function h(e,t){var n=-1,i=d();t=t||c(i.getEl());for(var r=0;r'+(e.settings.html||"")+t.renderHtml(e)+"
"},postRender:function(){var e,t=this;return t.items().exec("postRender"),t._super(),t._layout.postRender(t),t.state.set("rendered",!0),t.settings.style&&t.$el.css(t.settings.style),t.settings.border&&(e=t.borderBox,t.$el.css({"border-top-width":e.top,"border-right-width":e.right,"border-bottom-width":e.bottom,"border-left-width":e.left})),t.parent()||(t.keyboardNav=lt({root:t})),t},initLayoutRect:function(){var e=this._super();return this._layout.recalc(this),e},recalc:function(){var e=this,t=e._layoutRect,n=e._lastRect;if(!n||n.w!==t.w||n.h!==t.h)return e._layout.recalc(e),t=e.layoutRect(),e._lastRect={x:t.x,y:t.y,w:t.w,h:t.h},!0},reflow:function(){var e;if(Qe.remove(this),this.visible()){for(st.repaintControls=[],st.repaintControls.map={},this.recalc(),e=st.repaintControls.length;e--;)st.repaintControls[e].repaint();"flow"!==this.settings.layout&&"stack"!==this.settings.layout&&this.repaint(),st.repaintControls=[]}return this}});function dt(e){var t,n;if(e.changedTouches)for(t="screenX screenY pageX pageY clientX clientY".split(" "),n=0;n").css({position:"absolute",top:0,left:0,width:f.width,height:f.height,zIndex:2147483647,opacity:1e-4,cursor:d}).appendTo(x.body),we(x).on("mousemove touchmove",v).on("mouseup touchend",p),h.start(e)},v=function(e){if(dt(e),e.button!==g)return p(e);e.deltaX=e.screenX-b,e.deltaY=e.screenY-y,e.preventDefault(),h.drag(e)},p=function(e){dt(e),we(x).off("mousemove touchmove",v).off("mouseup touchend",p),m.remove(),h.stop&&h.stop(e)},this.destroy=function(){we(w).off()},we(w).on("mousedown touchstart",t)}var ht,mt,gt,pt,vt={init:function(){this.on("repaint",this.renderScroll)},renderScroll:function(){var p=this,v=2;function n(){var m,g,e;function t(e,t,n,i,r,o){var s,a,l,u,c,d,f,h;if(a=p.getEl("scroll"+e)){if(f=t.toLowerCase(),h=n.toLowerCase(),we(p.getEl("absend")).css(f,p.layoutRect()[i]-1),!r)return void we(a).css("display","none");we(a).css("display","block"),s=p.getEl("body"),l=p.getEl("scroll"+e+"t"),u=s["client"+n]-2*v,c=(u-=m&&g?a["client"+o]:0)/s["scroll"+n],(d={})[f]=s["offset"+t]+v,d[h]=u,we(a).css(d),(d={})[f]=s["scroll"+t]*c,d[h]=u*c,we(l).css(d)}}e=p.getEl("body"),m=e.scrollWidth>e.clientWidth,g=e.scrollHeight>e.clientHeight,t("h","Left","Width","contentW",m,"Height"),t("v","Top","Height","contentH",g,"Width")}p.settings.autoScroll&&(p._hasScroll||(p._hasScroll=!0,function(){function e(s,a,l,u,c){var d,e=p._id+"-scroll"+s,t=p.classPrefix;we(p.getEl()).append(''),p.draghelper=new ft(e+"t",{start:function(){d=p.getEl("body")["scroll"+a],we("#"+e).addClass(t+"active")},drag:function(e){var t,n,i,r,o=p.layoutRect();n=o.contentW>o.innerW,i=o.contentH>o.innerH,r=p.getEl("body")["client"+l]-2*v,t=(r-=n&&i?p.getEl("scroll"+s)["client"+c]:0)/p.getEl("body")["scroll"+l],p.getEl("body")["scroll"+a]=d+e["delta"+u]/t},stop:function(){we("#"+e).removeClass(t+"active")}})}p.classes.add("scroll"),e("v","Top","Height","Y","Width"),e("h","Left","Width","X","Height")}(),p.on("wheel",function(e){var t=p.getEl("body");t.scrollLeft+=10*(e.deltaX||0),t.scrollTop+=10*e.deltaY,n()}),we(p.getEl("body")).on("scroll",n)),n())}},bt=ct.extend({Defaults:{layout:"fit",containerCls:"panel"},Mixins:[vt],renderHtml:function(){var e=this,t=e._layout,n=e.settings.html;return e.preRender(),t.preRender(e),void 0===n?n=''+t.renderHtml(e)+"
":("function"==typeof n&&(n=n.call(e)),e._hasBody=!1),''+(e._preBodyHtml||"")+n+"
"}}),yt={resizeToContent:function(){this._layoutRect.autoResize=!0,this._lastRect=null,this.reflow()},resizeTo:function(e,t){if(e<=1||t<=1){var n=Ce.getWindowSize();e=e<=1?e*n.w:e,t=t<=1?t*n.h:t}return this._layoutRect.autoResize=!1,this.layoutRect({minW:e,minH:t,w:e,h:t}).reflow()},resizeBy:function(e,t){var n=this.layoutRect();return this.resizeTo(n.w+e,n.h+t)}},xt=[],wt=[];function _t(e,t){for(;e;){if(e===t)return!0;e=e.parent()}}function Ct(){ht||(ht=function(e){2!==e.button&&function(e){for(var t=xt.length;t--;){var n=xt[t],i=n.getParentCtrl(e.target);if(n.settings.autohide){if(i&&(_t(i,n)||n.parent()===i))continue;(e=n.fire("autohide",{target:e.target})).isDefaultPrevented()||n.hide()}}}(e)},we(document).on("click touchstart",ht))}function Rt(r){var e=Ce.getViewPort().y;function t(e,t){for(var n,i=0;ie&&(r.fixed(!1).layoutRect({y:r._autoFixY}).repaint(),t(!1,r._autoFixY-e)):(r._autoFixY=r.layoutRect().y,r._autoFixY').appendTo(i.getContainerElm())),u.setTimeout(function(){t.addClass(n+"in"),we(i.getEl()).addClass(n+"in")}),pt=!0),Et(!0,i)}}),i.on("show",function(){i.parents().each(function(e){if(e.state.get("fixed"))return i.fixed(!0),!1})}),e.popover&&(i._preBodyHtml='',i.classes.add("popover").add("bottom").add(i.isRtl()?"end":"start")),i.aria("label",e.ariaLabel),i.aria("labelledby",i._id),i.aria("describedby",i.describedBy||i._id+"-none")},fixed:function(e){var t=this;if(t.state.get("fixed")!==e){if(t.state.get("rendered")){var n=Ce.getViewPort();e?t.layoutRect().y-=n.y:t.layoutRect().y+=n.y}t.classes.toggle("fixed",e),t.state.set("fixed",e)}return t},show:function(){var e,t=this._super();for(e=xt.length;e--&&xt[e]!==this;);return-1===e&&xt.push(this),t},hide:function(){return Tt(this),Et(!1,this),this._super()},hideAll:function(){kt.hideAll()},close:function(){return this.fire("close").isDefaultPrevented()||(this.remove(),Et(!1,this)),this},remove:function(){Tt(this),this._super()},postRender:function(){return this.settings.bodyRole&&this.getEl("body").setAttribute("role",this.settings.bodyRole),this._super()}});function Tt(e){var t;for(t=xt.length;t--;)xt[t]===e&&xt.splice(t,1);for(t=wt.length;t--;)wt[t]===e&&wt.splice(t,1)}kt.hideAll=function(){for(var e=xt.length;e--;){var t=xt[e];t&&t.settings.autohide&&(t.hide(),xt.splice(e,1))}};var Ht=function(s,n,e){var a,i,l=v.DOM,t=s.getParam("fixed_toolbar_container");t&&(i=l.select(t)[0]);var r=function(){if(a&&a.moveRel&&a.visible()&&!a._fixed){var e=s.selection.getScrollContainer(),t=s.getBody(),n=0,i=0;if(e){var r=l.getPos(t),o=l.getPos(e);n=Math.max(0,o.x-r.x),i=Math.max(0,o.y-r.y)}a.fixed(!1).moveRel(t,s.rtl?["tr-br","br-tr"]:["tl-bl","bl-tl","tr-br"]).moveBy(n,i)}},o=function(){a&&(a.show(),r(),l.addClass(s.getBody(),"mce-edit-focus"))},u=function(){a&&(a.hide(),kt.hideAll(),l.removeClass(s.getBody(),"mce-edit-focus"))},c=function(){var e,t;a?a.visible()||o():(a=n.panel=b.create({type:i?"panel":"floatpanel",role:"application",classes:"tinymce tinymce-inline",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:(e=i,t=s,!(!e||t.settings.ui_container)),border:1,items:[!1===d(s)?null:{type:"menubar",border:"0 0 1 0",items:se(s)},L(s,f(s))]}),O.setUiContainer(s,a),_(s),i?a.renderTo(i).reflow():a.renderTo().reflow(),C(s,a),o(),V(s),s.on("nodeChange",r),s.on("ResizeWindow",r),s.on("activate",o),s.on("deactivate",u),s.nodeChanged())};return s.settings.content_editable=!0,s.on("focus",function(){!1===g(s)&&e.skinUiCss?l.styleSheetLoader.load(e.skinUiCss,c,c):c()}),s.on("blur hide",u),s.on("remove",function(){a&&(a.remove(),a=null)}),!1===g(s)&&e.skinUiCss?l.styleSheetLoader.load(e.skinUiCss,ve(s)):ve(s)(),{}};function St(i,r){var o,s,a=this,l=st.classPrefix;a.show=function(e,t){function n(){o&&(we(i).append(''),t&&t())}return a.hide(),o=!0,e?s=u.setTimeout(n,e):n(),a},a.hide=function(){var e=i.lastChild;return u.clearTimeout(s),e&&-1!==e.className.indexOf("throbber")&&e.parentNode.removeChild(e),o=!1,a}}var Mt=function(e,t){var n;e.on("ProgressState",function(e){n=n||new St(t.panel.getEl("body")),e.state?n.show(e.time):n.hide()})},Nt=function(e,t,n){var i=function(e){var t=e.settings,n=t.skin,i=t.skin_url;if(!1!==n){var r=n||"lightgray";i=i?e.documentBaseURI.toAbsolute(i):h.baseURL+"/skins/"+r}return i}(e);return i&&(n.skinUiCss=i+"/skin.min.css",e.contentCSS.push(i+"/content"+(e.inline?".inline":"")+".min.css")),Mt(e,t),e.getParam("inline",!1,"boolean")?Ht(e,t,n):xe(e,t,n)},Pt=st.extend({Mixins:[Se],Defaults:{classes:"widget tooltip tooltip-n"},renderHtml:function(){var e=this,t=e.classPrefix;return''+e.encode(e.state.get("text"))+"
"},bindStates:function(){var t=this;return t.state.on("change:text",function(e){t.getEl().lastChild.innerHTML=t.encode(e.value)}),t._super()},repaint:function(){var e,t;e=this.getEl().style,t=this._layoutRect,e.left=t.x+"px",e.top=t.y+"px",e.zIndex=131070}}),Dt=st.extend({init:function(i){var r=this;r._super(i),i=r.settings,r.canFocus=!0,i.tooltip&&!1!==Dt.tooltips&&(r.on("mouseenter",function(e){var t=r.tooltip().moveTo(-65535);if(e.control===r){var n=t.text(i.tooltip).show().testMoveRel(r.getEl(),["bc-tc","bc-tl","bc-tr"]);t.classes.toggle("tooltip-n","bc-tc"===n),t.classes.toggle("tooltip-nw","bc-tl"===n),t.classes.toggle("tooltip-ne","bc-tr"===n),t.moveRel(r.getEl(),n)}else t.hide()}),r.on("mouseleave mousedown click",function(){r.tooltip().remove(),r._tooltip=null})),r.aria("label",i.ariaLabel||i.tooltip)},tooltip:function(){return this._tooltip||(this._tooltip=new Pt({type:"tooltip"}),O.inheritUiContainer(this,this._tooltip),this._tooltip.renderTo()),this._tooltip},postRender:function(){var e=this,t=e.settings;e._super(),e.parent()||!t.width&&!t.height||(e.initLayoutRect(),e.repaint()),t.autofocus&&e.focus()},bindStates:function(){var t=this;function n(e){t.aria("disabled",e),t.classes.toggle("disabled",e)}function i(e){t.aria("pressed",e),t.classes.toggle("active",e)}return t.state.on("change:disabled",function(e){n(e.value)}),t.state.on("change:active",function(e){i(e.value)}),t.state.get("disabled")&&n(!0),t.state.get("active")&&i(!0),t._super()},remove:function(){this._super(),this._tooltip&&(this._tooltip.remove(),this._tooltip=null)}}),Wt=Dt.extend({Defaults:{value:0},init:function(e){this._super(e),this.classes.add("progress"),this.settings.filter||(this.settings.filter=function(e){return Math.round(e)})},renderHtml:function(){var e=this._id,t=this.classPrefix;return''},postRender:function(){return this._super(),this.value(this.settings.value),this},bindStates:function(){var t=this;function n(e){e=t.settings.filter(e),t.getEl().lastChild.innerHTML=e+"%",t.getEl().firstChild.firstChild.style.width=e+"%"}return t.state.on("change:value",function(e){n(e.value)}),n(t.state.get("value")),t._super()}}),Ot=function(e,t){e.getEl().lastChild.textContent=t+(e.progressBar?" "+e.progressBar.value()+"%":"")},At=st.extend({Mixins:[Se],Defaults:{classes:"widget notification"},init:function(e){var t=this;t._super(e),t.maxWidth=e.maxWidth,e.text&&t.text(e.text),e.icon&&(t.icon=e.icon),e.color&&(t.color=e.color),e.type&&t.classes.add("notification-"+e.type),e.timeout&&(e.timeout<0||0'),e=' style="max-width: '+t.maxWidth+"px;"+(t.color?"background-color: "+t.color+';"':'"'),t.closeButton&&(r=''),t.progressBar&&(o=t.progressBar.renderHtml()),''+i+'
'+t.state.get("text")+"
"+o+r+'
'},postRender:function(){var e=this;return u.setTimeout(function(){e.$el.addClass(e.classPrefix+"in"),Ot(e,e.state.get("text"))},100),e._super()},bindStates:function(){var t=this;return t.state.on("change:text",function(e){t.getEl().firstChild.innerHTML=e.value,Ot(t,e.value)}),t.progressBar&&(t.progressBar.bindStates(),t.progressBar.state.on("change:value",function(e){Ot(t,t.state.get("text"))})),t._super()},close:function(){return this.fire("close").isDefaultPrevented()||this.remove(),this},repaint:function(){var e,t;e=this.getEl().style,t=this._layoutRect,e.left=t.x+"px",e.top=t.y+"px",e.zIndex=65534}});function Bt(o){var s=function(e){return e.inline?e.getElement():e.getContentAreaContainer()};return{open:function(e,t){var n,i=w.extend(e,{maxWidth:(n=s(o),Ce.getSize(n).width)}),r=new At(i);return 0<(r.args=i).timeout&&(r.timer=setTimeout(function(){r.close(),t()},i.timeout)),r.on("close",function(){t()}),r.renderTo(),r},close:function(e){e.close()},reposition:function(e){G(e,function(e){e.moveTo(0,0)}),function(n){if(0e.w&&(n=e.x-Math.max(0,t/2),r.layoutRect({w:t,x:n}),i=!0),o&&(o.layoutRect({w:r.layoutRect().innerW}).recalc(),(t=o.layoutRect().minW+e.deltaW)>e.w&&(n=e.x-Math.max(0,t-e.w),r.layoutRect({w:t,x:n}),i=!0)),i&&r.recalc()},initLayoutRect:function(){var e,t=this,n=t._super(),i=0;if(t.settings.title&&!t._fullscreen){e=t.getEl("head");var r=Ce.getSize(e);n.headerW=r.width,n.headerH=r.height,i+=n.headerH}t.statusbar&&(i+=t.statusbar.layoutRect().h),n.deltaH+=i,n.minH+=i,n.h+=i;var o=Ce.getWindowSize();return n.x=t.settings.x||Math.max(0,o.w/2-n.w/2),n.y=t.settings.y||Math.max(0,o.h/2-n.h/2),n},renderHtml:function(){var e=this,t=e._layout,n=e._id,i=e.classPrefix,r=e.settings,o="",s="",a=r.html;return e.preRender(),t.preRender(e),r.title&&(o=''),r.url&&(a=''),void 0===a&&(a=t.renderHtml(e)),e.statusbar&&(s=e.statusbar.renderHtml()),'"},fullscreen:function(e){var n,t,i=this,r=document.documentElement,o=i.classPrefix;if(e!==i._fullscreen)if(we(window).on("resize",function(){var e;if(i._fullscreen)if(n)i._timer||(i._timer=u.setTimeout(function(){var e=Ce.getWindowSize();i.moveTo(0,0).resizeTo(e.w,e.h),i._timer=0},50));else{e=(new Date).getTime();var t=Ce.getWindowSize();i.moveTo(0,0).resizeTo(t.w,t.h),50<(new Date).getTime()-e&&(n=!0)}}),t=i.layoutRect(),i._fullscreen=e){i._initial={x:t.x,y:t.y,w:t.w,h:t.h},i.borderBox=Pe("0"),i.getEl("head").style.display="none",t.deltaH-=t.headerH+2,we([r,document.body]).addClass(o+"fullscreen"),i.classes.add("fullscreen");var s=Ce.getWindowSize();i.moveTo(0,0).resizeTo(s.w,s.h)}else i.borderBox=Pe(i.settings.border),i.getEl("head").style.display="",t.deltaH+=t.headerH,we([r,document.body]).removeClass(o+"fullscreen"),i.classes.remove("fullscreen"),i.moveTo(i._initial.x,i._initial.y).resizeTo(i._initial.w,i._initial.h);return i.reflow()},postRender:function(){var t,n=this;setTimeout(function(){n.classes.add("in"),n.fire("open")},0),n._super(),n.statusbar&&n.statusbar.postRender(),n.focus(),this.dragHelper=new ft(n._id+"-dragh",{start:function(){t={x:n.layoutRect().x,y:n.layoutRect().y}},drag:function(e){n.moveTo(t.x+e.deltaX,t.y+e.deltaY)}}),n.on("submit",function(e){e.isDefaultPrevented()||n.close()}),Lt.push(n),zt(!0)},submit:function(){return this.fire("submit",{data:this.toJSON()})},remove:function(){var e,t=this;for(t.dragHelper.destroy(),t._super(),t.statusbar&&this.statusbar.remove(),Ft(t.classPrefix,!1),e=Lt.length;e--;)Lt[e]===t&&Lt.splice(e,1);zt(0'+this._super(e)}}),qt=Dt.extend({Defaults:{classes:"widget btn",role:"button"},init:function(e){var t,n=this;n._super(e),e=n.settings,t=n.settings.size,n.on("click mousedown",function(e){e.preventDefault()}),n.on("touchstart",function(e){n.fire("click",e),e.preventDefault()}),e.subtype&&n.classes.add(e.subtype),t&&n.classes.add("btn-"+t),e.icon&&n.icon(e.icon)},icon:function(e){return arguments.length?(this.state.set("icon",e),this):this.state.get("icon")},repaint:function(){var e,t=this.getEl().firstChild;t&&((e=t.style).width=e.height="100%"),this._super()},renderHtml:function(){var e,t,n=this,i=n._id,r=n.classPrefix,o=n.state.get("icon"),s=n.state.get("text"),a="",l=n.settings;return(e=l.image)?(o="none","string"!=typeof e&&(e=window.getSelection?e[0]:e[1]),e=" style=\"background-image: url('"+e+"')\""):e="",s&&(n.classes.add("btn-has-text"),a=''+n.encode(s)+""),o=o?r+"ico "+r+"i-"+o:"",t="boolean"==typeof l.active?' aria-pressed="'+l.active+'"':"",'"},bindStates:function(){var o=this,n=o.$,i=o.classPrefix+"txt";function s(e){var t=n("span."+i,o.getEl());e?(t[0]||(n("button:first",o.getEl()).append(''),t=n("span."+i,o.getEl())),t.html(o.encode(e))):t.remove(),o.classes.toggle("btn-has-text",!!e)}return o.state.on("change:text",function(e){s(e.value)}),o.state.on("change:icon",function(e){var t=e.value,n=o.classPrefix;t=(o.settings.icon=t)?n+"ico "+n+"i-"+o.settings.icon:"";var i=o.getEl().firstChild,r=i.getElementsByTagName("i")[0];t?(r&&r===i.firstChild||(r=document.createElement("i"),i.insertBefore(r,i.firstChild)),r.className=t):r&&i.removeChild(r),s(o.state.get("text"))}),o._super()}}),jt=qt.extend({init:function(e){e=w.extend({text:"Browse...",multiple:!1,accept:null},e),this._super(e),this.classes.add("browsebutton"),e.multiple&&this.classes.add("multiple")},postRender:function(){var n=this,t=Ce.create("input",{type:"file",id:n._id+"-browse",accept:n.settings.accept});n._super(),we(t).on("change",function(e){var t=e.target.files;n.value=function(){return t.length?n.settings.multiple?t:t[0]:null},e.preventDefault(),t.length&&n.fire("change",e)}),we(t).on("click",function(e){e.stopPropagation()}),we(n.getEl("button")).on("click",function(e){e.stopPropagation(),t.click()}),n.getEl().appendChild(t)},remove:function(){we(this.getEl("button")).off(),we(this.getEl("input")).off(),this._super()}}),Jt=ct.extend({Defaults:{defaultType:"button",role:"group"},renderHtml:function(){var e=this,t=e._layout;return e.classes.add("btn-group"),e.preRender(),t.preRender(e),''+(e.settings.html||"")+t.renderHtml(e)+"
"}}),Gt=Dt.extend({Defaults:{classes:"checkbox",role:"checkbox",checked:!1},init:function(e){var t=this;t._super(e),t.on("click mousedown",function(e){e.preventDefault()}),t.on("click",function(e){e.preventDefault(),t.disabled()||t.checked(!t.checked())}),t.checked(t.settings.checked)},checked:function(e){return arguments.length?(this.state.set("checked",e),this):this.state.get("checked")},value:function(e){return arguments.length?this.checked(e):this.checked()},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return''+e.encode(e.state.get("text"))+"
"},bindStates:function(){var o=this;function t(e){o.classes.toggle("checked",e),o.aria("checked",e)}return o.state.on("change:text",function(e){o.getEl("al").firstChild.data=o.translate(e.value)}),o.state.on("change:checked change:value",function(e){o.fire("change"),t(e.value)}),o.state.on("change:icon",function(e){var t=e.value,n=o.classPrefix;if(void 0===t)return o.settings.icon;t=(o.settings.icon=t)?n+"ico "+n+"i-"+o.settings.icon:"";var i=o.getEl().firstChild,r=i.getElementsByTagName("i")[0];t?(r&&r===i.firstChild||(r=document.createElement("i"),i.insertBefore(r,i.firstChild)),r.className=t):r&&i.removeChild(r)}),o.state.get("checked")&&t(!0),o._super()}}),Kt=tinymce.util.Tools.resolve("tinymce.util.VK"),Zt=Dt.extend({init:function(i){var r=this;r._super(i),i=r.settings,r.classes.add("combobox"),r.subinput=!0,r.ariaTarget="inp",i.menu=i.menu||i.values,i.menu&&(i.icon="caret"),r.on("click",function(e){var t=e.target,n=r.getEl();if(we.contains(n,t)||t===n)for(;t&&t!==n;)t.id&&-1!==t.id.indexOf("-open")&&(r.fire("action"),i.menu&&(r.showMenu(),e.aria&&r.menu.items()[0].focus())),t=t.parentNode}),r.on("keydown",function(e){var t;13===e.keyCode&&"INPUT"===e.target.nodeName&&(e.preventDefault(),r.parents().reverse().each(function(e){if(e.toJSON)return t=e,!1}),r.fire("submit",{data:t.toJSON()}))}),r.on("keyup",function(e){if("INPUT"===e.target.nodeName){var t=r.state.get("value"),n=e.target.value;n!==t&&(r.state.set("value",n),r.fire("autocomplete",e))}}),r.on("mouseover",function(e){var t=r.tooltip().moveTo(-65535);if(r.statusLevel()&&-1!==e.target.className.indexOf(r.classPrefix+"status")){var n=r.statusMessage()||"Ok",i=t.text(n).show().testMoveRel(e.target,["bc-tc","bc-tl","bc-tr"]);t.classes.toggle("tooltip-n","bc-tc"===i),t.classes.toggle("tooltip-nw","bc-tl"===i),t.classes.toggle("tooltip-ne","bc-tr"===i),t.moveRel(e.target,i)}})},statusLevel:function(e){return 0',i.disabled()&&(u+=' disabled="disabled"'),(e=o.icon)&&"caret"!==e&&(e=s+"ico "+s+"i-"+o.icon),t=i.state.get("text"),(e||t)&&(l='",i.classes.add("has-open")),''+n+l+"
"},value:function(e){return arguments.length?(this.state.set("value",e),this):(this.state.get("rendered")&&this.state.set("value",this.getEl("inp").value),this.state.get("value"))},showAutoComplete:function(e,i){var r=this;if(0!==e.length){r.menu?r.menu.items().remove():r.menu=b.create({type:"menu",classes:"combobox-menu",layout:"flow"}).parent(r).renderTo(),w.each(e,function(e){var t,n;r.menu.add({text:e.title,url:e.previewUrl,match:i,classes:"menu-item-ellipsis",onclick:(t=e.value,n=e.title,function(){r.fire("selectitem",{title:n,value:t})})})}),r.menu.renderNew(),r.hideMenu(),r.menu.on("cancel",function(e){e.control.parent()===r.menu&&(e.stopPropagation(),r.focus(),r.hideMenu())}),r.menu.on("select",function(){r.focus()});var t=r.layoutRect().w;r.menu.layoutRect({w:t,minW:0,maxW:t}),r.menu.repaint(),r.menu.reflow(),r.menu.show(),r.menu.moveRel(r.getEl(),r.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])}else r.hideMenu()},hideMenu:function(){this.menu&&this.menu.hide()},bindStates:function(){var r=this;r.state.on("change:value",function(e){r.getEl("inp").value!==e.value&&(r.getEl("inp").value=e.value)}),r.state.on("change:disabled",function(e){r.getEl("inp").disabled=e.value}),r.state.on("change:statusLevel",function(e){var t=r.getEl("status"),n=r.classPrefix,i=e.value;Ce.css(t,"display","none"===i?"none":""),Ce.toggleClass(t,n+"i-checkmark","ok"===i),Ce.toggleClass(t,n+"i-warning","warn"===i),Ce.toggleClass(t,n+"i-error","error"===i),r.classes.toggle("has-status","none"!==i),r.repaint()}),Ce.on(r.getEl("status"),"mouseleave",function(){r.tooltip().hide()}),r.on("cancel",function(e){r.menu&&r.menu.visible()&&(e.stopPropagation(),r.hideMenu())});var n=function(e,t){t&&0'+e.encode(i)+""),''},postRender:function(){var t=this,n=t.settings.onclick;return t.on("click",function(e){e.aria&&"down"===e.aria.key||e.control!==t||tn.getParent(e.target,"."+t.classPrefix+"open")||(e.stopImmediatePropagation(),n.call(t,e))}),delete t.settings.onclick,t._super()}}),rn=tinymce.util.Tools.resolve("tinymce.util.Color"),on=Dt.extend({Defaults:{classes:"widget colorpicker"},init:function(e){this._super(e)},postRender:function(){var n,i,r,o,s,a=this,l=a.color();function u(e,t){var n,i,r=Ce.getPos(e);return n=t.pageX-r.x,i=t.pageY-r.y,{x:n=Math.max(0,Math.min(n/e.clientWidth,1)),y:i=Math.max(0,Math.min(i/e.clientHeight,1))}}function c(e,t){var n=(360-e.h)/360;Ce.css(r,{top:100*n+"%"}),t||Ce.css(s,{left:e.s+"%",top:100-e.v+"%"}),o.style.background=rn({s:100,v:100,h:e.h}).toHex(),a.color().parse({s:e.s,v:e.v,h:e.h})}function e(e){var t;t=u(o,e),n.s=100*t.x,n.v=100*(1-t.y),c(n),a.fire("change")}function t(e){var t;t=u(i,e),(n=l.toHsv()).h=360*(1-t.y),c(n,!0),a.fire("change")}i=a.getEl("h"),r=a.getEl("hp"),o=a.getEl("sv"),s=a.getEl("svp"),a._repaint=function(){c(n=l.toHsv())},a._super(),a._svdraghelper=new ft(a._id+"-sv",{start:e,drag:e}),a._hdraghelper=new ft(a._id+"-h",{start:t,drag:t}),a._repaint()},rgb:function(){return this.color().toRgb()},value:function(e){if(!arguments.length)return this.color().toHex();this.color().parse(e),this._rendered&&this._repaint()},color:function(){return this._color||(this._color=rn()),this._color},renderHtml:function(){var e,t=this._id,o=this.classPrefix,s="#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000";return e=''+function(){var e,t,n,i,r="";for(n="filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=",e=0,t=(i=s.split(",")).length-1;e
';return r}()+'','"}}),sn=Dt.extend({init:function(e){e=w.extend({height:100,text:"Drop an image here",multiple:!1,accept:null},e),this._super(e),this.classes.add("dropzone"),e.multiple&&this.classes.add("multiple")},renderHtml:function(){var e,t,n=this.settings;return e={id:this._id,hidefocus:"1"},t=Ce.create("div",e,""+this.translate(n.text)+""),n.height&&Ce.css(t,"height",n.height+"px"),n.width&&Ce.css(t,"width",n.width+"px"),t.className=this.classes,t.outerHTML},postRender:function(){var i=this,e=function(e){e.preventDefault(),i.classes.toggle("dragenter"),i.getEl().className=i.classes};i._super(),i.$el.on("dragover",function(e){e.preventDefault()}),i.$el.on("dragenter",e),i.$el.on("dragleave",e),i.$el.on("drop",function(e){if(e.preventDefault(),!i.state.get("disabled")){var t=function(e){var t=i.settings.accept;if("string"!=typeof t)return e;var n=new RegExp("("+t.split(/\s*,\s*/).join("|")+")$","i");return w.grep(e,function(e){return n.test(e.name)})}(e.dataTransfer.files);i.value=function(){return t.length?i.settings.multiple?t:t[0]:null},t.length&&i.fire("change",e)}})},remove:function(){this.$el.off(),this._super()}}),an=Dt.extend({init:function(e){var n=this;e.delimiter||(e.delimiter="\xbb"),n._super(e),n.classes.add("path"),n.canFocus=!0,n.on("click",function(e){var t;(t=e.target.getAttribute("data-index"))&&n.fire("select",{value:n.row()[t],index:t})}),n.row(n.settings.row)},focus:function(){return this.getEl().firstChild.focus(),this},row:function(e){return arguments.length?(this.state.set("row",e),this):this.state.get("row")},renderHtml:function(){return''+this._getDataPathHtml(this.state.get("row"))+"
"},bindStates:function(){var t=this;return t.state.on("change:row",function(e){t.innerHtml(t._getDataPathHtml(e.value))}),t._super()},_getDataPathHtml:function(e){var t,n,i=e||[],r="",o=this.classPrefix;for(t=0,n=i.length;t '+this.settings.delimiter+" ":"")+''+i[t].name+"
";return r||(r='\xa0
'),r}}),ln=an.extend({postRender:function(){var o=this,s=o.settings.editor;function a(e){if(1===e.nodeType){if("BR"===e.nodeName||e.getAttribute("data-mce-bogus"))return!0;if("bookmark"===e.getAttribute("data-mce-type"))return!0}return!1}return!1!==s.settings.elementpath&&(o.on("select",function(e){s.focus(),s.selection.select(this.row()[e.index].element),s.nodeChanged()}),s.on("nodeChange",function(e){for(var t=[],n=e.parents,i=n.length;i--;)if(1===n[i].nodeType&&!a(n[i])){var r=s.fire("ResolveName",{name:n[i].nodeName.toLowerCase(),target:n[i]});if(r.isDefaultPrevented()||t.push({name:r.name,element:n[i]}),r.isPropagationStopped())break}o.row(t)})),o._super()}}),un=ct.extend({Defaults:{layout:"flex",align:"center",defaults:{flex:1}},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.classes.add("formitem"),t.preRender(e),''+(e.settings.title?'
'+e.settings.title+"
":"")+'
'+(e.settings.html||"")+t.renderHtml(e)+"
"}}),cn=ct.extend({Defaults:{containerCls:"form",layout:"flex",direction:"column",align:"stretch",flex:1,padding:15,labelGap:30,spacing:10,callbacks:{submit:function(){this.submit()}}},preRender:function(){var i=this,e=i.items();i.settings.formItemDefaults||(i.settings.formItemDefaults={layout:"flex",autoResize:"overflow",defaults:{flex:1}}),e.each(function(e){var t,n=e.settings.label;n&&((t=new un(w.extend({items:{type:"label",id:e._id+"-l",text:n,flex:0,forId:e._id,disabled:e.disabled()}},i.settings.formItemDefaults))).type="formitem",e.aria("labelledby",e._id+"-l"),"undefined"==typeof e.settings.flex&&(e.settings.flex=1),i.replace(e,t),t.add(e))})},submit:function(){return this.fire("submit",{data:this.toJSON()})},postRender:function(){this._super(),this.fromJSON(this.settings.data)},bindStates:function(){var n=this;function e(){var e,t,i=0,r=[];if(!1!==n.settings.labelGapCalc)for(("children"===n.settings.labelGapCalc?n.find("formitem"):n.items()).filter("formitem").each(function(e){var t=e.items()[0],n=t.getEl().clientWidth;i=i'+(e.settings.title?'":"")+''+(e.settings.html||"")+t.renderHtml(e)+"
"}}),fn=0,hn=function(e){if(null===e||e===undefined)throw new Error("Node cannot be null or undefined");return{dom:k(e)}},mn={fromHtml:function(e,t){var n=(t||document).createElement("div");if(n.innerHTML=e,!n.hasChildNodes()||1",l)),null!==u&&a.push(gi("",u)),a))],o=function(e,t){return 0===e.length||0===t.length?e.concat(t):e.concat(c,t)},s=[],G(n,function(e){s=o(s,e)}),s):yi(e,d(hi))},bi=function(e,t){var n,i,r,o=hi[t];/^https?/.test(e)&&(o?(n=o,i=e,r=q(n,i),-1===r?D.none():D.some(r)).isNone()&&(hi[t]=o.slice(0,5).concat(e)):hi[t]=[e])},yi=function(e,t){var n=e.toLowerCase(),i=w.grep(t,function(e){return-1!==e.title.toLowerCase().indexOf(n)});return 1===i.length&&i[0].title===e?[]:i},xi=function(o,e,n){var i=e.filepicker_validator_handler;i&&o.state.on("change:value",function(e){var t;0!==(t=e.value).length?i({url:t,type:n},function(e){var t,n,i,r=(n=(t=e).status,i=t.message,"valid"===n?{status:"ok",message:i}:"unknown"===n?{status:"warn",message:i}:"invalid"===n?{status:"warn",message:i}:{status:"none",message:""});o.statusMessage(r.message),o.statusLevel(r.status)}):o.statusLevel("none")})},wi=Zt.extend({Statics:{clearHistory:function(){hi={}}},init:function(e){var t,n,i,r,o,s,a,l,u=this,c=window.tinymce?window.tinymce.activeEditor:h.activeEditor,d=c.settings,f=e.filetype;e.spellcheck=!1,(i=d.file_picker_types||d.file_browser_callback_types)&&(i=w.makeMap(i,/[, ]/)),i&&!i[f]||(!(n=d.file_picker_callback)||i&&!i[f]?!(n=d.file_browser_callback)||i&&!i[f]||(t=function(){n(u.getEl("inp").id,u.value(),f,window)}):t=function(){var e=u.fire("beforecall").meta;e=w.extend({filetype:f},e),n.call(c,function(e,t){u.value(e).fire("change",{meta:t})},u.value(),e)}),t&&(e.icon="browse",e.onaction=t),u._super(e),u.classes.add("filepicker"),r=u,o=d,s=c.getBody(),a=f,l=function(e){var t=fi(s),n=vi(e,t,a,o);r.showAutoComplete(n,e)},r.on("autocomplete",function(){l(r.value())}),r.on("selectitem",function(e){var t=e.value;r.value(t.url);var n,i=(n=t.title).raw?n.raw:n;"image"===a?r.fire("change",{meta:{alt:i,attach:t.attach}}):r.fire("change",{meta:{text:i,attach:t.attach}}),r.focus()}),r.on("click",function(e){0===r.value().length&&"INPUT"===e.target.nodeName&&l("")}),r.on("PostRender",function(){r.getRoot().on("submit",function(e){e.isDefaultPrevented()||bi(r.value(),a)})}),xi(u,d,f)}}),_i=Xt.extend({recalc:function(e){var t=e.layoutRect(),n=e.paddingBox;e.items().filter(":visible").each(function(e){e.layoutRect({x:n.left,y:n.top,w:t.innerW-n.right-n.left,h:t.innerH-n.top-n.bottom}),e.recalc&&e.recalc()})}}),Ci=Xt.extend({recalc:function(e){var t,n,i,r,o,s,a,l,u,c,d,f,h,m,g,p,v,b,y,x,w,_,C,R,E,k,T,H,S,M,N,P,D,W,O,A,B,L=[],I=Math.max,z=Math.min;for(i=e.items().filter(":visible"),r=e.layoutRect(),o=e.paddingBox,s=e.settings,f=e.isRtl()?s.direction||"row-reversed":s.direction,a=s.align,l=e.isRtl()?s.pack||"end":s.pack,u=s.spacing||0,"row-reversed"!==f&&"column-reverse"!==f||(i=i.set(i.toArray().reverse()),f=f.split("-")[0]),"column"===f?(R="y",_="h",C="minH",E="maxH",T="innerH",k="top",H="deltaH",S="contentH",W="left",P="w",M="x",N="innerW",D="minW",O="right",A="deltaW",B="contentW"):(R="x",_="w",C="minW",E="maxW",T="innerW",k="left",H="deltaW",S="contentW",W="top",P="h",M="y",N="innerH",D="minH",O="bottom",A="deltaH",B="contentH"),d=r[T]-o[k]-o[k],w=c=0,t=0,n=i.length;tS[d]?R:S[d],M[f]=E>M[f]?E:M[f];for(k=o.innerW-p.left-p.right,d=_=0;d'},src:function(e){this.getEl().src=e},html:function(e,t){var n=this,i=this.getEl().contentWindow.document.body;return i?(i.innerHTML=e,t&&t()):u.setTimeout(function(){n.html(e)}),this}}),nr=Dt.extend({init:function(e){this._super(e),this.classes.add("widget").add("infobox"),this.canFocus=!1},severity:function(e){this.classes.remove("error"),this.classes.remove("warning"),this.classes.remove("success"),this.classes.add(e)},help:function(e){this.state.set("help",e)},renderHtml:function(){var e=this,t=e.classPrefix;return''+e.encode(e.state.get("text"))+'
'},bindStates:function(){var t=this;return t.state.on("change:text",function(e){t.getEl("body").firstChild.data=t.encode(e.value),t.state.get("rendered")&&t.updateLayoutRect()}),t.state.on("change:help",function(e){t.classes.toggle("has-help",e.value),t.state.get("rendered")&&t.updateLayoutRect()}),t._super()}}),ir=Dt.extend({init:function(e){var t=this;t._super(e),t.classes.add("widget").add("label"),t.canFocus=!1,e.multiline&&t.classes.add("autoscroll"),e.strong&&t.classes.add("strong")},initLayoutRect:function(){var e=this,t=e._super();return e.settings.multiline&&(Ce.getSize(e.getEl()).width>t.maxW&&(t.minW=t.maxW,e.classes.add("multiline")),e.getEl().style.width=t.minW+"px",t.startMinH=t.h=t.minH=Math.min(t.maxH,Ce.getSize(e.getEl()).height)),t},repaint:function(){return this.settings.multiline||(this.getEl().style.lineHeight=this.layoutRect().h+"px"),this._super()},severity:function(e){this.classes.remove("error"),this.classes.remove("warning"),this.classes.remove("success"),this.classes.add(e)},renderHtml:function(){var e,t,n=this,i=n.settings.forId,r=n.settings.html?n.settings.html:n.encode(n.state.get("text"));return!i&&(t=n.settings.forName)&&(e=n.getRoot().find("#"+t)[0])&&(i=e._id),i?'":''+r+""},bindStates:function(){var t=this;return t.state.on("change:text",function(e){t.innerHtml(t.encode(e.value)),t.state.get("rendered")&&t.updateLayoutRect()}),t._super()}}),rr=ct.extend({Defaults:{role:"toolbar",layout:"flow"},init:function(e){this._super(e),this.classes.add("toolbar")},postRender:function(){return this.items().each(function(e){e.classes.add("toolbar-item")}),this._super()}}),or=rr.extend({Defaults:{role:"menubar",containerCls:"menubar",ariaRoot:!0,defaults:{type:"menubutton"}}}),sr=qt.extend({init:function(e){var t=this;t._renderOpen=!0,t._super(e),e=t.settings,t.classes.add("menubtn"),e.fixedWidth&&t.classes.add("fixed-width"),t.aria("haspopup",!0),t.state.set("menu",e.menu||t.render())},showMenu:function(e){var t,n=this;if(n.menu&&n.menu.visible()&&!1!==e)return n.hideMenu();n.menu||(t=n.state.get("menu")||[],n.classes.add("opened"),t.length?t={type:"menu",animate:!0,items:t}:(t.type=t.type||"menu",t.animate=!0),t.renderTo?n.menu=t.parent(n).show().renderTo():n.menu=b.create(t).parent(n).renderTo(),n.fire("createmenu"),n.menu.reflow(),n.menu.on("cancel",function(e){e.control.parent()===n.menu&&(e.stopPropagation(),n.focus(),n.hideMenu())}),n.menu.on("select",function(){n.focus()}),n.menu.on("show hide",function(e){"hide"===e.type&&e.control.parent()===n&&n.classes.remove("opened-under"),e.control===n.menu&&(n.activeMenu("show"===e.type),n.classes.toggle("opened","show"===e.type)),n.aria("expanded","show"===e.type)}).fire("show")),n.menu.show(),n.menu.layoutRect({w:n.layoutRect().w}),n.menu.repaint(),n.menu.moveRel(n.getEl(),n.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"]);var i=n.menu.layoutRect(),r=n.$el.offset().top+n.layoutRect().h;r>i.y&&r'+t.encode(o)+""),r=t.settings.icon?i+"ico "+i+"i-"+r:"",t.aria("role",t.parent()instanceof or?"menuitem":"button"),''},postRender:function(){var r=this;return r.on("click",function(e){e.control===r&&function(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1}(e.target,r.getEl())&&(r.focus(),r.showMenu(!e.aria),e.aria&&r.menu.items().filter(":visible")[0].focus())}),r.on("mouseenter",function(e){var t,n=e.control,i=r.parent();n&&i&&n instanceof sr&&n.parent()===i&&(i.items().filter("MenuButton").each(function(e){e.hideMenu&&e!==n&&(e.menu&&e.menu.visible()&&(t=!0),e.hideMenu())}),t&&(n.focus(),n.showMenu()))}),r._super()},bindStates:function(){var e=this;return e.state.on("change:menu",function(){e.menu&&e.menu.remove(),e.menu=null}),e._super()},remove:function(){this._super(),this.menu&&this.menu.remove()}}),ar=kt.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"application",bodyRole:"menu",ariaRoot:!0},init:function(e){if(e.autohide=!0,e.constrainToViewport=!0,"function"==typeof e.items&&(e.itemsFactory=e.items,e.items=[]),e.itemDefaults)for(var t=e.items,n=t.length;n--;)t[n]=w.extend({},e.itemDefaults,t[n]);this._super(e),this.classes.add("menu"),e.animate&&11!==fe.ie&&this.classes.add("animate")},repaint:function(){return this.classes.toggle("menu-align",!0),this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){this.hideAll(),this.fire("select")},load:function(){var t,n=this;function i(){n.throbber&&(n.throbber.hide(),n.throbber=null)}n.settings.itemsFactory&&(n.throbber||(n.throbber=new St(n.getEl("body"),!0),0===n.items().length?(n.throbber.show(),n.fire("loading")):n.throbber.show(100,function(){n.items().remove(),n.fire("loading")}),n.on("hide close",i)),n.requestTime=t=(new Date).getTime(),n.settings.itemsFactory(function(e){0!==e.length?n.requestTime===t&&(n.getEl().style.width="",n.getEl("body").style.width="",i(),n.items().remove(),n.getEl("body").innerHTML="",n.add(e),n.renderNew(),n.fire("loaded")):n.hide()}))},hideAll:function(){return this.find("menuitem").exec("hideMenu"),this._super()},preRender:function(){var n=this;return n.items().each(function(e){var t=e.settings;if(t.icon||t.image||t.selectable)return!(n._hasIcons=!0)}),n.settings.itemsFactory&&n.on("postrender",function(){n.settings.itemsFactory&&n.load()}),n.on("show hide",function(e){e.control===n&&("show"===e.type?u.setTimeout(function(){n.classes.add("in")},0):n.classes.remove("in"))}),n._super()}}),lr=sr.extend({init:function(i){var t,r,o,n,s=this;s._super(i),i=s.settings,s._values=t=i.values,t&&("undefined"!=typeof i.value&&function e(t){for(var n=0;n").replace(new RegExp(c("]mce~match!"),"g"),"")}return s&&t.parent().classes.add("menu-has-icons"),i.image&&(a=" style=\"background-image: url('"+i.image+"')\""),l&&(l=function(e){var t,n,i={};for(i=fe.mac?{alt:"⌥",ctrl:"⌘",shift:"⇧",meta:"⌘"}:{meta:"Ctrl"},e=e.split("+"),t=0;t\xa0":"",o=f(t.encode(d(o))),u=f(t.encode(d(u))),''+e+("-"!==o?'
'+o+"":"")+(l?'":"")+(i.menu?'
':"")+(u?'":"")+"
"},postRender:function(){var t=this,n=t.settings,e=n.textStyle;if("function"==typeof e&&(e=e.call(this)),e){var i=t.getEl("text");i&&(i.setAttribute("style",e),t._textStyle=e)}return t.on("mouseenter click",function(e){e.control===t&&(n.menu||"click"!==e.type?(t.showMenu(),e.aria&&t.menu.focus(!0)):(t.fire("select"),u.requestAnimationFrame(function(){t.parent().hideAll()})))}),t._super(),t},hover:function(){return this.parent().items().each(function(e){e.classes.remove("selected")}),this.classes.toggle("selected",!0),this},active:function(e){return function(e,t){var n=e._textStyle;if(n){var i=e.getEl("text");i.setAttribute("style",n),t&&(i.style.color="",i.style.backgroundColor="")}}(this,e),void 0!==e&&this.aria("checked",e),this._super(e)},remove:function(){this._super(),this.menu&&this.menu.remove()}}),cr=Gt.extend({Defaults:{classes:"radio",role:"radio"}}),dr=Dt.extend({renderHtml:function(){var e=this,t=e.classPrefix;return e.classes.add("resizehandle"),"both"===e.settings.direction&&e.classes.add("resizehandle-both"),e.canFocus=!1,'
'},postRender:function(){var t=this;t._super(),t.resizeDragHelper=new ft(this._id,{start:function(){t.fire("ResizeStart")},drag:function(e){"both"!==t.settings.direction&&(e.deltaX=0),t.fire("Resize",e)},stop:function(){t.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}});function fr(e){var t="";if(e)for(var n=0;n'+e[n]+"";return t}var hr=Dt.extend({Defaults:{classes:"selectbox",role:"selectbox",options:[]},init:function(e){var n=this;n._super(e),n.settings.size&&(n.size=n.settings.size),n.settings.options&&(n._options=n.settings.options),n.on("keydown",function(e){var t;13===e.keyCode&&(e.preventDefault(),n.parents().reverse().each(function(e){if(e.toJSON)return t=e,!1}),n.fire("submit",{data:t.toJSON()}))})},options:function(e){return arguments.length?(this.state.set("options",e),this):this.state.get("options")},renderHtml:function(){var e,t=this,n="";return e=fr(t._options),t.size&&(n=' size = "'+t.size+'"'),'"},bindStates:function(){var t=this;return t.state.on("change:options",function(e){t.getEl().innerHTML=fr(e.value)}),t._super()}});function mr(e,t,n){return e'},reset:function(){this.value(this._initValue).repaint()},postRender:function(){var e,t,n,i,r,o,s,a,l,u,c,d,f,h,m=this;e=m._minValue,t=m._maxValue,"v"===m.settings.orientation?(n="screenY",i="top",r="height",o="h"):(n="screenX",i="left",r="width",o="w"),m._super(),function(o,s){function t(e){var t,n,i,r;t=mr(t=(((t=m.value())+(r=n=o))/((i=s)-r)+.05*e)*(i-n)-n,o,s),m.value(t),m.fire("dragstart",{value:t}),m.fire("drag",{value:t}),m.fire("dragend",{value:t})}m.on("keydown",function(e){switch(e.keyCode){case 37:case 38:t(-1);break;case 39:case 40:t(1)}})}(e,t),s=e,a=t,l=m.getEl("handle"),m._dragHelper=new ft(m._id,{handle:m._id+"-handle",start:function(e){u=e[n],c=parseInt(m.getEl("handle").style[i],10),d=(m.layoutRect()[o]||100)-Ce.getSize(l)[r],m.fire("dragstart",{value:h})},drag:function(e){var t=e[n]-u;f=mr(c+t,0,d),l.style[i]=f+"px",h=s+f/d*(a-s),m.value(h),m.tooltip().text(""+m.settings.previewFilter(h)).show().moveRel(l,"bc tc"),m.fire("drag",{value:h})},stop:function(){m.tooltip().hide(),m.fire("dragend",{value:h})}})},repaint:function(){this._super(),pr(this,this.value())},bindStates:function(){var t=this;return t.state.on("change:value",function(e){pr(t,e.value)}),t._super()}}),br=Dt.extend({renderHtml:function(){return this.classes.add("spacer"),this.canFocus=!1,''}}),yr=sr.extend({Defaults:{classes:"widget btn splitbtn",role:"button"},repaint:function(){var e,t,n=this.getEl(),i=this.layoutRect();return this._super(),e=n.firstChild,t=n.lastChild,we(e).css({width:i.w-Ce.getSize(t).width,height:i.h-2}),we(t).css({height:i.h-2}),this},activeMenu:function(e){we(this.getEl().lastChild).toggleClass(this.classPrefix+"active",e)},renderHtml:function(){var e,t,n=this,i=n._id,r=n.classPrefix,o=n.state.get("icon"),s=n.state.get("text"),a=n.settings,l="";return(e=a.image)?(o="none","string"!=typeof e&&(e=window.getSelection?e[0]:e[1]),e=" style=\"background-image: url('"+e+"')\""):e="",o=a.icon?r+"ico "+r+"i-"+o:"",s&&(n.classes.add("btn-has-text"),l=''+n.encode(s)+""),t="boolean"==typeof a.active?' aria-pressed="'+a.active+'"':"",''},postRender:function(){var n=this.settings.onclick;return this.on("click",function(e){var t=e.target;if(e.control===this)for(;t;){if(e.aria&&"down"!==e.aria.key||"BUTTON"===t.nodeName&&-1===t.className.indexOf("open"))return e.stopImmediatePropagation(),void(n&&n.call(this,e));t=t.parentNode}}),delete this.settings.onclick,this._super()}}),xr=Ri.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"},isNative:function(){return!0}}),wr=bt.extend({Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(n){var e;this.activeTabId&&(e=this.getEl(this.activeTabId),we(e).removeClass(this.classPrefix+"active"),e.setAttribute("aria-selected","false")),this.activeTabId="t"+n,(e=this.getEl("t"+n)).setAttribute("aria-selected","true"),we(e).addClass(this.classPrefix+"active"),this.items()[n].show().fire("showtab"),this.reflow(),this.items().each(function(e,t){n!==t&&e.hide()})},renderHtml:function(){var i=this,e=i._layout,r="",o=i.classPrefix;return i.preRender(),e.preRender(i),i.items().each(function(e,t){var n=i._id+"-t"+t;e.aria("role","tabpanel"),e.aria("labelledby",n),r+=''+i.encode(e.settings.title)+"
"}),'"},postRender:function(){var i=this;i._super(),i.settings.activeTab=i.settings.activeTab||0,i.activateTab(i.settings.activeTab),this.on("click",function(e){var t=e.target.parentNode;if(t&&t.id===i._id+"-head")for(var n=t.childNodes.length;n--;)t.childNodes[n]===e.target&&i.activateTab(n)})},initLayoutRect:function(){var e,t,n,i=this;t=(t=Ce.getSize(i.getEl("head")).width)<0?0:t,n=0,i.items().each(function(e){t=Math.max(t,e.layoutRect().minW),n=Math.max(n,e.layoutRect().minH)}),i.items().each(function(e){e.settings.x=0,e.settings.y=0,e.settings.w=t,e.settings.h=n,e.layoutRect({x:0,y:0,w:t,h:n})});var r=Ce.getSize(i.getEl("head")).height;return i.settings.minWidth=t,i.settings.minHeight=n+r,(e=i._super()).deltaH+=r,e.innerH=e.h-e.deltaH,e}}),_r=Dt.extend({init:function(e){var n=this;n._super(e),n.classes.add("textbox"),e.multiline?n.classes.add("multiline"):(n.on("keydown",function(e){var t;13===e.keyCode&&(e.preventDefault(),n.parents().reverse().each(function(e){if(e.toJSON)return t=e,!1}),n.fire("submit",{data:t.toJSON()}))}),n.on("keyup",function(e){n.state.set("value",e.target.value)}))},repaint:function(){var e,t,n,i,r,o=this,s=0;e=o.getEl().style,t=o._layoutRect,r=o._lastRepaintRect||{};var a=document;return!o.settings.multiline&&a.all&&(!a.documentMode||a.documentMode<=8)&&(e.lineHeight=t.h-s+"px"),i=(n=o.borderBox).left+n.right+8,s=n.top+n.bottom+(o.settings.multiline?8:0),t.x!==r.x&&(e.left=t.x+"px",r.x=t.x),t.y!==r.y&&(e.top=t.y+"px",r.y=t.y),t.w!==r.w&&(e.width=t.w-i+"px",r.w=t.w),t.h!==r.h&&(e.height=t.h-s+"px",r.h=t.h),o._lastRepaintRect=r,o.fire("repaint",{},!1),o},renderHtml:function(){var t,e,n=this,i=n.settings;return t={id:n._id,hidefocus:"1"},w.each(["rows","spellcheck","maxLength","size","readonly","min","max","step","list","pattern","placeholder","required","multiple"],function(e){t[e]=i[e]}),n.disabled()&&(t.disabled="disabled"),i.subtype&&(t.type=i.subtype),(e=Ce.create(i.multiline?"textarea":"input",t)).value=n.state.get("value"),e.className=n.classes.toString(),e.outerHTML},value:function(e){return arguments.length?(this.state.set("value",e),this):(this.state.get("rendered")&&this.state.set("value",this.getEl().value),this.state.get("value"))},postRender:function(){var t=this;t.getEl().value=t.state.get("value"),t._super(),t.$el.on("change",function(e){t.state.set("value",e.target.value),t.fire("change",e)})},bindStates:function(){var t=this;return t.state.on("change:value",function(e){t.getEl().value!==e.value&&(t.getEl().value=e.value)}),t.state.on("change:disabled",function(e){t.getEl().disabled=e.value}),t._super()},remove:function(){this.$el.off(),this._super()}}),Cr=function(){return{Selector:Ue,Collection:$e,ReflowQueue:Qe,Control:st,Factory:b,KeyboardNavigation:lt,Container:ct,DragHelper:ft,Scrollable:vt,Panel:bt,Movable:Se,Resizable:yt,FloatPanel:kt,Window:Ut,MessageBox:Vt,Tooltip:Pt,Widget:Dt,Progress:Wt,Notification:At,Layout:$t,AbsoluteLayout:Xt,Button:qt,ButtonGroup:Jt,Checkbox:Gt,ComboBox:Zt,ColorBox:Qt,PanelButton:en,ColorButton:nn,ColorPicker:on,Path:an,ElementPath:ln,FormItem:un,Form:cn,FieldSet:dn,FilePicker:wi,FitLayout:_i,FlexLayout:Ci,FlowLayout:Ri,FormatControls:Qi,GridLayout:er,Iframe:tr,InfoBox:nr,Label:ir,Toolbar:rr,MenuBar:or,MenuButton:sr,MenuItem:ur,Throbber:St,Menu:ar,ListBox:lr,Radio:cr,ResizeHandle:dr,SelectBox:hr,Slider:vr,Spacer:br,SplitButton:yr,StackLayout:xr,TabPanel:wr,TextBox:_r,DropZone:sn,BrowseButton:jt}},Rr=function(n){n.ui?w.each(Cr(),function(e,t){n.ui[t]=e}):n.ui=Cr()};w.each(Cr(),function(e,t){b.add(t,e)}),Rr(window.tinymce?window.tinymce:{}),o.add("modern",function(e){return Qi.setup(e),Yt(e)})}();
diff --git a/public/assets/tinymce/themes/modern/theme-5cc969a29b5a13fd548061371e12843a7027ab8cc6b35f95e2df52ea1b221a5e.js.gz b/public/assets/tinymce/themes/modern/theme-5cc969a29b5a13fd548061371e12843a7027ab8cc6b35f95e2df52ea1b221a5e.js.gz
deleted file mode 100644
index cd62949b..00000000
Binary files a/public/assets/tinymce/themes/modern/theme-5cc969a29b5a13fd548061371e12843a7027ab8cc6b35f95e2df52ea1b221a5e.js.gz and /dev/null differ
diff --git a/public/assets/tinymce/themes/modern/theme.js b/public/assets/tinymce/themes/modern/theme.js
index 46f8dd50..e7662b30 120000
--- a/public/assets/tinymce/themes/modern/theme.js
+++ b/public/assets/tinymce/themes/modern/theme.js
@@ -1 +1 @@
-theme-5cc969a29b5a13fd548061371e12843a7027ab8cc6b35f95e2df52ea1b221a5e.js
\ No newline at end of file
+theme-17b1c26a5228e485e18dfcdf763d08b4546836a017ae7b0225ea47706171f10b.js
\ No newline at end of file
diff --git a/public/assets/tinymce/themes/modern/theme.js.gz b/public/assets/tinymce/themes/modern/theme.js.gz
index 8326e481..28215db8 120000
--- a/public/assets/tinymce/themes/modern/theme.js.gz
+++ b/public/assets/tinymce/themes/modern/theme.js.gz
@@ -1 +1 @@
-theme-5cc969a29b5a13fd548061371e12843a7027ab8cc6b35f95e2df52ea1b221a5e.js.gz
\ No newline at end of file
+theme-17b1c26a5228e485e18dfcdf763d08b4546836a017ae7b0225ea47706171f10b.js.gz
\ No newline at end of file
diff --git a/public/assets/tinymce/tinymce-1098dd3a232d42146ff7bf2cdffed0f7358ac2cf1798aa209abc7ab367ff59f4.js b/public/assets/tinymce/tinymce-1098dd3a232d42146ff7bf2cdffed0f7358ac2cf1798aa209abc7ab367ff59f4.js
deleted file mode 100644
index df461284..00000000
--- a/public/assets/tinymce/tinymce-1098dd3a232d42146ff7bf2cdffed0f7358ac2cf1798aa209abc7ab367ff59f4.js
+++ /dev/null
@@ -1,26916 +0,0 @@
-// 4.8.4 (2018-10-23)
-(function () {
-(function () {
- 'use strict';
-
- var noop = function () {
- var x = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- x[_i] = arguments[_i];
- }
- };
-
- var compose = function (fa, fb) {
- return function () {
- var x = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- x[_i] = arguments[_i];
- }
- return fa(fb.apply(null, arguments));
- };
- };
- var constant = function (value) {
- return function () {
- return value;
- };
- };
- var identity = function (x) {
- return x;
- };
-
- var curry = function (f) {
- var x = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- x[_i - 1] = arguments[_i];
- }
- var args = new Array(arguments.length - 1);
- for (var i = 1; i < arguments.length; i++)
- args[i - 1] = arguments[i];
- return function () {
- var x = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- x[_i] = arguments[_i];
- }
- var newArgs = new Array(arguments.length);
- for (var j = 0; j < newArgs.length; j++)
- newArgs[j] = arguments[j];
- var all = args.concat(newArgs);
- return f.apply(null, all);
- };
- };
-
- var die = function (msg) {
- return function () {
- throw new Error(msg);
- };
- };
-
-
- var never = constant(false);
- var always = constant(true);
-
- var never$1 = never;
- var always$1 = always;
- var none = function () {
- return NONE;
- };
- var NONE = function () {
- var eq = function (o) {
- return o.isNone();
- };
- var call$$1 = function (thunk) {
- return thunk();
- };
- var id = function (n) {
- return n;
- };
- var noop$$1 = function () {
- };
- var nul = function () {
- return null;
- };
- var undef = function () {
- return undefined;
- };
- var me = {
- fold: function (n, s) {
- return n();
- },
- is: never$1,
- isSome: never$1,
- isNone: always$1,
- getOr: id,
- getOrThunk: call$$1,
- getOrDie: function (msg) {
- throw new Error(msg || 'error: getOrDie called on none.');
- },
- getOrNull: nul,
- getOrUndefined: undef,
- or: id,
- orThunk: call$$1,
- map: none,
- ap: none,
- each: noop$$1,
- bind: none,
- flatten: none,
- exists: never$1,
- forall: always$1,
- filter: none,
- equals: eq,
- equals_: eq,
- toArray: function () {
- return [];
- },
- toString: constant('none()')
- };
- if (Object.freeze)
- Object.freeze(me);
- return me;
- }();
- var some = function (a) {
- var constant_a = function () {
- return a;
- };
- var self = function () {
- return me;
- };
- var map = function (f) {
- return some(f(a));
- };
- var bind = function (f) {
- return f(a);
- };
- var me = {
- fold: function (n, s) {
- return s(a);
- },
- is: function (v) {
- return a === v;
- },
- isSome: always$1,
- isNone: never$1,
- getOr: constant_a,
- getOrThunk: constant_a,
- getOrDie: constant_a,
- getOrNull: constant_a,
- getOrUndefined: constant_a,
- or: self,
- orThunk: self,
- map: map,
- ap: function (optfab) {
- return optfab.fold(none, function (fab) {
- return some(fab(a));
- });
- },
- each: function (f) {
- f(a);
- },
- bind: bind,
- flatten: constant_a,
- exists: bind,
- forall: bind,
- filter: function (f) {
- return f(a) ? me : NONE;
- },
- equals: function (o) {
- return o.is(a);
- },
- equals_: function (o, elementEq) {
- return o.fold(never$1, function (b) {
- return elementEq(a, b);
- });
- },
- toArray: function () {
- return [a];
- },
- toString: function () {
- return 'some(' + a + ')';
- }
- };
- return me;
- };
- var from = function (value) {
- return value === null || value === undefined ? NONE : some(value);
- };
- var Option = {
- some: some,
- none: none,
- from: from
- };
-
- var typeOf = function (x) {
- if (x === null)
- return 'null';
- var t = typeof x;
- if (t === 'object' && Array.prototype.isPrototypeOf(x))
- return 'array';
- if (t === 'object' && String.prototype.isPrototypeOf(x))
- return 'string';
- return t;
- };
- var isType = function (type) {
- return function (value) {
- return typeOf(value) === type;
- };
- };
- var isString = isType('string');
- var isObject = isType('object');
- var isArray = isType('array');
- var isNull = isType('null');
- var isBoolean = isType('boolean');
-
- var isFunction = isType('function');
- var isNumber = isType('number');
-
- var rawIndexOf = function () {
- var pIndexOf = Array.prototype.indexOf;
- var fastIndex = function (xs, x) {
- return pIndexOf.call(xs, x);
- };
- var slowIndex = function (xs, x) {
- return slowIndexOf(xs, x);
- };
- return pIndexOf === undefined ? slowIndex : fastIndex;
- }();
- var indexOf = function (xs, x) {
- var r = rawIndexOf(xs, x);
- return r === -1 ? Option.none() : Option.some(r);
- };
- var contains = function (xs, x) {
- return rawIndexOf(xs, x) > -1;
- };
- var exists = function (xs, pred) {
- return findIndex(xs, pred).isSome();
- };
-
-
- 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, xs);
- }
- return r;
- };
- var each = function (xs, f) {
- for (var i = 0, len = xs.length; i < len; i++) {
- var x = xs[i];
- f(x, i, xs);
- }
- };
- var eachr = function (xs, f) {
- for (var i = xs.length - 1; i >= 0; i--) {
- var x = xs[i];
- f(x, i, xs);
- }
- };
- 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, xs) ? 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, xs)) {
- 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 find = function (xs, pred) {
- for (var i = 0, len = xs.length; i < len; i++) {
- var x = xs[i];
- if (pred(x, i, xs)) {
- return Option.some(x);
- }
- }
- return Option.none();
- };
- var findIndex = function (xs, pred) {
- for (var i = 0, len = xs.length; i < len; i++) {
- var x = xs[i];
- if (pred(x, i, xs)) {
- return Option.some(i);
- }
- }
- return Option.none();
- };
- var slowIndexOf = function (xs, x) {
- for (var i = 0, len = xs.length; i < len; ++i) {
- if (xs[i] === x) {
- return i;
- }
- }
- return -1;
- };
- var push = Array.prototype.push;
- var flatten = function (xs) {
- var r = [];
- for (var i = 0, len = xs.length; i < len; ++i) {
- if (!Array.prototype.isPrototypeOf(xs[i]))
- throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
- push.apply(r, xs[i]);
- }
- return r;
- };
- var bind = function (xs, f) {
- var output = map(xs, f);
- return flatten(output);
- };
- var forall = function (xs, pred) {
- for (var i = 0, len = xs.length; i < len; ++i) {
- var x = xs[i];
- if (pred(x, i, xs) !== true) {
- return false;
- }
- }
- return true;
- };
-
- var slice = Array.prototype.slice;
- var reverse = function (xs) {
- var r = slice.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 = function (xs, comparator) {
- var copy = slice.call(xs, 0);
- copy.sort(comparator);
- return copy;
- };
- var head = function (xs) {
- return xs.length === 0 ? Option.none() : Option.some(xs[0]);
- };
- var last = function (xs) {
- return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);
- };
- var from$1 = isFunction(Array.from) ? Array.from : function (x) {
- return slice.call(x);
- };
-
- var Global = typeof window !== 'undefined' ? window : Function('return this;')();
-
- var path = function (parts, scope) {
- var o = scope !== undefined && scope !== null ? scope : Global;
- for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i)
- o = o[parts[i]];
- return o;
- };
- var resolve = function (p, scope) {
- var parts = p.split('.');
- return path(parts, scope);
- };
-
- var unsafe = function (name, scope) {
- return resolve(name, scope);
- };
- var getOrDie = function (name, scope) {
- var actual = unsafe(name, scope);
- if (actual === undefined || actual === null)
- throw name + ' not available on this browser';
- return actual;
- };
- var $_3b2dlgcjnlpawlt = { getOrDie: getOrDie };
-
- var url = function () {
- return $_3b2dlgcjnlpawlt.getOrDie('URL');
- };
- var createObjectURL = function (blob) {
- return url().createObjectURL(blob);
- };
- var revokeObjectURL = function (u) {
- url().revokeObjectURL(u);
- };
- var $_9khkh7bjnlpawls = {
- createObjectURL: createObjectURL,
- revokeObjectURL: revokeObjectURL
- };
-
- var nav = navigator;
- var userAgent = nav.userAgent;
- var opera;
- var webkit;
- var ie;
- var ie11;
- var ie12;
- var gecko;
- var mac;
- var iDevice;
- var android;
- var fileApi;
- var phone;
- var tablet;
- var windowsPhone;
- var matchMediaQuery = function (query) {
- return 'matchMedia' in window ? matchMedia(query).matches : false;
- };
- opera = false;
- android = /Android/.test(userAgent);
- webkit = /WebKit/.test(userAgent);
- ie = !webkit && !opera && /MSIE/gi.test(userAgent) && /Explorer/gi.test(nav.appName);
- ie = ie && /MSIE (\w+)\./.exec(userAgent)[1];
- ie11 = userAgent.indexOf('Trident/') !== -1 && (userAgent.indexOf('rv:') !== -1 || nav.appName.indexOf('Netscape') !== -1) ? 11 : false;
- ie12 = userAgent.indexOf('Edge/') !== -1 && !ie && !ie11 ? 12 : false;
- ie = ie || ie11 || ie12;
- gecko = !webkit && !ie11 && /Gecko/.test(userAgent);
- mac = userAgent.indexOf('Mac') !== -1;
- iDevice = /(iPad|iPhone)/.test(userAgent);
- fileApi = 'FormData' in window && 'FileReader' in window && 'URL' in window && !!$_9khkh7bjnlpawls.createObjectURL;
- phone = matchMediaQuery('only screen and (max-device-width: 480px)') && (android || iDevice);
- tablet = matchMediaQuery('only screen and (min-width: 800px)') && (android || iDevice);
- windowsPhone = userAgent.indexOf('Windows Phone') !== -1;
- if (ie12) {
- webkit = false;
- }
- var contentEditable = !iDevice || fileApi || parseInt(userAgent.match(/AppleWebKit\/(\d*)/)[1], 10) >= 534;
- var $_cseqobajnlpawll = {
- opera: opera,
- webkit: webkit,
- ie: ie,
- gecko: gecko,
- mac: mac,
- iOS: iDevice,
- android: android,
- contentEditable: contentEditable,
- transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',
- caretAfter: ie !== 8,
- range: window.getSelection && 'Range' in window,
- documentMode: ie && !ie12 ? document.documentMode || 7 : 10,
- fileApi: fileApi,
- ceFalse: ie === false || ie > 8,
- cacheSuffix: null,
- container: null,
- overrideViewPort: null,
- experimentalShadowDom: false,
- canHaveCSP: ie === false || ie > 11,
- desktop: !phone && !tablet,
- windowsPhone: windowsPhone
- };
-
- var promise = function () {
- function bind(fn, thisArg) {
- return function () {
- fn.apply(thisArg, arguments);
- };
- }
- 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) {
- 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;
- }
- function doResolve(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 args = Array.prototype.slice.call(arguments.length === 1 && isArray(arguments[0]) ? arguments[0] : arguments);
- 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);
- }
- });
- };
- return Promise;
- };
- var promiseObj = window.Promise ? window.Promise : promise();
-
- var requestAnimationFramePromise;
- var requestAnimationFrame$$1 = function (callback, element) {
- var i, requestAnimationFrameFunc = window.requestAnimationFrame;
- var vendors = [
- 'ms',
- 'moz',
- 'webkit'
- ];
- var featurefill = function (callback) {
- window.setTimeout(callback, 0);
- };
- for (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, func;
- func = function () {
- var args = arguments;
- clearTimeout(timer);
- timer = wrappedSetTimeout(function () {
- callback.apply(this, args);
- }, time);
- };
- func.stop = function () {
- clearTimeout(timer);
- };
- return func;
- };
- var $_2nbnh1ijnlpawpi = {
- requestAnimationFrame: function (callback, element) {
- if (requestAnimationFramePromise) {
- requestAnimationFramePromise.then(callback);
- return;
- }
- requestAnimationFramePromise = new promiseObj(function (resolve) {
- if (!element) {
- element = document.body;
- }
- requestAnimationFrame$$1(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;
- timer = wrappedSetInterval(function () {
- if (!editor.removed) {
- callback();
- } else {
- clearInterval(timer);
- }
- }, time);
- return timer;
- },
- debounce: debounce,
- throttle: debounce,
- clearInterval: wrappedClearInterval,
- clearTimeout: wrappedClearTimeout
- };
-
- 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
- };
- var hasIsDefaultPrevented = function (event$$1) {
- return event$$1.isDefaultPrevented === returnTrue || event$$1.isDefaultPrevented === returnFalse;
- };
- var returnFalse = function () {
- return false;
- };
- var returnTrue = function () {
- return true;
- };
- var addEvent = function (target, name$$1, callback, capture) {
- if (target.addEventListener) {
- target.addEventListener(name$$1, callback, capture || false);
- } else if (target.attachEvent) {
- target.attachEvent('on' + name$$1, callback);
- }
- };
- var removeEvent = function (target, name$$1, callback, capture) {
- if (target.removeEventListener) {
- target.removeEventListener(name$$1, callback, capture || false);
- } else if (target.detachEvent) {
- target.detachEvent('on' + name$$1, callback);
- }
- };
- var getTargetFromShadowDom = function (event$$1, defaultTarget) {
- if (event$$1.composedPath) {
- var composedPath = event$$1.composedPath();
- if (composedPath && composedPath.length > 0) {
- return composedPath[0];
- }
- }
- return defaultTarget;
- };
- var fix = function (originalEvent, data) {
- var name$$1;
- var event$$1 = data || {};
- for (name$$1 in originalEvent) {
- if (!deprecated[name$$1]) {
- event$$1[name$$1] = originalEvent[name$$1];
- }
- }
- if (!event$$1.target) {
- event$$1.target = event$$1.srcElement || document;
- }
- if ($_cseqobajnlpawll.experimentalShadowDom) {
- event$$1.target = getTargetFromShadowDom(originalEvent, event$$1.target);
- }
- if (originalEvent && mouseEventRe.test(originalEvent.type) && originalEvent.pageX === undefined && originalEvent.clientX !== undefined) {
- var eventDoc = event$$1.target.ownerDocument || document;
- var doc = eventDoc.documentElement;
- var body = eventDoc.body;
- event$$1.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
- event$$1.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
- }
- event$$1.preventDefault = function () {
- event$$1.isDefaultPrevented = returnTrue;
- if (originalEvent) {
- if (originalEvent.preventDefault) {
- originalEvent.preventDefault();
- } else {
- originalEvent.returnValue = false;
- }
- }
- };
- event$$1.stopPropagation = function () {
- event$$1.isPropagationStopped = returnTrue;
- if (originalEvent) {
- if (originalEvent.stopPropagation) {
- originalEvent.stopPropagation();
- } else {
- originalEvent.cancelBubble = true;
- }
- }
- };
- event$$1.stopImmediatePropagation = function () {
- event$$1.isImmediatePropagationStopped = returnTrue;
- event$$1.stopPropagation();
- };
- if (hasIsDefaultPrevented(event$$1) === false) {
- event$$1.isDefaultPrevented = returnFalse;
- event$$1.isPropagationStopped = returnFalse;
- event$$1.isImmediatePropagationStopped = returnFalse;
- }
- if (typeof event$$1.metaKey === 'undefined') {
- event$$1.metaKey = false;
- }
- return event$$1;
- };
- var bindOnReady = function (win, callback, eventUtils) {
- var doc = win.document, event$$1 = { type: 'ready' };
- if (eventUtils.domLoaded) {
- callback(event$$1);
- return;
- }
- var isDocReady = function () {
- return doc.readyState === 'complete' || doc.readyState === 'interactive' && doc.body;
- };
- var readyHandler = function () {
- if (!eventUtils.domLoaded) {
- eventUtils.domLoaded = true;
- callback(event$$1);
- }
- };
- var waitForDomLoaded = function () {
- if (isDocReady()) {
- removeEvent(doc, 'readystatechange', waitForDomLoaded);
- readyHandler();
- }
- };
- var tryScroll = function () {
- try {
- doc.documentElement.doScroll('left');
- } catch (ex) {
- $_2nbnh1ijnlpawpi.setTimeout(tryScroll);
- return;
- }
- readyHandler();
- };
- if (doc.addEventListener && !($_cseqobajnlpawll.ie && $_cseqobajnlpawll.ie < 11)) {
- if (isDocReady()) {
- readyHandler();
- } else {
- addEvent(win, 'DOMContentLoaded', readyHandler);
- }
- } else {
- addEvent(doc, 'readystatechange', waitForDomLoaded);
- if (doc.documentElement.doScroll && win.self === win.top) {
- tryScroll();
- }
- }
- addEvent(win, 'load', readyHandler);
- };
- var EventUtils = function () {
- var self$$1 = this;
- var events = {}, count, expando, hasFocusIn, hasMouseEnterLeave, mouseEnterLeave;
- expando = eventExpandoPrefix + (+new Date()).toString(32);
- hasMouseEnterLeave = 'onmouseenter' in document.documentElement;
- hasFocusIn = 'onfocusin' in document.documentElement;
- mouseEnterLeave = {
- mouseenter: 'mouseover',
- mouseleave: 'mouseout'
- };
- count = 1;
- self$$1.domLoaded = false;
- self$$1.events = events;
- var executeHandlers = function (evt, id) {
- var callbackList, i, l, callback;
- var container = events[id];
- callbackList = container && container[evt.type];
- if (callbackList) {
- for (i = 0, l = callbackList.length; i < l; i++) {
- callback = callbackList[i];
- if (callback && callback.func.call(callback.scope, evt) === false) {
- evt.preventDefault();
- }
- if (evt.isImmediatePropagationStopped()) {
- return;
- }
- }
- }
- };
- self$$1.bind = function (target, names, callback, scope) {
- var id, callbackList, i, name$$1, fakeName, nativeHandler, capture;
- var win = window;
- var defaultNativeHandler = function (evt) {
- executeHandlers(fix(evt || win.event), id);
- };
- if (!target || target.nodeType === 3 || target.nodeType === 8) {
- return;
- }
- if (!target[expando]) {
- id = count++;
- target[expando] = id;
- events[id] = {};
- } else {
- id = target[expando];
- }
- scope = scope || target;
- names = names.split(' ');
- i = names.length;
- while (i--) {
- name$$1 = names[i];
- nativeHandler = defaultNativeHandler;
- fakeName = capture = false;
- if (name$$1 === 'DOMContentLoaded') {
- name$$1 = 'ready';
- }
- if (self$$1.domLoaded && name$$1 === 'ready' && target.readyState === 'complete') {
- callback.call(scope, fix({ type: name$$1 }));
- continue;
- }
- if (!hasMouseEnterLeave) {
- fakeName = mouseEnterLeave[name$$1];
- if (fakeName) {
- nativeHandler = function (evt) {
- var current, related;
- current = evt.currentTarget;
- 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;
- executeHandlers(evt, id);
- }
- };
- }
- }
- if (!hasFocusIn && (name$$1 === 'focusin' || name$$1 === 'focusout')) {
- capture = true;
- fakeName = name$$1 === 'focusin' ? 'focus' : 'blur';
- nativeHandler = function (evt) {
- evt = fix(evt || win.event);
- evt.type = evt.type === 'focus' ? 'focusin' : 'focusout';
- executeHandlers(evt, id);
- };
- }
- callbackList = events[id][name$$1];
- if (!callbackList) {
- events[id][name$$1] = callbackList = [{
- func: callback,
- scope: scope
- }];
- callbackList.fakeName = fakeName;
- callbackList.capture = capture;
- callbackList.nativeHandler = nativeHandler;
- if (name$$1 === 'ready') {
- bindOnReady(target, nativeHandler, self$$1);
- } else {
- addEvent(target, fakeName || name$$1, nativeHandler, capture);
- }
- } else {
- if (name$$1 === 'ready' && self$$1.domLoaded) {
- callback({ type: name$$1 });
- } else {
- callbackList.push({
- func: callback,
- scope: scope
- });
- }
- }
- }
- target = callbackList = 0;
- return callback;
- };
- self$$1.unbind = function (target, names, callback) {
- var id, callbackList, i, ci, name$$1, eventMap;
- if (!target || target.nodeType === 3 || target.nodeType === 8) {
- return self$$1;
- }
- id = target[expando];
- if (id) {
- eventMap = events[id];
- if (names) {
- names = names.split(' ');
- i = names.length;
- while (i--) {
- name$$1 = names[i];
- callbackList = eventMap[name$$1];
- 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$$1] = callbackList;
- }
- }
- }
- if (!callback || callbackList.length === 0) {
- delete eventMap[name$$1];
- removeEvent(target, callbackList.fakeName || name$$1, callbackList.nativeHandler, callbackList.capture);
- }
- }
- }
- } else {
- for (name$$1 in eventMap) {
- callbackList = eventMap[name$$1];
- removeEvent(target, callbackList.fakeName || name$$1, callbackList.nativeHandler, callbackList.capture);
- }
- eventMap = {};
- }
- for (name$$1 in eventMap) {
- return self$$1;
- }
- delete events[id];
- try {
- delete target[expando];
- } catch (ex) {
- target[expando] = null;
- }
- }
- return self$$1;
- };
- self$$1.fire = function (target, name$$1, args) {
- var id;
- if (!target || target.nodeType === 3 || target.nodeType === 8) {
- return self$$1;
- }
- args = fix(null, args);
- args.type = name$$1;
- args.target = target;
- do {
- id = target[expando];
- if (id) {
- executeHandlers(args, id);
- }
- target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow;
- } while (target && !args.isPropagationStopped());
- return self$$1;
- };
- self$$1.clean = function (target) {
- var i, children;
- var unbind = self$$1.unbind;
- if (!target || target.nodeType === 3 || target.nodeType === 8) {
- return self$$1;
- }
- if (target[expando]) {
- unbind(target);
- }
- if (!target.getElementsByTagName) {
- target = target.document;
- }
- if (target && target.getElementsByTagName) {
- unbind(target);
- children = target.getElementsByTagName('*');
- i = children.length;
- while (i--) {
- target = children[i];
- if (target[expando]) {
- unbind(target);
- }
- }
- }
- return self$$1;
- };
- self$$1.destroy = function () {
- events = {};
- };
- self$$1.cancel = function (e) {
- if (e) {
- e.preventDefault();
- e.stopImmediatePropagation();
- }
- return false;
- };
- };
- EventUtils.Event = new EventUtils();
- EventUtils.Event.bind(window, 'ready', function () {
- });
-
- var i;
- var support;
- var Expr;
- var getText;
- var isXML;
- var tokenize;
- var compile;
- var select;
- var outermostContext;
- var sortInput;
- var hasDuplicate;
- var setDocument;
- var document$1;
- var docElem;
- var documentIsHTML;
- var rbuggyQSA;
- var rbuggyMatches;
- var matches;
- var contains$1;
- var expando = 'sizzle' + -new Date();
- var preferredDoc = window.document;
- var dirruns = 0;
- var done = 0;
- var classCache = createCache();
- var tokenCache = createCache();
- var compilerCache = createCache();
- var sortOrder = function (a, b) {
- if (a === b) {
- hasDuplicate = true;
- }
- return 0;
- };
- var strundefined = typeof undefined;
- var MAX_NEGATIVE = 1 << 31;
- var hasOwn = {}.hasOwnProperty;
- var arr = [];
- var pop = arr.pop;
- var push_native = arr.push;
- var push$1 = arr.push;
- var slice$1 = arr.slice;
- var indexOf$1 = arr.indexOf || function (elem) {
- var i = 0, len = this.length;
- for (; i < len; i++) {
- if (this[i] === elem) {
- return i;
- }
- }
- return -1;
- };
- var booleans = 'checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped';
- var whitespace = '[\\x20\\t\\r\\n\\f]';
- var identifier = '(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+';
- var attributes = '\\[' + whitespace + '*(' + identifier + ')(?:' + whitespace + '*([*^$|!~]?=)' + whitespace + '*(?:\'((?:\\\\.|[^\\\\\'])*)\'|"((?:\\\\.|[^\\\\"])*)"|(' + identifier + '))|)' + whitespace + '*\\]';
- var pseudos = ':(' + identifier + ')(?:\\((' + '(\'((?:\\\\.|[^\\\\\'])*)\'|"((?:\\\\.|[^\\\\"])*)")|' + '((?:\\\\.|[^\\\\()[\\]]|' + attributes + ')*)|' + '.*' + ')\\)|)';
- var rtrim = new RegExp('^' + whitespace + '+|((?:^|[^\\\\])(?:\\\\.)*)' + whitespace + '+$', 'g');
- var rcomma = new RegExp('^' + whitespace + '*,' + whitespace + '*');
- var rcombinators = new RegExp('^' + whitespace + '*([>+~]|' + whitespace + ')' + whitespace + '*');
- var rattributeQuotes = new RegExp('=' + whitespace + '*([^\\]\'"]*?)' + whitespace + '*\\]', 'g');
- var rpseudo = new RegExp(pseudos);
- var ridentifier = new RegExp('^' + identifier + '$');
- var 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')
- };
- var rinputs = /^(?:input|select|textarea|button)$/i;
- var rheader = /^h\d$/i;
- var rnative = /^[^{]+\{\s*\[native \w/;
- var rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/;
- var rsibling = /[+~]/;
- var rescape = /'|\\/g;
- var runescape = new RegExp('\\\\([\\da-f]{1,6}' + whitespace + '?|(' + whitespace + ')|.)', 'ig');
- var 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$1.apply(arr = slice$1.call(preferredDoc.childNodes), preferredDoc.childNodes);
- arr[preferredDoc.childNodes.length].nodeType;
- } catch (e) {
- push$1 = {
- apply: arr.length ? function (target, els) {
- push_native.apply(target, slice$1.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$1(context, elem) && elem.id === m) {
- results.push(elem);
- return results;
- }
- }
- } else if (match[2]) {
- push$1.apply(results, context.getElementsByTagName(selector));
- return results;
- } else if ((m = match[3]) && support.getElementsByClassName) {
- push$1.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$1.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$$1 = elem.nodeName.toLowerCase();
- return name$$1 === 'input' && elem.type === type;
- };
- }
- function createButtonPseudo(type) {
- return function (elem) {
- var name$$1 = elem.nodeName.toLowerCase();
- return (name$$1 === 'input' || name$$1 === '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$$1 = 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$$1 && parent$$1 !== getTop(parent$$1)) {
- if (parent$$1.addEventListener) {
- parent$$1.addEventListener('unload', function () {
- setDocument();
- }, false);
- } else if (parent$$1.attachEvent) {
- parent$$1.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$1 = 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$1(preferredDoc, a)) {
- return -1;
- }
- if (b === doc || b.ownerDocument === preferredDoc && contains$1(preferredDoc, b)) {
- return 1;
- }
- return sortInput ? indexOf$1.call(sortInput, a) - indexOf$1.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$1.call(sortInput, a) - indexOf$1.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$1(context, elem);
- };
- Sizzle.attr = function (elem, name$$1) {
- if ((elem.ownerDocument || elem) !== document$1) {
- setDocument(elem);
- }
- var fn = Expr.attrHandle[name$$1.toLowerCase()], val = fn && hasOwn.call(Expr.attrHandle, name$$1.toLowerCase()) ? fn(elem, name$$1, !documentIsHTML) : undefined;
- return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name$$1) : (val = elem.getAttributeNode(name$$1)) && 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$$1, operator, check) {
- return function (elem) {
- var result = Sizzle.attr(elem, name$$1);
- 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$$1 = elem.parentNode, name$$1 = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType;
- if (parent$$1) {
- if (simple) {
- while (dir) {
- node = elem;
- while (node = node[dir]) {
- if (ofType ? node.nodeName.toLowerCase() === name$$1 : node.nodeType === 1) {
- return false;
- }
- }
- start = dir = type === 'only' && !start && 'nextSibling';
- }
- return true;
- }
- start = [forward ? parent$$1.firstChild : parent$$1.lastChild];
- if (forward && useCache) {
- outerCache = parent$$1[expando] || (parent$$1[expando] = {});
- cache = outerCache[type] || [];
- nodeIndex = cache[0] === dirruns && cache[1];
- diff = cache[0] === dirruns && cache[2];
- node = nodeIndex && parent$$1.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$$1 : 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$1.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);
- 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$$1 = elem.nodeName.toLowerCase();
- return name$$1 === 'input' && elem.type === 'button' || name$$1 === '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$$1) {
- return [length$$1 - 1];
- }),
- eq: createPositionalPseudo(function (matchIndexes, length$$1, argument) {
- return [argument < 0 ? argument + length$$1 : argument];
- }),
- even: createPositionalPseudo(function (matchIndexes, length$$1) {
- var i = 0;
- for (; i < length$$1; i += 2) {
- matchIndexes.push(i);
- }
- return matchIndexes;
- }),
- odd: createPositionalPseudo(function (matchIndexes, length$$1) {
- var i = 1;
- for (; i < length$$1; i += 2) {
- matchIndexes.push(i);
- }
- return matchIndexes;
- }),
- lt: createPositionalPseudo(function (matchIndexes, length$$1, argument) {
- var i = argument < 0 ? argument + length$$1 : argument;
- for (; --i >= 0;) {
- matchIndexes.push(i);
- }
- return matchIndexes;
- }),
- gt: createPositionalPseudo(function (matchIndexes, length$$1, argument) {
- var i = argument < 0 ? argument + length$$1 : argument;
- for (; ++i < length$$1;) {
- matchIndexes.push(i);
- }
- return matchIndexes;
- })
- }
- };
- Expr.pseudos.nth = Expr.pseudos.eq;
- for (i in {
- radio: true,
- checkbox: true,
- file: true,
- password: true,
- image: true
- }) {
- Expr.pseudos[i] = createInputPseudo(i);
- }
- for (i in {
- submit: true,
- reset: true
- }) {
- 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 ((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$1.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$1.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$1.call(checkContext, elem) > -1;
- }, implicitRelative, true), matchers = [function (elem, context, xml) {
- return !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));
- }];
- 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$1.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$1.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 isArray$1 = Array.isArray;
- var toArray = function (obj) {
- var array = obj, i, l;
- if (!isArray$1(obj)) {
- array = [];
- for (i = 0, l = obj.length; i < l; i++) {
- array[i] = obj[i];
- }
- }
- return array;
- };
- var each$1 = function (o, cb, s) {
- var n, l;
- if (!o) {
- return 0;
- }
- 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 0;
- }
- }
- } else {
- for (n in o) {
- if (o.hasOwnProperty(n)) {
- if (cb.call(s, o[n], n, o) === false) {
- return 0;
- }
- }
- }
- }
- return 1;
- };
- var map$1 = function (array, callback) {
- var out = [];
- each$1(array, function (item, index) {
- out.push(callback(item, index, array));
- });
- return out;
- };
- var filter$1 = function (a, f) {
- var o = [];
- each$1(a, function (v, index) {
- if (!f || f(v, index, a)) {
- o.push(v);
- }
- });
- return o;
- };
- var indexOf$2 = function (a, v) {
- var i, l;
- if (a) {
- for (i = 0, l = a.length; i < l; i++) {
- if (a[i] === v) {
- return i;
- }
- }
- }
- return -1;
- };
- var reduce = function (collection, iteratee, accumulator, thisArg) {
- var i = 0;
- if (arguments.length < 3) {
- accumulator = collection[0];
- }
- for (; i < collection.length; i++) {
- accumulator = iteratee.call(thisArg, accumulator, collection[i], i);
- }
- return accumulator;
- };
- 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 find$1 = function (array, predicate, thisArg) {
- var idx = findIndex$1(array, predicate, thisArg);
- if (idx !== -1) {
- return array[idx];
- }
- return undefined;
- };
- var last$1 = function (collection) {
- return collection[collection.length - 1];
- };
- var $_n452lmjnlpawsj = {
- isArray: isArray$1,
- toArray: toArray,
- each: each$1,
- map: map$1,
- filter: filter$1,
- indexOf: indexOf$2,
- reduce: reduce,
- findIndex: findIndex$1,
- find: find$1,
- last: last$1
- };
-
- var whiteSpaceRegExp = /^\s*|\s*$/g;
- var trim = function (str) {
- return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp, '');
- };
- var is = function (obj, type) {
- if (!type) {
- return obj !== undefined;
- }
- if (type === 'array' && $_n452lmjnlpawsj.isArray(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 = function (obj, prop) {
- return Object.prototype.hasOwnProperty.call(obj, prop);
- };
- var create = function (s, p, root) {
- var self$$1 = this;
- var sp, ns, cn, scn, c, de = 0;
- s = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(s);
- cn = s[3].match(/(^|\.)(\w+)$/i)[2];
- ns = self$$1.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$$1.extend(ns[cn].prototype, p);
- if (s[5]) {
- sp = self$$1.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$$1.each(sp, function (f, n) {
- ns[cn].prototype[n] = sp[n];
- });
- self$$1.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$$1.each(p.static, function (f, n) {
- ns[cn][n] = f;
- });
- };
- var extend = function (obj, ext) {
- var x = [];
- for (var _i = 2; _i < arguments.length; _i++) {
- x[_i - 2] = arguments[_i];
- }
- var i, l, name$$1;
- var args = arguments;
- var value;
- for (i = 1, l = args.length; i < l; i++) {
- ext = args[i];
- for (name$$1 in ext) {
- if (ext.hasOwnProperty(name$$1)) {
- 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];
- }
- $_n452lmjnlpawsj.each(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$1 = 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 $_n452lmjnlpawsj.map(s.split(d || ','), trim);
- };
- var _addCacheSuffix = function (url) {
- var cacheSuffix = $_cseqobajnlpawll.cacheSuffix;
- if (cacheSuffix) {
- url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix;
- }
- return url;
- };
- var $_1q1txeljnlpawsa = {
- trim: trim,
- isArray: $_n452lmjnlpawsj.isArray,
- is: is,
- toArray: $_n452lmjnlpawsj.toArray,
- makeMap: makeMap,
- each: $_n452lmjnlpawsj.each,
- map: $_n452lmjnlpawsj.map,
- grep: $_n452lmjnlpawsj.filter,
- inArray: $_n452lmjnlpawsj.indexOf,
- hasOwn: hasOwnProperty,
- extend: extend,
- create: create,
- walk: walk,
- createNS: createNS,
- resolve: resolve$1,
- explode: explode,
- _addCacheSuffix: _addCacheSuffix
- };
-
- var doc = document;
- var push$2 = Array.prototype.push;
- var slice$2 = Array.prototype.slice;
- var rquickExpr$1 = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/;
- var Event$$1 = EventUtils.Event;
- var skipUniques = $_1q1txeljnlpawsa.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) {
- var frag, node, container;
- fragDoc = fragDoc || doc;
- container = fragDoc.createElement('div');
- frag = fragDoc.createDocumentFragment();
- container.innerHTML = html;
- 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 = function (elements, wrapper, all) {
- var lastParent, newWrapper;
- wrapper = DomQuery(wrapper)[0];
- elements.each(function () {
- var self$$1 = this;
- if (!all || lastParent !== self$$1.parentNode) {
- lastParent = self$$1.parentNode;
- newWrapper = wrapper.cloneNode(false);
- self$$1.parentNode.insertBefore(newWrapper, self$$1);
- newWrapper.appendChild(self$$1);
- } else {
- newWrapper.appendChild(self$$1);
- }
- });
- return elements;
- };
- var numericCssMap = $_1q1txeljnlpawsa.makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom', ' ');
- var booleanMap = $_1q1txeljnlpawsa.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 = {};
- var cssHooks = {};
- var DomQuery = function (selector, context) {
- return new DomQuery.fn.init(selector, context);
- };
- var inArray = 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$1 = /^\s*|\s*$/g;
- var trim$1 = function (str) {
- return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp$1, '');
- };
- var each$2 = function (obj, callback) {
- var length$$1, key, i, value;
- if (obj) {
- length$$1 = obj.length;
- if (length$$1 === 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$$1; i++) {
- value = obj[i];
- if (callback.call(value, i, value) === false) {
- break;
- }
- }
- }
- }
- return obj;
- };
- var grep = function (array, callback) {
- var out = [];
- each$2(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;
- };
- DomQuery.fn = DomQuery.prototype = {
- constructor: DomQuery,
- selector: '',
- context: null,
- length: 0,
- init: function (selector, context) {
- var self$$1 = this;
- var match, node;
- if (!selector) {
- return self$$1;
- }
- if (selector.nodeType) {
- self$$1.context = self$$1[0] = selector;
- self$$1.length = 1;
- return self$$1;
- }
- if (context && context.nodeType) {
- self$$1.context = context;
- } else {
- if (context) {
- return DomQuery(selector).attr(context);
- }
- self$$1.context = context = document;
- }
- if (isString$1(selector)) {
- self$$1.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$2.call(self$$1, node);
- node = node.nextSibling;
- }
- } else {
- node = getElementDocument(context).getElementById(match[2]);
- if (!node) {
- return self$$1;
- }
- if (node.id !== match[2]) {
- return self$$1.find(selector);
- }
- self$$1.length = 1;
- self$$1[0] = node;
- }
- } else {
- return DomQuery(context).find(selector);
- }
- } else {
- this.add(selector, false);
- }
- return self$$1;
- },
- toArray: function () {
- return $_1q1txeljnlpawsa.toArray(this);
- },
- add: function (items, sort) {
- var self$$1 = this;
- var nodes, i;
- if (isString$1(items)) {
- return self$$1.add(DomQuery(items));
- }
- if (sort !== false) {
- nodes = DomQuery.unique(self$$1.toArray().concat(DomQuery.makeArray(items)));
- self$$1.length = nodes.length;
- for (i = 0; i < nodes.length; i++) {
- self$$1[i] = nodes[i];
- }
- } else {
- push$2.apply(self$$1, DomQuery.makeArray(items));
- }
- return self$$1;
- },
- attr: function (name$$1, value) {
- var self$$1 = this;
- var hook;
- if (typeof name$$1 === 'object') {
- each$2(name$$1, function (name$$1, value) {
- self$$1.attr(name$$1, value);
- });
- } else if (isDefined(value)) {
- this.each(function () {
- var hook;
- if (this.nodeType === 1) {
- hook = attrHooks[name$$1];
- if (hook && hook.set) {
- hook.set(this, value);
- return;
- }
- if (value === null) {
- this.removeAttribute(name$$1, 2);
- } else {
- this.setAttribute(name$$1, value, 2);
- }
- }
- });
- } else {
- if (self$$1[0] && self$$1[0].nodeType === 1) {
- hook = attrHooks[name$$1];
- if (hook && hook.get) {
- return hook.get(self$$1[0], name$$1);
- }
- if (booleanMap[name$$1]) {
- return self$$1.prop(name$$1) ? name$$1 : undefined;
- }
- value = self$$1[0].getAttribute(name$$1, 2);
- if (value === null) {
- value = undefined;
- }
- }
- return value;
- }
- return self$$1;
- },
- removeAttr: function (name$$1) {
- return this.attr(name$$1, null);
- },
- prop: function (name$$1, value) {
- var self$$1 = this;
- name$$1 = propFix[name$$1] || name$$1;
- if (typeof name$$1 === 'object') {
- each$2(name$$1, function (name$$1, value) {
- self$$1.prop(name$$1, value);
- });
- } else if (isDefined(value)) {
- this.each(function () {
- if (this.nodeType === 1) {
- this[name$$1] = value;
- }
- });
- } else {
- if (self$$1[0] && self$$1[0].nodeType && name$$1 in self$$1[0]) {
- return self$$1[0][name$$1];
- }
- return value;
- }
- return self$$1;
- },
- css: function (name$$1, value) {
- var self$$1 = this;
- var elm, hook;
- var camel = function (name$$1) {
- return name$$1.replace(/-(\D)/g, function (a, b) {
- return b.toUpperCase();
- });
- };
- var dashed = function (name$$1) {
- return name$$1.replace(/[A-Z]/g, function (a) {
- return '-' + a;
- });
- };
- if (typeof name$$1 === 'object') {
- each$2(name$$1, function (name$$1, value) {
- self$$1.css(name$$1, value);
- });
- } else {
- if (isDefined(value)) {
- name$$1 = camel(name$$1);
- if (typeof value === 'number' && !numericCssMap[name$$1]) {
- value = value.toString() + 'px';
- }
- self$$1.each(function () {
- var style = this.style;
- hook = cssHooks[name$$1];
- if (hook && hook.set) {
- hook.set(this, value);
- return;
- }
- try {
- this.style[cssFix[name$$1] || name$$1] = value;
- } catch (ex) {
- }
- if (value === null || value === '') {
- if (style.removeProperty) {
- style.removeProperty(dashed(name$$1));
- } else {
- style.removeAttribute(name$$1);
- }
- }
- });
- } else {
- elm = self$$1[0];
- hook = cssHooks[name$$1];
- if (hook && hook.get) {
- return hook.get(elm);
- }
- if (elm.ownerDocument.defaultView) {
- try {
- return elm.ownerDocument.defaultView.getComputedStyle(elm, null).getPropertyValue(dashed(name$$1));
- } catch (ex) {
- return undefined;
- }
- } else if (elm.currentStyle) {
- return elm.currentStyle[camel(name$$1)];
- } else {
- return '';
- }
- }
- }
- return self$$1;
- },
- remove: function () {
- var self$$1 = this;
- var node, i = this.length;
- while (i--) {
- node = self$$1[i];
- Event$$1.clean(node);
- if (node.parentNode) {
- node.parentNode.removeChild(node);
- }
- }
- return this;
- },
- empty: function () {
- var self$$1 = this;
- var node, i = this.length;
- while (i--) {
- node = self$$1[i];
- while (node.firstChild) {
- node.removeChild(node.firstChild);
- }
- }
- return this;
- },
- html: function (value) {
- var self$$1 = this;
- var i;
- if (isDefined(value)) {
- i = self$$1.length;
- try {
- while (i--) {
- self$$1[i].innerHTML = value;
- }
- } catch (ex) {
- DomQuery(self$$1[i]).empty().append(value);
- }
- return self$$1;
- }
- return self$$1[0] ? self$$1[0].innerHTML : '';
- },
- text: function (value) {
- var self$$1 = this;
- var i;
- if (isDefined(value)) {
- i = self$$1.length;
- while (i--) {
- if ('innerText' in self$$1[i]) {
- self$$1[i].innerText = value;
- } else {
- self$$1[0].textContent = value;
- }
- }
- return self$$1;
- }
- return self$$1[0] ? self$$1[0].innerText || self$$1[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$$1 = this;
- if (self$$1[0] && self$$1[0].parentNode) {
- return domManipulate(self$$1, arguments, function (node) {
- this.parentNode.insertBefore(node, this);
- });
- }
- return self$$1;
- },
- after: function () {
- var self$$1 = this;
- if (self$$1[0] && self$$1[0].parentNode) {
- return domManipulate(self$$1, arguments, function (node) {
- this.parentNode.insertBefore(node, this.nextSibling);
- }, true);
- }
- return self$$1;
- },
- 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(this, content);
- },
- wrapAll: function (content) {
- return wrap(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$$1 = this;
- if (typeof className !== 'string') {
- return self$$1;
- }
- if (className.indexOf(' ') !== -1) {
- each$2(className.split(' '), function () {
- self$$1.toggleClass(this, state);
- });
- } else {
- self$$1.each(function (index, node) {
- var existingClassName, classState;
- classState = hasClass(node, className);
- if (classState !== state) {
- existingClassName = node.className;
- if (classState) {
- node.className = trim$1((' ' + existingClassName + ' ').replace(' ' + className + ' ', ' '));
- } else {
- node.className += existingClassName ? ' ' + className : className;
- }
- }
- });
- }
- return self$$1;
- },
- hasClass: function (className) {
- return hasClass(this[0], className);
- },
- each: function (callback) {
- return each$2(this, callback);
- },
- on: function (name$$1, callback) {
- return this.each(function () {
- Event$$1.bind(this, name$$1, callback);
- });
- },
- off: function (name$$1, callback) {
- return this.each(function () {
- Event$$1.unbind(this, name$$1, callback);
- });
- },
- trigger: function (name$$1) {
- return this.each(function () {
- if (typeof name$$1 === 'object') {
- Event$$1.fire(this, name$$1.type, name$$1);
- } else {
- Event$$1.fire(this, name$$1);
- }
- });
- },
- show: function () {
- return this.css('display', '');
- },
- hide: function () {
- return this.css('display', 'none');
- },
- slice: function () {
- return new DomQuery(slice$2.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$2,
- sort: [].sort,
- splice: [].splice
- };
- $_1q1txeljnlpawsa.extend(DomQuery, {
- extend: $_1q1txeljnlpawsa.extend,
- makeArray: function (object) {
- if (isWindow(object) || object.nodeType) {
- return [object];
- }
- return $_1q1txeljnlpawsa.toArray(object);
- },
- inArray: inArray,
- isArray: $_1q1txeljnlpawsa.isArray,
- each: each$2,
- trim: trim$1,
- 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 = 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$2({
- parent: function (node) {
- var parent$$1 = node.parentNode;
- return parent$$1 && parent$$1.nodeType !== 11 ? parent$$1 : 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(node.firstChild, 'nextSibling', 1);
- },
- contents: function (node) {
- return $_1q1txeljnlpawsa.toArray((node.nodeName === 'iframe' ? node.contentDocument || node.contentWindow.document : node).childNodes);
- }
- }, function (name$$1, fn) {
- DomQuery.fn[name$$1] = function (selector) {
- var self$$1 = this;
- var result = [];
- self$$1.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$$1]) {
- result = DomQuery.unique(result);
- }
- if (name$$1.indexOf('parents') === 0) {
- result = result.reverse();
- }
- }
- result = DomQuery(result);
- if (selector) {
- return result.filter(selector);
- }
- return result;
- };
- });
- each$2({
- parentsUntil: function (node, until) {
- return dir(node, 'parentNode', until);
- },
- nextUntil: function (node, until) {
- return sibling(node, 'nextSibling', 1, until).slice(1);
- },
- prevUntil: function (node, until) {
- return sibling(node, 'previousSibling', 1, until).slice(1);
- }
- }, function (name$$1, fn) {
- DomQuery.fn[name$$1] = function (selector, filter) {
- var self$$1 = this;
- var result = [];
- self$$1.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$$1.indexOf('parents') === 0 || name$$1 === 'prevUntil') {
- result = result.reverse();
- }
- }
- result = DomQuery(result);
- if (filter) {
- return result.filter(filter);
- }
- return result;
- };
- });
- DomQuery.fn.is = function (selector) {
- return !!selector && this.filter(selector).length > 0;
- };
- DomQuery.fn.init.prototype = DomQuery.fn;
- DomQuery.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;
- };
- var appendHooks = function (targetHooks, prop, hooks) {
- each$2(hooks, function (name$$1, func) {
- targetHooks[name$$1] = targetHooks[name$$1] || {};
- targetHooks[name$$1][prop] = func;
- });
- };
- if ($_cseqobajnlpawll.ie && $_cseqobajnlpawll.ie < 8) {
- appendHooks(attrHooks, 'get', {
- maxlength: function (elm) {
- var value = elm.maxLength;
- if (value === 2147483647) {
- return undefined;
- }
- return value;
- },
- size: function (elm) {
- var value = elm.size;
- if (value === 20) {
- return undefined;
- }
- return value;
- },
- class: function (elm) {
- return elm.className;
- },
- style: function (elm) {
- var value = elm.style.cssText;
- if (value.length === 0) {
- return undefined;
- }
- return value;
- }
- });
- appendHooks(attrHooks, 'set', {
- class: function (elm, value) {
- elm.className = value;
- },
- style: function (elm, value) {
- elm.style.cssText = value;
- }
- });
- }
- if ($_cseqobajnlpawll.ie && $_cseqobajnlpawll.ie < 9) {
- cssFix.float = 'styleFloat';
- appendHooks(cssHooks, 'set', {
- opacity: function (elm, value) {
- var style = elm.style;
- if (value === null || value === '') {
- style.removeAttribute('filter');
- } else {
- style.zoom = 1;
- style.filter = 'alpha(opacity=' + value * 100 + ')';
- }
- }
- });
- }
- DomQuery.attrHooks = attrHooks;
- DomQuery.cssHooks = cssHooks;
-
- 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 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$2 = 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$2(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 edge = 'Edge';
- var chrome = 'Chrome';
- var ie$1 = 'IE';
- var opera$1 = 'Opera';
- var firefox = 'Firefox';
- var safari = 'Safari';
- var isBrowser = function (name, current) {
- return function () {
- return current === name;
- };
- };
- 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;
- return {
- current: current,
- version: version,
- isEdge: isBrowser(edge, current),
- isChrome: isBrowser(chrome, current),
- isIE: isBrowser(ie$1, current),
- isOpera: isBrowser(opera$1, current),
- isFirefox: isBrowser(firefox, current),
- isSafari: isBrowser(safari, current)
- };
- };
- var Browser = {
- unknown: unknown$1,
- nu: nu$1,
- edge: constant(edge),
- chrome: constant(chrome),
- ie: constant(ie$1),
- opera: constant(opera$1),
- firefox: constant(firefox),
- safari: constant(safari)
- };
-
- var windows = 'Windows';
- var ios = 'iOS';
- var android$1 = 'Android';
- var linux = 'Linux';
- var osx = 'OSX';
- var solaris = 'Solaris';
- var freebsd = 'FreeBSD';
- var isOS = function (name, current) {
- return function () {
- return current === name;
- };
- };
- 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;
- return {
- current: current,
- version: version,
- isWindows: isOS(windows, current),
- isiOS: isOS(ios, current),
- isAndroid: isOS(android$1, current),
- isOSX: isOS(osx, current),
- isLinux: isOS(linux, current),
- isSolaris: isOS(solaris, current),
- isFreeBSD: isOS(freebsd, current)
- };
- };
- var OperatingSystem = {
- unknown: unknown$2,
- nu: nu$2,
- windows: constant(windows),
- ios: constant(ios),
- android: constant(android$1),
- linux: constant(linux),
- osx: constant(osx),
- solaris: constant(solaris),
- freebsd: constant(freebsd)
- };
-
- var DeviceType = function (os, browser, userAgent) {
- var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;
- var isiPhone = os.isiOS() && !isiPad;
- var isAndroid3 = os.isAndroid() && os.version.major === 3;
- var isAndroid4 = os.isAndroid() && os.version.major === 4;
- var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;
- var isTouch = os.isiOS() || os.isAndroid();
- var isPhone = isTouch && !isTablet;
- var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;
- 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)
- };
- };
-
- 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 contains$2 = function (str, substr) {
- return str.indexOf(substr) !== -1;
- };
-
-
-
- var trim$2 = function (str) {
- return str.replace(/^\s+|\s+$/g, '');
- };
-
- var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/;
- var checkContains = function (target) {
- return function (uastring) {
- return contains$2(uastring, target);
- };
- };
- var browsers = [
- {
- name: 'Edge',
- versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
- search: function (uastring) {
- var monstrosity = contains$2(uastring, 'edge/') && contains$2(uastring, 'chrome') && contains$2(uastring, 'safari') && contains$2(uastring, 'applewebkit');
- return monstrosity;
- }
- },
- {
- name: 'Chrome',
- versionRegexes: [
- /.*?chrome\/([0-9]+)\.([0-9]+).*/,
- normalVersionRegex
- ],
- search: function (uastring) {
- return contains$2(uastring, 'chrome') && !contains$2(uastring, 'chromeframe');
- }
- },
- {
- name: 'IE',
- versionRegexes: [
- /.*?msie\ ?([0-9]+)\.([0-9]+).*/,
- /.*?rv:([0-9]+)\.([0-9]+).*/
- ],
- search: function (uastring) {
- return contains$2(uastring, 'msie') || contains$2(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$2(uastring, 'safari') || contains$2(uastring, 'mobile/')) && contains$2(uastring, 'applewebkit');
- }
- }
- ];
- var oses = [
- {
- name: 'Windows',
- search: checkContains('win'),
- versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
- },
- {
- name: 'iOS',
- search: function (uastring) {
- return contains$2(uastring, 'iphone') || contains$2(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('os x'),
- versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]
- },
- {
- name: 'Linux',
- search: checkContains('linux'),
- versionRegexes: []
- },
- {
- name: 'Solaris',
- search: checkContains('sunos'),
- versionRegexes: []
- },
- {
- name: 'FreeBSD',
- search: checkContains('freebsd'),
- versionRegexes: []
- }
- ];
- var PlatformInfo = {
- browsers: constant(browsers),
- oses: constant(oses)
- };
-
- var detect$2 = function (userAgent) {
- 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);
- return {
- browser: browser,
- os: os,
- deviceType: deviceType
- };
- };
- var PlatformDetection = { detect: detect$2 };
-
- var detect$3 = cached(function () {
- var userAgent = navigator.userAgent;
- return PlatformDetection.detect(userAgent);
- });
- var $_766rx4ojnlpawtd = { detect: detect$3 };
-
- 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 '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: constant(node) };
- };
- var fromPoint = function (docElm, x, y) {
- var doc = docElm.dom();
- return Option.from(doc.elementFromPoint(x, y)).map(fromDom);
- };
- var Element$$1 = {
- fromHtml: fromHtml,
- fromTag: fromTag,
- fromText: fromText,
- fromDom: fromDom,
- fromPoint: fromPoint
- };
-
- var $_8b12q912jnlpawv7 = {
- ATTRIBUTE: Node.ATTRIBUTE_NODE,
- CDATA_SECTION: Node.CDATA_SECTION_NODE,
- COMMENT: Node.COMMENT_NODE,
- DOCUMENT: Node.DOCUMENT_NODE,
- DOCUMENT_TYPE: Node.DOCUMENT_TYPE_NODE,
- DOCUMENT_FRAGMENT: Node.DOCUMENT_FRAGMENT_NODE,
- ELEMENT: Node.ELEMENT_NODE,
- TEXT: Node.TEXT_NODE,
- PROCESSING_INSTRUCTION: Node.PROCESSING_INSTRUCTION_NODE,
- ENTITY_REFERENCE: Node.ENTITY_REFERENCE_NODE,
- ENTITY: Node.ENTITY_NODE,
- NOTATION: Node.NOTATION_NODE
- };
-
- var name = function (element) {
- var r = element.dom().nodeName;
- return r.toLowerCase();
- };
- var type = function (element) {
- return element.dom().nodeType;
- };
- var value = function (element) {
- return element.dom().nodeValue;
- };
- var isType$1 = function (t) {
- return function (element) {
- return type(element) === t;
- };
- };
- var isComment = function (element) {
- return type(element) === $_8b12q912jnlpawv7.COMMENT || name(element) === '#comment';
- };
- var isElement = isType$1($_8b12q912jnlpawv7.ELEMENT);
- var isText = isType$1($_8b12q912jnlpawv7.TEXT);
- var isDocument = isType$1($_8b12q912jnlpawv7.DOCUMENT);
- var $_7u5fzs11jnlpawv6 = {
- name: name,
- type: type,
- value: value,
- isElement: isElement,
- isText: isText,
- isDocument: isDocument,
- isComment: isComment
- };
-
- var keys = Object.keys;
-
- var each$3 = 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, obj);
- }
- };
- var map$2 = function (obj, f) {
- return tupleMap(obj, function (x, i, obj) {
- return {
- k: i,
- v: f(x, i, obj)
- };
- });
- };
- var tupleMap = function (obj, f) {
- var r = {};
- each$3(obj, function (x, i) {
- var tuple = f(x, i, obj);
- r[tuple.k] = tuple.v;
- });
- return r;
- };
- var bifilter = function (obj, pred) {
- var t = {};
- var f = {};
- each$3(obj, function (x, i) {
- var branch = pred(x, i) ? t : f;
- branch[i] = x;
- });
- return {
- t: t,
- f: f
- };
- };
-
- var rawSet = function (dom, key, value) {
- if (isString(value) || isBoolean(value) || isNumber(value)) {
- dom.setAttribute(key, value + '');
- } else {
- console.error('Invalid call to Attr.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$3(attrs, function (v, k) {
- rawSet(dom, k, v);
- });
- };
- var get$1 = function (element, key) {
- var v = element.dom().getAttribute(key);
- return v === null ? undefined : v;
- };
- var has$1 = function (element, key) {
- var dom = element.dom();
- return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;
- };
- var remove = function (element, key) {
- element.dom().removeAttribute(key);
- };
- var hasNone = function (element) {
- var attrs = element.dom().attributes;
- return attrs === undefined || attrs === null || attrs.length === 0;
- };
- var clone = function (element) {
- return foldl(element.dom().attributes, function (acc, attr) {
- acc[attr.name] = attr.value;
- return acc;
- }, {});
- };
- var transferOne = function (source, destination, attr) {
- if (has$1(source, attr) && !has$1(destination, attr))
- set(destination, attr, get$1(source, attr));
- };
- var transfer = function (source, destination, attrs) {
- if (!$_7u5fzs11jnlpawv6.isElement(source) || !$_7u5fzs11jnlpawv6.isElement(destination))
- return;
- each(attrs, function (attr) {
- transferOne(source, destination, attr);
- });
- };
- var $_521j8z15jnlpawz7 = {
- clone: clone,
- set: set,
- setAll: setAll,
- get: get$1,
- has: has$1,
- remove: remove,
- hasNone: hasNone,
- transfer: transfer
- };
-
- var inBody = function (element) {
- var dom = $_7u5fzs11jnlpawv6.isText(element) ? element.dom().parentNode : element.dom();
- return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);
- };
- var body = cached(function () {
- return getBody(Element$$1.fromDom(document));
- });
- var getBody = function (doc) {
- var body = doc.dom().body;
- if (body === null || body === undefined)
- throw 'Body is not available yet';
- return Element$$1.fromDom(body);
- };
- var $_1lsags16jnlpawzj = {
- body: body,
- getBody: getBody,
- inBody: inBody
- };
-
- var isSupported = function (dom) {
- return dom.style !== undefined;
- };
- var $_1z4orl17jnlpawzp = { isSupported: isSupported };
-
- 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 ($_1z4orl17jnlpawzp.isSupported(dom))
- dom.style.setProperty(property, value);
- };
- var internalRemove = function (dom, property) {
- if ($_1z4orl17jnlpawzp.isSupported(dom))
- dom.style.removeProperty(property);
- };
- var set$1 = function (element, property, value) {
- var dom = element.dom();
- internalSet(dom, property, value);
- };
- var setAll$1 = function (element, css) {
- var dom = element.dom();
- each$3(css, function (v, k) {
- internalSet(dom, k, v);
- });
- };
- var setOptions = function (element, css) {
- var dom = element.dom();
- each$3(css, function (v, k) {
- v.fold(function () {
- internalRemove(dom, k);
- }, function (value) {
- internalSet(dom, k, value);
- });
- });
- };
- var get$2 = function (element, property) {
- var dom = element.dom();
- var styles = window.getComputedStyle(dom);
- var r = styles.getPropertyValue(property);
- var v = r === '' && !$_1lsags16jnlpawzj.inBody(element) ? getUnsafeProperty(dom, property) : r;
- return v === null ? undefined : v;
- };
- var getUnsafeProperty = function (dom, property) {
- return $_1z4orl17jnlpawzp.isSupported(dom) ? dom.style.getPropertyValue(property) : '';
- };
- var getRaw = function (element, property) {
- var dom = element.dom();
- var raw = getUnsafeProperty(dom, property);
- return Option.from(raw).filter(function (r) {
- return r.length > 0;
- });
- };
- var getAllRaw = function (element) {
- var css = {};
- var dom = element.dom();
- if ($_1z4orl17jnlpawzp.isSupported(dom)) {
- for (var i = 0; i < dom.style.length; i++) {
- var ruleName = dom.style.item(i);
- css[ruleName] = dom.style[ruleName];
- }
- }
- return css;
- };
- var isValidValue = function (tag, property, value) {
- var element = Element$$1.fromTag(tag);
- set$1(element, property, value);
- var style = getRaw(element, property);
- return style.isSome();
- };
- var remove$1 = function (element, property) {
- var dom = element.dom();
- internalRemove(dom, property);
- if ($_521j8z15jnlpawz7.has(element, 'style') && trim$2($_521j8z15jnlpawz7.get(element, 'style')) === '') {
- $_521j8z15jnlpawz7.remove(element, 'style');
- }
- };
- var preserve = function (element, f) {
- var oldStyles = $_521j8z15jnlpawz7.get(element, 'style');
- var result = f(element);
- var restore = oldStyles === undefined ? $_521j8z15jnlpawz7.remove : $_521j8z15jnlpawz7.set;
- restore(element, 'style', oldStyles);
- return result;
- };
- var copy = function (source, target) {
- var sourceDom = source.dom();
- var targetDom = target.dom();
- if ($_1z4orl17jnlpawzp.isSupported(sourceDom) && $_1z4orl17jnlpawzp.isSupported(targetDom)) {
- targetDom.style.cssText = sourceDom.style.cssText;
- }
- };
- var reflow = function (e) {
- return e.dom().offsetWidth;
- };
- var transferOne$1 = function (source, destination, style) {
- getRaw(source, style).each(function (value) {
- if (getRaw(destination, style).isNone())
- set$1(destination, style, value);
- });
- };
- var transfer$1 = function (source, destination, styles) {
- if (!$_7u5fzs11jnlpawv6.isElement(source) || !$_7u5fzs11jnlpawv6.isElement(destination))
- return;
- each(styles, function (style) {
- transferOne$1(source, destination, style);
- });
- };
- var $_asiuhf13jnlpawvc = {
- copy: copy,
- set: set$1,
- preserve: preserve,
- setAll: setAll$1,
- setOptions: setOptions,
- remove: remove$1,
- get: get$2,
- getRaw: getRaw,
- getAllRaw: getAllRaw,
- isValidValue: isValidValue,
- reflow: reflow,
- transfer: transfer$1
- };
-
- var Immutable = function () {
- var fields = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- fields[_i] = arguments[_i];
- }
- return function () {
- var values = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- values[_i] = arguments[_i];
- }
- if (fields.length !== values.length) {
- throw new Error('Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments');
- }
- var struct = {};
- each(fields, function (name, i) {
- struct[name] = constant(values[i]);
- });
- return struct;
- };
- };
-
- 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 $_arqw5m1djnlpax0i = { toArray: toArray$1 };
-
- var node = function () {
- var f = $_3b2dlgcjnlpawlt.getOrDie('Node');
- return f;
- };
- var compareDocumentPosition = function (a, b, match) {
- return (a.compareDocumentPosition(b) & match) !== 0;
- };
- var documentPositionPreceding = function (a, b) {
- return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);
- };
- var documentPositionContainedBy = function (a, b) {
- return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);
- };
- var $_eo508y1fjnlpax0w = {
- documentPositionPreceding: documentPositionPreceding,
- documentPositionContainedBy: documentPositionContainedBy
- };
-
- var ELEMENT = $_8b12q912jnlpawv7.ELEMENT;
- var DOCUMENT = $_8b12q912jnlpawv7.DOCUMENT;
- var is$1 = function (element, selector) {
- var elem = element.dom();
- if (elem.nodeType !== ELEMENT)
- return false;
- else 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.childElementCount === 0;
- };
- var all = function (selector, scope) {
- var base = scope === undefined ? document : scope.dom();
- return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element$$1.fromDom);
- };
- var one = function (selector, scope) {
- var base = scope === undefined ? document : scope.dom();
- return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element$$1.fromDom);
- };
- var $_d8v5lf1gjnlpax0y = {
- all: all,
- is: is$1,
- one: one
- };
-
- var eq = function (e1, e2) {
- return e1.dom() === e2.dom();
- };
- var isEqualNode = function (e1, e2) {
- return e1.dom().isEqualNode(e2.dom());
- };
- var member = function (element, elements) {
- return exists(elements, curry(eq, element));
- };
- var regularContains = function (e1, e2) {
- var d1 = e1.dom(), d2 = e2.dom();
- return d1 === d2 ? false : d1.contains(d2);
- };
- var ieContains = function (e1, e2) {
- return $_eo508y1fjnlpax0w.documentPositionContainedBy(e1.dom(), e2.dom());
- };
- var browser = $_766rx4ojnlpawtd.detect().browser;
- var contains$3 = browser.isIE() ? ieContains : regularContains;
- var $_5h7cor1ejnlpax0k = {
- eq: eq,
- isEqualNode: isEqualNode,
- member: member,
- contains: contains$3,
- is: $_d8v5lf1gjnlpax0y.is
- };
-
- var owner = function (element) {
- return Element$$1.fromDom(element.dom().ownerDocument);
- };
- var documentElement = function (element) {
- return Element$$1.fromDom(element.dom().ownerDocument.documentElement);
- };
- var defaultView = function (element) {
- var el = element.dom();
- var defaultView = el.ownerDocument.defaultView;
- return Element$$1.fromDom(defaultView);
- };
- var parent = function (element) {
- var dom = element.dom();
- return Option.from(dom.parentNode).map(Element$$1.fromDom);
- };
- var findIndex$2 = function (element) {
- return parent(element).bind(function (p) {
- var kin = children(p);
- return findIndex(kin, function (elem) {
- return $_5h7cor1ejnlpax0k.eq(element, elem);
- });
- });
- };
- var parents = function (element, isRoot) {
- var stop = isFunction(isRoot) ? isRoot : constant(false);
- var dom = element.dom();
- var ret = [];
- while (dom.parentNode !== null && dom.parentNode !== undefined) {
- var rawParent = dom.parentNode;
- var parent = Element$$1.fromDom(rawParent);
- ret.push(parent);
- if (stop(parent) === true)
- break;
- else
- dom = rawParent;
- }
- return ret;
- };
- var siblings = function (element) {
- var filterSelf = function (elements) {
- return filter(elements, function (x) {
- return !$_5h7cor1ejnlpax0k.eq(element, x);
- });
- };
- return parent(element).map(children).map(filterSelf).getOr([]);
- };
- var offsetParent = function (element) {
- var dom = element.dom();
- return Option.from(dom.offsetParent).map(Element$$1.fromDom);
- };
- var prevSibling = function (element) {
- var dom = element.dom();
- return Option.from(dom.previousSibling).map(Element$$1.fromDom);
- };
- var nextSibling = function (element) {
- var dom = element.dom();
- return Option.from(dom.nextSibling).map(Element$$1.fromDom);
- };
- var prevSiblings = function (element) {
- return reverse($_arqw5m1djnlpax0i.toArray(element, prevSibling));
- };
- var nextSiblings = function (element) {
- return $_arqw5m1djnlpax0i.toArray(element, nextSibling);
- };
- var children = function (element) {
- var dom = element.dom();
- return map(dom.childNodes, Element$$1.fromDom);
- };
- var child = function (element, index) {
- var children = element.dom().childNodes;
- return Option.from(children[index]).map(Element$$1.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 hasChildNodes = function (element) {
- return element.dom().hasChildNodes();
- };
- var spot = Immutable('element', 'offset');
- var leaf = function (element, offset) {
- var cs = children(element);
- return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);
- };
- var $_dr4ybh18jnlpawzt = {
- owner: owner,
- defaultView: defaultView,
- documentElement: documentElement,
- parent: parent,
- findIndex: findIndex$2,
- parents: parents,
- siblings: siblings,
- prevSibling: prevSibling,
- offsetParent: offsetParent,
- prevSiblings: prevSiblings,
- nextSibling: nextSibling,
- nextSiblings: nextSiblings,
- children: children,
- child: child,
- firstChild: firstChild,
- lastChild: lastChild,
- childNodesCount: childNodesCount,
- hasChildNodes: hasChildNodes,
- leaf: leaf
- };
-
- var browser$1 = $_766rx4ojnlpawtd.detect().browser;
- var firstElement = function (nodes) {
- return find(nodes, $_7u5fzs11jnlpawv6.isElement);
- };
- var getTableCaptionDeltaY = function (elm) {
- if (browser$1.isFirefox() && $_7u5fzs11jnlpawv6.name(elm) === 'table') {
- return firstElement($_dr4ybh18jnlpawzt.children(elm)).filter(function (elm) {
- return $_7u5fzs11jnlpawv6.name(elm) === 'caption';
- }).bind(function (caption) {
- return firstElement($_dr4ybh18jnlpawzt.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 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 && $_asiuhf13jnlpawvc.get(Element$$1.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) {
- x += offsetParent.offsetLeft || 0;
- y += offsetParent.offsetTop || 0;
- offsetParent = offsetParent.offsetParent;
- }
- offsetParent = elm.parentNode;
- while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType) {
- x -= offsetParent.scrollLeft || 0;
- y -= offsetParent.scrollTop || 0;
- offsetParent = offsetParent.parentNode;
- }
- y += getTableCaptionDeltaY(Element$$1.fromDom(elm));
- }
- return {
- x: x,
- y: y
- };
- };
- var $_9kqe0nnjnlpawsp = { getPos: getPos };
-
- var nu$3 = function (baseFn) {
- var data = Option.none();
- var callbacks = [];
- var map$$1 = 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) {
- data = Option.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$$1,
- isReady: isReady
- };
- };
- var pure$1 = function (a) {
- return nu$3(function (callback) {
- callback(a);
- });
- };
- var LazyValue = {
- nu: nu$3,
- pure: pure$1
- };
-
- var bounce = function (f) {
- return function () {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- var me = this;
- setTimeout(function () {
- f.apply(me, args);
- }, 0);
- };
- };
-
- var nu$4 = function (baseFn) {
- var get = function (callback) {
- baseFn(bounce(callback));
- };
- var map = function (fab) {
- return nu$4(function (callback) {
- get(function (a) {
- var value = fab(a);
- callback(value);
- });
- });
- };
- var bind = function (aFutureB) {
- return nu$4(function (callback) {
- get(function (a) {
- aFutureB(a).get(callback);
- });
- });
- };
- var anonBind = function (futureB) {
- return nu$4(function (callback) {
- get(function (a) {
- futureB.get(callback);
- });
- });
- };
- var toLazy = function () {
- return LazyValue.nu(get);
- };
- var toCached = function () {
- var cache = null;
- return nu$4(function (callback) {
- if (cache === null) {
- cache = toLazy();
- }
- cache.get(callback);
- });
- };
- return {
- map: map,
- bind: bind,
- anonBind: anonBind,
- toLazy: toLazy,
- toCached: toCached,
- get: get
- };
- };
- var pure$2 = function (a) {
- return nu$4(function (callback) {
- callback(a);
- });
- };
- var Future = {
- nu: nu$4,
- pure: pure$2
- };
-
- 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$1 = function (o) {
- var is = function (v) {
- return o === v;
- };
- var or = function (opt) {
- return value$1(o);
- };
- var orThunk = function (f) {
- return value$1(o);
- };
- var map = function (f) {
- return value$1(f(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 toOption = function () {
- return Option.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,
- each: each,
- bind: bind,
- exists: exists,
- forall: forall,
- toOption: toOption
- };
- };
- 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 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,
- each: noop,
- bind: bind,
- exists: never,
- forall: always,
- toOption: Option.none
- };
- };
- var Result = {
- value: value$1,
- error: error
- };
-
- function StyleSheetLoader(document$$1, settings) {
- var idCount = 0;
- var loadedStates = {};
- var maxLoadTime;
- settings = settings || {};
- maxLoadTime = settings.maxLoadTime || 5000;
- var appendToHead = function (node) {
- document$$1.getElementsByTagName('head')[0].appendChild(node);
- };
- var load = function (url, loadedCallback, errorCallback) {
- var link, style, startTime, state;
- var passed = function () {
- var callbacks = state.passed;
- var i = callbacks.length;
- while (i--) {
- callbacks[i]();
- }
- state.status = 2;
- state.passed = [];
- state.failed = [];
- };
- var failed = function () {
- var callbacks = state.failed;
- var i = callbacks.length;
- while (i--) {
- callbacks[i]();
- }
- state.status = 3;
- state.passed = [];
- state.failed = [];
- };
- var isOldWebKit = function () {
- var webKitChunks = navigator.userAgent.match(/WebKit\/(\d*)/);
- return !!(webKitChunks && parseInt(webKitChunks[1], 10) < 536);
- };
- var wait = function (testCallback, waitCallback) {
- if (!testCallback()) {
- if (new Date().getTime() - startTime < maxLoadTime) {
- $_2nbnh1ijnlpawpi.setTimeout(waitCallback);
- } else {
- failed();
- }
- }
- };
- var waitForWebKitLinkLoaded = function () {
- wait(function () {
- var styleSheets = document$$1.styleSheets;
- var styleSheet, i = styleSheets.length, owner;
- while (i--) {
- styleSheet = styleSheets[i];
- owner = styleSheet.ownerNode ? styleSheet.ownerNode : styleSheet.owningElement;
- if (owner && owner.id === link.id) {
- passed();
- return true;
- }
- }
- }, waitForWebKitLinkLoaded);
- };
- var waitForGeckoLinkLoaded = function () {
- wait(function () {
- try {
- var cssRules = style.sheet.cssRules;
- passed();
- return !!cssRules;
- } catch (ex) {
- }
- }, waitForGeckoLinkLoaded);
- };
- url = $_1q1txeljnlpawsa._addCacheSuffix(url);
- if (!loadedStates[url]) {
- state = {
- passed: [],
- failed: []
- };
- loadedStates[url] = state;
- } else {
- state = loadedStates[url];
- }
- if (loadedCallback) {
- state.passed.push(loadedCallback);
- }
- if (errorCallback) {
- state.failed.push(errorCallback);
- }
- if (state.status === 1) {
- return;
- }
- if (state.status === 2) {
- passed();
- return;
- }
- if (state.status === 3) {
- failed();
- return;
- }
- state.status = 1;
- link = document$$1.createElement('link');
- link.rel = 'stylesheet';
- link.type = 'text/css';
- link.id = 'u' + idCount++;
- link.async = false;
- link.defer = false;
- link.crossOrigin = 'anonymous';
- startTime = new Date().getTime();
- if ('onload' in link && !isOldWebKit()) {
- link.onload = waitForWebKitLinkLoaded;
- link.onerror = failed;
- } else {
- if (navigator.userAgent.indexOf('Firefox') > 0) {
- style = document$$1.createElement('style');
- style.textContent = '@import "' + url + '"';
- waitForGeckoLinkLoaded();
- appendToHead(style);
- return;
- }
- waitForWebKitLinkLoaded();
- }
- appendToHead(link);
- link.href = url;
- };
- var loadF = function (url) {
- return Future.nu(function (resolve) {
- load(url, compose(resolve, constant(Result.value(url))), compose(resolve, constant(Result.error(url))));
- });
- };
- var unbox = function (result) {
- return result.fold(identity, identity);
- };
- 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(unbox));
- } else {
- success(parts.pass.map(unbox));
- }
- });
- };
- return {
- load: load,
- loadAll: loadAll
- };
- }
-
- function TreeWalker (startNode, rootNode) {
- var node = startNode;
- var findSibling = function (node, startName, siblingName, shallow) {
- var sibling, parent;
- if (node) {
- if (!shallow && node[startName]) {
- return node[startName];
- }
- if (node !== rootNode) {
- sibling = node[siblingName];
- if (sibling) {
- return sibling;
- }
- for (parent = node.parentNode; parent && parent !== rootNode; parent = parent.parentNode) {
- sibling = parent[siblingName];
- if (sibling) {
- return sibling;
- }
- }
- }
- }
- };
- var findPreviousNode = function (node, startName, siblingName, shallow) {
- var sibling, parent, child;
- if (node) {
- sibling = node[siblingName];
- if (rootNode && sibling === 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 !== rootNode) {
- return parent;
- }
- }
- };
- this.current = function () {
- return node;
- };
- this.next = function (shallow) {
- node = findSibling(node, 'firstChild', 'nextSibling', shallow);
- return node;
- };
- this.prev = function (shallow) {
- node = findSibling(node, 'lastChild', 'previousSibling', shallow);
- return node;
- };
- this.prev2 = function (shallow) {
- node = findPreviousNode(node, 'lastChild', 'previousSibling', shallow);
- return node;
- };
- }
-
- 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 voids = [
- 'area',
- 'base',
- 'basefont',
- 'br',
- 'col',
- 'frame',
- 'hr',
- 'img',
- 'input',
- 'isindex',
- 'link',
- 'meta',
- 'param',
- 'embed',
- 'source',
- 'wbr',
- 'track'
- ];
- 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, constant(true));
- return lookup.hasOwnProperty($_7u5fzs11jnlpawv6.name(node));
- };
- };
- var isHeading = lazyLookup(headings);
- var isBlock = lazyLookup(blocks);
- var isInline = function (node) {
- return $_7u5fzs11jnlpawv6.isElement(node) && !isBlock(node);
- };
- var isBr = function (node) {
- return $_7u5fzs11jnlpawv6.isElement(node) && $_7u5fzs11jnlpawv6.name(node) === 'br';
- };
- var isTextBlock = lazyLookup(textBlocks);
- var isList = lazyLookup(lists);
- var isListItem = lazyLookup(listItems);
- var isVoid = lazyLookup(voids);
- var isTableSection = lazyLookup(tableSections);
- var isTableCell = lazyLookup(tableCells);
- var isWsPreserveElement = lazyLookup(wsElements);
-
- var isNodeType = function (type) {
- return function (node) {
- return !!node && node.nodeType === type;
- };
- };
- var isElement$1 = isNodeType(1);
- var matchNodeNames = function (names) {
- var items = names.toLowerCase().split(' ');
- return function (node) {
- var i, name;
- if (node && node.nodeType) {
- name = node.nodeName.toLowerCase();
- for (i = 0; i < items.length; i++) {
- if (name === items[i]) {
- return true;
- }
- }
- }
- 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 hasPropValue = function (propName, propValue) {
- return function (node) {
- return isElement$1(node) && node[propName] === propValue;
- };
- };
- var hasAttribute = function (attrName, attrValue) {
- 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 isText$1 = isNodeType(3);
- var isComment$1 = isNodeType(8);
- var isDocument$1 = isNodeType(9);
- var isBr$1 = matchNodeNames('br');
- var isContentEditableTrue = hasContentEditableState('true');
- var isContentEditableFalse = hasContentEditableState('false');
- var $_fy28ei1rjnlpax2o = {
- isText: isText$1,
- isElement: isElement$1,
- isComment: isComment$1,
- isDocument: isDocument$1,
- isBr: isBr$1,
- isContentEditableTrue: isContentEditableTrue,
- isContentEditableFalse: isContentEditableFalse,
- matchNodeNames: matchNodeNames,
- hasPropValue: hasPropValue,
- hasAttribute: hasAttribute,
- hasAttributeValue: hasAttributeValue,
- matchStyleValues: matchStyleValues,
- isBogus: isBogus,
- isBogusAll: isBogusAll,
- isTable: isTable
- };
-
- var surroundedBySpans = function (node) {
- var previousIsSpan = node.previousSibling && node.previousSibling.nodeName === 'SPAN';
- var nextIsSpan = node.nextSibling && node.nextSibling.nodeName === 'SPAN';
- return previousIsSpan && nextIsSpan;
- };
- var isBookmarkNode = function (node) {
- return node && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';
- };
- var trimNode = function (dom, node) {
- var i, children = node.childNodes;
- if ($_fy28ei1rjnlpax2o.isElement(node) && isBookmarkNode(node)) {
- return;
- }
- for (i = children.length - 1; i >= 0; i--) {
- trimNode(dom, children[i]);
- }
- if ($_fy28ei1rjnlpax2o.isDocument(node) === false) {
- if ($_fy28ei1rjnlpax2o.isText(node) && node.nodeValue.length > 0) {
- var trimmedLength = $_1q1txeljnlpawsa.trim(node.nodeValue).length;
- if (dom.isBlock(node.parentNode) || trimmedLength > 0) {
- return;
- }
- if (trimmedLength === 0 && surroundedBySpans(node)) {
- return;
- }
- } else if ($_fy28ei1rjnlpax2o.isElement(node)) {
- children = node.childNodes;
- if (children.length === 1 && isBookmarkNode(children[0])) {
- node.parentNode.insertBefore(children[0], node);
- }
- if (children.length || isVoid(Element$$1.fromDom(node))) {
- return;
- }
- }
- dom.remove(node);
- }
- return node;
- };
- var $_7nxzh21pjnlpax26 = { trimNode: trimNode };
-
- var makeMap$1 = $_1q1txeljnlpawsa.makeMap;
- var namedEntities;
- var baseEntities;
- var reverseEntities;
- 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'
- };
- baseEntities = {
- '"': '"',
- '\'': ''',
- '<': '<',
- '>': '>',
- '&': '&',
- '`': '`'
- };
- reverseEntities = {
- '<': '<',
- '>': '>',
- '&': '&',
- '"': '"',
- ''': '\''
- };
- var nativeDecode = function (text) {
- var elm;
- elm = Element$$1.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;
- }
- };
- 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 $_bea7j51sjnlpax2u = {
- encodeRaw: encodeRaw,
- encodeAllRaw: encodeAllRaw,
- encodeNumeric: encodeNumeric,
- encodeNamed: encodeNamed,
- getEncodeFunc: getEncodeFunc,
- decode: decode
- };
-
- var mapCache = {};
- var dummyObj = {};
- var makeMap$2 = $_1q1txeljnlpawsa.makeMap;
- var each$4 = $_1q1txeljnlpawsa.each;
- var extend$1 = $_1q1txeljnlpawsa.extend;
- var explode$1 = $_1q1txeljnlpawsa.explode;
- var inArray$1 = $_1q1txeljnlpawsa.inArray;
- var split = function (items, delim) {
- items = $_1q1txeljnlpawsa.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);
- }
- name = split(name);
- ni = name.length;
- while (ni--) {
- attributesOrder = split([
- globalAttributes,
- attributes
- ].join(' '));
- element = {
- attributes: arrayToMap(attributesOrder),
- attributesOrder: attributesOrder,
- children: arrayToMap(children, dummyObj)
- };
- schema[name[ni]] = element;
- }
- };
- var addAttrs = function (name, attributes) {
- var ni, schemaItem, i, l;
- name = split(name);
- ni = name.length;
- attributes = split(attributes);
- while (ni--) {
- schemaItem = schema[name[ni]];
- for (i = 0, l = attributes.length; i < l; i++) {
- schemaItem.attributes[attributes[i]] = {};
- schemaItem.attributesOrder.push(attributes[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$4(split(html4PhrasingContent), function (name) {
- add(name, '', phrasingContent);
- });
- html4BlockContent = 'center dir isindex noframes';
- blockContent = [
- blockContent,
- html4BlockContent
- ].join(' ');
- flowContent = [
- blockContent,
- phrasingContent
- ].join(' ');
- each$4(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', 'onchange');
- 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('iframe', 'sandbox seamless allowfullscreen');
- }
- each$4(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$4(value, function (value, key) {
- styles[key] = styles[key.toUpperCase()] = mode === 'map' ? makeMap$2(value, /[, ]/) : explode$1(value, /[, ]/);
- });
- }
- return styles;
- };
- function Schema(settings) {
- var elements = {};
- var children = {};
- var patternElements = [];
- var validStyles;
- var invalidStyles;
- var schemaItems;
- var whiteSpaceElementsMap, selfClosingElementsMap, shortEndedElementsMap, boolAttrMap, validClasses;
- var blockElementsMap, nonEmptyElementsMap, moveCaretBeforeOnEnterElementsMap, textBlockElementsMap, textInlineElementsMap;
- 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 || {};
- schemaItems = compileSchema(settings.schema);
- if (settings.verify_html === false) {
- settings.valid_elements = '*[*]';
- }
- validStyles = compileElementMap(settings.valid_styles);
- invalidStyles = compileElementMap(settings.invalid_styles, 'map');
- validClasses = compileElementMap(settings.valid_classes, 'map');
- whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code');
- selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');
- shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track');
- boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls');
- nonEmptyElementsMap = createLookupTable('non_empty_elements', 'td th iframe video audio object ' + 'script pre code', shortEndedElementsMap);
- moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', 'table', nonEmptyElementsMap);
- 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');
- 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);
- textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font strike u var cite ' + 'dfn code mark q sup sub samp');
- each$4((settings.special || 'script noscript noframes noembed title style textarea xmp').split(' '), function (name) {
- specialElements[name] = new RegExp('' + name + '[^>]*>', '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, key, value;
- var elementRuleRegExp = /^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/, attrRuleRegExp = /^([!\-])?(\w+[\\:]:\w+|[^=:<]+)?(?:([=:<])(.*))?$/, hasPatternsRegExp = /[*?+]/;
- if (validElements) {
- validElements = split(validElements, ',');
- if (elements['@']) {
- globalAttributes = elements['@'].attributes;
- globalAttributesOrder = elements['@'].attributesOrder;
- }
- for (ei = 0, el = validElements.length; ei < el; ei++) {
- matches = elementRuleRegExp.exec(validElements[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) {
- for (key in globalAttributes) {
- attributes[key] = globalAttributes[key];
- }
- 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$1(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$4(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$4(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$4(children, function (element, elmName) {
- if (element[cloneName]) {
- children[elmName] = element = extend$1({}, children[elmName]);
- element[name] = element[cloneName];
- }
- });
- });
- }
- };
- var addValidChildren = function (validChildren) {
- var childRuleRegExp = /^([+\-]?)(\w+)\[([^\]]+)\]$/;
- mapCache[settings.schema] = null;
- if (validChildren) {
- each$4(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$4(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$4(schemaItems, function (element, name) {
- elements[name] = {
- attributes: element.attributes,
- attributesOrder: element.attributesOrder
- };
- children[name] = element.children;
- });
- if (settings.schema !== 'html5') {
- each$4(split('strong/b em/i'), function (item) {
- item = split(item, '/');
- elements[item[1]].outputName = item[0];
- });
- }
- each$4(split('ol ul sub sup blockquote span font a table tbody tr strong em b i'), function (name) {
- if (elements[name]) {
- elements[name].removeEmpty = true;
- }
- });
- each$4(split('p h1 h2 h3 h4 h5 h6 th td pre div address caption li'), function (name) {
- elements[name].paddEmpty = true;
- });
- each$4(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$4({
- 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$4(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);
- };
- function Styles(settings, schema) {
- 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 encodingItems;
- var validStyles;
- var invalidStyles;
- var invisibleChar = '\uFEFF';
- settings = settings || {};
- if (schema) {
- validStyles = schema.getValidStyles();
- invalidStyles = schema.getInvalidStyles();
- }
- 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, right, bottom, left;
- top = styles[prefix + '-top' + suffix];
- if (!top) {
- return;
- }
- right = styles[prefix + '-right' + suffix];
- if (!right) {
- return;
- }
- bottom = styles[prefix + '-bottom' + suffix];
- if (!bottom) {
- return;
- }
- 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 = '', name, value;
- var serializeStyles = function (name) {
- var styleList, i, l, value;
- styleList = validStyles[name];
- if (styleList) {
- for (i = 0, l = styleList.length; i < l; i++) {
- name = styleList[i];
- value = styles[name];
- if (value) {
- css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';
- }
- }
- }
- };
- var isValid = function (name, elementName) {
- var styleMap;
- styleMap = invalidStyles['*'];
- if (styleMap && styleMap[name]) {
- return false;
- }
- styleMap = invalidStyles[elementName];
- if (styleMap && styleMap[name]) {
- return false;
- }
- return true;
- };
- if (elementName && validStyles) {
- serializeStyles('*');
- serializeStyles(elementName);
- } else {
- for (name in styles) {
- value = styles[name];
- if (value && (!invalidStyles || isValid(name, elementName))) {
- css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';
- }
- }
- }
- return css;
- }
- };
- }
-
- var each$5 = $_1q1txeljnlpawsa.each;
- var grep$1 = $_1q1txeljnlpawsa.grep;
- var isIE = $_cseqobajnlpawll.ie;
- var simpleSelectorRe = /^([a-z0-9],?)+$/i;
- var whiteSpaceRegExp$2 = /^[ \t\r\n]*$/;
- var setupAttrHooks = function (styles, settings, getContext) {
- var attrHooks = {};
- var keepValues = settings.keep_values;
- var keepUrlHook = {
- set: function ($elm, value, name$$1) {
- if (settings.url_converter) {
- value = settings.url_converter.call(settings.url_converter_scope || getContext(), value, name$$1, $elm[0]);
- }
- $elm.attr('data-mce-' + name$$1, value).attr(name$$1, value);
- },
- get: function ($elm, name$$1) {
- return $elm.attr('data-mce-' + name$$1) || $elm.attr(name$$1);
- }
- };
- attrHooks = {
- style: {
- set: function ($elm, value) {
- if (value !== null && typeof value === 'object') {
- $elm.css(value);
- return;
- }
- if (keepValues) {
- $elm.attr('data-mce-style', value);
- }
- $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;
- };
- function DOMUtils(doc, settings) {
- var _this = this;
- if (settings === void 0) {
- settings = {};
- }
- var attrHooks;
- var addedStyles = {};
- var win = window;
- var files = {};
- var counter = 0;
- var stdMode = true;
- var boxModel = true;
- var styleSheetLoader = StyleSheetLoader(doc);
- 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(settings.proxy) : EventUtils.Event;
- var blockElementsMap = schema.getBlockElements();
- var $ = DomQuery.overrideDefaults(function () {
- return {
- context: doc,
- element: self$$1.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) {
- if (elm && doc && typeof elm === 'string') {
- var node = doc.getElementById(elm);
- if (node && node.id !== elm) {
- return doc.getElementsByName(elm)[1];
- } else {
- return node;
- }
- }
- return elm;
- };
- var $$ = function (elm) {
- if (typeof elm === 'string') {
- elm = get(elm);
- }
- return $(elm);
- };
- var getAttrib = function (elm, name$$1, defaultVal) {
- var hook, value;
- var $elm = $$(elm);
- if ($elm.length) {
- hook = attrHooks[name$$1];
- if (hook && hook.get) {
- value = hook.get($elm, name$$1);
- } else {
- value = $elm.attr(name$$1);
- }
- }
- 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$$1, value) {
- var originalValue, hook;
- if (value === '') {
- value = null;
- }
- var $elm = $$(elm);
- originalValue = $elm.attr(name$$1);
- if (!$elm.length) {
- return;
- }
- hook = attrHooks[name$$1];
- if (hook && hook.set) {
- hook.set($elm, value, name$$1);
- } else {
- $elm.attr(name$$1, value);
- }
- if (originalValue !== value && settings.onSetAttrib) {
- settings.onSetAttrib({
- attrElm: $elm,
- attrName: name$$1,
- attrValue: value
- });
- }
- };
- var clone = function (node, deep) {
- if (!isIE || node.nodeType !== 1 || deep) {
- return node.cloneNode(deep);
- }
- if (!deep) {
- 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;
- }
- return null;
- };
- var getRoot = function () {
- return settings.root_element || doc.body;
- };
- var getViewPort = function (argWin) {
- var actWin = !argWin ? win : argWin;
- var doc = actWin.document;
- var rootElm = boxModel ? doc.documentElement : doc.body;
- return {
- x: actWin.pageXOffset || rootElm.scrollLeft,
- y: actWin.pageYOffset || rootElm.scrollTop,
- w: actWin.innerWidth || rootElm.clientWidth,
- h: actWin.innerHeight || rootElm.clientHeight
- };
- };
- var getPos = function (elm, rootElm) {
- return $_9kqe0nnjnlpawsp.getPos(doc.body, get(elm), rootElm);
- };
- var setStyle = function (elm, name$$1, value) {
- var $elm = $$(elm).css(name$$1, value);
- 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$$1, computed) {
- var $elm = $$(elm);
- if (computed) {
- return $elm.css(name$$1);
- }
- name$$1 = name$$1.replace(/-(\D)/g, function (a, b) {
- return b.toUpperCase();
- });
- if (name$$1 === 'float') {
- name$$1 = $_cseqobajnlpawll.ie && $_cseqobajnlpawll.ie < 12 ? 'styleFloat' : 'cssFloat';
- }
- return $elm[0] && $elm[0].style ? $elm[0].style[name$$1] : 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) {
- var pos, size;
- elm = get(elm);
- pos = getPos(elm);
- 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 ($_1q1txeljnlpawsa.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 || !node.nodeType || node.nodeType === 9) {
- 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$$1) {
- var func = selector;
- if (node) {
- if (typeof selector === 'string') {
- func = function (node) {
- return is(node, selector);
- };
- }
- for (node = node[name$$1]; node; node = node[name$$1]) {
- 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 ($_1q1txeljnlpawsa.isArray(node) && (node.length || node.length === 0)) {
- result = [];
- each$5(node, function (elm, i) {
- if (elm) {
- if (typeof elm === 'string') {
- elm = get(elm);
- }
- result.push(func.call(scope, 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$$1) {
- setAttrib(node, name$$1, 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$$1, attrs, html, create) {
- return run(parentElm, function (parentElm) {
- var newElm = typeof name$$1 === 'string' ? doc.createElement(name$$1) : name$$1;
- 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$$1, attrs, html) {
- return add(doc.createElement(name$$1), name$$1, attrs, html, true);
- };
- var decode = $_bea7j51sjnlpax2u.decode;
- var encode = $_bea7j51sjnlpax2u.encodeAllRaw;
- var createHTML = function (name$$1, attrs, html) {
- var outHtml = '', key;
- outHtml += '<' + name$$1;
- 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 + '' + name$$1 + '>';
- }
- return outHtml + ' />';
- };
- var createFragment = function (html) {
- var node;
- var container = doc.createElement('div');
- var frag = doc.createDocumentFragment();
- if (html) {
- container.innerHTML = html;
- }
- while (node = container.firstChild) {
- frag.appendChild(node);
- }
- 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$$1) {
- return styles.serialize(stylesArg, name$$1);
- };
- var addStyle = function (cssText) {
- var head, styleElm;
- if (self$$1 !== 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 (url) {
- var head;
- if (self$$1 !== DOMUtils.DOM && doc === document) {
- DOMUtils.DOM.loadCSS(url);
- return;
- }
- if (!url) {
- url = '';
- }
- head = doc.getElementsByTagName('head')[0];
- each$5(url.split(','), function (url) {
- var link;
- url = $_1q1txeljnlpawsa._addCacheSuffix(url);
- if (files[url]) {
- return;
- }
- files[url] = true;
- link = create('link', {
- rel: 'stylesheet',
- href: url
- });
- head.appendChild(link);
- });
- };
- 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 $_fy28ei1rjnlpax2o.isElement(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$$1, nextSibling;
- parent$$1 = referenceNode.parentNode;
- nextSibling = referenceNode.nextSibling;
- if (nextSibling) {
- parent$$1.insertBefore(node, nextSibling);
- } else {
- parent$$1.appendChild(node);
- }
- return node;
- });
- };
- var replace = function (newElm, oldElm, keepChildren) {
- return run(oldElm, function (oldElm) {
- if ($_1q1txeljnlpawsa.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$$1) {
- var newElm;
- if (elm.nodeName !== name$$1.toUpperCase()) {
- newElm = create(name$$1);
- 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($_1q1txeljnlpawsa.trim(rgbVal));
- };
- var isEmpty = function (node, elements) {
- var i, attributes, type, whitespace, walker, name$$1, brCount = 0;
- node = node.firstChild;
- if (node) {
- walker = new TreeWalker(node, node.parentNode);
- elements = elements || (schema ? schema.getNonEmptyElements() : null);
- whitespace = schema ? schema.getWhiteSpaceElements() : {};
- do {
- type = node.nodeType;
- if ($_fy28ei1rjnlpax2o.isElement(node)) {
- var bogusVal = node.getAttribute('data-mce-bogus');
- if (bogusVal) {
- node = walker.next(bogusVal === 'all');
- continue;
- }
- name$$1 = node.nodeName.toLowerCase();
- if (elements && elements[name$$1]) {
- if (name$$1 === 'br') {
- brCount++;
- node = walker.next();
- continue;
- }
- return false;
- }
- attributes = getAttribs(node);
- i = attributes.length;
- while (i--) {
- name$$1 = attributes[i].nodeName;
- if (name$$1 === 'name' || name$$1 === 'data-mce-bookmark') {
- return false;
- }
- }
- }
- if (type === 8) {
- return false;
- }
- if (type === 3 && !whiteSpaceRegExp$2.test(node.nodeValue)) {
- return false;
- }
- if (type === 3 && node.parentNode && whitespace[node.parentNode.nodeName] && whiteSpaceRegExp$2.test(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 r = createRng(), bef, aft, pa;
- if (parentElm && splitElm) {
- r.setStart(parentElm.parentNode, findNodeIndex(parentElm));
- r.setEnd(splitElm.parentNode, findNodeIndex(splitElm));
- bef = r.extractContents();
- r = createRng();
- r.setStart(splitElm.parentNode, findNodeIndex(splitElm) + 1);
- r.setEnd(parentElm.parentNode, findNodeIndex(parentElm) + 1);
- aft = r.extractContents();
- pa = parentElm.parentNode;
- pa.insertBefore($_7nxzh21pjnlpax26.trimNode(self$$1, bef), parentElm);
- if (replacementElm) {
- pa.insertBefore(replacementElm, parentElm);
- } else {
- pa.insertBefore(splitElm, parentElm);
- }
- pa.insertBefore($_7nxzh21pjnlpax26.trimNode(self$$1, aft), parentElm);
- remove(parentElm);
- return replacementElm || splitElm;
- }
- };
- var bind = function (target, name$$1, func, scope) {
- if ($_1q1txeljnlpawsa.isArray(target)) {
- var i = target.length;
- while (i--) {
- target[i] = bind(target[i], name$$1, func, scope);
- }
- return target;
- }
- if (settings.collect && (target === doc || target === win)) {
- boundEvents.push([
- target,
- name$$1,
- func,
- scope
- ]);
- }
- return events.bind(target, name$$1, func, scope || self$$1);
- };
- var unbind = function (target, name$$1, func) {
- var i;
- if ($_1q1txeljnlpawsa.isArray(target)) {
- i = target.length;
- while (i--) {
- target[i] = unbind(target[i], name$$1, func);
- }
- return target;
- }
- if (boundEvents && (target === doc || target === win)) {
- i = boundEvents.length;
- while (i--) {
- var item = boundEvents[i];
- if (target === item[0] && (!name$$1 || name$$1 === item[1]) && (!func || func === item[2])) {
- events.unbind(item[0], item[1], item[2]);
- }
- }
- }
- return events.unbind(target, name$$1, func);
- };
- var fire = function (target, name$$1, evt) {
- return events.fire(target, name$$1, evt);
- };
- var getContentEditable = function (node) {
- if (node && $_fy28ei1rjnlpax2o.isElement(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) {
- var i = boundEvents.length;
- while (i--) {
- var item = boundEvents[i];
- events.unbind(item[0], item[1], item[2]);
- }
- }
- if (Sizzle.setDocument) {
- Sizzle.setDocument();
- }
- };
- var isChildOf = function (node, parent$$1) {
- while (node) {
- if (parent$$1 === 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$$1 = {
- 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,
- 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
- };
- attrHooks = setupAttrHooks(styles, settings, function () {
- return self$$1;
- });
- return self$$1;
- }
- (function (DOMUtils) {
- DOMUtils.DOM = DOMUtils(document);
- DOMUtils.nodeIndex = findNodeIndex;
- }(DOMUtils || (DOMUtils = {})));
- var DOMUtils$1 = DOMUtils;
-
- var DOM = DOMUtils$1.DOM;
- var each$6 = $_1q1txeljnlpawsa.each;
- var grep$2 = $_1q1txeljnlpawsa.grep;
- var isFunction$1 = function (f) {
- return typeof f === 'function';
- };
- var ScriptLoader = function () {
- var QUEUED = 0;
- var LOADING = 1;
- var LOADED = 2;
- var FAILED = 3;
- var states = {};
- var queue = [];
- var scriptLoadedCallbacks = {};
- var queueLoadedCallbacks = [];
- var loading = 0;
- var loadScript = function (url, success, failure) {
- var dom = DOM;
- var elm, id;
- var done = function () {
- dom.remove(id);
- if (elm) {
- elm.onreadystatechange = elm.onload = elm = null;
- }
- success();
- };
- var error = function () {
- if (isFunction$1(failure)) {
- failure();
- } else {
- if (typeof console !== 'undefined' && console.log) {
- console.log('Failed to load script: ' + url);
- }
- }
- };
- id = dom.uniqueId();
- elm = document.createElement('script');
- elm.id = id;
- elm.type = 'text/javascript';
- elm.src = $_1q1txeljnlpawsa._addCacheSuffix(url);
- elm.onload = done;
- elm.onerror = error;
- (document.getElementsByTagName('head')[0] || document.body).appendChild(elm);
- };
- this.isDone = function (url) {
- return states[url] === LOADED;
- };
- this.markDone = function (url) {
- states[url] = LOADED;
- };
- this.add = this.load = function (url, success, scope, failure) {
- var state = states[url];
- if (state === undefined) {
- queue.push(url);
- states[url] = QUEUED;
- }
- if (success) {
- if (!scriptLoadedCallbacks[url]) {
- scriptLoadedCallbacks[url] = [];
- }
- scriptLoadedCallbacks[url].push({
- success: success,
- failure: failure,
- scope: scope || this
- });
- }
- };
- this.remove = function (url) {
- delete states[url];
- delete scriptLoadedCallbacks[url];
- };
- this.loadQueue = function (success, scope, failure) {
- this.loadScripts(queue, success, scope, failure);
- };
- this.loadScripts = function (scripts, success, scope, failure) {
- var loadScripts;
- var failures = [];
- var execCallbacks = function (name$$1, url) {
- each$6(scriptLoadedCallbacks[url], function (callback) {
- if (isFunction$1(callback[name$$1])) {
- callback[name$$1].call(callback.scope);
- }
- });
- scriptLoadedCallbacks[url] = undefined;
- };
- queueLoadedCallbacks.push({
- success: success,
- failure: failure,
- scope: scope || this
- });
- loadScripts = function () {
- var loadingScripts = grep$2(scripts);
- scripts.length = 0;
- each$6(loadingScripts, function (url) {
- if (states[url] === LOADED) {
- execCallbacks('success', url);
- return;
- }
- if (states[url] === FAILED) {
- execCallbacks('failure', url);
- return;
- }
- if (states[url] !== LOADING) {
- states[url] = LOADING;
- loading++;
- loadScript(url, function () {
- states[url] = LOADED;
- loading--;
- execCallbacks('success', url);
- loadScripts();
- }, function () {
- states[url] = FAILED;
- loading--;
- failures.push(url);
- execCallbacks('failure', url);
- loadScripts();
- });
- }
- });
- if (!loading) {
- var notifyCallbacks = queueLoadedCallbacks.slice(0);
- queueLoadedCallbacks.length = 0;
- each$6(notifyCallbacks, function (callback) {
- if (failures.length === 0) {
- if (isFunction$1(callback.success)) {
- callback.success.call(callback.scope);
- }
- } else {
- if (isFunction$1(callback.failure)) {
- callback.failure.call(callback.scope, failures);
- }
- }
- });
- }
- };
- loadScripts();
- };
- };
- ScriptLoader.ScriptLoader = new ScriptLoader();
-
- var each$7 = $_1q1txeljnlpawsa.each;
- function AddOnManager() {
- var _this = this;
- var items = [];
- var urls = {};
- var lookup = {};
- var _listeners = [];
- 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) {
- var language = AddOnManager.language;
- if (language && AddOnManager.languageLoad !== false) {
- if (languages) {
- languages = ',' + languages + ',';
- if (languages.indexOf(',' + language.substr(0, 2) + ',') !== -1) {
- language = language.substr(0, 2);
- } else if (languages.indexOf(',' + language + ',') === -1) {
- return;
- }
- }
- ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js');
- }
- };
- var add = function (id, addOn, dependencies) {
- items.push(addOn);
- lookup[id] = {
- instance: addOn,
- dependencies: dependencies
- };
- var result = partition(_listeners, function (listener) {
- return listener.name === id;
- });
- _listeners = result.fail;
- each$7(result.pass, function (listener) {
- listener.callback();
- });
- return addOn;
- };
- 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 = _this.urls[pluginName];
- each$7(scripts, function (script) {
- ScriptLoader.ScriptLoader.add(pluginUrl + '/' + script);
- });
- };
- var loadDependencies = function (name, addOnUrl, success, scope) {
- var deps = dependencies(name);
- each$7(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('/'));
- if (lookup[name]) {
- loadDependencies(name, addOnUrl, success, scope);
- } else {
- ScriptLoader.ScriptLoader.add(urlString, function () {
- return loadDependencies(name, addOnUrl, success, scope);
- }, scope, failure);
- }
- };
- var waitFor = function (name, callback) {
- if (lookup.hasOwnProperty(name)) {
- callback();
- } else {
- _listeners.push({
- name: name,
- 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
- };
- }
- (function (AddOnManager) {
- AddOnManager.PluginManager = AddOnManager();
- AddOnManager.ThemeManager = AddOnManager();
- }(AddOnManager || (AddOnManager = {})));
-
- var before = function (marker, element) {
- var parent = $_dr4ybh18jnlpawzt.parent(marker);
- parent.each(function (v) {
- v.dom().insertBefore(element.dom(), marker.dom());
- });
- };
- var after = function (marker, element) {
- var sibling = $_dr4ybh18jnlpawzt.nextSibling(marker);
- sibling.fold(function () {
- var parent = $_dr4ybh18jnlpawzt.parent(marker);
- parent.each(function (v) {
- append(v, element);
- });
- }, function (v) {
- before(v, element);
- });
- };
- var prepend = function (parent, element) {
- var firstChild = $_dr4ybh18jnlpawzt.firstChild(parent);
- firstChild.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 appendAt = function (parent, element, index) {
- $_dr4ybh18jnlpawzt.child(parent, index).fold(function () {
- append(parent, element);
- }, function (v) {
- before(v, element);
- });
- };
- var wrap$1 = function (element, wrapper) {
- before(element, wrapper);
- append(wrapper, element);
- };
- var $_ag89ax1yjnlpax4x = {
- before: before,
- after: after,
- prepend: prepend,
- append: append,
- appendAt: appendAt,
- wrap: wrap$1
- };
-
- var before$1 = function (marker, elements) {
- each(elements, function (x) {
- $_ag89ax1yjnlpax4x.before(marker, x);
- });
- };
- var after$1 = function (marker, elements) {
- each(elements, function (x, i) {
- var e = i === 0 ? marker : elements[i - 1];
- $_ag89ax1yjnlpax4x.after(e, x);
- });
- };
- var prepend$1 = function (parent, elements) {
- each(elements.slice().reverse(), function (x) {
- $_ag89ax1yjnlpax4x.prepend(parent, x);
- });
- };
- var append$1 = function (parent, elements) {
- each(elements, function (x) {
- $_ag89ax1yjnlpax4x.append(parent, x);
- });
- };
- var $_9vd3j51xjnlpax4s = {
- before: before$1,
- after: after$1,
- prepend: prepend$1,
- append: append$1
- };
-
- var empty = function (element) {
- element.dom().textContent = '';
- each($_dr4ybh18jnlpawzt.children(element), function (rogue) {
- remove$2(rogue);
- });
- };
- var remove$2 = function (element) {
- var dom = element.dom();
- if (dom.parentNode !== null)
- dom.parentNode.removeChild(dom);
- };
- var unwrap = function (wrapper) {
- var children = $_dr4ybh18jnlpawzt.children(wrapper);
- if (children.length > 0)
- $_9vd3j51xjnlpax4s.before(wrapper, children);
- remove$2(wrapper);
- };
- var $_azq8zm1wjnlpax4n = {
- empty: empty,
- remove: remove$2,
- unwrap: unwrap
- };
-
- var first$1 = 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$3 = 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 Cell = function (initial) {
- var value = initial;
- var get = function () {
- return value;
- };
- var set = function (v) {
- value = v;
- };
- var clone = function () {
- return Cell(get());
- };
- return {
- get: get,
- set: set,
- clone: clone
- };
- };
-
- function Toggler (turnOff, turnOn, initial) {
- var active = initial || false;
- var on = function () {
- turnOn();
- active = true;
- };
- var off = function () {
- turnOff();
- active = false;
- };
- var toggle = function () {
- var f = active ? off : on;
- f();
- };
- var isOn = function () {
- return active;
- };
- return {
- on: on,
- off: off,
- toggle: toggle,
- isOn: isOn
- };
- }
-
- var read = function (element, attr) {
- var value = $_521j8z15jnlpawz7.get(element, attr);
- return value === undefined || value === '' ? [] : value.split(' ');
- };
- var add = function (element, attr, id) {
- var old = read(element, attr);
- var nu = old.concat([id]);
- $_521j8z15jnlpawz7.set(element, attr, nu.join(' '));
- return true;
- };
- var remove$3 = function (element, attr, id) {
- var nu = filter(read(element, attr), function (v) {
- return v !== id;
- });
- if (nu.length > 0)
- $_521j8z15jnlpawz7.set(element, attr, nu.join(' '));
- else
- $_521j8z15jnlpawz7.remove(element, attr);
- return false;
- };
- var $_c7tpvt26jnlpax6a = {
- read: read,
- add: add,
- remove: remove$3
- };
-
- var supports = function (element) {
- return element.dom().classList !== undefined;
- };
- var get$3 = function (element) {
- return $_c7tpvt26jnlpax6a.read(element, 'class');
- };
- var add$1 = function (element, clazz) {
- return $_c7tpvt26jnlpax6a.add(element, 'class', clazz);
- };
- var remove$4 = function (element, clazz) {
- return $_c7tpvt26jnlpax6a.remove(element, 'class', clazz);
- };
- var toggle = function (element, clazz) {
- if (contains(get$3(element), clazz)) {
- return remove$4(element, clazz);
- } else {
- return add$1(element, clazz);
- }
- };
- var $_2thj3d25jnlpax63 = {
- get: get$3,
- add: add$1,
- remove: remove$4,
- toggle: toggle,
- supports: supports
- };
-
- var add$2 = function (element, clazz) {
- if ($_2thj3d25jnlpax63.supports(element))
- element.dom().classList.add(clazz);
- else
- $_2thj3d25jnlpax63.add(element, clazz);
- };
- var cleanClass = function (element) {
- var classList = $_2thj3d25jnlpax63.supports(element) ? element.dom().classList : $_2thj3d25jnlpax63.get(element);
- if (classList.length === 0) {
- $_521j8z15jnlpawz7.remove(element, 'class');
- }
- };
- var remove$5 = function (element, clazz) {
- if ($_2thj3d25jnlpax63.supports(element)) {
- var classList = element.dom().classList;
- classList.remove(clazz);
- } else
- $_2thj3d25jnlpax63.remove(element, clazz);
- cleanClass(element);
- };
- var toggle$1 = function (element, clazz) {
- return $_2thj3d25jnlpax63.supports(element) ? element.dom().classList.toggle(clazz) : $_2thj3d25jnlpax63.toggle(element, clazz);
- };
- var toggler = function (element, clazz) {
- var hasClasslist = $_2thj3d25jnlpax63.supports(element);
- var classList = element.dom().classList;
- var off = function () {
- if (hasClasslist)
- classList.remove(clazz);
- else
- $_2thj3d25jnlpax63.remove(element, clazz);
- };
- var on = function () {
- if (hasClasslist)
- classList.add(clazz);
- else
- $_2thj3d25jnlpax63.add(element, clazz);
- };
- return Toggler(off, on, has$2(element, clazz));
- };
- var has$2 = function (element, clazz) {
- return $_2thj3d25jnlpax63.supports(element) && element.dom().classList.contains(clazz);
- };
- var $_fes8i223jnlpax5z = {
- add: add$2,
- remove: remove$5,
- toggle: toggle$1,
- toggler: toggler,
- has: has$2
- };
-
- var all$1 = function (predicate) {
- return descendants($_1lsags16jnlpawzj.body(), predicate);
- };
- var ancestors = function (scope, predicate, isRoot) {
- return filter($_dr4ybh18jnlpawzt.parents(scope, isRoot), predicate);
- };
- var siblings$1 = function (scope, predicate) {
- return filter($_dr4ybh18jnlpawzt.siblings(scope), predicate);
- };
- var children$1 = function (scope, predicate) {
- return filter($_dr4ybh18jnlpawzt.children(scope), predicate);
- };
- var descendants = function (scope, predicate) {
- var result = [];
- each($_dr4ybh18jnlpawzt.children(scope), function (x) {
- if (predicate(x)) {
- result = result.concat([x]);
- }
- result = result.concat(descendants(x, predicate));
- });
- return result;
- };
- var $_g370pf28jnlpax6n = {
- all: all$1,
- ancestors: ancestors,
- siblings: siblings$1,
- children: children$1,
- descendants: descendants
- };
-
- var all$2 = function (selector) {
- return $_d8v5lf1gjnlpax0y.all(selector);
- };
- var ancestors$1 = function (scope, selector, isRoot) {
- return $_g370pf28jnlpax6n.ancestors(scope, function (e) {
- return $_d8v5lf1gjnlpax0y.is(e, selector);
- }, isRoot);
- };
- var siblings$2 = function (scope, selector) {
- return $_g370pf28jnlpax6n.siblings(scope, function (e) {
- return $_d8v5lf1gjnlpax0y.is(e, selector);
- });
- };
- var children$2 = function (scope, selector) {
- return $_g370pf28jnlpax6n.children(scope, function (e) {
- return $_d8v5lf1gjnlpax0y.is(e, selector);
- });
- };
- var descendants$1 = function (scope, selector) {
- return $_d8v5lf1gjnlpax0y.all(selector, scope);
- };
- var $_cmitir27jnlpax6e = {
- all: all$2,
- ancestors: ancestors$1,
- siblings: siblings$2,
- children: children$2,
- descendants: descendants$1
- };
-
- function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {
- return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);
- }
-
- var first$2 = function (predicate) {
- return descendant($_1lsags16jnlpawzj.body(), predicate);
- };
- var ancestor = function (scope, predicate, isRoot) {
- var element = scope.dom();
- var stop = isFunction(isRoot) ? isRoot : constant(false);
- while (element.parentNode) {
- element = element.parentNode;
- var el = Element$$1.fromDom(element);
- if (predicate(el))
- return Option.some(el);
- else if (stop(el))
- break;
- }
- return Option.none();
- };
- var closest = function (scope, predicate, isRoot) {
- var is = function (scope) {
- return predicate(scope);
- };
- return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);
- };
- var sibling$1 = function (scope, predicate) {
- var element = scope.dom();
- if (!element.parentNode)
- return Option.none();
- return child$1(Element$$1.fromDom(element.parentNode), function (x) {
- return !$_5h7cor1ejnlpax0k.eq(scope, x) && predicate(x);
- });
- };
- var child$1 = function (scope, predicate) {
- var result = find(scope.dom().childNodes, compose(predicate, Element$$1.fromDom));
- return result.map(Element$$1.fromDom);
- };
- var descendant = function (scope, predicate) {
- var descend = function (node) {
- for (var i = 0; i < node.childNodes.length; i++) {
- if (predicate(Element$$1.fromDom(node.childNodes[i])))
- return Option.some(Element$$1.fromDom(node.childNodes[i]));
- var res = descend(node.childNodes[i]);
- if (res.isSome())
- return res;
- }
- return Option.none();
- };
- return descend(scope.dom());
- };
- var $_cs5qmd2ajnlpax6v = {
- first: first$2,
- ancestor: ancestor,
- closest: closest,
- sibling: sibling$1,
- child: child$1,
- descendant: descendant
- };
-
- var first$3 = function (selector) {
- return $_d8v5lf1gjnlpax0y.one(selector);
- };
- var ancestor$1 = function (scope, selector, isRoot) {
- return $_cs5qmd2ajnlpax6v.ancestor(scope, function (e) {
- return $_d8v5lf1gjnlpax0y.is(e, selector);
- }, isRoot);
- };
- var sibling$2 = function (scope, selector) {
- return $_cs5qmd2ajnlpax6v.sibling(scope, function (e) {
- return $_d8v5lf1gjnlpax0y.is(e, selector);
- });
- };
- var child$2 = function (scope, selector) {
- return $_cs5qmd2ajnlpax6v.child(scope, function (e) {
- return $_d8v5lf1gjnlpax0y.is(e, selector);
- });
- };
- var descendant$1 = function (scope, selector) {
- return $_d8v5lf1gjnlpax0y.one(selector, scope);
- };
- var closest$1 = function (scope, selector, isRoot) {
- return ClosestOrAncestor($_d8v5lf1gjnlpax0y.is, ancestor$1, scope, selector, isRoot);
- };
- var $_2kbu29jnlpax6t = {
- first: first$3,
- ancestor: ancestor$1,
- sibling: sibling$2,
- child: child$2,
- descendant: descendant$1,
- closest: closest$1
- };
-
- 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 = Element$$1.fromDom(rng.startContainer);
- var root = Element$$1.fromDom(editor.getBody());
- var selector = annotationName.fold(function () {
- return '.' + annotation();
- }, function (an) {
- return '[' + dataAnnotation() + '="' + an + '"]';
- });
- var newStart = $_dr4ybh18jnlpawzt.child(start, rng.startOffset).getOr(start);
- var closest = $_2kbu29jnlpax6t.closest(newStart, selector, function (n) {
- return $_5h7cor1ejnlpax0k.eq(n, root);
- });
- var getAttr = function (c, property) {
- if ($_521j8z15jnlpawz7.has(c, property)) {
- return Option.some($_521j8z15jnlpawz7.get(c, property));
- } else {
- return Option.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 $_7u5fzs11jnlpawv6.isElement(elem) && $_fes8i223jnlpax5z.has(elem, annotation());
- };
- var findMarkers = function (editor, uid) {
- var body = Element$$1.fromDom(editor.getBody());
- return $_cmitir27jnlpax6e.descendants(body, '[' + dataAnnotationId() + '="' + uid + '"]');
- };
- var findAll = function (editor, name) {
- var body = Element$$1.fromDom(editor.getBody());
- var markers = $_cmitir27jnlpax6e.descendants(body, '[' + dataAnnotation() + '="' + name + '"]');
- var directory = {};
- each(markers, function (m) {
- var uid = $_521j8z15jnlpawz7.get(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(Option.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$3(function () {
- var callbackMap = changeCallbacks.get();
- var annotations = sort(keys(callbackMap));
- each(annotations, function (name) {
- updateCallbacks(name, function (data) {
- var prev = data.previous.get();
- identify(editor, Option.some(name)).fold(function () {
- if (prev.isSome()) {
- fireNoAnnotation(name);
- data.previous.set(Option.none());
- }
- }, function (_a) {
- var uid = _a.uid, name = _a.name, elements = _a.elements;
- if (!prev.is(uid)) {
- fireCallbacks(name, uid, elements);
- data.previous.set(Option.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) {
- var optAnnotation = Option.from(span.attributes.map[dataAnnotation()]);
- return optAnnotation.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$1 = function () {
- var annotations = {};
- var register = function (name, settings) {
- annotations[name] = {
- name: name,
- settings: settings
- };
- };
- var lookup = function (name) {
- return annotations.hasOwnProperty(name) ? Option.from(annotations[name]).map(function (a) {
- return a.settings;
- }) : Option.none();
- };
- return {
- register: register,
- lookup: lookup
- };
- };
-
- var unique = 0;
- var generate = 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$3 = function (element, classes) {
- each(classes, function (x) {
- $_fes8i223jnlpax5z.add(element, x);
- });
- };
- var remove$6 = function (element, classes) {
- each(classes, function (x) {
- $_fes8i223jnlpax5z.remove(element, x);
- });
- };
- var toggle$2 = function (element, classes) {
- each(classes, function (x) {
- $_fes8i223jnlpax5z.toggle(element, x);
- });
- };
- var hasAll = function (element, classes) {
- return forall(classes, function (clazz) {
- return $_fes8i223jnlpax5z.has(element, clazz);
- });
- };
- var hasAny = function (element, classes) {
- return exists(classes, function (clazz) {
- return $_fes8i223jnlpax5z.has(element, clazz);
- });
- };
- var getNative = function (element) {
- var classList = element.dom().classList;
- var r = new Array(classList.length);
- for (var i = 0; i < classList.length; i++) {
- r[i] = classList.item(i);
- }
- return r;
- };
- var get$4 = function (element) {
- return $_2thj3d25jnlpax63.supports(element) ? getNative(element) : $_2thj3d25jnlpax63.get(element);
- };
- var $_6bet4b2hjnlpax8c = {
- add: add$3,
- remove: remove$6,
- toggle: toggle$2,
- hasAll: hasAll,
- hasAny: hasAny,
- get: get$4
- };
-
- var clone$1 = function (original, deep) {
- return Element$$1.fromDom(original.dom().cloneNode(deep));
- };
- var shallow = function (original) {
- return clone$1(original, false);
- };
- var deep = function (original) {
- return clone$1(original, true);
- };
- var shallowAs = function (original, tag) {
- var nu = Element$$1.fromTag(tag);
- var attributes = $_521j8z15jnlpawz7.clone(original);
- $_521j8z15jnlpawz7.setAll(nu, attributes);
- return nu;
- };
- var copy$1 = function (original, tag) {
- var nu = shallowAs(original, tag);
- var cloneChildren = $_dr4ybh18jnlpawzt.children(deep(original));
- $_9vd3j51xjnlpax4s.append(nu, cloneChildren);
- return nu;
- };
- var mutate = function (original, tag) {
- var nu = shallowAs(original, tag);
- $_ag89ax1yjnlpax4x.before(original, nu);
- var children = $_dr4ybh18jnlpawzt.children(original);
- $_9vd3j51xjnlpax4s.append(nu, children);
- $_azq8zm1wjnlpax4n.remove(original);
- return nu;
- };
- var $_5sdpl92ijnlpax8h = {
- shallow: shallow,
- shallowAs: shallowAs,
- deep: deep,
- copy: copy$1,
- mutate: mutate
- };
-
- var fromHtml$1 = function (html, scope) {
- var doc = scope || document;
- var div = doc.createElement('div');
- div.innerHTML = html;
- return $_dr4ybh18jnlpawzt.children(Element$$1.fromDom(div));
- };
- var fromTags = function (tags, scope) {
- return map(tags, function (x) {
- return Element$$1.fromTag(x, scope);
- });
- };
- var fromText$1 = function (texts, scope) {
- return map(texts, function (x) {
- return Element$$1.fromText(x, scope);
- });
- };
- var fromDom$1 = function (nodes) {
- return map(nodes, Element$$1.fromDom);
- };
- var $_d4cc782kjnlpax8m = {
- fromHtml: fromHtml$1,
- fromTags: fromTags,
- fromText: fromText$1,
- fromDom: fromDom$1
- };
-
- var get$5 = function (element) {
- return element.dom().innerHTML;
- };
- var set$2 = function (element, content) {
- var owner = $_dr4ybh18jnlpawzt.owner(element);
- var docDom = owner.dom();
- var fragment = Element$$1.fromDom(docDom.createDocumentFragment());
- var contentElements = $_d4cc782kjnlpax8m.fromHtml(content, docDom);
- $_9vd3j51xjnlpax4s.append(fragment, contentElements);
- $_azq8zm1wjnlpax4n.empty(element);
- $_ag89ax1yjnlpax4x.append(element, fragment);
- };
- var getOuter = function (element) {
- var container = Element$$1.fromTag('div');
- var clone = Element$$1.fromDom(element.dom().cloneNode(true));
- $_ag89ax1yjnlpax4x.append(container, clone);
- return get$5(container);
- };
- var $_am4twv2jjnlpax8k = {
- get: get$5,
- set: set$2,
- getOuter: getOuter
- };
-
- var slice$3 = [].slice;
- var constant$1 = function (value) {
- return function () {
- return value;
- };
- };
- var negate = function (predicate) {
- return function (x) {
- return !predicate(x);
- };
- };
- var compose$2 = function (f, g) {
- return function (x) {
- return f(g(x));
- };
- };
- var or = function () {
- var x = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- x[_i] = arguments[_i];
- }
- var args = slice$3.call(arguments);
- return function (x) {
- for (var i = 0; i < args.length; i++) {
- if (args[i](x)) {
- return true;
- }
- }
- return false;
- };
- };
- var and = function () {
- var x = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- x[_i] = arguments[_i];
- }
- var args = slice$3.call(arguments);
- return function (x) {
- for (var i = 0; i < args.length; i++) {
- if (!args[i](x)) {
- return false;
- }
- }
- return true;
- };
- };
- var curry$1 = function (fn) {
- var x = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- x[_i - 1] = arguments[_i];
- }
- var args = slice$3.call(arguments);
- if (args.length - 1 >= fn.length) {
- return fn.apply(this, args.slice(1));
- }
- return function () {
- var tempArgs = args.concat([].slice.call(arguments));
- return curry$1.apply(this, tempArgs);
- };
- };
- var noop$1 = function () {
- };
- var $_dv6bef2njnlpax9l = {
- constant: constant$1,
- negate: negate,
- and: and,
- or: or,
- curry: curry$1,
- compose: compose$2,
- noop: noop$1
- };
-
- var ZWSP = '\uFEFF';
- var isZwsp = function (chr) {
- return chr === ZWSP;
- };
- var trim$3 = function (text) {
- return text.replace(new RegExp(ZWSP, 'g'), '');
- };
- var $_90hfb72rjnlpaxae = {
- isZwsp: isZwsp,
- ZWSP: ZWSP,
- trim: trim$3
- };
-
- var isElement$2 = $_fy28ei1rjnlpax2o.isElement;
- var isText$2 = $_fy28ei1rjnlpax2o.isText;
- 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) && $_90hfb72rjnlpaxae.isZwsp(node.data);
- };
- var isCaretContainer = function (node) {
- return isCaretContainerBlock(node) || isCaretContainerInline(node);
- };
- var hasContent = function (node) {
- return node.firstChild !== node.lastChild || !$_fy28ei1rjnlpax2o.isBr(node.firstChild);
- };
- var insertInline = function (node, before) {
- var doc, sibling, textNode, parentNode;
- doc = node.ownerDocument;
- textNode = doc.createTextNode($_90hfb72rjnlpaxae.ZWSP);
- 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();
- return pos && $_fy28ei1rjnlpax2o.isText(container) && container.data.charAt(pos.offset()) === $_90hfb72rjnlpaxae.ZWSP;
- };
- var isAfterInline = function (pos) {
- var container = pos.container();
- return pos && $_fy28ei1rjnlpax2o.isText(container) && container.data.charAt(pos.offset() - 1) === $_90hfb72rjnlpaxae.ZWSP;
- };
- var createBogusBr = function () {
- var br = document.createElement('br');
- br.setAttribute('data-mce-bogus', '1');
- return br;
- };
- var insertBlock = function (blockName, node, before) {
- var doc, blockNode, parentNode;
- doc = node.ownerDocument;
- blockNode = doc.createElement(blockName);
- blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after');
- blockNode.setAttribute('data-mce-bogus', 'all');
- blockNode.appendChild(createBogusBr());
- 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] === $_90hfb72rjnlpaxae.ZWSP;
- };
- var endsWithCaretContainer = function (node) {
- return isText$2(node) && node.data[node.data.length - 1] === $_90hfb72rjnlpaxae.ZWSP;
- };
- var trimBogusBr = function (elm) {
- var brs = elm.getElementsByTagName('br');
- var lastBr = brs[brs.length - 1];
- if ($_fy28ei1rjnlpax2o.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 = $_fy28ei1rjnlpax2o.isContentEditableTrue;
- var isContentEditableFalse$1 = $_fy28ei1rjnlpax2o.isContentEditableFalse;
- var isBr$2 = $_fy28ei1rjnlpax2o.isBr;
- var isText$3 = $_fy28ei1rjnlpax2o.isText;
- var isInvalidTextElement = $_fy28ei1rjnlpax2o.matchNodeNames('script style textarea');
- var isAtomicInline = $_fy28ei1rjnlpax2o.matchNodeNames('img input textarea hr iframe video audio object');
- var isTable$1 = $_fy28ei1rjnlpax2o.matchNodeNames('table');
- var isCaretContainer$1 = isCaretContainer;
- var isCaretCandidate = function (node) {
- if (isCaretContainer$1(node)) {
- return false;
- }
- if (isText$3(node)) {
- if (isInvalidTextElement(node.parentNode)) {
- return false;
- }
- return true;
- }
- return isAtomicInline(node) || isBr$2(node) || isTable$1(node) || isNonUiContentEditableFalse(node);
- };
- var isUnselectable = function (node) {
- return $_fy28ei1rjnlpax2o.isElement(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 $_n452lmjnlpawsj.reduce(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 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) {
- if (rect1.bottom - rect1.height / 2 < 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 overflowX = function (outer, inner) {
- if (inner.left > outer.left && inner.right < outer.right) {
- return 0;
- } else {
- return inner.left < outer.left ? inner.left - outer.left : inner.right - outer.right;
- }
- };
- var overflowY = function (outer, inner) {
- if (inner.top > outer.top && inner.bottom < outer.bottom) {
- return 0;
- } else {
- return inner.top < outer.top ? inner.top - outer.top : inner.bottom - outer.bottom;
- }
- };
- var getOverflow = function (outer, inner) {
- return {
- x: overflowX(outer, inner),
- y: overflowY(outer, inner)
- };
- };
-
- 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 liftN = function (arr, f) {
- var r = [];
- for (var i = 0; i < arr.length; i++) {
- var x = arr[i];
- if (x.isSome()) {
- r.push(x.getOrDie());
- } else {
- return Option.none();
- }
- }
- return Option.some(f.apply(null, r));
- };
-
- var isElement$3 = $_fy28ei1rjnlpax2o.isElement;
- var isCaretCandidate$1 = isCaretCandidate;
- var isBlock$1 = $_fy28ei1rjnlpax2o.matchStyleValues('display', 'block table');
- var isFloated = $_fy28ei1rjnlpax2o.matchStyleValues('float', 'left right');
- var isValidElementCaretCandidate = $_dv6bef2njnlpax9l.and(isElement$3, isCaretCandidate$1, $_dv6bef2njnlpax9l.negate(isFloated));
- var isNotPre = $_dv6bef2njnlpax9l.negate($_fy28ei1rjnlpax2o.matchStyleValues('white-space', 'pre pre-line pre-wrap'));
- var isText$4 = $_fy28ei1rjnlpax2o.isText;
- var isBr$3 = $_fy28ei1rjnlpax2o.isBr;
- var nodeIndex = DOMUtils$1.nodeIndex;
- var resolveIndex = getNode;
- var createRange = function (doc) {
- return 'createRange' in doc ? doc.createRange() : DOMUtils$1.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$$1) {
- var container = range$$1.startContainer;
- var offset = range$$1.startOffset;
- var text;
- if (isWhiteSpace(range$$1.toString()) && isNotPre(container.parentNode) && $_fy28ei1rjnlpax2o.isText(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 = doc.createTextNode('\xA0');
- var parentNode = brNode.parentNode;
- var clientRect;
- parentNode.insertBefore(nbsp, brNode);
- rng.setStart(nbsp, 0);
- rng.setEnd(nbsp, 1);
- clientRect = clone$2(rng.getBoundingClientRect());
- parentNode.removeChild(nbsp);
- 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 && $_fy28ei1rjnlpax2o.isText(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, clientRects;
- 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$$1 = createRange(container.ownerDocument);
- if (offset < container.data.length) {
- if (isExtendingChar(container.data[offset])) {
- return clientRects;
- }
- if (isExtendingChar(container.data[offset - 1])) {
- range$$1.setStart(container, offset);
- range$$1.setEnd(container, offset + 1);
- if (!isHiddenWhiteSpaceRange(range$$1)) {
- addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range$$1), false));
- return clientRects;
- }
- }
- }
- if (offset > 0) {
- range$$1.setStart(container, offset - 1);
- range$$1.setEnd(container, offset);
- if (!isHiddenWhiteSpaceRange(range$$1)) {
- addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range$$1), false));
- }
- }
- if (offset < container.data.length) {
- range$$1.setStart(container, offset);
- range$$1.setEnd(container, offset + 1);
- if (!isHiddenWhiteSpaceRange(range$$1)) {
- addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range$$1), 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;
- };
- function CaretPosition(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$$1;
- range$$1 = createRange(container.ownerDocument);
- range$$1.setStart(container, offset);
- range$$1.setEnd(container, offset);
- return range$$1;
- };
- var getClientRects = function () {
- if (!clientRects) {
- clientRects = getCaretPositionClientRects(CaretPosition(container, offset));
- }
- return clientRects;
- };
- var isVisible = function () {
- return getClientRects().length > 0;
- };
- var isEqual$$1 = function (caretPosition) {
- return caretPosition && container === caretPosition.container() && offset === caretPosition.offset();
- };
- var getNode$$1 = function (before) {
- return resolveIndex(container, before ? offset - 1 : offset);
- };
- return {
- container: $_dv6bef2njnlpax9l.constant(container),
- offset: $_dv6bef2njnlpax9l.constant(offset),
- toRange: toRange,
- getClientRects: getClientRects,
- isVisible: isVisible,
- isAtStart: isAtStart,
- isAtEnd: isAtEnd,
- isEqual: isEqual$$1,
- getNode: getNode$$1
- };
- }
- (function (CaretPosition) {
- CaretPosition.fromRangeStart = function (range$$1) {
- return CaretPosition(range$$1.startContainer, range$$1.startOffset);
- };
- CaretPosition.fromRangeEnd = function (range$$1) {
- return CaretPosition(range$$1.endContainer, range$$1.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 liftN([
- head(pos2.getClientRects()),
- last(pos1.getClientRects())
- ], isAbove).getOr(false);
- };
- CaretPosition.isBelow = function (pos1, pos2) {
- return liftN([
- 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 ? $_fy28ei1rjnlpax2o.isText(pos.container()) : false;
- };
- CaretPosition.isElementPosition = function (pos) {
- return CaretPosition.isTextPosition(pos) === false;
- };
- }(CaretPosition || (CaretPosition = {})));
- var CaretPosition$1 = CaretPosition;
-
- var isText$5 = $_fy28ei1rjnlpax2o.isText;
- var isBogus$1 = $_fy28ei1rjnlpax2o.isBogus;
- var nodeIndex$1 = DOMUtils$1.nodeIndex;
- var normalizedParent = function (node) {
- var parentNode = node.parentNode;
- if (isBogus$1(parentNode)) {
- return normalizedParent(parentNode);
- }
- return parentNode;
- };
- var getChildNodes = function (node) {
- if (!node) {
- return [];
- }
- return $_n452lmjnlpawsj.reduce(node.childNodes, function (result, node) {
- if (isBogus$1(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, numTextFragments;
- nodes = getChildNodes(normalizedParent(node));
- index = $_n452lmjnlpawsj.findIndex(nodes, equal$1(node), node);
- nodes = nodes.slice(0, index + 1);
- numTextFragments = $_n452lmjnlpawsj.reduce(nodes, function (result, node, i) {
- if (isText$5(node) && isText$5(nodes[i - 1])) {
- result++;
- }
- return result;
- }, 0);
- nodes = $_n452lmjnlpawsj.filter(nodes, $_fy28ei1rjnlpax2o.matchNodeNames(node.nodeName));
- index = $_n452lmjnlpawsj.findIndex(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$2 = 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 = $_n452lmjnlpawsj.filter(parents, $_dv6bef2njnlpax9l.negate($_fy28ei1rjnlpax2o.isBogus));
- path = path.concat($_n452lmjnlpawsj.map(parents, function (node) {
- return createPathItem(node);
- }));
- return path.reverse().join('/') + ',' + outputOffset;
- };
- var resolvePathItem = function (node, name, index) {
- var nodes = getChildNodes(node);
- nodes = $_n452lmjnlpawsj.filter(nodes, function (node, index) {
- return !isText$5(node) || !isText$5(nodes[index - 1]);
- });
- nodes = $_n452lmjnlpawsj.filter(nodes, $_fy28ei1rjnlpax2o.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$1(container, offset);
- };
- var resolve$2 = function (root, path) {
- var parts, container, offset;
- if (!path) {
- return null;
- }
- parts = path.split(',');
- path = parts[0].split('/');
- offset = parts.length > 1 ? parts[1] : 'before';
- container = $_n452lmjnlpawsj.reduce(path, function (result, value) {
- value = /([\w\-\(\)]+)\[([0-9]+)\]/.exec(value);
- if (!value) {
- return null;
- }
- if (value[1] === 'text()') {
- value[1] = '#text';
- }
- return resolvePathItem(result, value[1], parseInt(value[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$1(container.parentNode, offset);
- }
- return findTextPosition(container, parseInt(offset, 10));
- };
-
- var isContentEditableFalse$2 = $_fy28ei1rjnlpax2o.isContentEditableFalse;
- var getNormalizedTextOffset = function (trim, container, offset) {
- var node, trimmedOffset;
- trimmedOffset = trim(container.data.slice(0, offset)).length;
- for (node = container.previousSibling; node && $_fy28ei1rjnlpax2o.isText(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 ($_fy28ei1rjnlpax2o.isText(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 trimEmptyTextNode = function (node) {
- if ($_fy28ei1rjnlpax2o.isText(node) && node.data.length === 0) {
- node.parentNode.removeChild(node);
- }
- };
- var findIndex$3 = function (dom, name, element) {
- var count = 0;
- $_1q1txeljnlpawsa.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 ($_fy28ei1rjnlpax2o.isElement(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 ($_fy28ei1rjnlpax2o.isElement(node)) {
- node = getNode(node, offset);
- if (isContentEditableFalse$2(node)) {
- return node;
- }
- }
- if (isCaretContainer(node)) {
- if ($_fy28ei1rjnlpax2o.isText(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$3(selection.dom, name, element)
- };
- }
- var sibling = findAdjacentContentEditableFalseElm(rng);
- if (sibling) {
- name = sibling.tagName;
- return {
- name: name,
- index: findIndex$3(selection.dom, name, sibling)
- };
- }
- return getLocation(trim, selection, normalized, rng);
- };
- var getCaretBookmark = function (selection) {
- var rng = selection.getRng();
- return {
- start: create$2(selection.dom.getRoot(), CaretPosition$1.fromRangeStart(rng)),
- end: create$2(selection.dom.getRoot(), CaretPosition$1.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$3(dom, name, element)
- };
- }
- var rng2 = normalizeTableCellSelection(rng.cloneRange());
- if (!collapsed) {
- rng2.collapse(false);
- var endBookmarkNode = createBookmarkSpan(dom, id + '_end', filled);
- rng2.insertNode(endBookmarkNode);
- trimEmptyTextNode(endBookmarkNode.nextSibling);
- }
- rng = normalizeTableCellSelection(rng);
- rng.collapse(true);
- var startBookmarkNode = createBookmarkSpan(dom, id + '_start', filled);
- rng.insertNode(startBookmarkNode);
- trimEmptyTextNode(startBookmarkNode.previousSibling);
- trimEmptyTextNode(startBookmarkNode.nextSibling);
- selection.moveToBookmark({
- id: id,
- keep: 1
- });
- return { id: id };
- };
- var getBookmark = function (selection, type, normalized) {
- if (type === 2) {
- return getOffsetBookmark($_90hfb72rjnlpaxae.trim, normalized, selection);
- } else if (type === 3) {
- return getCaretBookmark(selection);
- } else if (type) {
- return getRangeBookmark(selection);
- } else {
- return getPersistentBookmark(selection, false);
- }
- };
- var $_5l0mu32ljnlpax8x = {
- getBookmark: getBookmark,
- getUndoBookmark: curry(getOffsetBookmark, identity, true),
- getPersistentBookmark: getPersistentBookmark
- };
-
- var CARET_ID = '_mce_caret';
- var isCaretNode = function (node) {
- return $_fy28ei1rjnlpax2o.isElement(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 isElement$4 = $_fy28ei1rjnlpax2o.isElement;
- var isText$6 = $_fy28ei1rjnlpax2o.isText;
- var removeNode = function (node) {
- var parentNode = node.parentNode;
- if (parentNode) {
- parentNode.removeChild(node);
- }
- };
- var getNodeValue = function (node) {
- try {
- return node.nodeValue;
- } catch (ex) {
- return '';
- }
- };
- var setNodeValue = function (node, text) {
- if (text.length === 0) {
- removeNode(node);
- } else {
- node.nodeValue = text;
- }
- };
- var trimCount = function (text) {
- var trimmedText = $_90hfb72rjnlpaxae.trim(text);
- return {
- count: text.length - trimmedText.length,
- text: trimmedText
- };
- };
- var removeUnchanged = function (caretContainer, pos) {
- remove$7(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) {
- setNodeValue(caretContainer, text);
- return CaretPosition$1(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$1(parentNode, pos.offset() - 1) : pos;
- }).getOr(pos);
- remove$7(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$1.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos);
- };
- var remove$7 = function (caretContainerNode) {
- if (isElement$4(caretContainerNode) && isCaretContainer(caretContainerNode)) {
- if (hasContent(caretContainerNode)) {
- caretContainerNode.removeAttribute('data-mce-caret');
- } else {
- removeNode(caretContainerNode);
- }
- }
- if (isText$6(caretContainerNode)) {
- var text = $_90hfb72rjnlpaxae.trim(getNodeValue(caretContainerNode));
- setNodeValue(caretContainerNode, text);
- }
- };
- var $_ctzulb33jnlpaxck = {
- removeAndReposition: removeAndReposition,
- remove: remove$7
- };
-
- var isContentEditableTrue$2 = $_fy28ei1rjnlpax2o.isContentEditableTrue;
- var isContentEditableFalse$3 = $_fy28ei1rjnlpax2o.isContentEditableFalse;
- var showCaret = function (direction, editor, node, before, scrollIntoView) {
- return 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 null;
- }
- return getNodeRange(node);
- };
- var renderCaretAtRange = function (editor, range, scrollIntoView) {
- var normalizedRange = normalizeRange(1, editor.getBody(), range);
- var caretPosition = CaretPosition$1.fromRangeStart(normalizedRange);
- var caretPositionNode = caretPosition.getNode();
- if (isContentEditableFalse$3(caretPositionNode)) {
- return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);
- }
- var caretPositionBeforeNode = caretPosition.getNode(true);
- if (isContentEditableFalse$3(caretPositionBeforeNode)) {
- return showCaret(1, editor, caretPositionBeforeNode, false, false);
- }
- var ceRoot = editor.dom.getParent(caretPosition.getNode(), function (node) {
- return isContentEditableFalse$3(node) || isContentEditableTrue$2(node);
- });
- if (isContentEditableFalse$3(ceRoot)) {
- return showCaret(1, editor, ceRoot, false, scrollIntoView);
- }
- return null;
- };
- var renderRangeCaret = function (editor, range, scrollIntoView) {
- if (!range || !range.collapsed) {
- return range;
- }
- var caretRange = renderCaretAtRange(editor, range, scrollIntoView);
- if (caretRange) {
- return caretRange;
- }
- return range;
- };
-
- var HDirection;
- (function (HDirection) {
- HDirection[HDirection['Backwards'] = -1] = 'Backwards';
- HDirection[HDirection['Forwards'] = 1] = 'Forwards';
- }(HDirection || (HDirection = {})));
- var isContentEditableFalse$4 = $_fy28ei1rjnlpax2o.isContentEditableFalse;
- var isText$7 = $_fy28ei1rjnlpax2o.isText;
- var isElement$5 = $_fy28ei1rjnlpax2o.isElement;
- var isBr$4 = $_fy28ei1rjnlpax2o.isBr;
- var isCaretCandidate$2 = 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$2(node.previousSibling) && !isText$7(node.previousSibling)) {
- return CaretPosition$1.before(node);
- }
- if (isText$7(node)) {
- return CaretPosition$1(node, 0);
- }
- }
- if (isBackwards(direction)) {
- if (isCaretCandidate$2(node.nextSibling) && !isText$7(node.nextSibling)) {
- return CaretPosition$1.after(node);
- }
- if (isText$7(node)) {
- return CaretPosition$1(node, node.data.length);
- }
- }
- if (isBackwards(direction)) {
- if (isBr$4(node)) {
- return CaretPosition$1.before(node);
- }
- return CaretPosition$1.after(node);
- }
- return CaretPosition$1.before(node);
- };
- var isBrBeforeBlock = function (node, root) {
- var next;
- if (!$_fy28ei1rjnlpax2o.isBr(node)) {
- return false;
- }
- if (isAtomic(node.nextSibling)) {
- return false;
- }
- next = findCaretPosition(HDirection.Forwards, CaretPosition$1.after(node), root);
- if (!next) {
- return false;
- }
- return !isInSameBlock(CaretPosition$1.before(node), CaretPosition$1.before(next), root);
- };
- var findCaretPosition = function (direction, startPos, root) {
- var node, nextNode, innerNode;
- var rootContentEditableFalseElm, caretPosition;
- if (!isElement$5(root) || !startPos) {
- return null;
- }
- if (startPos.isEqual(CaretPosition$1.after(root)) && root.lastChild) {
- caretPosition = CaretPosition$1.after(root.lastChild);
- if (isBackwards(direction) && isCaretCandidate$2(root.lastChild) && isElement$5(root.lastChild)) {
- return isBr$4(root.lastChild) ? CaretPosition$1.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$1(container, --offset);
- }
- if (isForwards(direction) && offset < container.length) {
- return CaretPosition$1(container, ++offset);
- }
- node = container;
- } else {
- if (isBackwards(direction) && offset > 0) {
- nextNode = nodeAtIndex(container, offset - 1);
- if (isCaretCandidate$2(nextNode)) {
- if (!isAtomic$1(nextNode)) {
- innerNode = findNode(nextNode, direction, isEditableCaretCandidate$1, nextNode);
- if (innerNode) {
- if (isText$7(innerNode)) {
- return CaretPosition$1(innerNode, innerNode.data.length);
- }
- return CaretPosition$1.after(innerNode);
- }
- }
- if (isText$7(nextNode)) {
- return CaretPosition$1(nextNode, nextNode.data.length);
- }
- return CaretPosition$1.before(nextNode);
- }
- }
- if (isForwards(direction) && offset < container.childNodes.length) {
- nextNode = nodeAtIndex(container, offset);
- if (isCaretCandidate$2(nextNode)) {
- if (isBr$4(nextNode) && root.lastChild === nextNode) {
- return null;
- }
- if (isBrBeforeBlock(nextNode, root)) {
- return findCaretPosition(direction, CaretPosition$1.after(nextNode), root);
- }
- if (!isAtomic$1(nextNode)) {
- innerNode = findNode(nextNode, direction, isEditableCaretCandidate$1, nextNode);
- if (innerNode) {
- if (isText$7(innerNode)) {
- return CaretPosition$1(innerNode, 0);
- }
- return CaretPosition$1.before(innerNode);
- }
- }
- if (isText$7(nextNode)) {
- return CaretPosition$1(nextNode, 0);
- }
- return CaretPosition$1.after(nextNode);
- }
- }
- node = nextNode ? nextNode : caretPosition.getNode();
- }
- if (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart()) {
- node = findNode(node, direction, $_dv6bef2njnlpax9l.constant(true), root, true);
- if (isEditableCaretCandidate$1(node, root)) {
- return getCaretCandidatePosition(direction, node);
- }
- }
- nextNode = findNode(node, direction, isEditableCaretCandidate$1, root);
- rootContentEditableFalseElm = $_n452lmjnlpawsj.last($_n452lmjnlpawsj.filter(getParents(container, root), isContentEditableFalse$4));
- if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) {
- if (isForwards(direction)) {
- caretPosition = CaretPosition$1.after(rootContentEditableFalseElm);
- } else {
- caretPosition = CaretPosition$1.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 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 ? positions.reverse() : positions;
- };
- var walk$1 = function (direction, caretWalker, pos) {
- return direction === HDirection.Forwards ? caretWalker.next(pos) : caretWalker.prev(pos);
- };
- var getBreakType = function (scope, direction, currentPos, nextPos) {
- if ($_fy28ei1rjnlpax2o.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$1(direction, caretWalker, currentPos);
- if (!nextPos) {
- break;
- }
- if ($_fy28ei1rjnlpax2o.isBr(nextPos.getNode(false))) {
- if (direction === HDirection.Forwards) {
- return {
- positions: flip(direction, positions).concat([nextPos]),
- breakType: BreakType.Br,
- breakAt: Option.some(nextPos)
- };
- } else {
- return {
- positions: flip(direction, positions),
- breakType: BreakType.Br,
- breakAt: Option.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: Option.some(nextPos)
- };
- }
- positions.push(nextPos);
- currentPos = nextPos;
- }
- return {
- positions: flip(direction, positions),
- breakType: BreakType.Eol,
- breakAt: Option.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 Option.some(newPos);
- }, function (lastPos) {
- return liftN([
- 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);
- });
- }, Option.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 getPositionsAbove = curry(getAdjacentLinePositions, -1, getPositionsUntilPreviousLine);
- var getPositionsBelow = curry(getAdjacentLinePositions, 1, getPositionsUntilNextLine);
- var getFirstLinePositions = function (scope) {
- return $_32xcvk30jnlpaxbn.firstPositionIn(scope).map(function (pos) {
- return [pos].concat(getPositionsUntilNextLine(scope, pos).positions);
- }).getOr([]);
- };
- var getLastLinePositions = function (scope) {
- return $_32xcvk30jnlpaxbn.lastPositionIn(scope).map(function (pos) {
- return getPositionsUntilPreviousLine(scope, pos).positions.concat(pos);
- }).getOr([]);
- };
-
- 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 Option.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 Option.some(newDist < oldDist ? newCorner : oldCorner);
- });
- }, Option.none());
- };
- var getClosestCell = function (getYAxisValue, isTargetCorner, table, x, y) {
- var cells = $_cmitir27jnlpax6e.descendants(Element$$1.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, getBottomValue, isAbove$1);
- var getClosestCellBelow = curry(getClosestCell, 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 getPos$1 = function (elm) {
- var x = 0, y = 0;
- var offsetParent = elm;
- while (offsetParent && offsetParent.nodeType) {
- x += offsetParent.offsetLeft || 0;
- y += offsetParent.offsetTop || 0;
- offsetParent = offsetParent.offsetParent;
- }
- return {
- x: x,
- y: y
- };
- };
- var fireScrollIntoViewEvent = function (editor, elm, alignToTop) {
- var scrollEvent = {
- elm: elm,
- alignToTop: alignToTop
- };
- editor.fire('scrollIntoView', scrollEvent);
- return scrollEvent.isDefaultPrevented();
- };
- var scrollElementIntoView = function (editor, elm, alignToTop) {
- var y, viewPort;
- var dom = editor.dom;
- var root = dom.getRoot();
- var viewPortY, viewPortH, offsetY = 0;
- if (fireScrollIntoViewEvent(editor, elm, alignToTop)) {
- return;
- }
- if (!$_fy28ei1rjnlpax2o.isElement(elm)) {
- return;
- }
- if (alignToTop === false) {
- offsetY = elm.offsetHeight;
- }
- if (root.nodeName !== 'BODY') {
- var scrollContainer = editor.selection.getScrollContainer();
- if (scrollContainer) {
- y = getPos$1(elm).y - getPos$1(scrollContainer).y + offsetY;
- viewPortH = scrollContainer.clientHeight;
- viewPortY = scrollContainer.scrollTop;
- if (y < viewPortY || y + 25 > viewPortY + viewPortH) {
- scrollContainer.scrollTop = y < viewPortY ? y : y - viewPortH + 25;
- }
- return;
- }
- }
- viewPort = dom.getViewPort(editor.getWin());
- y = dom.getPos(elm).y + offsetY;
- viewPortY = viewPort.y;
- viewPortH = viewPort.h;
- if (y < viewPort.y || y + 25 > viewPortY + viewPortH) {
- editor.getWin().scrollTo(0, y < viewPortY ? y : y - viewPortH + 25);
- }
- };
- var getViewPortRect = function (editor) {
- if (editor.inline) {
- return editor.getBody().getBoundingClientRect();
- } else {
- var win = editor.getWin();
- return {
- left: 0,
- right: win.innerWidth,
- top: 0,
- bottom: win.innerHeight,
- width: win.innerWidth,
- height: win.innerHeight
- };
- }
- };
- var scrollBy = function (editor, dx, dy) {
- if (editor.inline) {
- editor.getBody().scrollLeft += dx;
- editor.getBody().scrollTop += dy;
- } else {
- editor.getWin().scrollBy(dx, dy);
- }
- };
- var scrollRangeIntoView = function (editor, rng) {
- head(CaretPosition.fromRangeStart(rng).getClientRects()).each(function (rngRect) {
- var bodyRect = getViewPortRect(editor);
- var overflow = getOverflow(bodyRect, rngRect);
- var margin = 4;
- var dx = overflow.x > 0 ? overflow.x + margin : overflow.x - margin;
- var dy = overflow.y > 0 ? overflow.y + margin : overflow.y - margin;
- scrollBy(editor, overflow.x !== 0 ? dx : 0, overflow.y !== 0 ? dy : 0);
- });
- };
- var $_av60ug39jnlpaxee = {
- scrollElementIntoView: scrollElementIntoView,
- scrollRangeIntoView: scrollRangeIntoView
- };
-
- 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');
- return block === false ? '' : 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 $_1q1txeljnlpawsa.explode(editor.getParam('font_size_style_values', ''));
- };
- var getFontSizeClasses = function (editor) {
- return $_1q1txeljnlpawsa.explode(editor.getParam('font_size_classes', ''));
- };
- var getImagesDataImgFilter = function (editor) {
- return editor.getParam('images_dataimg_filter', constant(true), '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 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 $_c6e09z3ajnlpaxek = {
- getIframeAttrs: getIframeAttrs,
- getDocType: getDocType,
- getDocumentBaseUrl: getDocumentBaseUrl,
- getBodyId: getBodyId,
- getBodyClass: getBodyClass,
- getContentSecurityPolicy: getContentSecurityPolicy,
- shouldPutBrInPre: shouldPutBrInPre,
- getForcedRootBlock: getForcedRootBlock,
- getForcedRootBlockAttrs: getForcedRootBlockAttrs,
- getBrNewLineSelector: getBrNewLineSelector,
- getNoNewLineSelector: getNoNewLineSelector,
- shouldKeepStyles: shouldKeepStyles,
- shouldEndContainerOnEmptyBlock: shouldEndContainerOnEmptyBlock,
- getFontStyleValues: getFontStyleValues,
- getFontSizeClasses: getFontSizeClasses,
- getImagesDataImgFilter: getImagesDataImgFilter,
- isAutomaticUploadsEnabled: isAutomaticUploadsEnabled,
- shouldReuseFileName: shouldReuseFileName,
- shouldReplaceBlobUris: shouldReplaceBlobUris,
- getImageUploadUrl: getImageUploadUrl,
- getImageUploadBasePath: getImageUploadBasePath,
- getImagesUploadCredentials: getImagesUploadCredentials,
- getImagesUploadHandler: getImagesUploadHandler
- };
-
- var browser$2 = $_766rx4ojnlpawtd.detect().browser;
- var isFakeCaretTableBrowser = function () {
- return browser$2.isIE() || browser$2.isEdge() || browser$2.isFirefox();
- };
- var moveToRange = function (editor, rng) {
- editor.selection.setRng(rng);
- $_av60ug39jnlpaxee.scrollRangeIntoView(editor, rng);
- };
- var hasNextBreak = function (getPositionsUntil, scope, lineInfo) {
- return lineInfo.breakAt.map(function (breakPos) {
- return getPositionsUntil(scope, breakPos).breakAt.isSome();
- }).getOr(false);
- };
- 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) || !$_fy28ei1rjnlpax2o.isBr(pos.getNode()) && startsWithBrBreak(lineInfo)) {
- return !hasNextBreak(getPositionsUntil, scope, lineInfo);
- } else {
- return lineInfo.breakAt.isNone();
- }
- };
- var isAtFirstTableCellLine = $_dv6bef2njnlpax9l.curry(isAtTableCellLine, getPositionsUntilPreviousLine);
- var isAtLastTableCellLine = $_dv6bef2njnlpax9l.curry(isAtTableCellLine, getPositionsUntilNextLine);
- var isCaretAtStartOrEndOfTable = function (forward, rng, table) {
- var caretPos = CaretPosition$1.fromRangeStart(rng);
- return $_32xcvk30jnlpaxbn.positionIn(!forward, table).map(function (pos) {
- return pos.isEqual(caretPos);
- }).getOr(false);
- };
- var navigateHorizontally = function (editor, forward, table, td) {
- var rng = editor.selection.getRng();
- var direction = forward ? 1 : -1;
- if (isFakeCaretTableBrowser() && isCaretAtStartOrEndOfTable(forward, rng, table)) {
- var newRng = showCaret(direction, editor, table, !forward, true);
- 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$1.before(table)), rect.left);
- });
- }).getOr(CaretPosition$1.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$1.after(table)), rect.left);
- });
- }).getOr(CaretPosition$1.after(table));
- };
- var getTable = function (previous, pos) {
- var node = pos.getNode(previous);
- return $_fy28ei1rjnlpax2o.isElement(node) && node.nodeName === 'TABLE' ? Option.some(node) : Option.none();
- };
- var renderBlock = function (down, editor, table, pos) {
- var forcedRootBlock = $_c6e09z3ajnlpaxek.getForcedRootBlock(editor);
- if (forcedRootBlock) {
- editor.undoManager.transact(function () {
- var element = Element$$1.fromTag(forcedRootBlock);
- $_521j8z15jnlpawz7.setAll(element, $_c6e09z3ajnlpaxek.getForcedRootBlockAttrs(editor));
- $_ag89ax1yjnlpax4x.append(element, Element$$1.fromTag('br'));
- if (down) {
- $_ag89ax1yjnlpax4x.after(Element$$1.fromDom(table), element);
- } else {
- $_ag89ax1yjnlpax4x.before(Element$$1.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$$1 = down === false;
- table.fold(function () {
- return moveToRange(editor, pos.toRange());
- }, function (table) {
- return $_32xcvk30jnlpaxbn.positionIn(last$$1, 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$1.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 moveH = function (editor, forward) {
- return function () {
- return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {
- return Option.from(editor.dom.getParent(td, 'table')).map(function (table) {
- return navigateHorizontally(editor, forward, table, td);
- });
- }).getOr(false);
- };
- };
- var moveV = function (editor, forward) {
- return function () {
- return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {
- return Option.from(editor.dom.getParent(td, 'table')).map(function (table) {
- return navigateVertically(editor, forward, table, td);
- });
- }).getOr(false);
- };
- };
-
- var isContentEditableFalse$5 = $_fy28ei1rjnlpax2o.isContentEditableFalse;
- var isTableCell$1 = function (node) {
- return $_fy28ei1rjnlpax2o.isElement(node) && /^(TD|TH)$/i.test(node.tagName);
- };
- 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 contentEditableFalseNodes, node, sibling, i, data;
- contentEditableFalseNodes = DomQuery('*[contentEditable=false]', root);
- for (i = 0; i < contentEditableFalseNodes.length; i++) {
- node = contentEditableFalseNodes[i];
- sibling = node.previousSibling;
- if (endsWithCaretContainer(sibling)) {
- data = sibling.data;
- if (data.length === 1) {
- sibling.parentNode.removeChild(sibling);
- } else {
- sibling.deleteData(data.length - 1, 1);
- }
- }
- sibling = node.nextSibling;
- if (startsWithCaretContainer(sibling)) {
- data = sibling.data;
- if (data.length === 1) {
- sibling.parentNode.removeChild(sibling);
- } else {
- sibling.deleteData(0, 1);
- }
- }
- }
- };
- var FakeCaret = function (root, isBlock, hasFocus) {
- var lastVisualCaret = Cell(Option.none());
- var cursorInterval, caretContainerNode;
- var show = function (before, element) {
- var clientRect, rng;
- hide();
- if (isTableCell$1(element)) {
- return null;
- }
- if (isBlock(element)) {
- caretContainerNode = insertBlock('p', element, before);
- clientRect = getAbsoluteClientRect(root, element, before);
- DomQuery(caretContainerNode).css('top', clientRect.top);
- var caret = DomQuery('').css(clientRect).appendTo(root)[0];
- lastVisualCaret.set(Option.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 (isContentEditableFalse$5(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) {
- $_ctzulb33jnlpaxck.remove(caretContainerNode);
- caretContainerNode = null;
- }
- lastVisualCaret.get().each(function (caretState) {
- DomQuery(caretState.caret).remove();
- lastVisualCaret.set(Option.none());
- });
- clearInterval(cursorInterval);
- };
- var startBlink = function () {
- cursorInterval = $_2nbnh1ijnlpawpi.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(clientRect);
- });
- };
- var destroy = function () {
- return $_2nbnh1ijnlpawpi.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 isFakeCaretTarget = function (node) {
- return isContentEditableFalse$5(node) || $_fy28ei1rjnlpax2o.isTable(node) && isFakeCaretTableBrowser();
- };
-
- var isContentEditableFalse$6 = $_fy28ei1rjnlpax2o.isContentEditableFalse;
- var isBlockLike = $_fy28ei1rjnlpax2o.matchStyleValues('display', 'block table table-cell table-caption list-item');
- var isCaretContainer$2 = isCaretContainer;
- var isCaretContainerBlock$1 = isCaretContainerBlock;
- var curry$2 = $_dv6bef2njnlpax9l.curry;
- var isElement$6 = $_fy28ei1rjnlpax2o.isElement;
- var isCaretCandidate$3 = 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 TreeWalker(node, rootNode);
- if (isBackwards(direction)) {
- if (isContentEditableFalse$6(node) || isCaretContainerBlock$1(node)) {
- node = skipCaretContainers(walker.prev, true);
- if (predicateFn(node)) {
- return node;
- }
- }
- while (node = skipCaretContainers(walker.prev, shallow)) {
- if (predicateFn(node)) {
- return node;
- }
- }
- }
- if (isForwards(direction)) {
- if (isContentEditableFalse$6(node) || isCaretContainerBlock$1(node)) {
- node = skipCaretContainers(walker.next, true);
- if (predicateFn(node)) {
- return node;
- }
- }
- while (node = skipCaretContainers(walker.next, 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) {
- var container, offset;
- if (!caretPosition) {
- return null;
- }
- container = caretPosition.container();
- offset = caretPosition.offset();
- if (!isElement$6(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$6(sibling)) {
- if (isNodesInSameBlock(root, sibling, node)) {
- return sibling;
- }
- break;
- }
- if (isCaretCandidate$3(sibling)) {
- break;
- }
- node = node.parentNode;
- }
- return null;
- };
- var before$2 = curry$2(beforeAfter, true);
- var after$2 = curry$2(beforeAfter, false);
- var normalizeRange = function (direction, root, range) {
- var node, container, offset, location;
- var leanLeft = curry$2(lean, true, root);
- var leanRight = curry$2(lean, false, root);
- container = range.startContainer;
- offset = range.startOffset;
- if (isCaretContainerBlock(container)) {
- if (!isElement$6(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$2(node);
- }
- }
- }
- if (!range.collapsed) {
- return range;
- }
- if ($_fy28ei1rjnlpax2o.isText(container)) {
- if (isCaretContainer$2(container)) {
- if (direction === 1) {
- node = leanRight(container);
- if (node) {
- return before$2(node);
- }
- node = leanLeft(container);
- if (node) {
- return after$2(node);
- }
- }
- if (direction === -1) {
- node = leanLeft(container);
- if (node) {
- return after$2(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$2(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$2(node);
- }
- return range;
- }
- }
- return range;
- };
- var isNextToContentEditableFalse = function (relativeOffset, caretPosition) {
- var node = getChildNodeAtRelativeOffset(relativeOffset, caretPosition);
- return isContentEditableFalse$6(node) && !$_fy28ei1rjnlpax2o.isBogusAll(node);
- };
- var isNextToTable = function (relativeOffset, caretPosition) {
- return $_fy28ei1rjnlpax2o.isTable(getChildNodeAtRelativeOffset(relativeOffset, caretPosition));
- };
- var getRelativeCefElm = function (forward, caretPosition) {
- return Option.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, caretPosition)).filter(isContentEditableFalse$6);
- };
- var getNormalizedRangeEndPoint = function (direction, root, range) {
- var normalizedRange = normalizeRange(direction, root, range);
- if (direction === -1) {
- return CaretPosition.fromRangeStart(normalizedRange);
- }
- return CaretPosition.fromRangeEnd(normalizedRange);
- };
- var isBeforeContentEditableFalse = curry$2(isNextToContentEditableFalse, 0);
- var isAfterContentEditableFalse = curry$2(isNextToContentEditableFalse, -1);
- var isBeforeTable = curry$2(isNextToTable, 0);
- var isAfterTable = curry$2(isNextToTable, -1);
-
- var walkToPositionIn = function (forward, root, start) {
- var position = forward ? CaretPosition$1.before(start) : CaretPosition$1.after(start);
- return fromPosition(forward, root, position);
- };
- var afterElement = function (node) {
- return $_fy28ei1rjnlpax2o.isBr(node) ? CaretPosition$1.before(node) : CaretPosition$1.after(node);
- };
- var isBeforeOrStart = function (position) {
- if (CaretPosition$1.isTextPosition(position)) {
- return position.offset() === 0;
- } else {
- return isCaretCandidate(position.getNode());
- }
- };
- var isAfterOrEnd = function (position) {
- if (CaretPosition$1.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$1.isTextPosition(from) && !CaretPosition$1.isTextPosition(to) && from.getNode() === to.getNode(true);
- };
- var isAtBr = function (position) {
- return !CaretPosition$1.isTextPosition(position) && $_fy28ei1rjnlpax2o.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 Option.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 Option.some(to);
- }
- });
- };
- var positionIn = function (forward, element) {
- var startNode = forward ? element.firstChild : element.lastChild;
- if ($_fy28ei1rjnlpax2o.isText(startNode)) {
- return Option.some(CaretPosition$1(startNode, forward ? 0 : startNode.data.length));
- } else if (startNode) {
- if (isCaretCandidate(startNode)) {
- return Option.some(forward ? CaretPosition$1.before(startNode) : afterElement(startNode));
- } else {
- return walkToPositionIn(forward, element, startNode);
- }
- } else {
- return Option.none();
- }
- };
- var $_32xcvk30jnlpaxbn = {
- fromPosition: fromPosition,
- nextPosition: curry(fromPosition, true),
- prevPosition: curry(fromPosition, false),
- navigate: navigate,
- positionIn: positionIn,
- firstPositionIn: curry(positionIn, true),
- lastPositionIn: curry(positionIn, false)
- };
-
- var isStringPathBookmark = function (bookmark) {
- return typeof bookmark.start === 'string';
- };
- 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 $_1q1txeljnlpawsa.isArray(bookmark.start);
- };
-
- var addBogus = function (dom, node) {
- if (dom.isBlock(node) && !node.innerHTML && !$_cseqobajnlpawll.ie) {
- node.innerHTML = '
';
- }
- return node;
- };
- var resolveCaretPositionBookmark = function (dom, bookmark) {
- var rng, pos;
- rng = dom.createRng();
- pos = resolve$2(dom.getRoot(), bookmark.start);
- rng.setStart(pos.container(), pos.offset());
- pos = resolve$2(dom.getRoot(), bookmark.end);
- rng.setEnd(pos.container(), pos.offset());
- return rng;
- };
- var insertZwsp = function (node, rng) {
- var textNode = node.ownerDocument.createTextNode($_90hfb72rjnlpaxae.ZWSP);
- node.appendChild(textNode);
- rng.setStart(textNode, 0);
- rng.setEnd(textNode, 0);
- };
- var isEmpty = function (node) {
- return node.hasChildNodes() === false;
- };
- var tryFindRangePosition = function (node, rng) {
- return $_32xcvk30jnlpaxbn.lastPositionIn(node).fold(function () {
- return false;
- }, function (pos) {
- rng.setStart(pos.container(), pos.offset());
- rng.setEnd(pos.container(), pos.offset());
- return true;
- });
- };
- var padEmptyCaretContainer = function (root, node, rng) {
- if (isEmpty(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 $_fy28ei1rjnlpax2o.isText(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;
- $_1q1txeljnlpawsa.each($_1q1txeljnlpawsa.grep(marker.childNodes), function (node) {
- if ($_fy28ei1rjnlpax2o.isText(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 && $_fy28ei1rjnlpax2o.isText(prev) && !$_cseqobajnlpawll.opera) {
- idx = prev.nodeValue.length;
- prev.appendData(next.nodeValue);
- dom.remove(next);
- if (suffix === 'start') {
- container = prev;
- offset = idx;
- } else {
- container = prev;
- offset = idx;
- }
- }
- }
- return Option.some(CaretPosition$1(container, offset));
- } else {
- return Option.none();
- }
- };
- var alt = function (o1, o2) {
- return o1.isSome() ? o1 : o2;
- };
- var resolvePaths = function (dom, bookmark) {
- var rng = dom.createRng();
- if (setEndPoint(dom, true, bookmark, rng) && setEndPoint(dom, false, bookmark, rng)) {
- return Option.some(rng);
- } else {
- return Option.none();
- }
- };
- var resolveId = function (dom, bookmark) {
- var startPos = restoreEndPoint(dom, 'start', bookmark);
- var endPos = restoreEndPoint(dom, 'end', bookmark);
- return liftN([
- startPos,
- alt(endPos, 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 Option.from(dom.select(bookmark.name)[bookmark.index]).map(function (elm) {
- var rng = dom.createRng();
- rng.selectNode(elm);
- return rng;
- });
- };
- var resolve$3 = function (selection, bookmark) {
- var dom = selection.dom;
- if (bookmark) {
- if (isPathBookmark(bookmark)) {
- return resolvePaths(dom, bookmark);
- } else if (isStringPathBookmark(bookmark)) {
- return Option.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 Option.some(bookmark.rng);
- }
- }
- return Option.none();
- };
- var $_6rgudt2yjnlpaxb4 = { resolve: resolve$3 };
-
- var getBookmark$1 = function (selection, type, normalized) {
- return $_5l0mu32ljnlpax8x.getBookmark(selection, type, normalized);
- };
- var moveToBookmark = function (selection, bookmark) {
- $_6rgudt2yjnlpaxb4.resolve(selection, bookmark).each(function (rng) {
- selection.setRng(rng);
- });
- };
- var isBookmarkNode$1 = function (node) {
- return $_fy28ei1rjnlpax2o.isElement(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';
- };
- var $_43l8qj2xjnlpaxb1 = {
- getBookmark: getBookmark$1,
- moveToBookmark: moveToBookmark,
- isBookmarkNode: isBookmarkNode$1
- };
-
- 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 TreeWalker(container, dom.getParent(container, dom.isBlock));
- } else {
- container = nodes[nodes.length - 1];
- walker = new TreeWalker(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) {
- next = next ? 'nextSibling' : 'previousSibling';
- for (node = inc ? node : node[next]; node; node = node[next]) {
- if (node.nodeType === 1 || !isWhiteSpaceNode(node)) {
- return node;
- }
- }
- }
- };
- var isTextBlock$1 = function (editor, name) {
- if (name.nodeType) {
- 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) {
- return node && node.nodeType === 3 && /^([\t \r\n]+|)$/.test(node.nodeValue);
- };
- 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 $_dlfh233cjnlpaxes = {
- isInlineBlock: isInlineBlock,
- moveStart: moveStart,
- getNonWhiteSpaceSibling: getNonWhiteSpaceSibling,
- isTextBlock: isTextBlock$1,
- isValid: isValid,
- isWhiteSpaceNode: isWhiteSpaceNode,
- replaceVars: replaceVars,
- isEq: isEq,
- normalizeStyleValue: normalizeStyleValue,
- getStyle: getStyle,
- getTextDecoration: getTextDecoration,
- getParents: getParents$1
- };
-
- var isBookmarkNode$2 = $_43l8qj2xjnlpaxb1.isBookmarkNode;
- var getParents$2 = $_dlfh233cjnlpaxes.getParents;
- var isWhiteSpaceNode$1 = $_dlfh233cjnlpaxes.isWhiteSpaceNode;
- var isTextBlock$2 = $_dlfh233cjnlpaxes.isTextBlock;
- var findLeaf = function (node, offset) {
- if (typeof offset === 'undefined') {
- offset = node.nodeType === 3 ? node.length : node.childNodes.length;
- }
- while (node && node.hasChildNodes()) {
- node = node.childNodes[offset];
- if (node) {
- offset = node.nodeType === 3 ? node.length : node.childNodes.length;
- }
- }
- return {
- node: node,
- offset: offset
- };
- };
- var excludeTrailingWhitespace = function (endContainer, endOffset) {
- var leaf = findLeaf(endContainer, endOffset);
- if (leaf.node) {
- while (leaf.node && leaf.offset === 0 && leaf.node.previousSibling) {
- leaf = findLeaf(leaf.node.previousSibling);
- }
- if (leaf.node && leaf.offset > 0 && leaf.node.nodeType === 3 && leaf.node.nodeValue.charAt(leaf.offset - 1) === ' ') {
- if (leaf.offset > 1) {
- endContainer = leaf.node;
- endContainer.splitText(leaf.offset - 1);
- }
- }
- }
- return endContainer;
- };
- var isBogusBr = function (node) {
- return node.nodeName === 'BR' && node.getAttribute('data-mce-bogus') && !node.nextSibling;
- };
- var findParentContentEditable = function (dom, node) {
- var parent = node;
- while (parent) {
- if (parent.nodeType === 1 && dom.getContentEditable(parent)) {
- return dom.getContentEditable(parent) === 'false' ? parent : node;
- }
- parent = parent.parentNode;
- }
- return node;
- };
- var findSpace = function (start, remove, node, offset) {
- var pos, pos2;
- var str = node.nodeValue;
- if (typeof offset === 'undefined') {
- offset = start ? str.length : 0;
- }
- if (start) {
- pos = str.lastIndexOf(' ', offset);
- pos2 = str.lastIndexOf('\xA0', offset);
- pos = pos > pos2 ? pos : pos2;
- if (pos !== -1 && !remove && (pos < offset || !start) && pos <= str.length) {
- pos++;
- }
- } else {
- pos = str.indexOf(' ', offset);
- pos2 = str.indexOf('\xA0', offset);
- pos = pos !== -1 && (pos2 === -1 || pos < pos2) ? pos : pos2;
- }
- return pos;
- };
- var findWordEndPoint = function (dom, body, container, offset, start, remove) {
- var walker, node, pos, lastTextNode;
- if (container.nodeType === 3) {
- pos = findSpace(start, remove, container, offset);
- if (pos !== -1) {
- return {
- container: container,
- offset: pos
- };
- }
- lastTextNode = container;
- }
- walker = new TreeWalker(container, dom.getParent(container, dom.isBlock) || body);
- while (node = walker[start ? 'prev' : 'next']()) {
- if (node.nodeType === 3 && !isBookmarkNode$2(node.parentNode)) {
- lastTextNode = node;
- pos = findSpace(start, remove, node);
- if (pos !== -1) {
- return {
- container: node,
- offset: pos
- };
- }
- } else if (dom.isBlock(node) || $_dlfh233cjnlpaxes.isEq(node, 'BR')) {
- break;
- }
- }
- if (lastTextNode) {
- if (start) {
- offset = 0;
- } else {
- offset = lastTextNode.length;
- }
- return {
- container: lastTextNode,
- offset: offset
- };
- }
- };
- var findSelectorEndPoint = function (dom, format, rng, container, siblingName) {
- var parents, i, y, curFormat;
- if (container.nodeType === 3 && container.nodeValue.length === 0 && container[siblingName]) {
- container = container[siblingName];
- }
- parents = getParents$2(dom, container);
- for (i = 0; i < parents.length; i++) {
- for (y = 0; y < format.length; y++) {
- 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(container.nodeType === 3 ? 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 ($_dlfh233cjnlpaxes.isEq(node, 'br')) {
- break;
- }
- }
- }
- return node || container;
- };
- var findParentContainer = function (dom, format, startContainer, startOffset, endContainer, endOffset, start) {
- var container, parent, sibling, siblingName, root;
- container = parent = start ? startContainer : endContainer;
- siblingName = start ? 'previousSibling' : 'nextSibling';
- root = dom.getRoot();
- if (container.nodeType === 3 && !isWhiteSpaceNode$1(container)) {
- if (start ? startOffset > 0 : endOffset < container.nodeValue.length) {
- return container;
- }
- }
- while (true) {
- if (!format[0].block_expand && dom.isBlock(parent)) {
- return parent;
- }
- for (sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {
- if (!isBookmarkNode$2(sibling) && !isWhiteSpaceNode$1(sibling) && !isBogusBr(sibling)) {
- return parent;
- }
- }
- if (parent === root || parent.parentNode === root) {
- container = parent;
- break;
- }
- parent = parent.parentNode;
- }
- return container;
- };
- var expandRng = function (editor, rng, format, remove) {
- var endPoint, startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;
- var dom = editor.dom;
- if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) {
- startContainer = getNode(startContainer, startOffset);
- if (startContainer.nodeType === 3) {
- startOffset = 0;
- }
- }
- if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) {
- endContainer = getNode(endContainer, rng.collapsed ? endOffset : endOffset - 1);
- if (endContainer.nodeType === 3) {
- endOffset = endContainer.nodeValue.length;
- }
- }
- startContainer = findParentContentEditable(dom, startContainer);
- endContainer = findParentContentEditable(dom, endContainer);
- if (isBookmarkNode$2(startContainer.parentNode) || isBookmarkNode$2(startContainer)) {
- startContainer = isBookmarkNode$2(startContainer) ? startContainer : startContainer.parentNode;
- if (rng.collapsed) {
- startContainer = startContainer.previousSibling || startContainer;
- } else {
- startContainer = startContainer.nextSibling || startContainer;
- }
- if (startContainer.nodeType === 3) {
- startOffset = rng.collapsed ? startContainer.length : 0;
- }
- }
- if (isBookmarkNode$2(endContainer.parentNode) || isBookmarkNode$2(endContainer)) {
- endContainer = isBookmarkNode$2(endContainer) ? endContainer : endContainer.parentNode;
- if (rng.collapsed) {
- endContainer = endContainer.nextSibling || endContainer;
- } else {
- endContainer = endContainer.previousSibling || endContainer;
- }
- if (endContainer.nodeType === 3) {
- endOffset = rng.collapsed ? 0 : endContainer.length;
- }
- }
- if (rng.collapsed) {
- endPoint = findWordEndPoint(dom, editor.getBody(), startContainer, startOffset, true, remove);
- if (endPoint) {
- startContainer = endPoint.container;
- startOffset = endPoint.offset;
- }
- endPoint = findWordEndPoint(dom, editor.getBody(), endContainer, endOffset, false, remove);
- if (endPoint) {
- endContainer = endPoint.container;
- endOffset = endPoint.offset;
- }
- }
- if (format[0].inline) {
- endContainer = remove ? endContainer : excludeTrailingWhitespace(endContainer, endOffset);
- }
- if (format[0].inline || format[0].block_expand) {
- if (!format[0].inline || (startContainer.nodeType !== 3 || startOffset === 0)) {
- startContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, true);
- }
- if (!format[0].inline || (endContainer.nodeType !== 3 || endOffset === endContainer.nodeValue.length)) {
- endContainer = findParentContainer(dom, format, startContainer, startOffset, 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, endContainer, endOffset, true);
- }
- if (!dom.isBlock(endContainer)) {
- endContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, false);
- }
- }
- }
- if (startContainer.nodeType === 1) {
- startOffset = dom.nodeIndex(startContainer);
- startContainer = startContainer.parentNode;
- }
- if (endContainer.nodeType === 1) {
- endOffset = dom.nodeIndex(endContainer) + 1;
- endContainer = endContainer.parentNode;
- }
- return {
- startContainer: startContainer,
- startOffset: startOffset,
- endContainer: endContainer,
- endOffset: endOffset
- };
- };
- var $_3cscnj2wjnlpaxau = { expandRng: expandRng };
-
- var each$8 = $_1q1txeljnlpawsa.each;
- var getEndChild = function (container, index) {
- var childNodes = container.childNodes;
- index--;
- if (index > childNodes.length - 1) {
- index = childNodes.length - 1;
- } else if (index < 0) {
- index = 0;
- }
- return childNodes[index] || container;
- };
- var walk$2 = function (dom, rng, callback) {
- var startContainer = rng.startContainer;
- var startOffset = rng.startOffset;
- var endContainer = rng.endContainer;
- var endOffset = rng.endOffset;
- var ancestor;
- var startPoint;
- var endPoint;
- var node;
- var parent;
- var siblings;
- var nodes;
- nodes = dom.select('td[data-mce-selected],th[data-mce-selected]');
- if (nodes.length > 0) {
- each$8(nodes, function (node) {
- callback([node]);
- });
- return;
- }
- 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 (node = startNode, parent = node.parentNode; node && node !== endNode; node = parent) {
- parent = node.parentNode;
- siblings = collectSiblings(node === startNode ? node : node[siblingName], siblingName);
- if (siblings.length) {
- if (!next) {
- siblings.reverse();
- }
- callback(exclude(siblings));
- }
- }
- };
- if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) {
- startContainer = startContainer.childNodes[startOffset];
- }
- if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) {
- endContainer = getEndChild(endContainer, endOffset);
- }
- if (startContainer === endContainer) {
- return callback(exclude([startContainer]));
- }
- ancestor = dom.findCommonAncestor(startContainer, endContainer);
- for (node = startContainer; node; node = node.parentNode) {
- if (node === endContainer) {
- return walkBoundary(startContainer, ancestor, true);
- }
- if (node === ancestor) {
- break;
- }
- }
- for (node = endContainer; node; node = node.parentNode) {
- if (node === startContainer) {
- return walkBoundary(endContainer, ancestor);
- }
- if (node === ancestor) {
- break;
- }
- }
- startPoint = findEndPoint(startContainer, ancestor) || startContainer;
- endPoint = findEndPoint(endContainer, ancestor) || endContainer;
- walkBoundary(startContainer, startPoint, true);
- siblings = collectSiblings(startPoint === startContainer ? startPoint : startPoint.nextSibling, 'nextSibling', endPoint === endContainer ? endPoint.nextSibling : endPoint);
- if (siblings.length) {
- callback(exclude(siblings));
- }
- walkBoundary(endContainer, endPoint);
- };
- var $_6wozuu3djnlpaxew = { walk: walk$2 };
-
- var zeroWidth = function () {
- return '\uFEFF';
- };
-
- function NodeValue (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 getOptionIE10 = function (element) {
- try {
- return getOptionSafe(element);
- } catch (e) {
- return Option.none();
- }
- };
- var getOptionSafe = function (element) {
- return is(element) ? Option.from(element.dom().nodeValue) : Option.none();
- };
- var browser = $_766rx4ojnlpawtd.detect().browser;
- var getOption = browser.isIE() && browser.version.major === 10 ? getOptionIE10 : getOptionSafe;
- 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($_7u5fzs11jnlpawv6.isText, 'text');
- var get$6 = function (element) {
- return api.get(element);
- };
- var getOption = function (element) {
- return api.getOption(element);
- };
- var set$3 = function (element, value) {
- api.set(element, value);
- };
- var $_dzrxgg3gjnlpaxf6 = {
- get: get$6,
- getOption: getOption,
- set: set$3
- };
-
- var isZeroWidth = function (elem) {
- return $_7u5fzs11jnlpawv6.isText(elem) && $_dzrxgg3gjnlpaxf6.get(elem) === zeroWidth();
- };
- var context = function (editor, elem, wrapName, nodeName) {
- return $_dr4ybh18jnlpawzt.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)) {
- return 'caret';
- } else if (!$_dlfh233cjnlpaxes.isValid(editor, wrapName, nodeName) || !$_dlfh233cjnlpaxes.isValid(editor, $_7u5fzs11jnlpawv6.name(parent), wrapName)) {
- return 'invalid-child';
- } else {
- return 'valid';
- }
- });
- };
-
- var __rest = undefined && undefined.__rest || function (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)
- t[p[i]] = s[p[i]];
- return t;
- };
- var shouldApplyToTrailingSpaces = function (rng) {
- return rng.startContainer.nodeType === 3 && rng.startContainer.nodeValue.length >= rng.startOffset && rng.startContainer.nodeValue[rng.startOffset] === '\xA0';
- };
- var applyWordGrab = function (editor, rng) {
- var r = $_3cscnj2wjnlpaxau.expandRng(editor, rng, [{ inline: true }], shouldApplyToTrailingSpaces(rng));
- 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('mce-annotation') : _b, data = __rest(_a, ['uid']);
- var master = Element$$1.fromTag('span', eDoc);
- $_fes8i223jnlpax5z.add(master, annotation());
- $_521j8z15jnlpawz7.set(master, '' + dataAnnotationId(), uid);
- $_521j8z15jnlpawz7.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;
- $_521j8z15jnlpawz7.setAll(master, attributes);
- $_6bet4b2hjnlpax8c.add(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(Option.none());
- var finishWrapper = function () {
- wrapper.set(Option.none());
- };
- var getOrOpenWrapper = function () {
- return wrapper.get().getOrThunk(function () {
- var nu = $_5sdpl92ijnlpax8h.shallow(master);
- newWrappers.push(nu);
- wrapper.set(Option.some(nu));
- return nu;
- });
- };
- var processElements = function (elems) {
- each(elems, processElement);
- };
- var processElement = function (elem) {
- var ctx = context(editor, elem, 'span', $_7u5fzs11jnlpawv6.name(elem));
- switch (ctx) {
- case 'invalid-child': {
- finishWrapper();
- var children = $_dr4ybh18jnlpawzt.children(elem);
- processElements(children);
- finishWrapper();
- break;
- }
- case 'valid': {
- var w = getOrOpenWrapper();
- $_ag89ax1yjnlpax4x.wrap(elem, w);
- break;
- }
- case 'skipping':
- case 'existing':
- case 'caret':
- }
- };
- var processNodes = function (nodes) {
- var elems = map(nodes, Element$$1.fromDom);
- processElements(elems);
- };
- $_6wozuu3djnlpaxew.walk(editor.dom, rng, function (nodes) {
- finishWrapper();
- processNodes(nodes);
- });
- return newWrappers;
- };
- var annotateWithBookmark = function (editor, name, settings, data) {
- editor.undoManager.transact(function () {
- var initialRng = editor.selection.getRng();
- if (initialRng.collapsed) {
- applyWordGrab(editor, initialRng);
- }
- if (editor.selection.getRng().collapsed) {
- var wrapper = makeAnnotation(editor.getDoc(), data, name, settings.decorate);
- $_am4twv2jjnlpax8k.set(wrapper, '\xA0');
- editor.selection.getRng().insertNode(wrapper.dom());
- editor.selection.select(wrapper.dom());
- } else {
- var bookmark = $_5l0mu32ljnlpax8x.getPersistentBookmark(editor.selection, false);
- var rng = editor.selection.getRng();
- annotate(editor, rng, name, settings.decorate, data);
- editor.selection.moveToBookmark(bookmark);
- }
- });
- };
-
- function Annotator (editor) {
- var registry = create$1();
- setup$1(editor, registry);
- var changes = setup(editor, registry);
- 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, Option.some(name)).each(function (_a) {
- var elements = _a.elements;
- each(elements, $_azq8zm1wjnlpax4n.unwrap);
- });
- },
- getAll: function (name) {
- var directory = findAll(editor, name);
- return map$2(directory, function (elems) {
- return map(elems, function (elem) {
- return elem.dom();
- });
- });
- }
- };
- }
-
- var hasOnlyOneChild = function (node) {
- return node.firstChild && node.firstChild === node.lastChild;
- };
- var isPaddingNode = function (node) {
- return node.name === 'br' || node.value === '\xA0';
- };
- 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 $_1q1txeljnlpawsa.grep(elm.childNodes, function (child) {
- return child.nodeName === 'LI';
- });
- };
- var isPadding = function (node) {
- return node.data === '\xA0' || $_fy28ei1rjnlpax2o.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$1.before(node);
- var caretWalker = CaretWalker(rootNode);
- var newCaretPos = caretWalker.next(caretPos);
- return newCaretPos ? newCaretPos.toRange() : null;
- };
- var findLastOf = function (node, rootNode) {
- var caretPos = CaretPosition$1.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);
- $_1q1txeljnlpawsa.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;
- $_1q1txeljnlpawsa.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$1.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 $_64vm3ljnlpaxgp = {
- isListFragment: isListFragment,
- insertAtCaret: insertAtCaret,
- isParentBlockLi: isParentBlockLi,
- trimListItems: trimListItems,
- listItems: listItems$1
- };
-
- var each$9 = $_1q1txeljnlpawsa.each;
- var ElementUtils = function (dom) {
- this.compare = function (node1, node2) {
- if (node1.nodeName !== node2.nodeName) {
- return false;
- }
- var getAttribs = function (node) {
- var attribs = {};
- each$9(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 !$_43l8qj2xjnlpaxb1.isBookmarkNode(node1) && !$_43l8qj2xjnlpaxb1.isBookmarkNode(node2);
- };
- };
-
- var getLastChildren = function (elm) {
- var children = [];
- var rawNode = elm.dom();
- while (rawNode) {
- children.push(Element$$1.fromDom(rawNode));
- rawNode = rawNode.lastChild;
- }
- return children;
- };
- var removeTrailingBr = function (elm) {
- var allBrs = $_cmitir27jnlpax6e.descendants(elm, 'br');
- var brs = filter(getLastChildren(elm).slice(-1), isBr);
- if (allBrs.length === brs.length) {
- each(brs, $_azq8zm1wjnlpax4n.remove);
- }
- };
- var fillWithPaddingBr = function (elm) {
- $_azq8zm1wjnlpax4n.empty(elm);
- $_ag89ax1yjnlpax4x.append(elm, Element$$1.fromHtml('
'));
- };
- var isPaddingContents = function (elm) {
- return $_7u5fzs11jnlpawv6.isText(elm) ? $_dzrxgg3gjnlpaxf6.get(elm) === '\xA0' : isBr(elm);
- };
- var isPaddedElement = function (elm) {
- return filter($_dr4ybh18jnlpawzt.children(elm), isPaddingContents).length === 1;
- };
- var trimBlockTrailingBr = function (elm) {
- $_dr4ybh18jnlpawzt.lastChild(elm).each(function (lastChild) {
- $_dr4ybh18jnlpawzt.prevSibling(lastChild).each(function (lastChildPrevSibling) {
- if (isBlock(elm) && isBr(lastChild) && isBlock(lastChildPrevSibling)) {
- $_azq8zm1wjnlpax4n.remove(lastChild);
- }
- });
- });
- };
- var $_azhpc63njnlpaxgw = {
- removeTrailingBr: removeTrailingBr,
- fillWithPaddingBr: fillWithPaddingBr,
- isPaddedElement: isPaddedElement,
- trimBlockTrailingBr: trimBlockTrailingBr
- };
-
- var makeMap$3 = $_1q1txeljnlpawsa.makeMap;
- function Writer (settings) {
- var html = [];
- var indent, indentBefore, indentAfter, encode, htmlOutput;
- settings = settings || {};
- indent = settings.indent;
- indentBefore = makeMap$3(settings.indent_before || '');
- indentAfter = makeMap$3(settings.indent_after || '');
- encode = $_bea7j51sjnlpax2u.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);
- 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('', name, '>');
- 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('', name, ' ', encode(text), '?>');
- } else {
- html.push('', name, '?>');
- }
- if (indent) {
- html.push('\n');
- }
- },
- doctype: function (text) {
- html.push('', indent ? '\n' : '');
- },
- reset: function () {
- html.length = 0;
- },
- getContent: function () {
- return html.join('').replace(/\n$/, '');
- }
- };
- }
-
- function HtmlSerializer (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 handlers, validate;
- validate = settings.validate;
- 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 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$1.fromRangeStart(rng);
- var endPos = CaretPosition$1.fromRangeEnd(rng);
- var rootNode = rng.commonAncestorContainer;
- return $_32xcvk30jnlpaxbn.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 = function (rng) {
- return rng.collapsed ? rng : normalizeBlockSelectionRange(rng);
- };
- var $_4fmn0j3qjnlpaxhi = { normalize: normalize };
-
- var isAfterNbsp = function (container, offset) {
- return $_fy28ei1rjnlpax2o.isText(container) && container.nodeValue[offset - 1] === '\xA0';
- };
- var trimOrPadLeftRight = function (rng, html) {
- var container, offset;
- container = rng.startContainer;
- offset = rng.startOffset;
- var hasSiblingText = function (siblingName) {
- return container[siblingName] && container[siblingName].nodeType === 3;
- };
- if (container.nodeType === 3) {
- if (offset > 0) {
- html = html.replace(/^ /, ' ');
- } else if (!hasSiblingText('previousSibling')) {
- html = html.replace(/^ /, ' ');
- }
- if (offset < container.length) {
- html = html.replace(/ (
|)$/, ' ');
- } else if (!hasSiblingText('nextSibling')) {
- html = html.replace(/( | )(
|)$/, ' ');
- }
- }
- return html;
- };
- var trimNbspAfterDeleteAndPadValue = function (rng, value) {
- var container, offset;
- container = rng.startContainer;
- offset = rng.startOffset;
- if (container.nodeType === 3 && rng.collapsed) {
- if (container.data[offset] === '\xA0') {
- container.deleteData(offset, 1);
- if (!/[\u00a0| ]$/.test(value)) {
- value += ' ';
- }
- } else if (container.data[offset - 1] === '\xA0') {
- container.deleteData(offset - 1, 1);
- if (!/[\u00a0| ]$/.test(value)) {
- value = ' ' + value;
- }
- }
- }
- return value;
- };
-
- var isTableCell$2 = $_fy28ei1rjnlpax2o.matchNodeNames('td th');
- var selectionSetContent = function (editor, content) {
- var rng = editor.selection.getRng();
- var container = rng.startContainer;
- var offset = rng.startOffset;
- if (rng.collapsed && isAfterNbsp(container, offset) && $_fy28ei1rjnlpax2o.isText(container)) {
- container.insertData(offset - 1, ' ');
- container.deleteData(offset, 1);
- rng.setStart(container, offset);
- rng.setEnd(container, offset);
- editor.selection.setRng(rng);
- }
- editor.selection.setContent(content);
- };
- 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 {
- selectionSetContent(editor, value);
- }
- }
- };
- var trimBrsFromTableCell = function (dom, elm) {
- Option.from(dom.getParent(elm, 'td,th')).map(Element$$1.fromDom).each($_azhpc63njnlpaxgw.trimBlockTrailingBr);
- };
- var reduceInlineTextElements = function (editor, merge) {
- var textInlineElements = editor.schema.getTextInlineElements();
- var dom = editor.dom;
- if (merge) {
- var root_1 = editor.getBody(), elementUtils_1 = new ElementUtils(dom);
- $_1q1txeljnlpawsa.each(dom.select('*[data-mce-fragment]'), function (node) {
- for (var testNode = node.parentNode; testNode && testNode !== root_1; testNode = testNode.parentNode) {
- if (textInlineElements[node.nodeName.toLowerCase()] && elementUtils_1.compare(testNode, node)) {
- dom.remove(node, true);
- }
- }
- });
- }
- };
- var markFragmentElements = function (fragment) {
- var node = fragment;
- while (node = node.walk()) {
- if (node.type === 1) {
- node.attr('data-mce-fragment', '1');
- }
- }
- };
- var umarkFragmentElements = function (elm) {
- $_1q1txeljnlpawsa.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 parentEditableFalseElm, parentBlock, nextRng;
- var dom = editor.dom, selection = editor.selection;
- var node, node2;
- var getContentEditableFalseParent = function (node) {
- var root = editor.getBody();
- for (; node && node !== root; node = node.parentNode) {
- if (editor.dom.getContentEditable(node) === 'false') {
- return node;
- }
- }
- return null;
- };
- if (!marker) {
- return;
- }
- editor.selection.scrollIntoView(marker);
- parentEditableFalseElm = getContentEditableFalseParent(marker);
- if (parentEditableFalseElm) {
- dom.remove(marker);
- selection.select(parentEditableFalseElm);
- return;
- }
- var rng = dom.createRng();
- node = marker.previousSibling;
- if (node && node.nodeType === 3) {
- rng.setStart(node, node.nodeValue.length);
- if (!$_cseqobajnlpawll.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$1.fromRangeStart(rng);
- var caretWalker = CaretWalker(editor.getBody());
- caretPos = caretWalker.next(caretPos);
- if (caretPos) {
- return caretPos.toRange();
- }
- };
- 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$2(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 insertHtmlAtCaret = function (editor, value, details) {
- var parser, serializer, parentNode, rootNode, fragment, args;
- var marker, rng, node, bookmarkHtml, merge;
- var selection = editor.selection, dom = editor.dom;
- if (/^ | $/.test(value)) {
- value = trimOrPadLeftRight(selection.getRng(), value);
- }
- parser = editor.parser;
- merge = details.merge;
- serializer = HtmlSerializer({ validate: editor.settings.validate }, editor.schema);
- 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()) {
- editor.selection.setRng($_4fmn0j3qjnlpaxhi.normalize(editor.selection.getRng()));
- editor.getDoc().execCommand('Delete', false, null);
- value = trimNbspAfterDeleteAndPadValue(editor.selection.getRng(), value);
- }
- parentNode = selection.getNode();
- var parserArgs = {
- context: parentNode.nodeName.toLowerCase(),
- data: details.data,
- insert: true
- };
- fragment = parser.parse(value, parserArgs);
- if (details.paste === true && $_64vm3ljnlpaxgp.isListFragment(editor.schema, fragment) && $_64vm3ljnlpaxgp.isParentBlockLi(dom, parentNode)) {
- rng = $_64vm3ljnlpaxgp.insertAtCaret(serializer, dom, editor.selection.getRng(), fragment);
- editor.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 {
- selectionSetContent(editor, 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'));
- umarkFragmentElements(editor.getBody());
- trimBrsFromTableCell(editor.dom, editor.selection.getStart());
- editor.fire('SetContent', args);
- editor.addVisual();
- };
- var processValue = function (value) {
- var details;
- if (typeof value !== 'string') {
- details = $_1q1txeljnlpawsa.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);
- insertHtmlAtCaret(editor, result.content, result.details);
- };
- var $_f55bk53kjnlpaxge = { insertAtCaret: insertAtCaret$1 };
-
- var sectionResult = Immutable('sections', 'settings');
- var detection = $_766rx4ojnlpawtd.detect();
- var isTouch = detection.deviceType.isTouch();
- var mobilePlugins = [
- 'lists',
- 'autolink',
- 'autosave'
- ];
- var defaultMobileSettings = { theme: 'mobile' };
- var normalizePlugins = function (plugins) {
- var pluginNames = isArray(plugins) ? plugins.join(' ') : plugins;
- var trimmedPlugins = map(isString(pluginNames) ? pluginNames.split(' ') : [], trim$2);
- return filter(trimmedPlugins, function (item) {
- return item.length > 0;
- });
- };
- var filterMobilePlugins = function (plugins) {
- return filter(plugins, curry(contains, mobilePlugins));
- };
- var extractSections = function (keys$$1, settings) {
- var result = bifilter(settings, function (value, key) {
- return contains(keys$$1, key);
- });
- return sectionResult(result.t, result.f);
- };
- var getSection = function (sectionResult, name, defaults) {
- var sections = sectionResult.sections();
- var sectionSettings = sections.hasOwnProperty(name) ? sections[name] : {};
- return $_1q1txeljnlpawsa.extend({}, defaults, sectionSettings);
- };
- var hasSection = function (sectionResult, name) {
- return sectionResult.sections().hasOwnProperty(name);
- };
- var getDefaultSettings = function (id, documentBaseUrl, editor) {
- return {
- id: id,
- theme: 'modern',
- delta_width: 0,
- delta_height: 0,
- popup_css: '',
- 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_style_values: 'xx-small,x-small,small,medium,large,x-large,xx-large',
- font_size_legacy_values: 'xx-small,small,medium,large,x-large,xx-large,300%',
- forced_root_block: 'p',
- hidden_input: true,
- render_ui: true,
- indentation: '30px',
- inline_styles: true,
- convert_fonts_to_spans: true,
- indent: 'simple',
- 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,
- ie7_compat: true
- };
- };
- var getExternalPlugins = function (overrideSettings, settings) {
- var userDefinedExternalPlugins = settings.external_plugins ? settings.external_plugins : {};
- if (overrideSettings && overrideSettings.external_plugins) {
- return $_1q1txeljnlpawsa.extend({}, overrideSettings.external_plugins, userDefinedExternalPlugins);
- } else {
- return userDefinedExternalPlugins;
- }
- };
- var combinePlugins = function (forcedPlugins, plugins) {
- return [].concat(normalizePlugins(forcedPlugins)).concat(normalizePlugins(plugins));
- };
- var processPlugins = function (isTouchDevice, sectionResult, defaultOverrideSettings, settings) {
- var forcedPlugins = normalizePlugins(defaultOverrideSettings.forced_plugins);
- var plugins = normalizePlugins(settings.plugins);
- var platformPlugins = isTouchDevice && hasSection(sectionResult, 'mobile') ? filterMobilePlugins(plugins) : plugins;
- var combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);
- return $_1q1txeljnlpawsa.extend(settings, { plugins: combinedPlugins.join(' ') });
- };
- var isOnMobile = function (isTouchDevice, sectionResult) {
- var isInline = sectionResult.settings().inline;
- return isTouchDevice && hasSection(sectionResult, 'mobile') && !isInline;
- };
- var combineSettings = function (isTouchDevice, defaultSettings, defaultOverrideSettings, settings) {
- var sectionResult = extractSections(['mobile'], settings);
- var extendedSettings = $_1q1txeljnlpawsa.extend(defaultSettings, defaultOverrideSettings, sectionResult.settings(), isOnMobile(isTouchDevice, sectionResult) ? getSection(sectionResult, 'mobile', defaultMobileSettings) : {}, {
- validate: true,
- content_editable: sectionResult.settings().inline,
- external_plugins: getExternalPlugins(defaultOverrideSettings, sectionResult.settings())
- });
- return processPlugins(isTouchDevice, sectionResult, defaultOverrideSettings, extendedSettings);
- };
- var getEditorSettings = function (editor, id, documentBaseUrl, defaultOverrideSettings, settings) {
- var defaultSettings = getDefaultSettings(id, documentBaseUrl, editor);
- return combineSettings(isTouch, defaultSettings, defaultOverrideSettings, settings);
- };
- var getFiltered = function (predicate, editor, name) {
- return Option.from(editor.settings[name]).filter(predicate);
- };
- var getString = curry(getFiltered, isString);
- 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[$_1q1txeljnlpawsa.trim(arr[0])] = $_1q1txeljnlpawsa.trim(arr[1]);
- } else {
- output[$_1q1txeljnlpawsa.trim(arr[0])] = $_1q1txeljnlpawsa.trim(arr);
- }
- });
- } 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 strongRtl = /[\u0591-\u07FF\uFB1D-\uFDFF\uFE70-\uFEFC]/;
- var hasStrongRtl = function (text) {
- return strongRtl.test(text);
- };
-
- var isInlineTarget = function (editor, elm) {
- var selector = getString(editor, 'inline_boundaries_selector').getOr('a[href],code');
- return $_d8v5lf1gjnlpax0y.is(Element$$1.fromDom(elm), selector);
- };
- var isRtl = function (element) {
- return DOMUtils$1.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl(element.textContent);
- };
- var findInlineParents = function (isInlineTarget, rootNode, pos) {
- return filter(DOMUtils$1.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget);
- };
- var findRootInline = function (isInlineTarget, rootNode, pos) {
- var parents = findInlineParents(isInlineTarget, rootNode, pos);
- return Option.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) {
- var container = pos.container(), offset = pos.offset();
- if (forward) {
- if (isCaretContainerInline(container)) {
- if ($_fy28ei1rjnlpax2o.isText(container.nextSibling)) {
- return CaretPosition$1(container.nextSibling, 0);
- } else {
- return CaretPosition$1.after(container);
- }
- } else {
- return isBeforeInline(pos) ? CaretPosition$1(container, offset + 1) : pos;
- }
- } else {
- if (isCaretContainerInline(container)) {
- if ($_fy28ei1rjnlpax2o.isText(container.previousSibling)) {
- return CaretPosition$1(container.previousSibling, container.previousSibling.data.length);
- } else {
- return CaretPosition$1.before(container);
- }
- } else {
- return isAfterInline(pos) ? CaretPosition$1(container, offset - 1) : pos;
- }
- }
- };
- var normalizeForwards = curry(normalizePosition, true);
- var normalizeBackwards = curry(normalizePosition, false);
- var $_955v2u3wjnlpaxit = {
- isInlineTarget: isInlineTarget,
- findRootInline: findRootInline,
- isRtl: isRtl,
- isAtZwsp: isAtZwsp,
- normalizePosition: normalizePosition,
- normalizeForwards: normalizeForwards,
- normalizeBackwards: normalizeBackwards,
- hasSameParentBlock: hasSameParentBlock
- };
-
- var isBeforeRoot = function (rootNode) {
- return function (elm) {
- return $_5h7cor1ejnlpax0k.eq(rootNode, Element$$1.fromDom(elm.dom().parentNode));
- };
- };
- var getParentBlock$1 = function (rootNode, elm) {
- return $_5h7cor1ejnlpax0k.contains(rootNode, elm) ? $_cs5qmd2ajnlpax6v.closest(elm, function (element) {
- return isTextBlock(element) || isListItem(element);
- }, isBeforeRoot(rootNode)) : Option.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 liftN([
- $_32xcvk30jnlpaxbn.firstPositionIn(elm),
- $_32xcvk30jnlpaxbn.lastPositionIn(elm)
- ], function (firstPos, lastPos) {
- var normalizedFirstPos = $_955v2u3wjnlpaxit.normalizePosition(true, firstPos);
- var normalizedLastPos = $_955v2u3wjnlpaxit.normalizePosition(false, lastPos);
- var normalizedFromPos = $_955v2u3wjnlpaxit.normalizePosition(false, fromPos);
- if (forward) {
- return $_32xcvk30jnlpaxbn.nextPosition(elm, normalizedFromPos).map(function (nextPos) {
- return nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos);
- }).getOr(false);
- } else {
- return $_32xcvk30jnlpaxbn.prevPosition(elm, normalizedFromPos).map(function (prevPos) {
- return prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos);
- }).getOr(false);
- }
- }).getOr(true);
- };
- var $_dfzzw73vjnlpaxik = {
- getParentBlock: getParentBlock$1,
- paddEmptyBody: paddEmptyBody,
- willDeleteLastPositionInElement: willDeleteLastPositionInElement
- };
-
- var any = function (selector) {
- return $_2kbu29jnlpax6t.first(selector).isSome();
- };
- var ancestor$2 = function (scope, selector, isRoot) {
- return $_2kbu29jnlpax6t.ancestor(scope, selector, isRoot).isSome();
- };
- var sibling$3 = function (scope, selector) {
- return $_2kbu29jnlpax6t.sibling(scope, selector).isSome();
- };
- var child$3 = function (scope, selector) {
- return $_2kbu29jnlpax6t.child(scope, selector).isSome();
- };
- var descendant$2 = function (scope, selector) {
- return $_2kbu29jnlpax6t.descendant(scope, selector).isSome();
- };
- var closest$2 = function (scope, selector, isRoot) {
- return $_2kbu29jnlpax6t.closest(scope, selector, isRoot).isSome();
- };
- var $_1kxnjb40jnlpaxjq = {
- any: any,
- ancestor: ancestor$2,
- sibling: sibling$3,
- child: child$3,
- descendant: descendant$2,
- closest: closest$2
- };
-
- var hasWhitespacePreserveParent = function (rootNode, node) {
- var rootElement = Element$$1.fromDom(rootNode);
- var startNode = Element$$1.fromDom(node);
- return $_1kxnjb40jnlpaxjq.ancestor(startNode, 'pre,code', curry($_5h7cor1ejnlpax0k.eq, rootElement));
- };
- var isWhitespace = function (rootNode, node) {
- return $_fy28ei1rjnlpax2o.isText(node) && /^[ \t\r\n]*$/.test(node.data) && hasWhitespacePreserveParent(rootNode, node) === false;
- };
- var isNamedAnchor = function (node) {
- return $_fy28ei1rjnlpax2o.isElement(node) && node.nodeName === 'A' && node.hasAttribute('name');
- };
- var isContent = function (rootNode, node) {
- return isCaretCandidate(node) && isWhitespace(rootNode, node) === false || isNamedAnchor(node) || isBookmark(node);
- };
- var isBookmark = $_fy28ei1rjnlpax2o.hasAttribute('data-mce-bookmark');
- var isBogus$2 = $_fy28ei1rjnlpax2o.hasAttribute('data-mce-bogus');
- var isBogusAll$1 = $_fy28ei1rjnlpax2o.hasAttributeValue('data-mce-bogus', 'all');
- var isEmptyNode = function (targetNode) {
- var walker, node, brCount = 0;
- if (isContent(targetNode, targetNode)) {
- return false;
- } else {
- node = targetNode.firstChild;
- if (!node) {
- return true;
- }
- walker = new TreeWalker(node, targetNode);
- do {
- if (isBogusAll$1(node)) {
- node = walker.next(true);
- continue;
- }
- if (isBogus$2(node)) {
- node = walker.next();
- continue;
- }
- if ($_fy28ei1rjnlpax2o.isBr(node)) {
- brCount++;
- node = walker.next();
- continue;
- }
- if (isContent(targetNode, node)) {
- return false;
- }
- node = walker.next();
- } while (node);
- return brCount <= 1;
- }
- };
- var isEmpty$1 = function (elm) {
- return isEmptyNode(elm.dom());
- };
- var $_czpaaj3zjnlpaxjj = { isEmpty: isEmpty$1 };
-
- var BlockPosition = Immutable('block', 'position');
- var BlockBoundary = Immutable('from', 'to');
- var getBlockPosition = function (rootNode, pos) {
- var rootElm = Element$$1.fromDom(rootNode);
- var containerElm = Element$$1.fromDom(pos.container());
- return $_dfzzw73vjnlpaxik.getParentBlock(rootElm, containerElm).map(function (block) {
- return BlockPosition(block, pos);
- });
- };
- var isDifferentBlocks = function (blockBoundary) {
- return $_5h7cor1ejnlpax0k.eq(blockBoundary.from().block(), blockBoundary.to().block()) === false;
- };
- var hasSameParent = function (blockBoundary) {
- return $_dr4ybh18jnlpawzt.parent(blockBoundary.from().block()).bind(function (parent1) {
- return $_dr4ybh18jnlpawzt.parent(blockBoundary.to().block()).filter(function (parent2) {
- return $_5h7cor1ejnlpax0k.eq(parent1, parent2);
- });
- }).isSome();
- };
- var isEditable = function (blockBoundary) {
- return $_fy28ei1rjnlpax2o.isContentEditableFalse(blockBoundary.from().block()) === false && $_fy28ei1rjnlpax2o.isContentEditableFalse(blockBoundary.to().block()) === false;
- };
- var skipLastBr = function (rootNode, forward, blockPosition) {
- if ($_fy28ei1rjnlpax2o.isBr(blockPosition.position().getNode()) && $_czpaaj3zjnlpaxjj.isEmpty(blockPosition.block()) === false) {
- return $_32xcvk30jnlpaxbn.positionIn(false, blockPosition.block().dom()).bind(function (lastPositionInBlock) {
- if (lastPositionInBlock.isEqual(blockPosition.position())) {
- return $_32xcvk30jnlpaxbn.fromPosition(forward, rootNode, lastPositionInBlock).bind(function (to) {
- return getBlockPosition(rootNode, to);
- });
- } else {
- return Option.some(blockPosition);
- }
- }).getOr(blockPosition);
- } else {
- return blockPosition;
- }
- };
- var readFromRange = function (rootNode, forward, rng) {
- var fromBlockPos = getBlockPosition(rootNode, CaretPosition$1.fromRangeStart(rng));
- var toBlockPos = fromBlockPos.bind(function (blockPos) {
- return $_32xcvk30jnlpaxbn.fromPosition(forward, rootNode, blockPos.position()).bind(function (to) {
- return getBlockPosition(rootNode, to).map(function (blockPos) {
- return skipLastBr(rootNode, forward, blockPos);
- });
- });
- });
- return liftN([
- fromBlockPos,
- toBlockPos
- ], BlockBoundary).filter(function (blockBoundary) {
- return isDifferentBlocks(blockBoundary) && hasSameParent(blockBoundary) && isEditable(blockBoundary);
- });
- };
- var read$1 = function (rootNode, forward, rng) {
- return rng.collapsed ? readFromRange(rootNode, forward, rng) : Option.none();
- };
- var $_5nfp373ujnlpaxi8 = { read: read$1 };
-
- var dropLast = function (xs) {
- return xs.slice(0, -1);
- };
- var parentsUntil$1 = function (startNode, rootElm, predicate) {
- if ($_5h7cor1ejnlpax0k.contains(rootElm, startNode)) {
- return dropLast($_dr4ybh18jnlpawzt.parents(startNode, function (elm) {
- return predicate(elm) || $_5h7cor1ejnlpax0k.eq(elm, rootElm);
- }));
- } else {
- return [];
- }
- };
- var parents$1 = function (startNode, rootElm) {
- return parentsUntil$1(startNode, rootElm, constant(false));
- };
- var parentsAndSelf = function (startNode, rootElm) {
- return [startNode].concat(parents$1(startNode, rootElm));
- };
- var $_4b88sj42jnlpaxkd = {
- parentsUntil: parentsUntil$1,
- parents: parents$1,
- parentsAndSelf: parentsAndSelf
- };
-
- var getChildrenUntilBlockBoundary = function (block) {
- var children = $_dr4ybh18jnlpawzt.children(block);
- return findIndex(children, isBlock).fold(function () {
- return children;
- }, function (index) {
- return children.slice(0, index);
- });
- };
- var extractChildren = function (block) {
- var children = getChildrenUntilBlockBoundary(block);
- each(children, $_azq8zm1wjnlpax4n.remove);
- return children;
- };
- var removeEmptyRoot = function (rootNode, block) {
- var parents = $_4b88sj42jnlpaxkd.parentsAndSelf(block, rootNode);
- return find(parents.reverse(), $_czpaaj3zjnlpaxjj.isEmpty).each($_azq8zm1wjnlpax4n.remove);
- };
- var isEmptyBefore = function (el) {
- return filter($_dr4ybh18jnlpawzt.prevSiblings(el), function (el) {
- return !$_czpaaj3zjnlpaxjj.isEmpty(el);
- }).length === 0;
- };
- var nestedBlockMerge = function (rootNode, fromBlock, toBlock, insertionPoint) {
- if ($_czpaaj3zjnlpaxjj.isEmpty(toBlock)) {
- $_azhpc63njnlpaxgw.fillWithPaddingBr(toBlock);
- return $_32xcvk30jnlpaxbn.firstPositionIn(toBlock.dom());
- }
- if (isEmptyBefore(insertionPoint) && $_czpaaj3zjnlpaxjj.isEmpty(fromBlock)) {
- $_ag89ax1yjnlpax4x.before(insertionPoint, Element$$1.fromTag('br'));
- }
- var position = $_32xcvk30jnlpaxbn.prevPosition(toBlock.dom(), CaretPosition$1.before(insertionPoint.dom()));
- each(extractChildren(fromBlock), function (child) {
- $_ag89ax1yjnlpax4x.before(insertionPoint, child);
- });
- removeEmptyRoot(rootNode, fromBlock);
- return position;
- };
- var sidelongBlockMerge = function (rootNode, fromBlock, toBlock) {
- if ($_czpaaj3zjnlpaxjj.isEmpty(toBlock)) {
- $_azq8zm1wjnlpax4n.remove(toBlock);
- if ($_czpaaj3zjnlpaxjj.isEmpty(fromBlock)) {
- $_azhpc63njnlpaxgw.fillWithPaddingBr(fromBlock);
- }
- return $_32xcvk30jnlpaxbn.firstPositionIn(fromBlock.dom());
- }
- var position = $_32xcvk30jnlpaxbn.lastPositionIn(toBlock.dom());
- each(extractChildren(fromBlock), function (child) {
- $_ag89ax1yjnlpax4x.append(toBlock, child);
- });
- removeEmptyRoot(rootNode, fromBlock);
- return position;
- };
- var findInsertionPoint = function (toBlock, block) {
- var parentsAndSelf = $_4b88sj42jnlpaxkd.parentsAndSelf(block, toBlock);
- return Option.from(parentsAndSelf[parentsAndSelf.length - 1]);
- };
- var getInsertionPoint = function (fromBlock, toBlock) {
- return $_5h7cor1ejnlpax0k.contains(toBlock, fromBlock) ? findInsertionPoint(toBlock, fromBlock) : Option.none();
- };
- var trimBr = function (first, block) {
- $_32xcvk30jnlpaxbn.positionIn(first, block.dom()).map(function (position) {
- return position.getNode();
- }).map(Element$$1.fromDom).filter(isBr).each($_azq8zm1wjnlpax4n.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 $_dkwg7o41jnlpaxk0 = { mergeBlocks: mergeBlocks };
-
- var backspaceDelete = function (editor, forward) {
- var position;
- var rootNode = Element$$1.fromDom(editor.getBody());
- position = $_5nfp373ujnlpaxi8.read(rootNode.dom(), forward, editor.selection.getRng()).bind(function (blockBoundary) {
- return $_dkwg7o41jnlpaxk0.mergeBlocks(rootNode, forward, blockBoundary.from().block(), blockBoundary.to().block());
- });
- position.each(function (pos) {
- editor.selection.setRng(pos.toRange());
- });
- return position.isSome();
- };
- var $_3n8adg3tjnlpaxi5 = { backspaceDelete: backspaceDelete };
-
- var deleteRangeMergeBlocks = function (rootNode, selection) {
- var rng = selection.getRng();
- return liftN([
- $_dfzzw73vjnlpaxik.getParentBlock(rootNode, Element$$1.fromDom(rng.startContainer)),
- $_dfzzw73vjnlpaxik.getParentBlock(rootNode, Element$$1.fromDom(rng.endContainer))
- ], function (block1, block2) {
- if ($_5h7cor1ejnlpax0k.eq(block1, block2) === false) {
- rng.deleteContents();
- $_dkwg7o41jnlpaxk0.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 = Element$$1.fromDom(rawNode);
- var isRoot = curry($_5h7cor1ejnlpax0k.eq, root);
- return $_cs5qmd2ajnlpax6v.ancestor(node, isTableCell, isRoot).isSome();
- };
- var isSelectionInTable = function (root, rng) {
- return isRawNodeInTable(root, rng.startContainer) || isRawNodeInTable(root, rng.endContainer);
- };
- var isEverythingSelected = function (root, rng) {
- var noPrevious = $_32xcvk30jnlpaxbn.prevPosition(root.dom(), CaretPosition$1.fromRangeStart(rng)).isNone();
- var noNext = $_32xcvk30jnlpaxbn.nextPosition(root.dom(), CaretPosition$1.fromRangeEnd(rng)).isNone();
- return !isSelectionInTable(root, rng) && noPrevious && noNext;
- };
- var emptyEditor = function (editor) {
- editor.setContent('');
- editor.selection.setCursorLocation();
- return true;
- };
- var deleteRange = function (editor) {
- var rootNode = Element$$1.fromDom(editor.getBody());
- var rng = editor.selection.getRng();
- return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection);
- };
- var backspaceDelete$1 = function (editor, forward) {
- return editor.selection.isCollapsed() ? false : deleteRange(editor);
- };
- var $_f5evyu43jnlpaxki = { backspaceDelete: backspaceDelete$1 };
-
- var generate$1 = 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 argLength = arguments.length;
- if (argLength !== value.length) {
- throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);
- }
- var args = new Array(argLength);
- for (var i = 0; i < args.length; i++)
- args[i] = arguments[i];
- 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 () {
- if (arguments.length !== cases.length) {
- throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);
- }
- var target = arguments[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$1 };
-
- var isCompoundElement = function (node) {
- return isTableCell(Element$$1.fromDom(node)) || isListItem(Element$$1.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 $_fy28ei1rjnlpax2o.isElement(elm) && elm.getAttribute('data-mce-caret') === caretLocation;
- };
- var isDeleteFromCefDifferentBlocks = function (root, forward, from, to) {
- var inSameBlock = function (elm) {
- return isInline(Element$$1.fromDom(elm)) && !isInSameBlock(from, to, root);
- };
- return getRelativeCefElm(!forward, from).fold(function () {
- return getRelativeCefElm(forward, to).fold(constant(false), inSameBlock);
- }, inSameBlock);
- };
- var deleteEmptyBlockOrMoveToCef = function (root, forward, from, to) {
- var toCefElm = to.getNode(forward === false);
- return $_dfzzw73vjnlpaxik.getParentBlock(Element$$1.fromDom(root), Element$$1.fromDom(from.getNode())).map(function (blockElm) {
- return $_czpaaj3zjnlpaxjj.isEmpty(blockElm) ? DeleteAction.remove(blockElm.dom()) : DeleteAction.moveToElement(toCefElm);
- }).orThunk(function () {
- return Option.some(DeleteAction.moveToElement(toCefElm));
- });
- };
- var findCefPosition = function (root, forward, from) {
- return $_32xcvk30jnlpaxbn.fromPosition(forward, root, from).bind(function (to) {
- if (isCompoundElement(to.getNode())) {
- return Option.none();
- } else if (isDeleteFromCefDifferentBlocks(root, forward, from, to)) {
- return Option.none();
- } else if (forward && $_fy28ei1rjnlpax2o.isContentEditableFalse(to.getNode())) {
- return deleteEmptyBlockOrMoveToCef(root, forward, from, to);
- } else if (forward === false && $_fy28ei1rjnlpax2o.isContentEditableFalse(to.getNode(true))) {
- return deleteEmptyBlockOrMoveToCef(root, forward, from, to);
- } else if (forward && isAfterContentEditableFalse(from)) {
- return Option.some(DeleteAction.moveToPosition(to));
- } else if (forward === false && isBeforeContentEditableFalse(from)) {
- return Option.some(DeleteAction.moveToPosition(to));
- } else {
- return Option.none();
- }
- });
- };
- var getContentEditableBlockAction = function (forward, elm) {
- if (forward && $_fy28ei1rjnlpax2o.isContentEditableFalse(elm.nextSibling)) {
- return Option.some(DeleteAction.moveToElement(elm.nextSibling));
- } else if (forward === false && $_fy28ei1rjnlpax2o.isContentEditableFalse(elm.previousSibling)) {
- return Option.some(DeleteAction.moveToElement(elm.previousSibling));
- } else {
- return Option.none();
- }
- };
- var skipMoveToActionFromInlineCefToContent = function (root, from, deleteAction) {
- return deleteAction.fold(function (elm) {
- return Option.some(DeleteAction.remove(elm));
- }, function (elm) {
- return Option.some(DeleteAction.moveToElement(elm));
- }, function (to) {
- if (isInSameBlock(from, to, root)) {
- return Option.none();
- } else {
- return Option.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);
- }, Option.some);
- } else {
- return findCefPosition(root, forward, from).bind(function (deleteAction) {
- return skipMoveToActionFromInlineCefToContent(root, from, deleteAction);
- });
- }
- };
- var read$2 = function (root, forward, rng) {
- var normalizedRange = normalizeRange(forward ? 1 : -1, root, rng);
- var from = CaretPosition$1.fromRangeStart(normalizedRange);
- if (forward === false && isAfterContentEditableFalse(from)) {
- return Option.some(DeleteAction.remove(from.getNode(true)));
- } else if (forward && isBeforeContentEditableFalse(from)) {
- return Option.some(DeleteAction.remove(from.getNode()));
- } else {
- return getContentEditableAction(root, forward, from);
- }
- };
-
- var needsReposition = function (pos, elm) {
- var container = pos.container();
- var offset = pos.offset();
- return CaretPosition$1.isTextPosition(pos) === false && container === elm.parentNode && offset > CaretPosition$1.before(elm).offset();
- };
- var reposition = function (elm, pos) {
- return needsReposition(pos, elm) ? CaretPosition$1(pos.container(), pos.offset() - 1) : pos;
- };
- var beforeOrStartOf = function (node) {
- return $_fy28ei1rjnlpax2o.isText(node) ? CaretPosition$1(node, 0) : CaretPosition$1.before(node);
- };
- var afterOrEndOf = function (node) {
- return $_fy28ei1rjnlpax2o.isText(node) ? CaretPosition$1(node, node.data.length) : CaretPosition$1.after(node);
- };
- var getPreviousSiblingCaretPosition = function (elm) {
- if (isCaretCandidate(elm.previousSibling)) {
- return Option.some(afterOrEndOf(elm.previousSibling));
- } else {
- return elm.previousSibling ? $_32xcvk30jnlpaxbn.lastPositionIn(elm.previousSibling) : Option.none();
- }
- };
- var getNextSiblingCaretPosition = function (elm) {
- if (isCaretCandidate(elm.nextSibling)) {
- return Option.some(beforeOrStartOf(elm.nextSibling));
- } else {
- return elm.nextSibling ? $_32xcvk30jnlpaxbn.firstPositionIn(elm.nextSibling) : Option.none();
- }
- };
- var findCaretPositionBackwardsFromElm = function (rootElement, elm) {
- var startPosition = CaretPosition$1.before(elm.previousSibling ? elm.previousSibling : elm.parentNode);
- return $_32xcvk30jnlpaxbn.prevPosition(rootElement, startPosition).fold(function () {
- return $_32xcvk30jnlpaxbn.nextPosition(rootElement, CaretPosition$1.after(elm));
- }, Option.some);
- };
- var findCaretPositionForwardsFromElm = function (rootElement, elm) {
- return $_32xcvk30jnlpaxbn.nextPosition(rootElement, CaretPosition$1.after(elm)).fold(function () {
- return $_32xcvk30jnlpaxbn.prevPosition(rootElement, CaretPosition$1.before(elm));
- }, Option.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 && editor.schema.getBlockElements().hasOwnProperty($_7u5fzs11jnlpawv6.name(elm));
- };
- var paddEmptyBlock = function (elm) {
- if ($_czpaaj3zjnlpaxjj.isEmpty(elm)) {
- var br = Element$$1.fromHtml('
');
- $_azq8zm1wjnlpax4n.empty(elm);
- $_ag89ax1yjnlpax4x.append(elm, br);
- return Option.some(CaretPosition$1.before(br.dom()));
- } else {
- return Option.none();
- }
- };
- var deleteNormalized = function (elm, afterDeletePosOpt) {
- return liftN([
- $_dr4ybh18jnlpawzt.prevSibling(elm),
- $_dr4ybh18jnlpawzt.nextSibling(elm),
- afterDeletePosOpt
- ], function (prev, next, afterDeletePos) {
- var offset;
- var prevNode = prev.dom();
- var nextNode = next.dom();
- if ($_fy28ei1rjnlpax2o.isText(prevNode) && $_fy28ei1rjnlpax2o.isText(nextNode)) {
- offset = prevNode.data.length;
- prevNode.appendData(nextNode.data);
- $_azq8zm1wjnlpax4n.remove(next);
- $_azq8zm1wjnlpax4n.remove(elm);
- if (afterDeletePos.container() === nextNode) {
- return CaretPosition$1(prevNode, offset);
- } else {
- return afterDeletePos;
- }
- } else {
- $_azq8zm1wjnlpax4n.remove(elm);
- return afterDeletePos;
- }
- }).orThunk(function () {
- $_azq8zm1wjnlpax4n.remove(elm);
- return afterDeletePosOpt;
- });
- };
- var deleteElement = function (editor, forward, elm) {
- var afterDeletePos = findCaretPosOutsideElmAfterDelete(forward, editor.getBody(), elm.dom());
- var parentBlock = $_cs5qmd2ajnlpax6v.ancestor(elm, curry(isBlock$2, editor), eqRawNode(editor.getBody()));
- var normalizedAfterDeletePos = deleteNormalized(elm, afterDeletePos);
- if (editor.dom.isEmpty(editor.getBody())) {
- editor.setContent('');
- editor.selection.setCursorLocation();
- } else {
- parentBlock.bind(paddEmptyBlock).fold(function () {
- setSelection(editor, forward, normalizedAfterDeletePos);
- }, function (paddPos) {
- setSelection(editor, forward, Option.some(paddPos));
- });
- }
- };
- var $_ezizyx47jnlpaxle = { deleteElement: deleteElement };
-
- var deleteElement$1 = function (editor, forward) {
- return function (element) {
- editor._selectionOverrides.hideFakeCaret();
- $_ezizyx47jnlpaxle.deleteElement(editor, forward, Element$$1.fromDom(element));
- return true;
- };
- };
- var moveToElement = function (editor, forward) {
- return function (element) {
- var pos = forward ? CaretPosition$1.before(element) : CaretPosition$1.after(element);
- editor.selection.setRng(pos.toRange());
- return true;
- };
- };
- var moveToPosition = function (editor) {
- return function (pos) {
- editor.selection.setRng(pos.toRange());
- return true;
- };
- };
- var backspaceDeleteCaret = function (editor, forward) {
- var result = read$2(editor.getBody(), forward, editor.selection.getRng()).map(function (deleteAction) {
- return deleteAction.fold(deleteElement$1(editor, forward), moveToElement(editor, forward), moveToPosition(editor));
- });
- return result.getOr(false);
- };
- var deleteOffscreenSelection = function (rootElement) {
- each($_cmitir27jnlpax6e.descendants(rootElement, '.mce-offscreen-selection'), $_azq8zm1wjnlpax4n.remove);
- };
- var backspaceDeleteRange = function (editor, forward) {
- var selectedElement = editor.selection.getNode();
- if ($_fy28ei1rjnlpax2o.isContentEditableFalse(selectedElement)) {
- deleteOffscreenSelection(Element$$1.fromDom(editor.getBody()));
- $_ezizyx47jnlpaxle.deleteElement(editor, forward, Element$$1.fromDom(editor.selection.getNode()));
- $_dfzzw73vjnlpaxik.paddEmptyBody(editor);
- return true;
- } else {
- return false;
- }
- };
- var getContentEditableRoot = function (root, node) {
- while (node && node !== root) {
- if ($_fy28ei1rjnlpax2o.isContentEditableTrue(node) || $_fy28ei1rjnlpax2o.isContentEditableFalse(node)) {
- return node;
- }
- node = node.parentNode;
- }
- return null;
- };
- var paddEmptyElement = function (editor) {
- var br;
- var ceRoot = getContentEditableRoot(editor.getBody(), editor.selection.getNode());
- if ($_fy28ei1rjnlpax2o.isContentEditableTrue(ceRoot) && editor.dom.isBlock(ceRoot) && editor.dom.isEmpty(ceRoot)) {
- br = editor.dom.create('br', { 'data-mce-bogus': '1' });
- editor.dom.setHTML(ceRoot, '');
- ceRoot.appendChild(br);
- editor.selection.setRng(CaretPosition$1.before(br).toRange());
- }
- return true;
- };
- var backspaceDelete$2 = function (editor, forward) {
- if (editor.selection.isCollapsed()) {
- return backspaceDeleteCaret(editor, forward);
- } else {
- return backspaceDeleteRange(editor, forward);
- }
- };
- var $_jcgv344jnlpaxks = {
- backspaceDelete: backspaceDelete$2,
- paddEmptyElement: paddEmptyElement
- };
-
- var isText$8 = $_fy28ei1rjnlpax2o.isText;
- var startsWithCaretContainer$1 = function (node) {
- return isText$8(node) && node.data[0] === $_90hfb72rjnlpaxae.ZWSP;
- };
- var endsWithCaretContainer$1 = function (node) {
- return isText$8(node) && node.data[node.data.length - 1] === $_90hfb72rjnlpaxae.ZWSP;
- };
- var createZwsp = function (node) {
- return node.ownerDocument.createTextNode($_90hfb72rjnlpaxae.ZWSP);
- };
- var insertBefore$1 = function (node) {
- if (isText$8(node.previousSibling)) {
- if (endsWithCaretContainer$1(node.previousSibling)) {
- return node.previousSibling;
- } else {
- node.previousSibling.appendData($_90hfb72rjnlpaxae.ZWSP);
- return node.previousSibling;
- }
- } else if (isText$8(node)) {
- if (startsWithCaretContainer$1(node)) {
- return node;
- } else {
- node.insertData(0, $_90hfb72rjnlpaxae.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, $_90hfb72rjnlpaxae.ZWSP);
- return node.nextSibling;
- }
- } else if (isText$8(node)) {
- if (endsWithCaretContainer$1(node)) {
- return node;
- } else {
- node.appendData($_90hfb72rjnlpaxae.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 ($_fy28ei1rjnlpax2o.isText(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) {
- $_ctzulb33jnlpaxck.remove(caret.get());
- var text = insertInlineBefore(element);
- caret.set(text);
- return Option.some(CaretPosition$1(text, text.length - 1));
- }, function (element) {
- return $_32xcvk30jnlpaxbn.firstPositionIn(element).map(function (pos) {
- if (!isPosCaretContainer(pos, caret)) {
- $_ctzulb33jnlpaxck.remove(caret.get());
- var text = insertInlinePos(pos, true);
- caret.set(text);
- return CaretPosition$1(text, 1);
- } else {
- return CaretPosition$1(caret.get(), 1);
- }
- });
- }, function (element) {
- return $_32xcvk30jnlpaxbn.lastPositionIn(element).map(function (pos) {
- if (!isPosCaretContainer(pos, caret)) {
- $_ctzulb33jnlpaxck.remove(caret.get());
- var text = insertInlinePos(pos, false);
- caret.set(text);
- return CaretPosition$1(text, text.length - 1);
- } else {
- return CaretPosition$1(caret.get(), caret.get().length - 1);
- }
- });
- }, function (element) {
- $_ctzulb33jnlpaxck.remove(caret.get());
- var text = insertInlineAfter(element);
- caret.set(text);
- return Option.some(CaretPosition$1(text, 1));
- });
- };
- var $_7h17zm49jnlpaxma = { renderCaret: renderCaret };
-
- 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 Option.none();
- };
- var $_3eehvl4cjnlpaxms = { evaluateUntil: evaluateUntil };
-
- 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$3 = function (isInlineTarget, rootNode, pos) {
- var nPos = $_955v2u3wjnlpaxit.normalizeForwards(pos);
- var scope = rescope(rootNode, nPos.container());
- return $_955v2u3wjnlpaxit.findRootInline(isInlineTarget, scope, nPos).fold(function () {
- return $_32xcvk30jnlpaxbn.nextPosition(scope, nPos).bind(curry($_955v2u3wjnlpaxit.findRootInline, isInlineTarget, scope)).map(function (inline) {
- return Location.before(inline);
- });
- }, Option.none);
- };
- var isNotInsideFormatCaretContainer = function (rootNode, elm) {
- return getParentCaretContainer(rootNode, elm) === null;
- };
- var findInsideRootInline = function (isInlineTarget, rootNode, pos) {
- return $_955v2u3wjnlpaxit.findRootInline(isInlineTarget, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode));
- };
- var start = function (isInlineTarget, rootNode, pos) {
- var nPos = $_955v2u3wjnlpaxit.normalizeBackwards(pos);
- return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {
- var prevPos = $_32xcvk30jnlpaxbn.prevPosition(inline, nPos);
- return prevPos.isNone() ? Option.some(Location.start(inline)) : Option.none();
- });
- };
- var end = function (isInlineTarget, rootNode, pos) {
- var nPos = $_955v2u3wjnlpaxit.normalizeForwards(pos);
- return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {
- var nextPos = $_32xcvk30jnlpaxbn.nextPosition(inline, nPos);
- return nextPos.isNone() ? Option.some(Location.end(inline)) : Option.none();
- });
- };
- var after$3 = function (isInlineTarget, rootNode, pos) {
- var nPos = $_955v2u3wjnlpaxit.normalizeBackwards(pos);
- var scope = rescope(rootNode, nPos.container());
- return $_955v2u3wjnlpaxit.findRootInline(isInlineTarget, scope, nPos).fold(function () {
- return $_32xcvk30jnlpaxbn.prevPosition(scope, nPos).bind(curry($_955v2u3wjnlpaxit.findRootInline, isInlineTarget, scope)).map(function (inline) {
- return Location.after(inline);
- });
- }, Option.none);
- };
- var isValidLocation = function (location) {
- return $_955v2u3wjnlpaxit.isRtl(getElement(location)) === false;
- };
- var readLocation = function (isInlineTarget, rootNode, pos) {
- var location = $_3eehvl4cjnlpaxms.evaluateUntil([
- before$3,
- 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$1 = function (location1, location2) {
- return getName(location1) === getName(location2) && getElement(location1) === getElement(location2);
- };
- var betweenInlines = function (forward, isInlineTarget, rootNode, from, to, location) {
- return liftN([
- $_955v2u3wjnlpaxit.findRootInline(isInlineTarget, rootNode, from),
- $_955v2u3wjnlpaxit.findRootInline(isInlineTarget, rootNode, to)
- ], function (fromInline, toInline) {
- if (fromInline !== toInline && $_955v2u3wjnlpaxit.hasSameParentBlock(rootNode, fromInline, toInline)) {
- return Location.after(forward ? fromInline : toInline);
- } else {
- return location;
- }
- }).getOr(location);
- };
- var skipNoMovement = function (fromLocation, toLocation) {
- return fromLocation.fold(constant(true), function (fromLocation) {
- return !isEq$1(fromLocation, toLocation);
- });
- };
- var findLocationTraverse = function (forward, isInlineTarget, rootNode, fromLocation, pos) {
- var from = $_955v2u3wjnlpaxit.normalizePosition(forward, pos);
- var to = $_32xcvk30jnlpaxbn.fromPosition(forward, rootNode, from).map(curry($_955v2u3wjnlpaxit.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(Option.some, Location.start), Option.none, compose(Option.some, Location.after), Option.none);
- } else {
- return location.fold(Option.none, compose(Option.some, Location.before), Option.none, compose(Option.some, Location.end));
- }
- };
- var findLocation = function (forward, isInlineTarget, rootNode, pos) {
- var from = $_955v2u3wjnlpaxit.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 $_1wxx4j4bjnlpaxmj = {
- readLocation: readLocation,
- findLocation: findLocation,
- prevLocation: curry(findLocation, false),
- nextLocation: curry(findLocation, true),
- getElement: getElement,
- outside: outside,
- inside: inside
- };
-
- var hasSelectionModifyApi = function (editor) {
- return isFunction(editor.selection.getSel().modify);
- };
- var moveRel = function (forward, selection, pos) {
- var delta = forward ? 1 : -1;
- selection.setRng(CaretPosition$1(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$1.fromRangeEnd(rng) : CaretPosition$1.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 $_8umecq4ejnlpaxn3 = {
- hasSelectionModifyApi: hasSelectionModifyApi,
- moveByWord: moveByWord
- };
-
- 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 isFeatureEnabled = function (editor) {
- return editor.settings.inline_boundaries !== false;
- };
- 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 $_7h17zm49jnlpaxma.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$1.fromRangeStart(editor.selection.getRng());
- var isInlineTarget = curry($_955v2u3wjnlpaxit.isInlineTarget, editor);
- var location = $_1wxx4j4bjnlpaxmj.findLocation(forward, isInlineTarget, rootNode, from);
- return location.bind(function (location) {
- return renderCaretLocation(editor, caret, location);
- });
- };
- var toggleInlines = function (isInlineTarget, dom, elms) {
- var selectedInlines = filter(dom.select('*[data-mce-selected="inline-boundary"]'), 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$1.fromRangeStart(editor.selection.getRng());
- if (CaretPosition$1.isTextPosition(pos) && $_955v2u3wjnlpaxit.isAtZwsp(pos) === false) {
- setCaretPosition(editor, $_ctzulb33jnlpaxck.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$1.fromRangeStart(editor.selection.getRng());
- $_1wxx4j4bjnlpaxmj.readLocation(isInlineTarget, editor.getBody(), pos).bind(function (location) {
- return renderCaretLocation(editor, caret, location);
- });
- });
- }
- };
- var move = function (editor, caret, forward) {
- return function () {
- return isFeatureEnabled(editor) ? findLocation$1(editor, caret, forward).isSome() : false;
- };
- };
- var moveWord = function (forward, editor, caret) {
- return function () {
- return isFeatureEnabled(editor) ? $_8umecq4ejnlpaxn3.moveByWord(forward, editor) : false;
- };
- };
- var setupSelectedState = function (editor) {
- var caret = Cell(null);
- var isInlineTarget = curry($_955v2u3wjnlpaxit.isInlineTarget, editor);
- editor.on('NodeChange', function (e) {
- if (isFeatureEnabled(editor)) {
- toggleInlines(isInlineTarget, editor.dom, e.parents);
- safeRemoveCaretContainer(editor, caret);
- renderInsideInlineCaret(isInlineTarget, editor, caret, e.parents);
- }
- });
- return caret;
- };
- var moveNextWord = curry(moveWord, true);
- var movePrevWord = curry(moveWord, false);
- var $_1971nm4djnlpaxmv = {
- move: move,
- moveNextWord: moveNextWord,
- movePrevWord: movePrevWord,
- setupSelectedState: setupSelectedState,
- setCaretPosition: setCaretPosition
- };
-
- var isFeatureEnabled$1 = function (editor) {
- return editor.settings.inline_boundaries !== 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 liftN([
- $_32xcvk30jnlpaxbn.firstPositionIn(elm),
- $_32xcvk30jnlpaxbn.lastPositionIn(elm)
- ], function (firstPos, lastPos) {
- var normalizedFirstPos = $_955v2u3wjnlpaxit.normalizePosition(true, firstPos);
- var normalizedLastPos = $_955v2u3wjnlpaxit.normalizePosition(false, lastPos);
- return $_32xcvk30jnlpaxbn.nextPosition(elm, normalizedFirstPos).map(function (pos) {
- return pos.isEqual(normalizedLastPos);
- }).getOr(true);
- }).getOr(true);
- };
- var setCaretLocation = function (editor, caret) {
- return function (location$$1) {
- return $_7h17zm49jnlpaxma.renderCaret(caret, location$$1).map(function (pos) {
- $_1971nm4djnlpaxmv.setCaretPosition(editor, pos);
- return true;
- }).getOr(false);
- };
- };
- var deleteFromTo = function (editor, caret, from, to) {
- var rootNode = editor.getBody();
- var isInlineTarget = curry($_955v2u3wjnlpaxit.isInlineTarget, editor);
- editor.undoManager.ignore(function () {
- editor.selection.setRng(rangeFromPositions(from, to));
- editor.execCommand('Delete');
- $_1wxx4j4bjnlpaxmj.readLocation(isInlineTarget, rootNode, CaretPosition$1.fromRangeStart(editor.selection.getRng())).map($_1wxx4j4bjnlpaxmj.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 = curry($_955v2u3wjnlpaxit.isInlineTarget, editor);
- var fromLocation = $_1wxx4j4bjnlpaxmj.readLocation(isInlineTarget, rootNode, from);
- return fromLocation.bind(function (location$$1) {
- if (forward) {
- return location$$1.fold(constant(Option.some($_1wxx4j4bjnlpaxmj.inside(location$$1))), Option.none, constant(Option.some($_1wxx4j4bjnlpaxmj.outside(location$$1))), Option.none);
- } else {
- return location$$1.fold(Option.none, constant(Option.some($_1wxx4j4bjnlpaxmj.outside(location$$1))), Option.none, constant(Option.some($_1wxx4j4bjnlpaxmj.inside(location$$1))));
- }
- }).map(setCaretLocation(editor, caret)).getOrThunk(function () {
- var toPosition = $_32xcvk30jnlpaxbn.navigate(forward, rootNode, from);
- var toLocation = toPosition.bind(function (pos) {
- return $_1wxx4j4bjnlpaxmj.readLocation(isInlineTarget, rootNode, pos);
- });
- if (fromLocation.isSome() && toLocation.isSome()) {
- return $_955v2u3wjnlpaxit.findRootInline(isInlineTarget, rootNode, from).map(function (elm) {
- if (hasOnlyTwoOrLessPositionsLeft(elm)) {
- $_ezizyx47jnlpaxle.deleteElement(editor, forward, Element$$1.fromDom(elm));
- return true;
- } else {
- return false;
- }
- }).getOr(false);
- } else {
- 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$3 = function (editor, caret, forward) {
- if (editor.selection.isCollapsed() && isFeatureEnabled$1(editor)) {
- var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());
- return backspaceDeleteCollapsed(editor, caret, forward, from);
- }
- return false;
- };
- var $_5d7kmb48jnlpaxm1 = { backspaceDelete: backspaceDelete$3 };
-
- var tableCellRng = Immutable('start', 'end');
- var tableSelection = Immutable('rng', 'table', 'cells');
- var deleteAction = Adt.generate([
- { removeTable: ['element'] },
- { emptyCells: ['cells'] }
- ]);
- var isRootFromElement = function (root) {
- return curry($_5h7cor1ejnlpax0k.eq, root);
- };
- var getClosestCell$1 = function (container, isRoot) {
- return $_2kbu29jnlpax6t.closest(Element$$1.fromDom(container), 'td,th', isRoot);
- };
- var getClosestTable = function (cell, isRoot) {
- return $_2kbu29jnlpax6t.ancestor(cell, 'table', isRoot);
- };
- var isExpandedCellRng = function (cellRng) {
- return $_5h7cor1ejnlpax0k.eq(cellRng.start(), cellRng.end()) === false;
- };
- var getTableFromCellRng = function (cellRng, isRoot) {
- return getClosestTable(cellRng.start(), isRoot).bind(function (startParentTable) {
- return getClosestTable(cellRng.end(), isRoot).bind(function (endParentTable) {
- return $_5h7cor1ejnlpax0k.eq(startParentTable, endParentTable) ? Option.some(startParentTable) : Option.none();
- });
- });
- };
- var getTableCells = function (table) {
- return $_cmitir27jnlpax6e.descendants(table, 'td,th');
- };
- 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$1(rng.startContainer, isRoot);
- var endCell = getClosestCell$1(rng.endContainer, isRoot);
- return rng.collapsed ? Option.none() : liftN([
- 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) ? Option.none() : getCellRangeFromStartTable(cellRng, isRoot);
- });
- };
- var isWithinSameTable = function (isRoot, cellRng) {
- return getTableFromCellRng(cellRng, isRoot).isSome();
- };
- var getCellRng = function (rng, isRoot) {
- var startCell = getClosestCell$1(rng.startContainer, isRoot);
- var endCell = getClosestCell$1(rng.endContainer, isRoot);
- return liftN([
- startCell,
- endCell
- ], tableCellRng).filter(isExpandedCellRng).filter(function (cellRng) {
- return isWithinSameTable(isRoot, cellRng);
- }).orThunk(function () {
- return partialSelection(isRoot, rng);
- });
- };
- var getTableSelectionFromCellRng = function (cellRng, isRoot) {
- return getTableFromCellRng(cellRng, isRoot).map(function (table) {
- return tableSelection(cellRng, table, getTableCells(table));
- });
- };
- var getTableSelectionFromRng = function (root, rng) {
- var isRoot = isRootFromElement(root);
- return getCellRng(rng, isRoot).bind(function (cellRng) {
- return getTableSelectionFromCellRng(cellRng, isRoot);
- });
- };
- var getCellIndex = function (cells, cell) {
- return findIndex(cells, function (x) {
- return $_5h7cor1ejnlpax0k.eq(x, cell);
- });
- };
- var getSelectedCells = function (tableSelection) {
- return liftN([
- getCellIndex(tableSelection.cells(), tableSelection.rng().start()),
- getCellIndex(tableSelection.cells(), tableSelection.rng().end())
- ], function (startIndex, endIndex) {
- return tableSelection.cells().slice(startIndex, endIndex + 1);
- });
- };
- 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 getActionFromCells = function (cells) {
- return deleteAction.emptyCells(cells);
- };
- var getActionFromRange = function (root, rng) {
- return getTableSelectionFromRng(root, rng).bind(getAction);
- };
- var $_baassw4gjnlpaxnk = {
- getActionFromRange: getActionFromRange,
- getActionFromCells: getActionFromCells
- };
-
- 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$$1) {
- var node = getSelectedNode(range$$1);
- return node ? [Element$$1.fromDom(node)] : [];
- });
- };
- var hasMultipleRanges = function (selection) {
- return getRanges(selection).length > 1;
- };
- var $_533sn84ijnlpaxoe = {
- getRanges: getRanges,
- getSelectedNodes: getSelectedNodes,
- hasMultipleRanges: hasMultipleRanges
- };
-
- var getCellsFromRanges = function (ranges) {
- return filter($_533sn84ijnlpaxoe.getSelectedNodes(ranges), isTableCell);
- };
- var getCellsFromElement = function (elm) {
- var selectedCells = $_cmitir27jnlpax6e.descendants(elm, 'td[data-mce-selected],th[data-mce-selected]');
- return selectedCells;
- };
- var getCellsFromElementOrRanges = function (ranges, element) {
- var selectedCells = getCellsFromElement(element);
- var rangeCells = getCellsFromRanges(ranges);
- return selectedCells.length > 0 ? selectedCells : rangeCells;
- };
- var getCellsFromEditor = function (editor) {
- return getCellsFromElementOrRanges($_533sn84ijnlpaxoe.getRanges(editor.selection.getSel()), Element$$1.fromDom(editor.getBody()));
- };
- var $_1yq8wz4hjnlpaxo7 = {
- getCellsFromRanges: getCellsFromRanges,
- getCellsFromElement: getCellsFromElement,
- getCellsFromElementOrRanges: getCellsFromElementOrRanges,
- getCellsFromEditor: getCellsFromEditor
- };
-
- var emptyCells = function (editor, cells) {
- each(cells, $_azhpc63njnlpaxgw.fillWithPaddingBr);
- editor.selection.setCursorLocation(cells[0].dom(), 0);
- return true;
- };
- var deleteTableElement = function (editor, table) {
- $_ezizyx47jnlpaxle.deleteElement(editor, false, table);
- return true;
- };
- var deleteCellRange = function (editor, rootElm, rng) {
- return $_baassw4gjnlpaxnk.getActionFromRange(rootElm, rng).map(function (action) {
- return action.fold(curry(deleteTableElement, editor), curry(emptyCells, 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$1 = function (editor, startElm) {
- var rootNode = Element$$1.fromDom(editor.getBody());
- var rng = editor.selection.getRng();
- var selectedCells = $_1yq8wz4hjnlpaxo7.getCellsFromEditor(editor);
- return selectedCells.length !== 0 ? emptyCells(editor, selectedCells) : deleteTableRange(editor, rootNode, rng, startElm);
- };
- var getParentCell = function (rootElm, elm) {
- return find($_4b88sj42jnlpaxkd.parentsAndSelf(elm, rootElm), isTableCell);
- };
- var getParentCaption = function (rootElm, elm) {
- return find($_4b88sj42jnlpaxkd.parentsAndSelf(elm, rootElm), function (elm) {
- return $_7u5fzs11jnlpawv6.name(elm) === 'caption';
- });
- };
- var deleteBetweenCells = function (editor, rootElm, forward, fromCell, from) {
- return $_32xcvk30jnlpaxbn.navigate(forward, editor.getBody(), from).bind(function (to) {
- return getParentCell(rootElm, Element$$1.fromDom(to.getNode())).map(function (toCell) {
- return $_5h7cor1ejnlpax0k.eq(toCell, fromCell) === false;
- });
- });
- };
- var emptyElement = function (editor, elm) {
- $_azhpc63njnlpaxgw.fillWithPaddingBr(elm);
- editor.selection.setCursorLocation(elm.dom(), 0);
- return Option.some(true);
- };
- var isDeleteOfLastCharPos = function (fromCaption, forward, from, to) {
- return $_32xcvk30jnlpaxbn.firstPositionIn(fromCaption.dom()).bind(function (first) {
- return $_32xcvk30jnlpaxbn.lastPositionIn(fromCaption.dom()).map(function (last$$1) {
- return forward ? from.isEqual(first) && to.isEqual(last$$1) : from.isEqual(last$$1) && to.isEqual(first);
- });
- }).getOr(true);
- };
- var emptyCaretCaption = function (editor, elm) {
- return emptyElement(editor, elm);
- };
- var validateCaretCaption = function (rootElm, fromCaption, to) {
- return getParentCaption(rootElm, Element$$1.fromDom(to.getNode())).map(function (toCaption) {
- return $_5h7cor1ejnlpax0k.eq(toCaption, fromCaption) === false;
- });
- };
- var deleteCaretInsideCaption = function (editor, rootElm, forward, fromCaption, from) {
- return $_32xcvk30jnlpaxbn.navigate(forward, editor.getBody(), from).bind(function (to) {
- return isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to);
- }).or(Option.some(true));
- };
- var deleteCaretCells = function (editor, forward, rootElm, startElm) {
- var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());
- return getParentCell(rootElm, startElm).bind(function (fromCell) {
- return $_czpaaj3zjnlpaxjj.isEmpty(fromCell) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from);
- });
- };
- var deleteCaretCaption = function (editor, forward, rootElm, fromCaption) {
- var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());
- return $_czpaaj3zjnlpaxjj.isEmpty(fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from);
- };
- var deleteCaret = function (editor, forward, startElm) {
- var rootElm = Element$$1.fromDom(editor.getBody());
- return getParentCaption(rootElm, startElm).fold(function () {
- return deleteCaretCells(editor, forward, rootElm, startElm);
- }, function (fromCaption) {
- return deleteCaretCaption(editor, forward, rootElm, fromCaption);
- }).getOr(false);
- };
- var backspaceDelete$4 = function (editor, forward) {
- var startElm = Element$$1.fromDom(editor.selection.getStart(true));
- var cells = $_1yq8wz4hjnlpaxo7.getCellsFromEditor(editor);
- return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret(editor, forward, startElm) : deleteRange$1(editor, startElm);
- };
- var $_3apnm14fjnlpaxn8 = { backspaceDelete: backspaceDelete$4 };
-
- var nativeCommand = function (editor, command) {
- editor.getDoc().execCommand(command, false, null);
- };
- var deleteCommand = function (editor) {
- if ($_jcgv344jnlpaxks.backspaceDelete(editor, false)) {
- return;
- } else if ($_5d7kmb48jnlpaxm1.backspaceDelete(editor, false)) {
- return;
- } else if ($_3n8adg3tjnlpaxi5.backspaceDelete(editor, false)) {
- return;
- } else if ($_3apnm14fjnlpaxn8.backspaceDelete(editor)) {
- return;
- } else if ($_f5evyu43jnlpaxki.backspaceDelete(editor, false)) {
- return;
- } else {
- nativeCommand(editor, 'Delete');
- $_dfzzw73vjnlpaxik.paddEmptyBody(editor);
- }
- };
- var forwardDeleteCommand = function (editor) {
- if ($_jcgv344jnlpaxks.backspaceDelete(editor, true)) {
- return;
- } else if ($_5d7kmb48jnlpaxm1.backspaceDelete(editor, true)) {
- return;
- } else if ($_3n8adg3tjnlpaxi5.backspaceDelete(editor, true)) {
- return;
- } else if ($_3apnm14fjnlpaxn8.backspaceDelete(editor)) {
- return;
- } else if ($_f5evyu43jnlpaxki.backspaceDelete(editor, true)) {
- return;
- } else {
- nativeCommand(editor, 'ForwardDelete');
- }
- };
- var $_7ms0593sjnlpaxht = {
- deleteCommand: deleteCommand,
- forwardDeleteCommand: forwardDeleteCommand
- };
-
- var getSpecifiedFontProp = function (propName, rootElm, elm) {
- var getProperty = function (elm) {
- return $_asiuhf13jnlpawvc.getRaw(elm, propName);
- };
- var isRoot = function (elm) {
- return $_5h7cor1ejnlpax0k.eq(Element$$1.fromDom(rootElm), elm);
- };
- return $_cs5qmd2ajnlpax6v.closest(Element$$1.fromDom(elm), function (elm) {
- return getProperty(elm).isSome();
- }, isRoot).bind(getProperty);
- };
- var round$1 = function (number, precision) {
- var factor = Math.pow(10, precision);
- return Math.round(number * factor) / factor;
- };
- var toPt = function (fontSize, precision) {
- if (/[0-9.]+px$/.test(fontSize)) {
- return round$1(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';
- }
- return fontSize;
- };
- var normalizeFontFamily = function (fontFamily) {
- return fontFamily.replace(/[\'\"\\]/g, '').replace(/,\s+/g, ',');
- };
- var getComputedFontProp = function (propName, elm) {
- return Option.from(DOMUtils$1.DOM.getStyle(elm, propName, true));
- };
- var getFontProp = function (propName) {
- return function (rootElm, elm) {
- return Option.from(elm).map(Element$$1.fromDom).filter($_7u5fzs11jnlpawv6.isElement).bind(function (element) {
- return getSpecifiedFontProp(propName, rootElm, element.dom()).or(getComputedFontProp(propName, element.dom()));
- }).getOr('');
- };
- };
- var $_ar9b8r4kjnlpaxov = {
- getFontSize: getFontProp('font-size'),
- getFontFamily: compose(normalizeFontFamily, getFontProp('font-family')),
- toPt: toPt
- };
-
- var findFirstCaretElement = function (editor) {
- return $_32xcvk30jnlpaxbn.firstPositionIn(editor.getBody()).map(function (caret) {
- var container = caret.container();
- return $_fy28ei1rjnlpax2o.isText(container) ? container.parentNode : container;
- });
- };
- var isRangeAtStartOfNode = function (rng, root) {
- return rng.startContainer === root && rng.startOffset === 0;
- };
- var getCaretElement = function (editor) {
- return Option.from(editor.selection.getRng()).bind(function (rng) {
- var root = editor.getBody();
- return isRangeAtStartOfNode(rng, root) ? Option.none() : Option.from(editor.selection.getStart(true));
- });
- };
- var fromFontSizeNumber = function (editor, value) {
- if (/^[0-9\.]+$/.test(value)) {
- var fontSizeNumber = parseInt(value, 10);
- if (fontSizeNumber >= 1 && fontSizeNumber <= 7) {
- var fontSizes = $_c6e09z3ajnlpaxek.getFontStyleValues(editor);
- var fontClasses = $_c6e09z3ajnlpaxek.getFontSizeClasses(editor);
- if (fontClasses) {
- return fontClasses[fontSizeNumber - 1] || value;
- } else {
- return fontSizes[fontSizeNumber - 1] || value;
- }
- } else {
- return value;
- }
- } else {
- return value;
- }
- };
- var fontNameAction = function (editor, value) {
- editor.formatter.toggle('fontname', { value: fromFontSizeNumber(editor, value) });
- editor.nodeChanged();
- };
- var fontNameQuery = function (editor) {
- return getCaretElement(editor).fold(function () {
- return findFirstCaretElement(editor).map(function (caretElement) {
- return $_ar9b8r4kjnlpaxov.getFontFamily(editor.getBody(), caretElement);
- }).getOr('');
- }, function (caretElement) {
- return $_ar9b8r4kjnlpaxov.getFontFamily(editor.getBody(), caretElement);
- });
- };
- var fontSizeAction = function (editor, value) {
- editor.formatter.toggle('fontsize', { value: fromFontSizeNumber(editor, value) });
- editor.nodeChanged();
- };
- var fontSizeQuery = function (editor) {
- return getCaretElement(editor).fold(function () {
- return findFirstCaretElement(editor).map(function (caretElement) {
- return $_ar9b8r4kjnlpaxov.getFontSize(editor.getBody(), caretElement);
- }).getOr('');
- }, function (caretElement) {
- return $_ar9b8r4kjnlpaxov.getFontSize(editor.getBody(), caretElement);
- });
- };
-
- var isEq$2 = function (rng1, rng2) {
- return rng1 && rng2 && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset);
- };
- var $_3s8g9y4njnlpaxqj = { isEq: isEq$2 };
-
- var findParent = 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(node, rootNode, predicate) !== null;
- };
- var hasParentWithName = function (node, rootNode, name) {
- return hasParent(node, rootNode, function (node) {
- return node.nodeName === name;
- });
- };
- var isTable$2 = 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 TreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || dom.getRoot());
- while (node = walker[left ? 'prev' : 'next']()) {
- if ($_fy28ei1rjnlpax2o.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 ($_fy28ei1rjnlpax2o.isContentEditableFalse(node)) {
- return true;
- }
- node = node.parentNode;
- }
- return false;
- };
- var findTextNodeRelative = function (dom, isAfterNode, collapsed, left, startNode) {
- var walker, lastInlineElement, parentBlockContainer;
- var body = dom.getRoot();
- var node;
- var nonEmptyElementsMap = dom.schema.getNonEmptyElements();
- parentBlockContainer = dom.getParent(startNode.parentNode, dom.isBlock) || body;
- if (left && $_fy28ei1rjnlpax2o.isBr(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) {
- return Option.some(CaretPosition(startNode.parentNode, dom.nodeIndex(startNode)));
- }
- walker = new TreeWalker(startNode, parentBlockContainer);
- while (node = walker[left ? 'prev' : 'next']()) {
- if (dom.getContentEditableParent(node) === 'false' || isCeFalseCaretContainer(node, body)) {
- return Option.none();
- }
- if ($_fy28ei1rjnlpax2o.isText(node) && node.nodeValue.length > 0) {
- if (hasParentWithName(node, body, 'A') === false) {
- return Option.some(CaretPosition(node, left ? node.nodeValue.length : 0));
- }
- return Option.none();
- }
- if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) {
- return Option.none();
- }
- lastInlineElement = node;
- }
- if (collapsed && lastInlineElement) {
- return Option.some(CaretPosition(lastInlineElement, 0));
- }
- return Option.none();
- };
- var normalizeEndPoint = function (dom, collapsed, start, rng) {
- var container, offset, walker;
- var body = dom.getRoot();
- var node, nonEmptyElementsMap;
- var directionLeft, isAfterNode, normalized = false;
- container = rng[(start ? 'start' : 'end') + 'Container'];
- offset = rng[(start ? 'start' : 'end') + 'Offset'];
- isAfterNode = $_fy28ei1rjnlpax2o.isElement(container) && offset === container.childNodes.length;
- nonEmptyElementsMap = dom.schema.getNonEmptyElements();
- directionLeft = start;
- if (isCaretContainer(container)) {
- return Option.none();
- }
- if ($_fy28ei1rjnlpax2o.isElement(container) && offset > container.childNodes.length - 1) {
- directionLeft = false;
- }
- if ($_fy28ei1rjnlpax2o.isDocument(container)) {
- container = body;
- offset = 0;
- }
- if (container === body) {
- if (directionLeft) {
- node = container.childNodes[offset > 0 ? offset - 1 : 0];
- if (node) {
- if (isCaretContainer(node)) {
- return Option.none();
- }
- if (nonEmptyElementsMap[node.nodeName] || isTable$2(node)) {
- return Option.none();
- }
- }
- }
- if (container.hasChildNodes()) {
- offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1);
- container = container.childNodes[offset];
- offset = $_fy28ei1rjnlpax2o.isText(container) && isAfterNode ? container.data.length : 0;
- if (!collapsed && container === body.lastChild && isTable$2(container)) {
- return Option.none();
- }
- if (hasContentEditableFalseParent(body, container) || isCaretContainer(container)) {
- return Option.none();
- }
- if (container.hasChildNodes() && isTable$2(container) === false) {
- node = container;
- walker = new TreeWalker(container, body);
- do {
- if ($_fy28ei1rjnlpax2o.isContentEditableFalse(node) || isCaretContainer(node)) {
- normalized = false;
- break;
- }
- if ($_fy28ei1rjnlpax2o.isText(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 ($_fy28ei1rjnlpax2o.isText(container) && offset === 0) {
- findTextNodeRelative(dom, isAfterNode, collapsed, true, container).each(function (pos) {
- container = pos.container();
- offset = pos.offset();
- normalized = true;
- });
- }
- if ($_fy28ei1rjnlpax2o.isElement(container)) {
- node = container.childNodes[offset];
- if (!node) {
- node = container.childNodes[offset - 1];
- }
- if (node && $_fy28ei1rjnlpax2o.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 && $_fy28ei1rjnlpax2o.isText(container) && offset === container.nodeValue.length) {
- findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(function (pos) {
- container = pos.container();
- offset = pos.offset();
- normalized = true;
- });
- }
- return normalized ? Option.some(CaretPosition(container, offset)) : Option.none();
- };
- var normalize$1 = 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 $_3s8g9y4njnlpaxqj.isEq(rng, normRng) ? Option.none() : Option.some(normRng);
- };
- var $_afh56j4mjnlpaxpx = { normalize: normalize$1 };
-
- var hasRightSideContent = function (schema, container, parentBlock) {
- var walker = new TreeWalker(container, parentBlock);
- var node;
- var nonEmptyElementsMap = schema.getNonEmptyElements();
- while (node = walker.next()) {
- if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || node.length > 0) {
- return true;
- }
- }
- };
- var scrollToBr = function (dom, selection, brElm) {
- var marker = dom.create('span', {}, ' ');
- brElm.parentNode.insertBefore(marker, brElm);
- selection.scrollIntoView(marker);
- dom.remove(marker);
- };
- var moveSelectionToBr = function (dom, selection, brElm, extraBr) {
- var rng = dom.createRng();
- if (!extraBr) {
- rng.setStartAfter(brElm);
- rng.setEndAfter(brElm);
- } else {
- rng.setStartBefore(brElm);
- rng.setEndBefore(brElm);
- }
- selection.setRng(rng);
- };
- var insertBrAtCaret = function (editor, evt) {
- var selection = editor.selection, dom = editor.dom;
- var brElm, extraBr;
- var rng = selection.getRng();
- $_afh56j4mjnlpaxpx.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');
- rng.insertNode(brElm);
- scrollToBr(dom, selection, brElm);
- moveSelectionToBr(dom, selection, brElm, extraBr);
- editor.undoManager.add();
- };
- var insertBrBefore = function (editor, inline) {
- var br = Element$$1.fromTag('br');
- $_ag89ax1yjnlpax4x.before(Element$$1.fromDom(inline), br);
- editor.undoManager.add();
- };
- var insertBrAfter = function (editor, inline) {
- if (!hasBrAfter(editor.getBody(), inline)) {
- $_ag89ax1yjnlpax4x.after(Element$$1.fromDom(inline), Element$$1.fromTag('br'));
- }
- var br = Element$$1.fromTag('br');
- $_ag89ax1yjnlpax4x.after(Element$$1.fromDom(inline), br);
- scrollToBr(editor.dom, editor.selection, br.dom());
- moveSelectionToBr(editor.dom, editor.selection, br.dom(), false);
- editor.undoManager.add();
- };
- var isBeforeBr = function (pos) {
- return $_fy28ei1rjnlpax2o.isBr(pos.getNode());
- };
- var hasBrAfter = function (rootNode, startNode) {
- if (isBeforeBr(CaretPosition$1.after(startNode))) {
- return true;
- } else {
- return $_32xcvk30jnlpaxbn.nextPosition(rootNode, CaretPosition$1.after(startNode)).map(function (pos) {
- return $_fy28ei1rjnlpax2o.isBr(pos.getNode());
- }).getOr(false);
- }
- };
- var isAnchorLink = function (elm) {
- return elm && elm.nodeName === 'A' && 'href' in elm;
- };
- var isInsideAnchor = function (location) {
- return location.fold(constant(false), isAnchorLink, isAnchorLink, constant(false));
- };
- var readInlineAnchorLocation = function (editor) {
- var isInlineTarget = curry($_955v2u3wjnlpaxit.isInlineTarget, editor);
- var position = CaretPosition$1.fromRangeStart(editor.selection.getRng());
- return $_1wxx4j4bjnlpaxmj.readLocation(isInlineTarget, editor.getBody(), position).filter(isInsideAnchor);
- };
- var insertBrOutsideAnchor = function (editor, location) {
- location.fold(noop, curry(insertBrBefore, editor), curry(insertBrAfter, editor), noop);
- };
- var insert = function (editor, evt) {
- var anchorLocation = readInlineAnchorLocation(editor);
- if (anchorLocation.isSome()) {
- anchorLocation.each(curry(insertBrOutsideAnchor, editor));
- } else {
- insertBrAtCaret(editor, evt);
- }
- };
- var $_ejrlhl4ljnlpaxpg = { insert: insert };
-
- 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 $_64es4o4qjnlpaxri = {
- before: adt.before,
- on: adt.on,
- after: adt.after,
- cata: cata,
- getStart: getStart
- };
-
- var type$1 = Adt.generate([
- { domRange: ['rng'] },
- {
- relative: [
- 'startSitu',
- 'finishSitu'
- ]
- },
- {
- exact: [
- 'start',
- 'soffset',
- 'finish',
- 'foffset'
- ]
- }
- ]);
- var range$1 = Immutable('start', 'soffset', 'finish', 'foffset');
- var exactFromRange = function (simRange) {
- return type$1.exact(simRange.start(), simRange.soffset(), simRange.finish(), simRange.foffset());
- };
- var getStart$1 = function (selection) {
- return selection.match({
- domRange: function (rng) {
- return Element$$1.fromDom(rng.startContainer);
- },
- relative: function (startSitu, finishSitu) {
- return $_64es4o4qjnlpaxri.getStart(startSitu);
- },
- exact: function (start, soffset, finish, foffset) {
- return start;
- }
- });
- };
- var getWin = function (selection) {
- var start = getStart$1(selection);
- return $_dr4ybh18jnlpawzt.defaultView(start);
- };
- var $_f9vlzb4pjnlpaxrd = {
- domRange: type$1.domRange,
- relative: type$1.relative,
- exact: type$1.exact,
- exactFromRange: exactFromRange,
- range: range$1,
- getWin: getWin
- };
-
- var browser$3 = $_766rx4ojnlpawtd.detect().browser;
- var clamp = function (offset, element) {
- var max = $_7u5fzs11jnlpawv6.isText(element) ? $_dzrxgg3gjnlpaxf6.get(element).length : $_dr4ybh18jnlpawzt.children(element).length + 1;
- if (offset > max) {
- return max;
- } else if (offset < 0) {
- return 0;
- }
- return offset;
- };
- var normalizeRng = function (rng) {
- return $_f9vlzb4pjnlpaxrd.range(rng.start(), clamp(rng.soffset(), rng.start()), rng.finish(), clamp(rng.foffset(), rng.finish()));
- };
- var isOrContains = function (root, elm) {
- return $_5h7cor1ejnlpax0k.contains(root, elm) || $_5h7cor1ejnlpax0k.eq(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 $_f9vlzb4pjnlpaxrd.range(Element$$1.fromDom(r.startContainer), r.startOffset, Element$$1.fromDom(r.endContainer), r.endOffset);
- };
- var readRange = function (win) {
- var selection = win.getSelection();
- var rng = !selection || selection.rangeCount === 0 ? Option.none() : Option.from(selection.getRangeAt(0));
- return rng.map(nativeRangeToSelectionRange);
- };
- var getBookmark$2 = function (root) {
- var win = $_dr4ybh18jnlpawzt.defaultView(root);
- return readRange(win.dom()).filter(isRngInRoot(root));
- };
- var validate = function (root, bookmark) {
- return Option.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 Option.some(rng);
- } catch (_) {
- return Option.none();
- }
- };
- var store = function (editor) {
- var newBookmark = shouldStore(editor) ? getBookmark$2(Element$$1.fromDom(editor.getBody())) : Option.none();
- editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;
- };
- var storeNative = function (editor, rng) {
- var root = Element$$1.fromDom(editor.getBody());
- var range = shouldStore(editor) ? Option.from(rng) : Option.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 : Option.none();
- return bookmark.bind(curry(validate, Element$$1.fromDom(editor.getBody()))).bind(bookmarkToNativeRng);
- };
- var restore = function (editor) {
- getRng(editor).each(function (rng) {
- editor.selection.setRng(rng);
- });
- };
- var $_13pqgk4ojnlpaxqr = {
- store: store,
- storeNative: storeNative,
- readRange: readRange,
- restore: restore,
- getRng: getRng,
- getBookmark: getBookmark$2,
- validate: validate
- };
-
- var indentElement = function (dom, command, useMargin, value, unit, element) {
- if (dom.getContentEditable(element) === 'false') {
- return;
- }
- if (element.nodeName !== 'LI') {
- var indentStyleName = useMargin ? 'margin' : 'padding';
- indentStyleName = element.nodeName === 'TABLE' ? 'margin' : indentStyleName;
- indentStyleName += dom.getStyle(element, 'direction', true) === 'rtl' ? 'Right' : 'Left';
- if (command === 'outdent') {
- var styleValue = Math.max(0, parseInt(element.style[indentStyleName] || 0, 10) - value);
- dom.setStyle(element, indentStyleName, styleValue ? styleValue + unit : '');
- } else {
- var styleValue = parseInt(element.style[indentStyleName] || 0, 10) + value + unit;
- dom.setStyle(element, indentStyleName, styleValue);
- }
- }
- };
- var handle = function (editor, command) {
- var settings = editor.settings, dom = editor.dom, selection = editor.selection, formatter = editor.formatter;
- var indentUnit = /[a-z%]+$/i.exec(settings.indentation)[0];
- var indentValue = parseInt(settings.indentation, 10);
- var useMargin = editor.getParam('indent_use_margin', false);
- if (!editor.queryCommandState('InsertUnorderedList') && !editor.queryCommandState('InsertOrderedList')) {
- if (!settings.forced_root_block && !dom.getParent(selection.getNode(), dom.isBlock)) {
- formatter.apply('div');
- }
- each(selection.getSelectedBlocks(), function (element) {
- return indentElement(dom, command, useMargin, indentValue, indentUnit, element);
- });
- }
- };
-
- var each$10 = $_1q1txeljnlpawsa.each;
- var extend$2 = $_1q1txeljnlpawsa.extend;
- var map$3 = $_1q1txeljnlpawsa.map;
- var inArray$2 = $_1q1txeljnlpawsa.inArray;
- function EditorCommands (editor) {
- var dom, selection, formatter;
- var commands = {
- state: {},
- exec: {},
- value: {}
- };
- var settings = editor.settings, bookmark;
- editor.on('PreInit', function () {
- dom = editor.dom;
- selection = editor.selection;
- settings = editor.settings;
- formatter = editor.formatter;
- });
- var execCommand = function (command, ui, value, args) {
- var func, customCommand, state = false;
- if (editor.removed) {
- return;
- }
- if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(command) && (!args || !args.skip_focus)) {
- editor.focus();
- } else {
- $_13pqgk4ojnlpaxqr.restore(editor);
- }
- args = editor.fire('BeforeExecCommand', {
- command: command,
- ui: ui,
- value: value
- });
- if (args.isDefaultPrevented()) {
- return false;
- }
- customCommand = command.toLowerCase();
- if (func = commands.exec[customCommand]) {
- func(customCommand, ui, value);
- editor.fire('ExecCommand', {
- command: command,
- ui: ui,
- value: value
- });
- return true;
- }
- each$10(editor.plugins, function (p) {
- if (p.execCommand && p.execCommand(command, ui, value)) {
- editor.fire('ExecCommand', {
- command: command,
- ui: ui,
- value: value
- });
- state = true;
- return false;
- }
- });
- if (state) {
- return state;
- }
- if (editor.theme && editor.theme.execCommand && editor.theme.execCommand(command, ui, value)) {
- editor.fire('ExecCommand', {
- command: command,
- ui: ui,
- value: value
- });
- return true;
- }
- try {
- state = editor.getDoc().execCommand(command, ui, value);
- } catch (ex) {
- }
- if (state) {
- editor.fire('ExecCommand', {
- command: command,
- ui: ui,
- value: value
- });
- return true;
- }
- return false;
- };
- var queryCommandState = function (command) {
- var func;
- if (editor.quirks.isHidden() || editor.removed) {
- return;
- }
- command = command.toLowerCase();
- if (func = commands.state[command]) {
- return func(command);
- }
- try {
- return editor.getDoc().queryCommandState(command);
- } catch (ex) {
- }
- return false;
- };
- var queryCommandValue = function (command) {
- var func;
- if (editor.quirks.isHidden() || editor.removed) {
- return;
- }
- command = command.toLowerCase();
- if (func = commands.value[command]) {
- return func(command);
- }
- try {
- return editor.getDoc().queryCommandValue(command);
- } catch (ex) {
- }
- };
- var addCommands = function (commandList, type) {
- type = type || 'exec';
- each$10(commandList, function (callback, command) {
- each$10(command.toLowerCase().split(','), function (command) {
- commands[type][command] = callback;
- });
- });
- };
- var addCommand = function (command, callback, scope) {
- command = command.toLowerCase();
- commands.exec[command] = function (command, ui, value, args) {
- return callback.call(scope || editor, ui, value, args);
- };
- };
- var queryCommandSupported = function (command) {
- command = command.toLowerCase();
- if (commands.exec[command]) {
- return true;
- }
- try {
- return editor.getDoc().queryCommandSupported(command);
- } catch (ex) {
- }
- return false;
- };
- var addQueryStateHandler = function (command, callback, scope) {
- command = command.toLowerCase();
- commands.state[command] = function () {
- return callback.call(scope || editor);
- };
- };
- var addQueryValueHandler = function (command, callback, scope) {
- command = command.toLowerCase();
- commands.value[command] = function () {
- return callback.call(scope || editor);
- };
- };
- var hasCustomCommand = function (command) {
- command = command.toLowerCase();
- return !!commands.exec[command];
- };
- extend$2(this, {
- execCommand: execCommand,
- queryCommandState: queryCommandState,
- queryCommandValue: queryCommandValue,
- queryCommandSupported: queryCommandSupported,
- addCommands: addCommands,
- addCommand: addCommand,
- addQueryStateHandler: addQueryStateHandler,
- addQueryValueHandler: addQueryValueHandler,
- hasCustomCommand: hasCustomCommand
- });
- var execNativeCommand = function (command, ui, value) {
- if (ui === undefined) {
- ui = false;
- }
- if (value === undefined) {
- value = null;
- }
- return editor.getDoc().execCommand(command, ui, value);
- };
- var isFormatMatch = function (name) {
- return formatter.match(name);
- };
- var toggleFormat = function (name, value) {
- formatter.toggle(name, value ? { value: value } : undefined);
- editor.nodeChanged();
- };
- var storeSelection = function (type) {
- bookmark = selection.getBookmark(type);
- };
- var restoreSelection = function () {
- selection.moveToBookmark(bookmark);
- };
- addCommands({
- 'mceResetDesignMode,mceBeginUndoLevel': function () {
- },
- 'mceEndUndoLevel,mceAddUndoLevel': function () {
- editor.undoManager.add();
- },
- 'Cut,Copy,Paste': function (command) {
- var doc = editor.getDoc();
- var failed;
- try {
- 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 ($_cseqobajnlpawll.mac) {
- msg = msg.replace(/Ctrl\+/g, '\u2318+');
- }
- editor.notificationManager.open({
- text: msg,
- type: 'error'
- });
- }
- },
- 'unlink': function () {
- if (selection.isCollapsed()) {
- var elm = editor.dom.getParent(editor.selection.getStart(), 'a');
- if (elm) {
- editor.dom.remove(elm, true);
- }
- return;
- }
- formatter.remove('link');
- },
- 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone': function (command) {
- var align = command.substring(7);
- if (align === 'full') {
- align = 'justify';
- }
- each$10('left,center,right,justify'.split(','), function (name) {
- if (align !== name) {
- formatter.remove('align' + name);
- }
- });
- if (align !== 'none') {
- toggleFormat('align' + align);
- }
- },
- 'InsertUnorderedList,InsertOrderedList': function (command) {
- var listElm, listParent;
- execNativeCommand(command);
- listElm = dom.getParent(selection.getNode(), 'ol,ul');
- if (listElm) {
- listParent = listElm.parentNode;
- if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {
- storeSelection();
- dom.split(listParent, listElm);
- restoreSelection();
- }
- }
- },
- 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {
- toggleFormat(command);
- },
- 'ForeColor,HiliteColor': function (command, ui, value) {
- toggleFormat(command, value);
- },
- 'FontName': function (command, ui, value) {
- fontNameAction(editor, value);
- },
- 'FontSize': function (command, ui, value) {
- fontSizeAction(editor, value);
- },
- 'RemoveFormat': function (command) {
- formatter.remove(command);
- },
- 'mceBlockQuote': function () {
- toggleFormat('blockquote');
- },
- 'FormatBlock': function (command, ui, value) {
- return toggleFormat(value || 'p');
- },
- 'mceCleanup': function () {
- var bookmark = selection.getBookmark();
- editor.setContent(editor.getContent());
- selection.moveToBookmark(bookmark);
- },
- 'mceRemoveNode': function (command, ui, value) {
- var node = value || selection.getNode();
- if (node !== editor.getBody()) {
- storeSelection();
- editor.dom.remove(node, true);
- restoreSelection();
- }
- },
- 'mceSelectNodeDepth': function (command, ui, value) {
- var counter = 0;
- dom.getParent(selection.getNode(), function (node) {
- if (node.nodeType === 1 && counter++ === value) {
- selection.select(node);
- return false;
- }
- }, editor.getBody());
- },
- 'mceSelectNode': function (command, ui, value) {
- selection.select(value);
- },
- 'mceInsertContent': function (command, ui, value) {
- $_f55bk53kjnlpaxge.insertAtCaret(editor, value);
- },
- 'mceInsertRawHTML': function (command, ui, value) {
- selection.setContent('tiny_mce_marker');
- var content = editor.getContent();
- editor.setContent(content.replace(/tiny_mce_marker/g, function () {
- return value;
- }));
- },
- 'mceToggleFormat': function (command, ui, value) {
- toggleFormat(value);
- },
- 'mceSetContent': function (command, ui, value) {
- editor.setContent(value);
- },
- 'Indent,Outdent': function (command) {
- handle(editor, command);
- },
- 'mceRepaint': function () {
- },
- '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, selection.getContent({ format: 'text' })));
- },
- 'mceInsertLink': function (command, ui, value) {
- var anchor;
- if (typeof value === 'string') {
- value = { href: value };
- }
- anchor = dom.getParent(selection.getNode(), 'a');
- value.href = value.href.replace(' ', '%20');
- if (!anchor || !value.href) {
- formatter.remove('link');
- }
- if (value.href) {
- formatter.apply('link', value, anchor);
- }
- },
- 'selectAll': function () {
- var editingHost = dom.getParent(selection.getStart(), $_fy28ei1rjnlpax2o.isContentEditableTrue);
- if (editingHost) {
- var rng = dom.createRng();
- rng.selectNodeContents(editingHost);
- selection.setRng(rng);
- }
- },
- 'delete': function () {
- $_7ms0593sjnlpaxht.deleteCommand(editor);
- },
- 'forwardDelete': function () {
- $_7ms0593sjnlpaxht.forwardDeleteCommand(editor);
- },
- 'mceNewDocument': function () {
- editor.setContent('');
- },
- 'InsertLineBreak': function (command, ui, value) {
- $_ejrlhl4ljnlpaxpg.insert(editor, value);
- return true;
- }
- });
- var alignStates = function (name) {
- return function () {
- var nodes = selection.isCollapsed() ? [dom.getParent(selection.getNode(), dom.isBlock)] : selection.getSelectedBlocks();
- var matches = map$3(nodes, function (node) {
- return !!formatter.matchNode(node, name);
- });
- return inArray$2(matches, true) !== -1;
- };
- };
- addCommands({
- 'JustifyLeft': alignStates('alignleft'),
- 'JustifyCenter': alignStates('aligncenter'),
- 'JustifyRight': alignStates('alignright'),
- 'JustifyFull': alignStates('alignjustify'),
- 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {
- return isFormatMatch(command);
- },
- 'mceBlockQuote': function () {
- return isFormatMatch('blockquote');
- },
- 'Outdent': function () {
- var node;
- if (settings.inline_styles) {
- if ((node = dom.getParent(selection.getStart(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) {
- return true;
- }
- if ((node = dom.getParent(selection.getEnd(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) {
- return true;
- }
- }
- return queryCommandState('InsertUnorderedList') || queryCommandState('InsertOrderedList') || !settings.inline_styles && !!dom.getParent(selection.getNode(), 'BLOCKQUOTE');
- },
- 'InsertUnorderedList,InsertOrderedList': function (command) {
- var list = dom.getParent(selection.getNode(), 'ul,ol');
- return list && (command === 'insertunorderedlist' && list.tagName === 'UL' || command === 'insertorderedlist' && list.tagName === 'OL');
- }
- }, 'state');
- addCommands({
- Undo: function () {
- editor.undoManager.undo();
- },
- Redo: function () {
- editor.undoManager.redo();
- }
- });
- addQueryValueHandler('FontName', function () {
- return fontNameQuery(editor);
- }, this);
- addQueryValueHandler('FontSize', function () {
- return fontSizeQuery(editor);
- }, this);
- }
-
- var nativeEvents = $_1q1txeljnlpawsa.makeMap('focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange ' + 'mouseout mouseenter mouseleave wheel keydown keypress keyup input contextmenu dragstart dragend dragover ' + 'draggesture dragdrop drop drag submit ' + 'compositionstart compositionend compositionupdate touchstart touchmove touchend', ' ');
- var Dispatcher = function (settings) {
- var self = this;
- var scope, bindings = {}, toggleEvent;
- var returnFalse = function () {
- return false;
- };
- var returnTrue = function () {
- return true;
- };
- settings = settings || {};
- scope = settings.scope || self;
- toggleEvent = settings.toggleEvent || returnFalse;
- var fire = function (name, args) {
- var handlers, i, l, callback;
- name = name.toLowerCase();
- args = args || {};
- args.type = name;
- if (!args.target) {
- args.target = scope;
- }
- if (!args.preventDefault) {
- args.preventDefault = function () {
- args.isDefaultPrevented = returnTrue;
- };
- args.stopPropagation = function () {
- args.isPropagationStopped = returnTrue;
- };
- args.stopImmediatePropagation = function () {
- args.isImmediatePropagationStopped = returnTrue;
- };
- args.isDefaultPrevented = returnFalse;
- args.isPropagationStopped = returnFalse;
- args.isImmediatePropagationStopped = returnFalse;
- }
- if (settings.beforeFire) {
- settings.beforeFire(args);
- }
- handlers = bindings[name];
- if (handlers) {
- for (i = 0, l = handlers.length; i < l; i++) {
- callback = handlers[i];
- if (callback.once) {
- off(name, callback.func);
- }
- if (args.isImmediatePropagationStopped()) {
- args.stopPropagation();
- return args;
- }
- if (callback.func.call(scope, args) === false) {
- args.preventDefault();
- return args;
- }
- }
- }
- return args;
- };
- var on = function (name, callback, prepend, extra) {
- var handlers, names, i;
- if (callback === false) {
- callback = returnFalse;
- }
- if (callback) {
- callback = { func: callback };
- if (extra) {
- $_1q1txeljnlpawsa.extend(callback, extra);
- }
- names = name.toLowerCase().split(' ');
- i = names.length;
- while (i--) {
- name = names[i];
- handlers = bindings[name];
- if (!handlers) {
- handlers = bindings[name] = [];
- toggleEvent(name, true);
- }
- if (prepend) {
- handlers.unshift(callback);
- } else {
- handlers.push(callback);
- }
- }
- }
- return self;
- };
- var off = function (name, callback) {
- var i, handlers, bindingName, names, hi;
- if (name) {
- names = name.toLowerCase().split(' ');
- i = names.length;
- while (i--) {
- name = names[i];
- handlers = bindings[name];
- if (!name) {
- for (bindingName in bindings) {
- toggleEvent(bindingName, false);
- delete bindings[bindingName];
- }
- return self;
- }
- if (handlers) {
- if (!callback) {
- handlers.length = 0;
- } else {
- hi = handlers.length;
- while (hi--) {
- if (handlers[hi].func === callback) {
- handlers = handlers.slice(0, hi).concat(handlers.slice(hi + 1));
- bindings[name] = handlers;
- }
- }
- }
- if (!handlers.length) {
- toggleEvent(name, false);
- delete bindings[name];
- }
- }
- }
- } else {
- for (name in bindings) {
- toggleEvent(name, false);
- }
- bindings = {};
- }
- return self;
- };
- var once = function (name, callback, prepend) {
- return on(name, callback, prepend, { once: true });
- };
- var has = function (name) {
- name = name.toLowerCase();
- return !(!bindings[name] || bindings[name].length === 0);
- };
- self.fire = fire;
- self.on = on;
- self.off = off;
- self.once = once;
- self.has = has;
- };
- Dispatcher.isNative = function (name) {
- return !!nativeEvents[name.toLowerCase()];
- };
-
- var getEventDispatcher = function (obj) {
- if (!obj._eventDispatcher) {
- obj._eventDispatcher = new Dispatcher({
- scope: obj,
- toggleEvent: function (name, state) {
- if (Dispatcher.isNative(name) && obj.toggleNativeEvent) {
- obj.toggleNativeEvent(name, state);
- }
- }
- });
- }
- return obj._eventDispatcher;
- };
- var $_c8v03c4tjnlpaxrw = {
- fire: function (name, args, bubble) {
- var self = this;
- if (self.removed && name !== 'remove') {
- return args;
- }
- args = getEventDispatcher(self).fire(name, args, bubble);
- if (bubble !== false && self.parent) {
- var parent = self.parent();
- while (parent && !args.isPropagationStopped()) {
- parent.fire(name, args, false);
- parent = parent.parent();
- }
- }
- return args;
- },
- 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 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 fireSwitchMode = function (editor, mode) {
- return editor.fire('SwitchMode', { mode: mode });
- };
- var fireObjectResizeStart = function (editor, target, width, height) {
- editor.fire('ObjectResizeStart', {
- target: target,
- width: width,
- height: height
- });
- };
- var fireObjectResized = function (editor, target, width, height) {
- editor.fire('ObjectResized', {
- target: target,
- width: width,
- height: height
- });
- };
- var $_5atig84wjnlpaxs7 = {
- firePreProcess: firePreProcess,
- firePostProcess: firePostProcess,
- fireRemove: fireRemove,
- fireSwitchMode: fireSwitchMode,
- fireObjectResizeStart: fireObjectResizeStart,
- fireObjectResized: fireObjectResized
- };
-
- var setEditorCommandState = function (editor, cmd, state) {
- try {
- editor.getDoc().execCommand(cmd, false, state);
- } catch (ex) {
- }
- };
- var toggleClass = function (elm, cls, state) {
- if ($_fes8i223jnlpax5z.has(elm, cls) && state === false) {
- $_fes8i223jnlpax5z.remove(elm, cls);
- } else if (state) {
- $_fes8i223jnlpax5z.add(elm, cls);
- }
- };
- var toggleReadOnly = function (editor, state) {
- toggleClass(Element$$1.fromDom(editor.getBody()), 'mce-content-readonly', state);
- if (state) {
- editor.selection.controlSelection.hideResizeRect();
- editor.readonly = true;
- editor.getBody().contentEditable = 'false';
- } else {
- editor.readonly = false;
- editor.getBody().contentEditable = 'true';
- setEditorCommandState(editor, 'StyleWithCSS', false);
- setEditorCommandState(editor, 'enableInlineTableEditing', false);
- setEditorCommandState(editor, 'enableObjectResizing', false);
- editor.focus();
- editor.nodeChanged();
- }
- };
- var setMode = function (editor, mode) {
- if (mode === getMode(editor)) {
- return;
- }
- if (editor.initialized) {
- toggleReadOnly(editor, mode === 'readonly');
- } else {
- editor.on('init', function () {
- toggleReadOnly(editor, mode === 'readonly');
- });
- }
- $_5atig84wjnlpaxs7.fireSwitchMode(editor, mode);
- };
- var getMode = function (editor) {
- return editor.readonly ? 'readonly' : 'design';
- };
- var isReadOnly = function (editor) {
- return editor.readonly === true;
- };
-
- var DOM$1 = DOMUtils$1.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;
- }
- if (editor.settings.event_root) {
- if (!editor.eventRoot) {
- editor.eventRoot = DOM$1.select(editor.settings.event_root)[0];
- }
- return editor.eventRoot;
- }
- return editor.getBody();
- };
- var isListening = function (editor) {
- return !editor.hidden && !editor.readonly;
- };
- var fireEvent = function (editor, eventName, e) {
- if (isListening(editor)) {
- editor.fire(eventName, e);
- } else if (isReadOnly(editor)) {
- e.preventDefault();
- }
- };
- var bindEventDelegate = function (editor, eventName) {
- var eventRootElm, delegate;
- if (!editor.delegates) {
- editor.delegates = {};
- }
- if (editor.delegates[eventName] || editor.removed) {
- return;
- }
- eventRootElm = getEventTarget(editor, eventName);
- if (editor.settings.event_root) {
- if (!customEventRootDelegates) {
- customEventRootDelegates = {};
- editor.editorManager.on('removeEditor', function () {
- var name;
- if (!editor.editorManager.activeEditor) {
- if (customEventRootDelegates) {
- for (name in customEventRootDelegates) {
- 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$1.isChildOf(target, body)) {
- fireEvent(editors[i], eventName, e);
- }
- }
- };
- customEventRootDelegates[eventName] = delegate;
- DOM$1.bind(eventRootElm, eventName, delegate);
- } else {
- delegate = function (e) {
- fireEvent(editor, eventName, e);
- };
- DOM$1.bind(eventRootElm, eventName, delegate);
- editor.delegates[eventName] = delegate;
- }
- };
- var EditorObservable = {
- bindPendingEventDelegates: function () {
- var self = this;
- $_1q1txeljnlpawsa.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;
- var name;
- if (self.delegates) {
- for (name in self.delegates) {
- self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);
- }
- 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());
- }
- }
- };
- EditorObservable = $_1q1txeljnlpawsa.extend({}, $_c8v03c4tjnlpaxrw, EditorObservable);
- var EditorObservable$1 = EditorObservable;
-
- var each$11 = $_1q1txeljnlpawsa.each;
- var explode$2 = $_1q1txeljnlpawsa.explode;
- var keyCodeLookup = {
- f9: 120,
- f10: 121,
- f11: 122
- };
- var modifierNames = $_1q1txeljnlpawsa.makeMap('alt,ctrl,shift,meta,access');
- function Shortcuts (editor) {
- var self = this;
- var shortcuts = {};
- var pendingPatterns = [];
- var parseShortcut = function (pattern) {
- var id, key;
- var shortcut = {};
- each$11(explode$2(pattern, '+'), 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);
- }
- }
- });
- 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 ($_cseqobajnlpawll.mac) {
- shortcut.ctrl = true;
- } else {
- shortcut.shift = true;
- }
- }
- if (shortcut.meta) {
- if ($_cseqobajnlpawll.mac) {
- shortcut.meta = true;
- } else {
- shortcut.ctrl = true;
- shortcut.meta = false;
- }
- }
- return shortcut;
- };
- var createShortcut = function (pattern, desc, cmdFunc, scope) {
- var shortcuts;
- shortcuts = $_1q1txeljnlpawsa.map(explode$2(pattern, '>'), parseShortcut);
- shortcuts[shortcuts.length - 1] = $_1q1txeljnlpawsa.extend(shortcuts[shortcuts.length - 1], {
- func: cmdFunc,
- scope: scope || editor
- });
- return $_1q1txeljnlpawsa.extend(shortcuts[0], {
- desc: editor.translate(desc),
- subpatterns: shortcuts.slice(1)
- });
- };
- var hasModifier = function (e) {
- return e.altKey || e.ctrlKey || e.metaKey;
- };
- var isFunctionKey = function (e) {
- return e.type === 'keydown' && e.keyCode >= 112 && e.keyCode <= 123;
- };
- var 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;
- };
- var executeShortcutAction = function (shortcut) {
- return shortcut.func ? shortcut.func.call(shortcut.scope) : null;
- };
- editor.on('keyup keypress keydown', function (e) {
- if ((hasModifier(e) || isFunctionKey(e)) && !e.isDefaultPrevented()) {
- each$11(shortcuts, function (shortcut) {
- if (matchShortcut(e, shortcut)) {
- pendingPatterns = shortcut.subpatterns.slice(0);
- if (e.type === 'keydown') {
- executeShortcutAction(shortcut);
- }
- return true;
- }
- });
- if (matchShortcut(e, pendingPatterns[0])) {
- if (pendingPatterns.length === 1) {
- if (e.type === 'keydown') {
- executeShortcutAction(pendingPatterns[0]);
- }
- }
- pendingPatterns.shift();
- }
- }
- });
- self.add = function (pattern, desc, cmdFunc, scope) {
- var cmd;
- cmd = cmdFunc;
- if (typeof cmdFunc === 'string') {
- cmdFunc = function () {
- editor.execCommand(cmd, false, null);
- };
- } else if ($_1q1txeljnlpawsa.isArray(cmd)) {
- cmdFunc = function () {
- editor.execCommand(cmd[0], cmd[1], cmd[2]);
- };
- }
- each$11(explode$2($_1q1txeljnlpawsa.trim(pattern.toLowerCase())), function (pattern) {
- var shortcut = createShortcut(pattern, desc, cmdFunc, scope);
- shortcuts[shortcut.id] = shortcut;
- });
- return true;
- };
- self.remove = function (pattern) {
- var shortcut = createShortcut(pattern);
- if (shortcuts[shortcut.id]) {
- delete shortcuts[shortcut.id];
- return true;
- }
- return false;
- };
- }
-
- var any$1 = function (predicate) {
- return $_cs5qmd2ajnlpax6v.first(predicate).isSome();
- };
- var ancestor$3 = function (scope, predicate, isRoot) {
- return $_cs5qmd2ajnlpax6v.ancestor(scope, predicate, isRoot).isSome();
- };
- var closest$3 = function (scope, predicate, isRoot) {
- return $_cs5qmd2ajnlpax6v.closest(scope, predicate, isRoot).isSome();
- };
- var sibling$4 = function (scope, predicate) {
- return $_cs5qmd2ajnlpax6v.sibling(scope, predicate).isSome();
- };
- var child$4 = function (scope, predicate) {
- return $_cs5qmd2ajnlpax6v.child(scope, predicate).isSome();
- };
- var descendant$3 = function (scope, predicate) {
- return $_cs5qmd2ajnlpax6v.descendant(scope, predicate).isSome();
- };
- var $_f7rq0y50jnlpaxt3 = {
- any: any$1,
- ancestor: ancestor$3,
- closest: closest$3,
- sibling: sibling$4,
- child: child$4,
- descendant: descendant$3
- };
-
- var focus$$1 = function (element) {
- element.dom().focus();
- };
- var blur$$1 = function (element) {
- element.dom().blur();
- };
- var hasFocus = function (element) {
- var doc = $_dr4ybh18jnlpawzt.owner(element).dom();
- return element.dom() === doc.activeElement;
- };
- var active = function (_doc) {
- var doc = _doc !== undefined ? _doc.dom() : document;
- return Option.from(doc.activeElement).map(Element$$1.fromDom);
- };
- var focusInside = function (element) {
- var doc = $_dr4ybh18jnlpawzt.owner(element);
- var inside = active(doc).filter(function (a) {
- return $_f7rq0y50jnlpaxt3.closest(a, curry($_5h7cor1ejnlpax0k.eq, element));
- });
- inside.fold(function () {
- focus$$1(element);
- }, noop);
- };
- var search = function (element) {
- return active($_dr4ybh18jnlpawzt.owner(element)).filter(function (e) {
- return element.dom().contains(e.dom());
- });
- };
- var $_9bj08p4zjnlpaxsp = {
- hasFocus: hasFocus,
- focus: focus$$1,
- blur: blur$$1,
- active: active,
- search: search,
- focusInside: focusInside
- };
-
- 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 ? Option.from(getNode(rng.startContainer, rng.startOffset)).map(Element$$1.fromDom) : Option.none();
- };
- var getFocusInElement = function (root, rng) {
- return getCollapsedNode(rng).bind(function (node) {
- if (isTableSection(node)) {
- return Option.some(node);
- } else if ($_5h7cor1ejnlpax0k.contains(root, node) === false) {
- return Option.some(root);
- } else {
- return Option.none();
- }
- });
- };
- var normalizeSelection = function (editor, rng) {
- getFocusInElement(Element$$1.fromDom(editor.getBody()), rng).bind(function (elm) {
- return $_32xcvk30jnlpaxbn.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 $_9bj08p4zjnlpaxsp.hasFocus(elm) || $_9bj08p4zjnlpaxsp.search(elm).isSome();
- };
- var hasIframeFocus = function (editor) {
- return editor.iframeElement && $_9bj08p4zjnlpaxsp.hasFocus(Element$$1.fromDom(editor.iframeElement));
- };
- var hasInlineFocus = function (editor) {
- var rawBody = editor.getBody();
- return rawBody && hasElementFocus(Element$$1.fromDom(rawBody));
- };
- var hasFocus$1 = function (editor) {
- return editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);
- };
- var focusEditor = function (editor) {
- var selection = editor.selection, contentEditable = editor.settings.content_editable;
- var body = editor.getBody();
- var rng = selection.getRng();
- editor.quirks.refreshContentEditable();
- var contentEditableHost = getContentEditableHost(editor, selection.getNode());
- if (editor.$.contains(body, contentEditableHost)) {
- focusBody(contentEditableHost);
- normalizeSelection(editor, rng);
- activateEditor(editor);
- return;
- }
- if (editor.bookmark !== undefined && hasFocus$1(editor) === false) {
- $_13pqgk4ojnlpaxqr.getRng(editor).each(function (bookmarkRng) {
- editor.selection.setRng(bookmarkRng);
- rng = bookmarkRng;
- });
- }
- if (!contentEditable) {
- if (!$_cseqobajnlpawll.opera) {
- focusBody(body);
- }
- editor.getWin().focus();
- }
- if ($_cseqobajnlpawll.gecko || contentEditable) {
- 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 $_8odu5n4yjnlpaxsg = {
- focus: focus$1,
- hasFocus: hasFocus$1
- };
-
- var getProp = function (propName, elm) {
- var rawElm = elm.dom();
- return rawElm[propName];
- };
- var getComputedSizeProp = function (propName, elm) {
- return parseInt($_asiuhf13jnlpawvc.get(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 = Element$$1.fromDom(editor.getBody());
- var targetElm = editor.inline ? bodyElm : $_dr4ybh18jnlpawzt.documentElement(bodyElm);
- var transposedPoint = transpose(editor.inline, targetElm, clientX, clientY);
- return isInsideElementContentArea(targetElm, transposedPoint.x, transposedPoint.y);
- };
- var fromDomSafe = function (node) {
- return Option.from(node).map(Element$$1.fromDom);
- };
- var isEditorAttachedToDom = function (editor) {
- var rawContainer = editor.inline ? editor.getBody() : editor.getContentAreaContainer();
- return fromDomSafe(rawContainer).map(function (container) {
- return $_5h7cor1ejnlpax0k.contains($_dr4ybh18jnlpawzt.owner(container), container);
- }).getOr(false);
- };
- var $_wem7o53jnlpaxtk = {
- isXYInContentArea: isXYInContentArea,
- isEditorAttachedToDom: isEditorAttachedToDom
- };
-
- function NotificationManagerImpl () {
- var unimplemented = function () {
- throw new Error('Theme did not provide a NotificationManager implementation.');
- };
- return {
- open: unimplemented,
- close: unimplemented,
- reposition: unimplemented,
- getArgs: unimplemented
- };
- }
-
- function NotificationManager (editor) {
- var notifications = [];
- var getImplementation = function () {
- var theme = editor.theme;
- return theme && theme.getNotificationManagerImpl ? theme.getNotificationManagerImpl() : NotificationManagerImpl();
- };
- var getTopNotification = function () {
- return Option.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 (args) {
- if (editor.removed || !$_wem7o53jnlpaxtk.isEditorAttachedToDom(editor)) {
- return;
- }
- return find(notifications, function (notification) {
- return isEqual(getImplementation().getArgs(notification), args);
- }).getOrThunk(function () {
- editor.editorManager.setActive(editor);
- var notification = getImplementation().open(args, function () {
- closeNotification(notification);
- reposition();
- });
- addNotification(notification);
- reposition();
- 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 = editor.settings.service_message;
- if (serviceMessage) {
- open({
- text: serviceMessage,
- type: 'warning',
- timeout: 0,
- icon: ''
- });
- }
- });
- editor.on('ResizeEditor ResizeWindow', function () {
- $_2nbnh1ijnlpawpi.requestAnimationFrame(reposition);
- });
- editor.on('remove', function () {
- each(notifications.slice(), function (notification) {
- getImplementation().close(notification);
- });
- });
- };
- registerEvents(editor);
- return {
- open: open,
- close: close,
- getNotifications: getNotifications
- };
- }
-
- function WindowManagerImpl () {
- var unimplemented = function () {
- throw new Error('Theme did not provide a WindowManager implementation.');
- };
- return {
- open: unimplemented,
- alert: unimplemented,
- confirm: unimplemented,
- close: unimplemented,
- getParams: unimplemented,
- setParams: unimplemented
- };
- }
-
- function WindowManager (editor) {
- var windows = [];
- var getImplementation = function () {
- var theme = editor.theme;
- return theme && theme.getWindowManagerImpl ? theme.getWindowManagerImpl() : WindowManagerImpl();
- };
- var funcBind = function (scope, f) {
- return function () {
- return f ? f.apply(scope, arguments) : undefined;
- };
- };
- var fireOpenEvent = function (win) {
- editor.fire('OpenWindow', { win: win });
- };
- var fireCloseEvent = function (win) {
- editor.fire('CloseWindow', { win: win });
- };
- var addWindow = function (win) {
- windows.push(win);
- fireOpenEvent(win);
- };
- var closeWindow = function (win) {
- findIndex(windows, function (otherWindow) {
- return otherWindow === win;
- }).each(function (index) {
- windows.splice(index, 1);
- fireCloseEvent(win);
- if (windows.length === 0) {
- editor.focus();
- }
- });
- };
- var getTopWindow = function () {
- return Option.from(windows[windows.length - 1]);
- };
- var open = function (args, params) {
- editor.editorManager.setActive(editor);
- $_13pqgk4ojnlpaxqr.store(editor);
- var win = getImplementation().open(args, params, closeWindow);
- addWindow(win);
- return win;
- };
- var alert = function (message, callback, scope) {
- var win = getImplementation().alert(message, funcBind(scope ? scope : this, callback), closeWindow);
- addWindow(win);
- };
- var confirm = function (message, callback, scope) {
- var win = getImplementation().confirm(message, funcBind(scope ? scope : this, callback), closeWindow);
- addWindow(win);
- };
- var close = function () {
- getTopWindow().each(function (win) {
- getImplementation().close(win);
- closeWindow(win);
- });
- };
- var getParams = function () {
- return getTopWindow().map(getImplementation().getParams).getOr(null);
- };
- var setParams = function (params) {
- getTopWindow().each(function (win) {
- getImplementation().setParams(win, params);
- });
- };
- var getWindows = function () {
- return windows;
- };
- editor.on('remove', function () {
- each(windows.slice(0), function (win) {
- getImplementation().close(win);
- });
- });
- return {
- windows: windows,
- open: open,
- alert: alert,
- confirm: confirm,
- close: close,
- getParams: getParams,
- setParams: setParams,
- getWindows: getWindows
- };
- }
-
- var PluginManager = AddOnManager.PluginManager;
- var resolvePluginName = function (targetUrl, suffix) {
- for (var name$$1 in PluginManager.urls) {
- var matchUrl = PluginManager.urls[name$$1] + '/plugin' + suffix + '.js';
- if (matchUrl === targetUrl) {
- return name$$1;
- }
- }
- return null;
- };
- var pluginUrlToMessage = function (editor, url) {
- var plugin = resolvePluginName(url, editor.suffix);
- return plugin ? 'Failed to load plugin: ' + plugin + ' from url ' + url : 'Failed to load plugin url: ' + url;
- };
- 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, 'Failed to upload image: ' + message);
- };
- var pluginLoadError = function (editor, url) {
- displayError(editor, pluginUrlToMessage(editor, url));
- };
- var initError = function (message) {
- var x = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- x[_i - 1] = arguments[_i];
- }
- var console$$1 = window.console;
- if (console$$1) {
- if (console$$1.error) {
- console$$1.error.apply(console$$1, arguments);
- } else {
- console$$1.log.apply(console$$1, arguments);
- }
- }
- };
- var $_2xhw4u57jnlpaxu1 = {
- pluginLoadError: pluginLoadError,
- uploadError: uploadError,
- displayError: displayError,
- initError: initError
- };
-
- var PluginManager$1 = AddOnManager.PluginManager;
-
- var ThemeManager = AddOnManager.ThemeManager;
-
- function XMLHttpRequest () {
- var f = $_3b2dlgcjnlpawlt.getOrDie('XMLHttpRequest');
- return new f();
- }
-
- function Uploader (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, formData;
- xhr = 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 () {
- var json;
- if (xhr.status < 200 || xhr.status >= 300) {
- failure('HTTP Error: ' + xhr.status);
- return;
- }
- json = JSON.parse(xhr.responseText);
- if (!json || typeof json.location !== 'string') {
- failure('Invalid JSON: ' + xhr.responseText);
- return;
- }
- success(pathJoin(settings.basePath, json.location));
- };
- 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, error) {
- return {
- url: '',
- blobInfo: blobInfo,
- status: false,
- error: error
- };
- };
- var resolvePending = function (blobUri, result) {
- $_1q1txeljnlpawsa.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;
- var noop = function () {
- };
- 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) {
- closeNotification_1();
- uploadStatus.removeFailed(blobInfo.blobUri());
- resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, error));
- resolve(handlerFailure(blobInfo, error));
- };
- progress = function (percent) {
- if (percent < 0 || percent > 100) {
- return;
- }
- if (!notification) {
- notification = openNotification();
- }
- notification.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 = $_1q1txeljnlpawsa.grep(blobInfos, function (blobInfo) {
- return !uploadStatus.isUploaded(blobInfo.blobUri());
- });
- return promiseObj.all($_1q1txeljnlpawsa.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 };
- }
-
- function FileReader () {
- var f = $_3b2dlgcjnlpawlt.getOrDie('FileReader');
- return new f();
- }
-
- function Uint8Array (arr) {
- var f = $_3b2dlgcjnlpawlt.getOrDie('Uint8Array');
- return new f(arr);
- }
-
- var requestAnimationFrame$1 = function (callback) {
- var f = $_3b2dlgcjnlpawlt.getOrDie('requestAnimationFrame');
- f(callback);
- };
- var atob = function (base64) {
- var f = $_3b2dlgcjnlpawlt.getOrDie('atob');
- return f(base64);
- };
- var $_7fz2a15jjnlpaxvr = {
- atob: atob,
- requestAnimationFrame: requestAnimationFrame$1
- };
-
- 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 = XMLHttpRequest();
- xhr.open('GET', url, true);
- xhr.responseType = 'blob';
- xhr.onload = function () {
- if (this.status === 200) {
- resolve(this.response);
- } else {
- rejectWithError();
- }
- };
- xhr.onerror = rejectWithError;
- xhr.send();
- } catch (ex) {
- rejectWithError();
- }
- });
- };
- var parseDataUri = function (uri) {
- var type, matches;
- var uriParts = decodeURIComponent(uri).split(',');
- matches = /data:([^;]+)/.exec(uriParts[0]);
- if (matches) {
- type = matches[1];
- }
- return {
- type: type,
- data: uriParts[1]
- };
- };
- var dataUriToBlob = function (uri) {
- return new promiseObj(function (resolve) {
- var str, arr, i;
- var uriParts = parseDataUri(uri);
- try {
- str = $_7fz2a15jjnlpaxvr.atob(uriParts.data);
- } catch (e) {
- resolve(new Blob([]));
- return;
- }
- arr = Uint8Array(str.length);
- for (i = 0; i < arr.length; i++) {
- arr[i] = str.charCodeAt(i);
- }
- resolve(new Blob([arr], { type: uriParts.type }));
- });
- };
- 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 = FileReader();
- reader.onloadend = function () {
- resolve(reader.result);
- };
- reader.readAsDataURL(blob);
- });
- };
- var $_4ygjjg5gjnlpaxvh = {
- uriToBlob: uriToBlob,
- blobToDataUri: blobToDataUri,
- parseDataUri: parseDataUri
- };
-
- 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 {
- $_4ygjjg5gjnlpaxvh.uriToBlob(img.src).then(function (blob) {
- $_4ygjjg5gjnlpaxvh.blobToDataUri(blob).then(function (dataUri) {
- base64 = $_4ygjjg5gjnlpaxvh.parseDataUri(dataUri).data;
- blobInfo = blobCache.create(uniqueId(), blob, base64);
- blobCache.add(blobInfo);
- resolve({
- image: img,
- blobInfo: blobInfo
- });
- });
- }, function (err) {
- reject(err);
- });
- }
- return;
- }
- base64 = $_4ygjjg5gjnlpaxvh.parseDataUri(img.src).data;
- blobInfo = blobCache.findFirst(function (cachedBlobInfo) {
- return cachedBlobInfo.base64() === base64;
- });
- if (blobInfo) {
- resolve({
- image: img,
- blobInfo: blobInfo
- });
- } else {
- $_4ygjjg5gjnlpaxvh.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 ? elm.getElementsByTagName('img') : [];
- };
- function ImageScanner (uploadStatus, blobCache) {
- var cachedPromises = {};
- var findAll = function (elm, predicate) {
- var images;
- if (!predicate) {
- predicate = $_dv6bef2njnlpax9l.constant(true);
- }
- images = $_n452lmjnlpawsj.filter(getAllImages(elm), function (img) {
- var src = img.src;
- if (!$_cseqobajnlpawll.fileApi) {
- return false;
- }
- if (img.hasAttribute('data-mce-bogus')) {
- return false;
- }
- if (img.hasAttribute('data-mce-placeholder')) {
- return false;
- }
- if (!src || src === $_cseqobajnlpawll.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 = $_n452lmjnlpawsj.map(images, function (img) {
- if (cachedPromises[img.src]) {
- 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 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 $_cb5mec5ljnlpaxvz = { uuid: uuid };
-
- function BlobCache () {
- var cache = [];
- var constant = $_dv6bef2njnlpax9l.constant;
- var mimeToExt = function (mime) {
- var mimes = {
- 'image/jpeg': 'jpg',
- 'image/jpg': 'jpg',
- 'image/gif': 'gif',
- 'image/png': 'png'
- };
- return mimes[mime.toLowerCase()] || 'dat';
- };
- var create = function (o, blob, base64, filename) {
- if (isString(o)) {
- var id = o;
- return toBlobInfo({
- id: id,
- name: filename,
- blob: blob,
- base64: base64
- });
- } else if (isObject(o)) {
- return toBlobInfo(o);
- } else {
- throw new Error('Unknown input type');
- }
- };
- var toBlobInfo = function (o) {
- var id, name;
- if (!o.blob || !o.base64) {
- throw new Error('blob and base64 representations of the image are required for BlobInfo to be created');
- }
- id = o.id || $_cb5mec5ljnlpaxvz.uuid('blobid');
- name = o.name || id;
- return {
- id: constant(id),
- name: constant(name),
- filename: constant(name + '.' + mimeToExt(o.blob.type)),
- blob: constant(o.blob),
- base64: constant(o.base64),
- blobUri: constant(o.blobUri || $_9khkh7bjnlpawls.createObjectURL(o.blob)),
- uri: constant(o.uri)
- };
- };
- var add = function (blobInfo) {
- if (!get(blobInfo.id())) {
- cache.push(blobInfo);
- }
- };
- var get = function (id) {
- return findFirst(function (cachedBlobInfo) {
- return cachedBlobInfo.id() === id;
- });
- };
- var findFirst = function (predicate) {
- return $_n452lmjnlpawsj.filter(cache, predicate)[0];
- };
- var getByUri = function (blobUri) {
- return findFirst(function (blobInfo) {
- return blobInfo.blobUri() === blobUri;
- });
- };
- var removeByUri = function (blobUri) {
- cache = $_n452lmjnlpawsj.filter(cache, function (blobInfo) {
- if (blobInfo.blobUri() === blobUri) {
- $_9khkh7bjnlpawls.revokeObjectURL(blobInfo.blobUri());
- return false;
- }
- return true;
- });
- };
- var destroy = function () {
- $_n452lmjnlpawsj.each(cache, function (cachedBlobInfo) {
- $_9khkh7bjnlpawls.revokeObjectURL(cachedBlobInfo.blobUri());
- });
- cache = [];
- };
- return {
- create: create,
- add: add,
- get: get,
- getByUri: getByUri,
- findFirst: findFirst,
- removeByUri: removeByUri,
- destroy: destroy
- };
- }
-
- function UploadStatus () {
- 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
- };
- }
-
- function EditorUpload (editor) {
- var blobCache = BlobCache();
- var uploader, imageScanner;
- var uploadStatus = UploadStatus();
- var urlFilters = [];
- var aliveGuard = function (callback) {
- return function (result) {
- if (editor.selection) {
- return callback(result);
- }
- return [];
- };
- };
- var cacheInvalidator = function () {
- return '?' + 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) {
- content = replaceString(content, 'src="' + targetUrl + '"', 'src="' + replacementUrl + '"');
- 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 openNotification = function () {
- return editor.notificationManager.open({
- text: editor.translate('Image uploading...'),
- type: 'info',
- timeout: -1,
- progressBar: true
- });
- };
- var replaceImageUri = function (image, resultUri) {
- blobCache.removeByUri(image.src);
- replaceUrlInUndoStack(image.src, resultUri);
- editor.$(image).attr({
- 'src': $_c6e09z3ajnlpaxek.shouldReuseFileName(editor) ? resultUri + cacheInvalidator() : resultUri,
- 'data-mce-src': editor.convertURL(resultUri, 'src')
- });
- };
- var uploadImages = function (callback) {
- if (!uploader) {
- uploader = Uploader(uploadStatus, {
- url: $_c6e09z3ajnlpaxek.getImageUploadUrl(editor),
- basePath: $_c6e09z3ajnlpaxek.getImageUploadBasePath(editor),
- credentials: $_c6e09z3ajnlpaxek.getImagesUploadCredentials(editor),
- handler: $_c6e09z3ajnlpaxek.getImagesUploadHandler(editor)
- });
- }
- return scanForImages().then(aliveGuard(function (imageInfos) {
- var blobInfos;
- blobInfos = map(imageInfos, function (imageInfo) {
- return imageInfo.blobInfo;
- });
- return uploader.upload(blobInfos, openNotification).then(aliveGuard(function (result) {
- var filteredResult = map(result, function (uploadInfo, index) {
- var image = imageInfos[index].image;
- if (uploadInfo.status && $_c6e09z3ajnlpaxek.shouldReplaceBlobUris(editor)) {
- replaceImageUri(image, uploadInfo.url);
- } else if (uploadInfo.error) {
- $_2xhw4u57jnlpaxu1.uploadError(editor, uploadInfo.error);
- }
- return {
- element: image,
- status: uploadInfo.status
- };
- });
- if (callback) {
- callback(filteredResult);
- }
- return filteredResult;
- }));
- }));
- };
- var uploadImagesAuto = function (callback) {
- if ($_c6e09z3ajnlpaxek.isAutomaticUploadsEnabled(editor)) {
- return uploadImages(callback);
- }
- };
- var isValidDataUriImage = function (imgElm) {
- if (forall(urlFilters, function (filter$$1) {
- return filter$$1(imgElm);
- }) === false) {
- return false;
- }
- if (imgElm.getAttribute('src').indexOf('data:') === 0) {
- var dataImgFilter = $_c6e09z3ajnlpaxek.getImagesDataImgFilter(editor);
- return dataImgFilter(imgElm);
- }
- return true;
- };
- var addFilter = function (filter$$1) {
- urlFilters.push(filter$$1);
- };
- 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') {
- $_2xhw4u57jnlpaxu1.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 ($_c6e09z3ajnlpaxek.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') {
- 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 isBlockElement = function (blockElements, node) {
- return blockElements.hasOwnProperty(node.nodeName);
- };
- var isValidTarget = function (blockElements, node) {
- if ($_fy28ei1rjnlpax2o.isText(node)) {
- return true;
- } else if ($_fy28ei1rjnlpax2o.isElement(node)) {
- return !isBlockElement(blockElements, node) && !$_43l8qj2xjnlpaxb1.isBookmarkNode(node);
- } else {
- return false;
- }
- };
- var hasBlockParent = function (blockElements, root, node) {
- return exists($_4b88sj42jnlpaxkd.parents(Element$$1.fromDom(node), Element$$1.fromDom(root)), function (elm) {
- return isBlockElement(blockElements, elm.dom());
- });
- };
- var shouldRemoveTextNode = function (blockElements, node) {
- if ($_fy28ei1rjnlpax2o.isText(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 settings = editor.settings, dom = editor.dom, selection = editor.selection;
- var schema = editor.schema, blockElements = schema.getBlockElements();
- var node = selection.getStart();
- var rootNode = editor.getBody();
- var rng;
- var startContainer, startOffset, endContainer, endOffset, rootBlockNode;
- var tempNode, wrapped, restoreSelection;
- var rootNodeName, forcedRootBlock;
- forcedRootBlock = settings.forced_root_block;
- if (!node || !$_fy28ei1rjnlpax2o.isElement(node) || !forcedRootBlock) {
- return;
- }
- rootNodeName = rootNode.nodeName.toLowerCase();
- if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, node)) {
- return;
- }
- rng = selection.getRng();
- startContainer = rng.startContainer;
- startOffset = rng.startOffset;
- endContainer = rng.endContainer;
- endOffset = rng.endOffset;
- restoreSelection = $_8odu5n4yjnlpaxsg.hasFocus(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, editor.settings.forced_root_block_attrs);
- 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$2 = function (editor) {
- if (editor.settings.forced_root_block) {
- editor.on('NodeChange', curry(addRootBlocks, editor));
- }
- };
- var $_cjqvqq5njnlpaxw3 = { setup: setup$2 };
-
- var getStartNode = function (rng) {
- var sc = rng.startContainer, so = rng.startOffset;
- if ($_fy28ei1rjnlpax2o.isText(sc)) {
- return so === 0 ? Option.some(Element$$1.fromDom(sc)) : Option.none();
- } else {
- return Option.from(sc.childNodes[so]).map(Element$$1.fromDom);
- }
- };
- var getEndNode = function (rng) {
- var ec = rng.endContainer, eo = rng.endOffset;
- if ($_fy28ei1rjnlpax2o.isText(ec)) {
- return eo === ec.data.length ? Option.some(Element$$1.fromDom(ec)) : Option.none();
- } else {
- return Option.from(ec.childNodes[eo - 1]).map(Element$$1.fromDom);
- }
- };
- var getFirstChildren = function (node) {
- return $_dr4ybh18jnlpawzt.firstChild(node).fold(constant([node]), function (child) {
- return [node].concat(getFirstChildren(child));
- });
- };
- var getLastChildren$1 = function (node) {
- return $_dr4ybh18jnlpawzt.lastChild(node).fold(constant([node]), function (child) {
- if ($_7u5fzs11jnlpawv6.name(child) === 'br') {
- return $_dr4ybh18jnlpawzt.prevSibling(child).map(function (sibling) {
- return [node].concat(getLastChildren$1(sibling));
- }).getOr([]);
- } else {
- return [node].concat(getLastChildren$1(child));
- }
- });
- };
- var hasAllContentsSelected = function (elm, rng) {
- return liftN([
- getStartNode(rng),
- getEndNode(rng)
- ], function (startNode, endNode) {
- var start = find(getFirstChildren(elm), curry($_5h7cor1ejnlpax0k.eq, startNode));
- var end = find(getLastChildren$1(elm), curry($_5h7cor1ejnlpax0k.eq, endNode));
- return start.isSome() && end.isSome();
- }).getOr(false);
- };
- var moveEndPoint$1 = function (dom, rng, node, start) {
- var root = node, walker = new TreeWalker(node, root);
- var nonEmptyElementsMap = dom.schema.getNonEmptyElements();
- do {
- if (node.nodeType === 3 && $_1q1txeljnlpawsa.trim(node.nodeValue).length !== 0) {
- if (start) {
- rng.setStart(node, 0);
- } else {
- rng.setEnd(node, node.nodeValue.length);
- }
- return;
- }
- if (nonEmptyElementsMap[node.nodeName] && !/^(TD|TH)$/.test(node.nodeName)) {
- if (start) {
- rng.setStartBefore(node);
- } else {
- if (node.nodeName === 'BR') {
- rng.setEndBefore(node);
- } else {
- rng.setEndAfter(node);
- }
- }
- return;
- }
- if ($_cseqobajnlpawll.ie && $_cseqobajnlpawll.ie < 11 && dom.isBlock(node) && dom.isEmpty(node)) {
- if (start) {
- rng.setStart(node, 0);
- } else {
- rng.setEnd(node, 0);
- }
- 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;
- };
-
- function NodeChange (editor) {
- var lastRng, lastPath = [];
- var isSameElementPath = function (startElm) {
- var i, currentPath;
- currentPath = editor.$(startElm).parentsUntil(editor.getBody()).add(startElm);
- if (currentPath.length === lastPath.length) {
- for (i = currentPath.length; i >= 0; i--) {
- if (currentPath[i] !== lastPath[i]) {
- break;
- }
- }
- if (i === -1) {
- lastPath = currentPath;
- return true;
- }
- }
- lastPath = currentPath;
- return false;
- };
- if (!('onselectionchange' in editor.getDoc())) {
- editor.on('NodeChange Click MouseUp KeyUp Focus', function (e) {
- var nativeRng, fakeRng;
- nativeRng = editor.selection.getRng();
- fakeRng = {
- startContainer: nativeRng.startContainer,
- startOffset: nativeRng.startOffset,
- endContainer: nativeRng.endContainer,
- endOffset: nativeRng.endOffset
- };
- if (e.type === 'nodechange' || !$_3s8g9y4njnlpaxqj.isEq(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 || !$_cseqobajnlpawll.range && editor.selection.isCollapsed()) {
- return;
- }
- if (hasAnyRanges(editor) && !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') {
- $_2nbnh1ijnlpawpi.setEditorTimeout(editor, function () {
- editor.nodeChanged();
- });
- } else {
- editor.nodeChanged();
- }
- }
- });
- this.nodeChanged = function (args) {
- var selection = editor.selection;
- var node, parents, root;
- if (editor.initialized && selection && !editor.settings.disable_nodechange && !editor.readonly) {
- root = editor.getBody();
- node = selection.getStart(true) || root;
- if (node.ownerDocument !== editor.getDoc() || !editor.dom.isChildOf(node, root)) {
- node = root;
- }
- parents = [];
- editor.dom.getParent(node, function (node) {
- if (node === root) {
- return true;
- }
- parents.push(node);
- });
- args = args || {};
- args.element = node;
- args.parents = parents;
- editor.fire('NodeChange', args);
- }
- };
- }
-
- var getAbsolutePosition = function (elm) {
- var doc, docElem, win, clientRect;
- clientRect = elm.getBoundingClientRect();
- doc = elm.ownerDocument;
- docElem = doc.documentElement;
- 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 $_d639a65sjnlpaxxw = { calc: calc };
-
- var isContentEditableFalse$7 = $_fy28ei1rjnlpax2o.isContentEditableFalse;
- var isContentEditableTrue$4 = $_fy28ei1rjnlpax2o.isContentEditableTrue;
- var isDraggable = function (rootElm, elm) {
- return isContentEditableFalse$7(elm) && elm !== rootElm;
- };
- var isValidDropTarget = function (editor, targetElement, dragElement) {
- if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) {
- return false;
- }
- if (isContentEditableFalse$7(targetElement)) {
- return false;
- }
- return true;
- };
- var cloneElement = function (elm) {
- var cloneElm = elm.cloneNode(true);
- cloneElm.removeAttribute('data-mce-selected');
- return cloneElm;
- };
- var createGhost = function (editor, elm, width, height) {
- var clonedElm = elm.cloneNode(true);
- editor.dom.setStyles(clonedElm, {
- width: width,
- height: height
- });
- editor.dom.setAttrib(clonedElm, 'data-mce-selected', null);
- var ghostElm = editor.dom.create('div', {
- 'class': 'mce-drag-container',
- 'data-mce-bogus': 'all',
- 'unselectable': 'on',
- 'contenteditable': 'false'
- });
- editor.dom.setStyles(ghostElm, {
- position: 'absolute',
- opacity: 0.5,
- overflow: 'hidden',
- border: 0,
- padding: 0,
- margin: 0,
- width: width,
- height: height
- });
- editor.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 hasDraggableElement = function (state) {
- return state.element;
- };
- 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 = $_n452lmjnlpawsj.find(editor.dom.getParents(e.target), $_dv6bef2njnlpax9l.or(isContentEditableFalse$7, isContentEditableTrue$4));
- if (isDraggable(editor.getBody(), ceElm)) {
- var elmPos = editor.dom.getPos(ceElm);
- var bodyElm = editor.getBody();
- var docElm = editor.getDoc().documentElement;
- state.element = ceElm;
- state.screenX = e.screenX;
- state.screenY = e.screenY;
- state.maxX = (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2;
- state.maxY = (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2;
- state.relX = e.pageX - elmPos.x;
- state.relY = e.pageY - elmPos.y;
- state.width = ceElm.offsetWidth;
- state.height = ceElm.offsetHeight;
- state.ghost = createGhost(editor, ceElm, state.width, state.height);
- }
- }
- };
- };
- var move$1 = function (state, editor) {
- var throttledPlaceCaretAt = $_2nbnh1ijnlpawpi.throttle(function (clientX, clientY) {
- editor._selectionOverrides.hideFakeCaret();
- editor.selection.placeCaretAt(clientX, clientY);
- }, 0);
- return function (e) {
- var movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY));
- if (hasDraggableElement(state) && !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, $_d639a65sjnlpaxxw.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) {
- if (state.dragging) {
- if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) {
- var targetClone_1 = cloneElement(state.element);
- var args = editor.fire('drop', {
- targetClone: targetClone_1,
- clientX: e.clientX,
- clientY: e.clientY
- });
- if (!args.isDefaultPrevented()) {
- targetClone_1 = args.targetClone;
- editor.undoManager.transact(function () {
- removeElement(state.element);
- editor.insertContent(editor.dom.getOuterHTML(targetClone_1));
- editor._selectionOverrides.hideFakeCaret();
- });
- }
- }
- }
- removeDragState(state);
- };
- };
- var stop$$1 = function (state, editor) {
- return function () {
- if (state.dragging) {
- editor.fire('dragend');
- }
- removeDragState(state);
- };
- };
- var removeDragState = function (state) {
- state.dragging = false;
- state.element = null;
- removeElement(state.ghost);
- };
- var bindFakeDragEvents = function (editor) {
- var state = {};
- var pageDom, dragStartHandler, dragHandler, dropHandler, dragEndHandler, rootDocument;
- pageDom = DOMUtils$1.DOM;
- rootDocument = document;
- dragStartHandler = start$1(state, editor);
- dragHandler = move$1(state, editor);
- dropHandler = drop(state, editor);
- dragEndHandler = stop$$1(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$7(realTarget) || isContentEditableFalse$7(editor.dom.getContentEditableParent(realTarget))) {
- e.preventDefault();
- }
- });
- };
- var init = function (editor) {
- bindFakeDragEvents(editor);
- blockIeDrop(editor);
- };
- var $_5gate55rjnlpaxxq = { init: init };
-
- var getNodeClientRects = function (node) {
- var toArrayWithNode = function (clientRects) {
- return $_n452lmjnlpawsj.map(clientRects, function (clientRect) {
- clientRect = clone$2(clientRect);
- clientRect.node = node;
- return clientRect;
- });
- };
- if ($_fy28ei1rjnlpax2o.isElement(node)) {
- return toArrayWithNode(node.getClientRects());
- }
- if ($_fy28ei1rjnlpax2o.isText(node)) {
- var rng = node.ownerDocument.createRange();
- rng.setStart(node, 0);
- rng.setEnd(node, node.data.length);
- return toArrayWithNode(rng.getClientRects());
- }
- };
- var getClientRects = function (node) {
- return $_n452lmjnlpawsj.reduce(node, function (result, node) {
- return result.concat(getNodeClientRects(node));
- }, []);
- };
-
- var VDirection;
- (function (VDirection) {
- VDirection[VDirection['Up'] = -1] = 'Up';
- VDirection[VDirection['Down'] = 1] = 'Down';
- }(VDirection || (VDirection = {})));
- var findUntil = 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, node;
- var result = [];
- var targetClientRect;
- 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, $_n452lmjnlpawsj.last(result))) {
- line++;
- }
- clientRect.line = line;
- if (predicateFn(clientRect)) {
- return true;
- }
- result.push(clientRect);
- }
- };
- targetClientRect = $_n452lmjnlpawsj.last(caretPosition.getClientRects());
- if (!targetClientRect) {
- return result;
- }
- node = caretPosition.getNode();
- add(node);
- findUntil(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, targetClientRect;
- var getClientRect = function (caretPosition) {
- if (direction === 1) {
- return $_n452lmjnlpawsj.last(caretPosition.getClientRects());
- }
- return $_n452lmjnlpawsj.last(caretPosition.getClientRects());
- };
- if (direction === 1) {
- walkFn = caretWalker.next;
- isBelowFn = isBelow;
- isAboveFn = isAbove;
- caretPosition = CaretPosition$1.after(node);
- } else {
- walkFn = caretWalker.prev;
- isBelowFn = isAbove;
- isAboveFn = isBelow;
- caretPosition = CaretPosition$1.before(node);
- }
- targetClientRect = getClientRect(caretPosition);
- do {
- if (!caretPosition.isVisible()) {
- continue;
- }
- clientRect = getClientRect(caretPosition);
- if (isAboveFn(clientRect, targetClientRect)) {
- continue;
- }
- if (result.length > 0 && isBelowFn(clientRect, $_n452lmjnlpawsj.last(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 = $_fy28ei1rjnlpax2o.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 isInside = function (clientX, clientRect) {
- return clientX >= clientRect.left && clientX <= clientRect.right;
- };
- var findClosestClientRect = function (clientRects, clientX) {
- return $_n452lmjnlpawsj.reduce(clientRects, function (oldClientRect, clientRect) {
- var oldDistance, newDistance;
- oldDistance = Math.min(distanceToRectLeft(oldClientRect, clientX), distanceToRectRight(oldClientRect, clientX));
- newDistance = Math.min(distanceToRectLeft(clientRect, clientX), distanceToRectRight(clientRect, clientX));
- if (isInside(clientX, clientRect)) {
- return clientRect;
- }
- if (isInside(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, node) {
- while (node = findNode$1(node, direction, isEditableCaretCandidate, root)) {
- if (predicateFn(node)) {
- return;
- }
- }
- };
- var findLineNodeRects = function (root, targetNodeRect) {
- var clientRects = [];
- var collect = function (checkPosFn, node) {
- var lineRects;
- lineRects = $_n452lmjnlpawsj.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);
- walkUntil$1(VDirection.Down, root, curry(collect, isBelow), targetNodeRect.node);
- return clientRects;
- };
- var getFakeCaretTargets = function (root) {
- return $_n452lmjnlpawsj.filter($_n452lmjnlpawsj.toArray(root.getElementsByTagName('*')), isFakeCaretTarget);
- };
- var caretInfo = function (clientRect, clientX) {
- return {
- node: clientRect.node,
- before: distanceToRectLeft(clientRect, clientX) < distanceToRectRight(clientRect, clientX)
- };
- };
- var closestCaret = function (root, clientX, clientY) {
- var closestNodeRect;
- var contentEditableFalseNodeRects = getClientRects(getFakeCaretTargets(root));
- var targetNodeRects = $_n452lmjnlpawsj.filter(contentEditableFalseNodeRects, function (rect) {
- return clientY >= rect.top && clientY <= rect.bottom;
- });
- closestNodeRect = findClosestClientRect(targetNodeRects, clientX);
- if (closestNodeRect) {
- closestNodeRect = findClosestClientRect(findLineNodeRects(root, closestNodeRect), clientX);
- if (closestNodeRect && isFakeCaretTarget(closestNodeRect.node)) {
- return caretInfo(closestNodeRect, clientX);
- }
- }
- return null;
- };
-
- var isXYWithinRange = function (clientX, clientY, range$$1) {
- if (range$$1.collapsed) {
- return false;
- }
- return foldl(range$$1.getClientRects(), function (state, rect) {
- return state || containsXY(rect, clientX, clientY);
- }, false);
- };
- var $_5xpdav5wjnlpaxyf = { isXYWithinRange: isXYWithinRange };
-
- var setup$3 = function (editor) {
- var renderFocusCaret = first$1(function () {
- if (!editor.removed) {
- var rng = editor.selection.getRng();
- if (rng.collapsed) {
- var caretRange = renderRangeCaret(editor, editor.selection.getRng(), false);
- editor.selection.setRng(caretRange);
- }
- }
- }, 0);
- editor.on('focus', function () {
- renderFocusCaret.throttle();
- });
- editor.on('blur', function () {
- renderFocusCaret.cancel();
- });
- };
- var $_gfh1f95xjnlpaxyi = { setup: setup$3 };
-
- var $_1qv0695yjnlpaxyk = {
- BACKSPACE: 8,
- DELETE: 46,
- DOWN: 40,
- ENTER: 13,
- LEFT: 37,
- RIGHT: 39,
- SPACEBAR: 32,
- TAB: 9,
- UP: 38,
- modifierPressed: function (e) {
- return e.shiftKey || e.ctrlKey || e.altKey || this.metaKeyPressed(e);
- },
- metaKeyPressed: function (e) {
- return $_cseqobajnlpawll.mac ? e.metaKey : e.ctrlKey && !e.altKey;
- }
- };
-
- var isContentEditableTrue$5 = $_fy28ei1rjnlpax2o.isContentEditableTrue;
- var isContentEditableFalse$9 = $_fy28ei1rjnlpax2o.isContentEditableFalse;
- var isAfterContentEditableFalse$1 = isAfterContentEditableFalse;
- var isBeforeContentEditableFalse$1 = isBeforeContentEditableFalse;
- var getContentEditableRoot$1 = function (editor, node) {
- var root = editor.getBody();
- while (node && node !== root) {
- if (isContentEditableTrue$5(node) || isContentEditableFalse$9(node)) {
- return node;
- }
- node = node.parentNode;
- }
- return null;
- };
- var SelectionOverrides = function (editor) {
- var isBlock = function (node) {
- return editor.dom.isBlock(node);
- };
- var rootNode = editor.getBody();
- var fakeCaret = FakeCaret(editor.getBody(), isBlock, function () {
- return $_8odu5n4yjnlpaxsg.hasFocus(editor);
- });
- var realSelectionId = 'sel-' + editor.dom.uniqueId();
- var selectedContentEditableNode;
- var isFakeSelectionElement = function (elm) {
- return editor.dom.hasClass(elm, 'mce-offscreen-selection');
- };
- var getRealSelectionElement = function () {
- var container = editor.dom.get(realSelectionId);
- return container ? container.getElementsByTagName('*')[0] : container;
- };
- var setRange = function (range$$1) {
- if (range$$1) {
- editor.selection.setRng(range$$1);
- }
- };
- var getRange = function () {
- return editor.selection.getRng();
- };
- var showCaret$$1 = function (direction, node, before, scrollIntoView) {
- if (scrollIntoView === void 0) {
- scrollIntoView = true;
- }
- var e;
- e = editor.fire('ShowCaret', {
- target: node,
- direction: direction,
- before: before
- });
- if (e.isDefaultPrevented()) {
- return null;
- }
- if (scrollIntoView) {
- editor.selection.scrollIntoView(node, direction === -1);
- }
- return fakeCaret.show(before, node);
- };
- var getNormalizedRangeEndPoint$$1 = function (direction, range$$1) {
- range$$1 = normalizeRange(direction, rootNode, range$$1);
- if (direction === -1) {
- return CaretPosition$1.fromRangeStart(range$$1);
- }
- return CaretPosition$1.fromRangeEnd(range$$1);
- };
- var showBlockCaretContainer = function (blockCaretContainer) {
- if (blockCaretContainer.hasAttribute('data-mce-caret')) {
- showCaretContainerBlock(blockCaretContainer);
- setRange(getRange());
- editor.selection.scrollIntoView(blockCaretContainer[0]);
- }
- };
- var registerEvents = function () {
- editor.on('mouseup', function (e) {
- var range$$1 = getRange();
- if (range$$1.collapsed && $_wem7o53jnlpaxtk.isXYInContentArea(editor, e.clientX, e.clientY)) {
- setRange(renderCaretAtRange(editor, range$$1, false));
- }
- });
- editor.on('click', function (e) {
- var contentEditableRoot;
- contentEditableRoot = getContentEditableRoot$1(editor, e.target);
- if (contentEditableRoot) {
- if (isContentEditableFalse$9(contentEditableRoot)) {
- e.preventDefault();
- editor.focus();
- }
- if (isContentEditableTrue$5(contentEditableRoot)) {
- if (editor.dom.isChildOf(contentEditableRoot, editor.selection.getNode())) {
- removeContentEditableSelection();
- }
- }
- }
- });
- editor.on('blur NewBlock', function () {
- removeContentEditableSelection();
- });
- editor.on('ResizeWindow FullscreenStateChanged', function () {
- return fakeCaret.reposition();
- });
- var handleTouchSelect = function (editor) {
- var moved = false;
- editor.on('touchstart', function () {
- moved = false;
- });
- editor.on('touchmove', function () {
- moved = true;
- });
- editor.on('touchend', function (e) {
- var contentEditableRoot = getContentEditableRoot$1(editor, e.target);
- if (isContentEditableFalse$9(contentEditableRoot)) {
- if (!moved) {
- e.preventDefault();
- setContentEditableSelection(selectNode(editor, contentEditableRoot));
- }
- }
- });
- };
- var hasNormalCaretPosition = function (elm) {
- var caretWalker = CaretWalker(elm);
- if (!elm.firstChild) {
- return false;
- }
- var startPos = CaretPosition$1.before(elm.firstChild);
- var newPos = caretWalker.next(startPos);
- return newPos && !isBeforeContentEditableFalse$1(newPos) && !isAfterContentEditableFalse$1(newPos);
- };
- var isInSameBlock$$1 = function (node1, node2) {
- var block1 = editor.dom.getParent(node1, editor.dom.isBlock);
- var block2 = editor.dom.getParent(node2, editor.dom.isBlock);
- return block1 === block2;
- };
- var hasBetterMouseTarget = function (targetNode, caretNode) {
- var targetBlock = editor.dom.getParent(targetNode, editor.dom.isBlock);
- var caretBlock = editor.dom.getParent(caretNode, editor.dom.isBlock);
- if (targetBlock && editor.dom.isChildOf(targetBlock, caretBlock) && isContentEditableFalse$9(getContentEditableRoot$1(editor, targetBlock)) === false) {
- return true;
- }
- return targetBlock && !isInSameBlock$$1(targetBlock, caretBlock) && hasNormalCaretPosition(targetBlock);
- };
- handleTouchSelect(editor);
- editor.on('mousedown', function (e) {
- var contentEditableRoot;
- var targetElm = e.target;
- if (targetElm !== rootNode && targetElm.nodeName !== 'HTML' && !editor.dom.isChildOf(targetElm, rootNode)) {
- return;
- }
- if ($_wem7o53jnlpaxtk.isXYInContentArea(editor, e.clientX, e.clientY) === false) {
- return;
- }
- contentEditableRoot = getContentEditableRoot$1(editor, targetElm);
- if (contentEditableRoot) {
- if (isContentEditableFalse$9(contentEditableRoot)) {
- e.preventDefault();
- setContentEditableSelection(selectNode(editor, contentEditableRoot));
- } else {
- removeContentEditableSelection();
- if (!(isContentEditableTrue$5(contentEditableRoot) && e.shiftKey) && !$_5xpdav5wjnlpaxyf.isXYWithinRange(e.clientX, e.clientY, editor.selection.getRng())) {
- hideFakeCaret();
- editor.selection.placeCaretAt(e.clientX, e.clientY);
- }
- }
- } else if (isFakeCaretTarget(targetElm) === false) {
- removeContentEditableSelection();
- hideFakeCaret();
- var caretInfo = closestCaret(rootNode, e.clientX, e.clientY);
- if (caretInfo) {
- if (!hasBetterMouseTarget(e.target, caretInfo.node)) {
- e.preventDefault();
- var range$$1 = showCaret$$1(1, caretInfo.node, caretInfo.before, false);
- editor.getBody().focus();
- setRange(range$$1);
- }
- }
- }
- });
- editor.on('keypress', function (e) {
- if ($_1qv0695yjnlpaxyk.modifierPressed(e)) {
- return;
- }
- switch (e.keyCode) {
- default:
- if (isContentEditableFalse$9(editor.selection.getNode())) {
- e.preventDefault();
- }
- break;
- }
- });
- editor.on('getSelectionRange', function (e) {
- var rng = e.range;
- if (selectedContentEditableNode) {
- if (!selectedContentEditableNode.parentNode) {
- selectedContentEditableNode = null;
- return;
- }
- rng = rng.cloneRange();
- rng.selectNode(selectedContentEditableNode);
- e.range = rng;
- }
- });
- editor.on('setSelectionRange', function (e) {
- var rng;
- rng = setContentEditableSelection(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;
- if (!isRangeInCaretContainer(rng) && !isPasteBin(rng.startContainer.parentNode)) {
- hideFakeCaret();
- }
- if (!isFakeSelectionElement(rng.startContainer.parentNode)) {
- removeContentEditableSelection();
- }
- });
- editor.on('copy', function (e) {
- var clipboardData = e.clipboardData;
- if (!e.isDefaultPrevented() && e.clipboardData && !$_cseqobajnlpawll.ie) {
- var realSelectionElement = getRealSelectionElement();
- if (realSelectionElement) {
- e.preventDefault();
- clipboardData.clearData();
- clipboardData.setData('text/html', realSelectionElement.outerHTML);
- clipboardData.setData('text/plain', realSelectionElement.outerText);
- }
- }
- });
- $_5gate55rjnlpaxxq.init(editor);
- $_gfh1f95xjnlpaxyi.setup(editor);
- };
- var addCss = function () {
- var styles = editor.contentStyles, rootClass = '.mce-content-body';
- styles.push(fakeCaret.getCss());
- styles.push(rootClass + ' .mce-offscreen-selection {' + 'position: absolute;' + 'left: -9999999999px;' + 'max-width: 1000000px;' + '}' + rootClass + ' *[contentEditable=false] {' + 'cursor: default;' + '}' + rootClass + ' *[contentEditable=true] {' + 'cursor: text;' + '}');
- };
- var isWithinCaretContainer = function (node) {
- return isCaretContainer(node) || startsWithCaretContainer(node) || endsWithCaretContainer(node);
- };
- var isRangeInCaretContainer = function (rng) {
- return isWithinCaretContainer(rng.startContainer) || isWithinCaretContainer(rng.endContainer);
- };
- var setContentEditableSelection = function (range$$1, forward) {
- var node;
- var $ = editor.$;
- var dom = editor.dom;
- var $realSelectionContainer, sel, startContainer, startOffset, endOffset, e, caretPosition, targetClone, origTargetClone;
- if (!range$$1) {
- return null;
- }
- if (range$$1.collapsed) {
- if (!isRangeInCaretContainer(range$$1)) {
- if (forward === false) {
- caretPosition = getNormalizedRangeEndPoint$$1(-1, range$$1);
- if (isFakeCaretTarget(caretPosition.getNode(true))) {
- return showCaret$$1(-1, caretPosition.getNode(true), false, false);
- }
- if (isFakeCaretTarget(caretPosition.getNode())) {
- return showCaret$$1(-1, caretPosition.getNode(), !caretPosition.isAtEnd(), false);
- }
- } else {
- caretPosition = getNormalizedRangeEndPoint$$1(1, range$$1);
- if (isFakeCaretTarget(caretPosition.getNode())) {
- return showCaret$$1(1, caretPosition.getNode(), !caretPosition.isAtEnd(), false);
- }
- if (isFakeCaretTarget(caretPosition.getNode(true))) {
- return showCaret$$1(1, caretPosition.getNode(true), false, false);
- }
- }
- }
- return null;
- }
- startContainer = range$$1.startContainer;
- startOffset = range$$1.startOffset;
- endOffset = range$$1.endOffset;
- if (startContainer.nodeType === 3 && startOffset === 0 && isContentEditableFalse$9(startContainer.parentNode)) {
- startContainer = startContainer.parentNode;
- startOffset = dom.nodeIndex(startContainer);
- startContainer = startContainer.parentNode;
- }
- if (startContainer.nodeType !== 1) {
- return null;
- }
- if (endOffset === startOffset + 1) {
- node = startContainer.childNodes[startOffset];
- }
- if (!isContentEditableFalse$9(node)) {
- return null;
- }
- targetClone = origTargetClone = node.cloneNode(true);
- e = editor.fire('ObjectSelected', {
- target: node,
- targetClone: targetClone
- });
- if (e.isDefaultPrevented()) {
- return null;
- }
- $realSelectionContainer = $_2kbu29jnlpax6t.descendant(Element$$1.fromDom(editor.getBody()), '#' + realSelectionId).fold(function () {
- return $([]);
- }, function (elm) {
- return $([elm.dom()]);
- });
- targetClone = e.targetClone;
- if ($realSelectionContainer.length === 0) {
- $realSelectionContainer = $('').attr('id', realSelectionId);
- $realSelectionContainer.appendTo(editor.getBody());
- }
- range$$1 = editor.dom.createRng();
- if (targetClone === origTargetClone && $_cseqobajnlpawll.ie) {
- $realSelectionContainer.empty().append('\xA0
').append(targetClone);
- range$$1.setStartAfter($realSelectionContainer[0].firstChild.firstChild);
- range$$1.setEndAfter(targetClone);
- } else {
- $realSelectionContainer.empty().append('\xA0').append(targetClone).append('\xA0');
- range$$1.setStart($realSelectionContainer[0].firstChild, 1);
- range$$1.setEnd($realSelectionContainer[0].lastChild, 0);
- }
- $realSelectionContainer.css({ top: dom.getPos(node, editor.getBody()).y });
- $realSelectionContainer[0].focus();
- sel = editor.selection.getSel();
- sel.removeAllRanges();
- sel.addRange(range$$1);
- each($_cmitir27jnlpax6e.descendants(Element$$1.fromDom(editor.getBody()), '*[data-mce-selected]'), function (elm) {
- $_521j8z15jnlpawz7.remove(elm, 'data-mce-selected');
- });
- node.setAttribute('data-mce-selected', '1');
- selectedContentEditableNode = node;
- hideFakeCaret();
- return range$$1;
- };
- var removeContentEditableSelection = function () {
- if (selectedContentEditableNode) {
- selectedContentEditableNode.removeAttribute('data-mce-selected');
- $_2kbu29jnlpax6t.descendant(Element$$1.fromDom(editor.getBody()), '#' + realSelectionId).each($_azq8zm1wjnlpax4n.remove);
- selectedContentEditableNode = null;
- }
- $_2kbu29jnlpax6t.descendant(Element$$1.fromDom(editor.getBody()), '#' + realSelectionId).each($_azq8zm1wjnlpax4n.remove);
- selectedContentEditableNode = null;
- };
- var destroy = function () {
- fakeCaret.destroy();
- selectedContentEditableNode = null;
- };
- var hideFakeCaret = function () {
- fakeCaret.hide();
- };
- if ($_cseqobajnlpawll.ceFalse) {
- registerEvents();
- addCss();
- }
- return {
- showCaret: showCaret$$1,
- showBlockCaretContainer: showBlockCaretContainer,
- hideFakeCaret: hideFakeCaret,
- destroy: destroy
- };
- };
-
- var isValidPrefixAttrName = function (name) {
- return name.indexOf('data-') === 0 || name.indexOf('aria-') === 0;
- };
- var trimComments = function (text) {
- return text.replace(//g, '');
- };
- var isInvalidUri = function (settings, uri) {
- if (settings.allow_html_data_urls) {
- return false;
- } else if (/^data:image\//i.test(uri)) {
- return settings.allow_svg_data_urls === false && /^data:image\/svg\+xml/i.test(uri);
- } else {
- return /^data:/i.test(uri);
- }
- };
- var findEndTagIndex = function (schema, html, startIndex) {
- var count = 1, index, matches, tokenRegExp, shortEndedElements;
- shortEndedElements = schema.getShortEndedElements();
- 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;
- };
- function SaxParser(settings, schema) {
- if (schema === void 0) {
- schema = Schema();
- }
- var noop = function () {
- };
- 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 parse = function (html) {
- var matches, index = 0, value, endRegExp;
- var stack = [];
- var attrList, i, textData, name;
- var isInternalElement, removeInternalElements, shortEndedElements, fillAttrsMap, isShortEnded;
- var validate, elementRule, isValidElement, attr, attribsValue, validAttributesMap, validAttributePatterns;
- var attributesRequired, attributesDefault, attributesForced, processHtml;
- var anyAttributesRequired, selfClosing, tokenRegExp, attrRegExp, specialElements, attrValue, idCount = 0;
- var decode = $_bea7j51sjnlpax2u.decode;
- var fixSelfClosing;
- var filteredUrlAttrs = $_1q1txeljnlpawsa.makeMap('src,href,data,background,formaction,poster,xlink:href');
- var scriptUriRegExp = /((java|vb)script|mhtml):/i;
- 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 parseAttribute = function (match, name, value, val2, val3) {
- var attrRule, i;
- var trimRegExp = /[\s\u0000-\u001F]+/g;
- name = name.toLowerCase();
- value = 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)) {
- return;
- }
- }
- if (isInternalElement && (name in filteredUrlAttrs || name.indexOf('on') === 0)) {
- return;
- }
- attrList.map[name] = value;
- attrList.push({
- name: name,
- value: value
- });
- };
- tokenRegExp = new RegExp('<(?:' + '(?:!--([\\w\\W]*?)-->)|' + '(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|' + '(?:!DOCTYPE([\\w\\W]*?)>)|' + '(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|' + '(?:\\/([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)>)|' + '(?:([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)((?:\\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\\/|\\s+)>)' + ')', 'g');
- attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g;
- shortEndedElements = schema.getShortEndedElements();
- selfClosing = settings.self_closing_elements || schema.getSelfClosingElements();
- fillAttrsMap = schema.getBoolAttrs();
- validate = settings.validate;
- removeInternalElements = settings.remove_internals;
- fixSelfClosing = settings.fix_self_closing;
- specialElements = schema.getSpecialElements();
- processHtml = html + '>';
- while (matches = tokenRegExp.exec(processHtml)) {
- if (index < matches.index) {
- text(decode(html.substr(index, matches.index - index)));
- }
- if (value = matches[6]) {
- value = value.toLowerCase();
- if (value.charAt(0) === ':') {
- value = value.substr(1);
- }
- processEndTag(value);
- } else if (value = matches[7]) {
- if (matches.index + matches[0].length > html.length) {
- text(decode(html.substr(matches.index)));
- index = matches.index + matches[0].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);
- }
- if (!validate || (elementRule = schema.getElementRule(value))) {
- isValidElement = true;
- if (validate) {
- validAttributesMap = elementRule.attributes;
- validAttributePatterns = elementRule.attributePatterns;
- }
- if (attribsValue = matches[8]) {
- isInternalElement = attribsValue.indexOf('data-mce-type') !== -1;
- if (isInternalElement && removeInternalElements) {
- isValidElement = false;
- }
- attrList = [];
- attrList.map = {};
- attribsValue.replace(attrRegExp, parseAttribute);
- } 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 + matches[0].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) {
- text(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]) {
- if (value.charAt(0) === '>') {
- value = ' ' + value;
- }
- if (!settings.allow_conditional_comments && value.substr(0, 3).toLowerCase() === '[if') {
- value = ' ' + value;
- }
- comment(value);
- } else if (value = matches[2]) {
- cdata(trimComments(value));
- } else if (value = matches[3]) {
- doctype(value);
- } else if (value = matches[4]) {
- pi(value, matches[5]);
- }
- index = matches.index + matches[0].length;
- }
- if (index < html.length) {
- text(decode(html.substr(index)));
- }
- for (i = stack.length - 1; i >= 0; i--) {
- value = stack[i];
- if (value.valid) {
- end(value.name);
- }
- }
- };
- return { parse: parse };
- }
- (function (SaxParser) {
- SaxParser.findEndTag = findEndTagIndex;
- }(SaxParser || (SaxParser = {})));
- var SaxParser$1 = SaxParser;
-
- 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, shortEndedElements;
- var schema = serializer.schema;
- content = trimHtml(serializer.getTempAttrs(), content);
- shortEndedElements = schema.getShortEndedElements();
- while (matches = bogusAllRegExp.exec(content)) {
- index = bogusAllRegExp.lastIndex;
- matchLength = matches[0].length;
- if (shortEndedElements[matches[1]]) {
- endTagIndex = index;
- } else {
- endTagIndex = SaxParser$1.findEndTag(schema, content, index);
- }
- content = content.substring(0, index - matchLength) + content.substring(endTagIndex);
- bogusAllRegExp.lastIndex = index - matchLength;
- }
- return $_90hfb72rjnlpaxae.trim(content);
- };
- var trimExternal = trimInternal;
- var $_9cq8vj61jnlpaxzc = {
- trimExternal: trimExternal,
- trimInternal: trimInternal
- };
-
- var KEEP = 0;
- var INSERT = 1;
- var 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 $_27o9im64jnlpaxzv = {
- KEEP: KEEP,
- DELETE: DELETE,
- INSERT: INSERT,
- diff: diff
- };
-
- var getOuterHtml = function (elm) {
- if ($_fy28ei1rjnlpax2o.isElement(elm)) {
- return elm.outerHTML;
- } else if ($_fy28ei1rjnlpax2o.isText(elm)) {
- return $_bea7j51sjnlpax2u.encodeRaw(elm.data, false);
- } else if ($_fy28ei1rjnlpax2o.isComment(elm)) {
- return '';
- }
- return '';
- };
- var createFragment$1 = function (html) {
- var frag, node, container;
- container = document.createElement('div');
- 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;
- $_n452lmjnlpawsj.each(diff, function (action) {
- if (action[0] === $_27o9im64jnlpaxzv.KEEP) {
- index++;
- } else if (action[0] === $_27o9im64jnlpaxzv.INSERT) {
- insertAt(elm, action[1], index);
- index++;
- } else if (action[0] === $_27o9im64jnlpaxzv.DELETE) {
- removeAt(elm, index);
- }
- });
- };
- var read$3 = function (elm) {
- return $_n452lmjnlpawsj.filter($_n452lmjnlpawsj.map(elm.childNodes, getOuterHtml), function (item) {
- return item.length > 0;
- });
- };
- var write = function (fragments, elm) {
- var currentFragments = $_n452lmjnlpawsj.map(elm.childNodes, getOuterHtml);
- applyDiff($_27o9im64jnlpaxzv.diff(currentFragments, fragments), elm);
- return elm;
- };
- var $_12gl6x63jnlpaxzs = {
- read: read$3,
- write: write
- };
-
- var undoLevelDocument = Cell(Option.none());
- var lazyTempDocument = function () {
- return undoLevelDocument.get().getOrThunk(function () {
- var doc = document.implementation.createHTMLDocument('undo');
- undoLevelDocument.set(Option.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, content, trimmedFragments;
- fragments = $_12gl6x63jnlpaxzs.read(editor.getBody());
- trimmedFragments = bind(fragments, function (html) {
- var trimmed = $_9cq8vj61jnlpaxzc.trimInternal(editor.serializer, html);
- return trimmed.length > 0 ? [trimmed] : [];
- });
- content = trimmedFragments.join('');
- return hasIframes(content) ? createFragmentedLevel(trimmedFragments) : createCompleteLevel(content);
- };
- var applyToEditor = function (editor, level, before) {
- if (level.type === 'fragmented') {
- $_12gl6x63jnlpaxzs.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 = Element$$1.fromTag('body', lazyTempDocument());
- $_am4twv2jjnlpax8k.set(elm, getLevelContent(level));
- each($_cmitir27jnlpax6e.descendants(elm, '*[data-mce-bogus]'), $_azq8zm1wjnlpax4n.unwrap);
- return $_am4twv2jjnlpax8k.get(elm);
- };
- var hasEqualContent = function (level1, level2) {
- return getLevelContent(level1) === getLevelContent(level2);
- };
- var hasEqualCleanedContent = function (level1, level2) {
- return getCleanLevelContent(level1) === getCleanLevelContent(level2);
- };
- var isEq$3 = function (level1, level2) {
- if (!level1 || !level2) {
- return false;
- } else if (hasEqualContent(level1, level2)) {
- return true;
- } else {
- return hasEqualCleanedContent(level1, level2);
- }
- };
- var $_4dwaci60jnlpaxyt = {
- createFragmentedLevel: createFragmentedLevel,
- createCompleteLevel: createCompleteLevel,
- createFromEditor: createFromEditor,
- applyToEditor: applyToEditor,
- isEq: isEq$3
- };
-
- function UndoManager (editor) {
- var self = this, index = 0, data = [], beforeBookmark, isFirstTypedCharacter, locks = 0;
- var isUnlocked = function () {
- return locks === 0;
- };
- var setTyping = function (typing) {
- if (isUnlocked()) {
- self.typing = typing;
- }
- };
- var setDirty = function (state) {
- editor.setDirty(state);
- };
- var addNonTypingUndoLevel = function (e) {
- setTyping(false);
- self.add({}, e);
- };
- var endTyping = function () {
- if (self.typing) {
- setTyping(false);
- self.add();
- }
- };
- editor.on('init', function () {
- self.add();
- });
- editor.on('BeforeExecCommand', function (e) {
- var cmd = e.command;
- if (cmd !== 'Undo' && cmd !== 'Redo' && cmd !== 'mceRepaint') {
- endTyping();
- self.beforeChange();
- }
- });
- editor.on('ExecCommand', function (e) {
- var cmd = e.command;
- if (cmd !== 'Undo' && cmd !== 'Redo' && cmd !== 'mceRepaint') {
- addNonTypingUndoLevel(e);
- }
- });
- editor.on('ObjectResizeStart Cut', function () {
- self.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 && self.typing && $_4dwaci60jnlpaxyt.isEq($_4dwaci60jnlpaxyt.createFromEditor(editor), data[0]) === false) {
- if (editor.isDirty() === false) {
- setDirty(true);
- editor.fire('change', {
- level: data[0],
- lastLevel: null
- });
- }
- editor.fire('TypingUndo');
- isFirstTypedCharacter = 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 (self.typing) {
- addNonTypingUndoLevel(e);
- }
- return;
- }
- var modKey = e.ctrlKey && !e.altKey || e.metaKey;
- if ((keyCode < 16 || keyCode > 20) && keyCode !== 224 && keyCode !== 91 && !self.typing && !modKey) {
- self.beforeChange();
- setTyping(true);
- self.add({}, e);
- isFirstTypedCharacter = true;
- }
- });
- editor.on('MouseDown', function (e) {
- if (self.typing) {
- addNonTypingUndoLevel(e);
- }
- });
- var isInsertReplacementText = function (event) {
- return event.inputType === 'insertReplacementText';
- };
- var isInsertTextDataNull = function (event) {
- return event.inputType === 'insertText' && event.data === null;
- };
- editor.on('input', function (e) {
- if (e.inputType && (isInsertReplacementText(e) || isInsertTextDataNull(e))) {
- addNonTypingUndoLevel(e);
- }
- });
- editor.addShortcut('meta+z', '', 'Undo');
- editor.addShortcut('meta+y,meta+shift+z', '', 'Redo');
- editor.on('AddUndo Undo Redo ClearUndos', function (e) {
- if (!e.isDefaultPrevented()) {
- editor.nodeChanged();
- }
- });
- self = {
- data: data,
- typing: false,
- beforeChange: function () {
- if (isUnlocked()) {
- beforeBookmark = $_5l0mu32ljnlpax8x.getUndoBookmark(editor.selection);
- }
- },
- add: function (level, event) {
- var i;
- var settings = editor.settings;
- var lastLevel, currentLevel;
- currentLevel = $_4dwaci60jnlpaxyt.createFromEditor(editor);
- level = level || {};
- level = $_1q1txeljnlpawsa.extend(level, currentLevel);
- if (isUnlocked() === false || editor.removed) {
- return null;
- }
- lastLevel = data[index];
- if (editor.fire('BeforeAddUndo', {
- level: level,
- lastLevel: lastLevel,
- originalEvent: event
- }).isDefaultPrevented()) {
- return null;
- }
- if (lastLevel && $_4dwaci60jnlpaxyt.isEq(lastLevel, level)) {
- return null;
- }
- if (data[index]) {
- data[index].beforeBookmark = beforeBookmark;
- }
- if (settings.custom_undo_redo_levels) {
- if (data.length > settings.custom_undo_redo_levels) {
- for (i = 0; i < data.length - 1; i++) {
- data[i] = data[i + 1];
- }
- data.length--;
- index = data.length;
- }
- }
- level.bookmark = $_5l0mu32ljnlpax8x.getUndoBookmark(editor.selection);
- if (index < data.length - 1) {
- data.length = index + 1;
- }
- data.push(level);
- index = data.length - 1;
- var args = {
- level: level,
- lastLevel: lastLevel,
- originalEvent: event
- };
- editor.fire('AddUndo', args);
- if (index > 0) {
- setDirty(true);
- editor.fire('change', args);
- }
- return level;
- },
- undo: function () {
- var level;
- if (self.typing) {
- self.add();
- self.typing = false;
- setTyping(false);
- }
- if (index > 0) {
- level = data[--index];
- $_4dwaci60jnlpaxyt.applyToEditor(editor, level, true);
- setDirty(true);
- editor.fire('undo', { level: level });
- }
- return level;
- },
- redo: function () {
- var level;
- if (index < data.length - 1) {
- level = data[++index];
- $_4dwaci60jnlpaxyt.applyToEditor(editor, level, false);
- setDirty(true);
- editor.fire('redo', { level: level });
- }
- return level;
- },
- clear: function () {
- data = [];
- index = 0;
- self.typing = false;
- self.data = data;
- editor.fire('ClearUndos');
- },
- hasUndo: function () {
- return index > 0 || self.typing && data[0] && !$_4dwaci60jnlpaxyt.isEq($_4dwaci60jnlpaxyt.createFromEditor(editor), data[0]);
- },
- hasRedo: function () {
- return index < data.length - 1 && !self.typing;
- },
- transact: function (callback) {
- endTyping();
- self.beforeChange();
- self.ignore(callback);
- return self.add();
- },
- ignore: function (callback) {
- try {
- locks++;
- callback();
- } finally {
- locks--;
- }
- },
- extra: function (callback1, callback2) {
- var lastLevel, bookmark;
- if (self.transact(callback1)) {
- bookmark = data[index].bookmark;
- lastLevel = data[index - 1];
- $_4dwaci60jnlpaxyt.applyToEditor(editor, lastLevel, true);
- if (self.transact(callback2)) {
- data[index - 1].beforeBookmark = bookmark;
- }
- }
- }
- };
- return self;
- }
-
- var isEq$4 = $_dlfh233cjnlpaxes.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$4(node, format.inline)) {
- return true;
- }
- if (isEq$4(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 = $_dlfh233cjnlpaxes.getStyle(dom, node, key);
- }
- if (similar && !value && !format.exact) {
- return;
- }
- if ((!similar || format.exact) && !isEq$4(value, $_dlfh233cjnlpaxes.normalizeStyleValue(dom, $_dlfh233cjnlpaxes.replaceVars(items[key], vars), key))) {
- return;
- }
- }
- }
- } else {
- for (i = 0; i < items.length; i++) {
- if (itemName === 'attributes' ? dom.getAttrib(node, items[i]) : $_dlfh233cjnlpaxes.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, classes[x])) {
- return;
- }
- }
- }
- return format;
- }
- }
- }
- };
- var match = function (editor, name, vars, node) {
- var startNode;
- if (node) {
- return matchParents(editor, node, name, vars);
- }
- node = editor.selection.getNode();
- if (matchParents(editor, node, name, vars)) {
- return true;
- }
- startNode = editor.selection.getStart();
- if (startNode !== node) {
- if (matchParents(editor, startNode, name, vars)) {
- return true;
- }
- }
- return false;
- };
- var matchAll = function (editor, names, vars) {
- var startElement;
- var matchedFormatNames = [];
- var checkedMap = {};
- startElement = editor.selection.getStart();
- editor.dom.getParent(startElement, function (node) {
- var i, name;
- for (i = 0; i < names.length; i++) {
- name = names[i];
- if (!checkedMap[name] && matchNode(editor, node, name, vars)) {
- checkedMap[name] = true;
- matchedFormatNames.push(name);
- }
- }
- }, editor.dom.getRoot());
- return matchedFormatNames;
- };
- 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 = $_dlfh233cjnlpaxes.getParents(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 $_706y6v68jnlpay1a = {
- matchNode: matchNode,
- matchName: matchName,
- match: match,
- matchAll: matchAll,
- canApply: canApply,
- matchesUnInheritedFormatSelector: matchesUnInheritedFormatSelector
- };
-
- 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 && $_fy28ei1rjnlpax2o.isText(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 ($_fy28ei1rjnlpax2o.isText(startContainer) && startOffset > 0 && startOffset < startContainer.nodeValue.length) {
- startContainer = splitText(startContainer, startOffset);
- startOffset = 0;
- }
- if ($_fy28ei1rjnlpax2o.isText(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 $_fvyfxh69jnlpay1e = { split: split$1 };
-
- var ZWSP$1 = $_90hfb72rjnlpaxae.ZWSP;
- var 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) {
- var walker;
- if (node) {
- walker = new TreeWalker(node, node);
- for (node = walker.current(); node; node = walker.next()) {
- if (node.nodeType === 3) {
- return node;
- }
- }
- }
- return null;
- };
- var createCaretContainer = function (fill) {
- var caretContainer = Element$$1.fromTag('span');
- $_521j8z15jnlpawz7.setAll(caretContainer, {
- 'id': CARET_ID$1,
- 'data-mce-bogus': '1',
- 'data-mce-type': 'format-caret'
- });
- if (fill) {
- $_ag89ax1yjnlpax4x.append(caretContainer, Element$$1.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 (dom, selection, node, moveCaret) {
- var rng, block, textNode;
- rng = selection.getRng(true);
- block = dom.getParent(node, dom.isBlock);
- if (isCaretContainerEmpty(node)) {
- if (moveCaret !== false) {
- rng.setStartBefore(node);
- rng.setEndBefore(node);
- }
- dom.remove(node);
- } else {
- textNode = trimZwspFromCaretContainer(node);
- if (rng.startContainer === textNode && rng.startOffset > 0) {
- rng.setStart(textNode, rng.startOffset - 1);
- }
- if (rng.endContainer === textNode && rng.endOffset > 0) {
- rng.setEnd(textNode, rng.endOffset - 1);
- }
- dom.remove(node, true);
- }
- if (block && dom.isEmpty(block)) {
- $_azhpc63njnlpaxgw.fillWithPaddingBr(Element$$1.fromDom(block));
- }
- selection.setRng(rng);
- };
- var removeCaretContainer = function (body, dom, selection, node, moveCaret) {
- if (!node) {
- node = getParentCaretContainer(body, selection.getStart());
- if (!node) {
- while (node = dom.get(CARET_ID$1)) {
- removeCaretContainerNode(dom, selection, node, false);
- }
- }
- } else {
- removeCaretContainerNode(dom, selection, node, moveCaret);
- }
- };
- var insertCaretContainerNode = function (editor, caretContainer, formatNode) {
- var dom = editor.dom, block = dom.getParent(formatNode, $_dv6bef2njnlpax9l.curry($_dlfh233cjnlpaxes.isTextBlock, editor));
- if (block && dom.isEmpty(block)) {
- formatNode.parentNode.replaceChild(caretContainer, formatNode);
- } else {
- $_azhpc63njnlpaxgw.removeTrailingBr(Element$$1.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 applyCaretFormat = function (editor, name, vars) {
- var rng, caretContainer, textNode, offset, bookmark, container, text;
- var selection = editor.selection;
- rng = selection.getRng(true);
- offset = rng.startOffset;
- container = rng.startContainer;
- 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))) {
- bookmark = selection.getBookmark();
- rng.collapse(true);
- rng = $_3cscnj2wjnlpaxau.expandRng(editor, rng, editor.formatter.get(name));
- rng = $_fvyfxh69jnlpay1e.split(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;
- rng.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, selection = editor.selection;
- var container, offset, bookmark;
- var hasContentAfter, node, formatNode;
- var parents = [], rng = selection.getRng();
- var caretContainer;
- container = rng.startContainer;
- offset = rng.startOffset;
- node = container;
- if (container.nodeType === 3) {
- if (offset !== container.nodeValue.length) {
- hasContentAfter = true;
- }
- node = node.parentNode;
- }
- while (node) {
- if ($_706y6v68jnlpay1a.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) {
- bookmark = selection.getBookmark();
- rng.collapse(true);
- var expandedRng = $_3cscnj2wjnlpaxau.expandRng(editor, rng, editor.formatter.get(name), true);
- expandedRng = $_fvyfxh69jnlpay1e.split(expandedRng);
- editor.formatter.remove(name, vars, expandedRng);
- selection.moveToBookmark(bookmark);
- } else {
- caretContainer = getParentCaretContainer(editor.getBody(), formatNode);
- var newCaretContainer = createCaretContainer(false).dom();
- var caretNode = insertFormatNodesIntoCaretContainer(parents, newCaretContainer);
- if (caretContainer) {
- insertCaretContainerNode(editor, newCaretContainer, caretContainer);
- } else {
- insertCaretContainerNode(editor, newCaretContainer, formatNode);
- }
- removeCaretContainerNode(dom, selection, caretContainer, false);
- selection.setCursorLocation(caretNode, 1);
- if (dom.isEmpty(formatNode)) {
- dom.remove(formatNode);
- }
- }
- };
- var disableCaretContainer = function (body, dom, selection, keyCode) {
- removeCaretContainer(body, dom, selection, null, false);
- if (keyCode === 8 && selection.isCollapsed() && selection.getStart().innerHTML === ZWSP$1) {
- removeCaretContainer(body, dom, selection, getParentCaretContainer(body, selection.getStart()));
- }
- if (keyCode === 37 || keyCode === 39) {
- removeCaretContainer(body, dom, selection, getParentCaretContainer(body, selection.getStart()));
- }
- };
- var setup$4 = function (editor) {
- var dom = editor.dom, selection = editor.selection;
- var body = editor.getBody();
- editor.on('mouseup keydown', function (e) {
- disableCaretContainer(body, dom, selection, e.keyCode);
- });
- };
- var replaceWithCaretFormat = function (targetNode, formatNodes) {
- var caretContainer = createCaretContainer(false);
- var innerMost = insertFormatNodesIntoCaretContainer(formatNodes, caretContainer.dom());
- $_ag89ax1yjnlpax4x.before(Element$$1.fromDom(targetNode), caretContainer);
- $_azq8zm1wjnlpax4n.remove(Element$$1.fromDom(targetNode));
- return CaretPosition$1(innerMost, 0);
- };
- var isFormatElement = function (editor, element) {
- var inlineElements = editor.schema.getTextInlineElements();
- return inlineElements.hasOwnProperty($_7u5fzs11jnlpawv6.name(element)) && !isCaretNode(element.dom()) && !$_fy28ei1rjnlpax2o.isBogus(element.dom());
- };
-
- var postProcessHooks = {};
- var filter$2 = $_n452lmjnlpawsj.filter;
- var each$12 = $_n452lmjnlpawsj.each;
- var addPostProcessHook = function (name, hook) {
- var hooks = postProcessHooks[name];
- if (!hooks) {
- postProcessHooks[name] = hooks = [];
- }
- postProcessHooks[name].push(hook);
- };
- var postProcess = function (name, editor) {
- each$12(postProcessHooks[name], function (hook) {
- hook(editor);
- });
- };
- addPostProcessHook('pre', function (editor) {
- var rng = editor.selection.getRng();
- var isPre, blocks;
- var hasPreSibling = function (pre) {
- return isPre(pre.previousSibling) && $_n452lmjnlpawsj.indexOf(blocks, pre.previousSibling) !== -1;
- };
- var joinPre = function (pre1, pre2) {
- DomQuery(pre2).remove();
- DomQuery(pre1).append('
').append(pre2.childNodes);
- };
- isPre = $_fy28ei1rjnlpax2o.matchNodeNames('pre');
- if (!rng.collapsed) {
- blocks = editor.selection.getSelectedBlocks();
- each$12(filter$2(filter$2(blocks, isPre), hasPreSibling), function (pre) {
- joinPre(pre.previousSibling, pre);
- });
- }
- });
- var $_48059m6ajnlpay1h = { postProcess: postProcess };
-
- var MCE_ATTR_RE = /^(src|href|style)$/;
- var each$13 = $_1q1txeljnlpawsa.each;
- var isEq$5 = $_dlfh233cjnlpaxes.isEq;
- var isTableCell$4 = function (node) {
- return /^(TH|TD)$/.test(node.nodeName);
- };
- var getContainer = function (ed, rng, start) {
- var container, offset, lastIdx;
- container = rng[start ? 'startContainer' : 'endContainer'];
- offset = rng[start ? 'startOffset' : 'endOffset'];
- if ($_fy28ei1rjnlpax2o.isElement(container)) {
- lastIdx = container.childNodes.length - 1;
- if (!start && offset) {
- offset--;
- }
- container = container.childNodes[offset > lastIdx ? lastIdx : offset];
- }
- if ($_fy28ei1rjnlpax2o.isText(container) && start && offset >= container.nodeValue.length) {
- container = new TreeWalker(container, ed.getBody()).next() || container;
- }
- if ($_fy28ei1rjnlpax2o.isText(container) && !start && offset === 0) {
- container = new TreeWalker(container, ed.getBody()).prev() || container;
- }
- return container;
- };
- 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, startNode, name, next, attrs) {
- var direction = (next ? 'next' : 'previous') + 'Sibling';
- var wrapper = dom.create(name, attrs);
- startNode.parentNode.insertBefore(wrapper, startNode);
- var nodesToWrap = [startNode];
- var currNode = startNode;
- while (currNode = currNode[direction]) {
- nodesToWrap.push(currNode);
- }
- nodesToWrap.forEach(function (node) {
- return wrapper.appendChild(node);
- });
- return wrapper;
- };
- var matchName$1 = function (dom, node, format) {
- if (isEq$5(node, format.inline)) {
- return true;
- }
- if (isEq$5(node, format.block)) {
- return true;
- }
- if (format.selector) {
- return $_fy28ei1rjnlpax2o.isElement(node) && dom.is(node, format.selector);
- }
- };
- var isColorFormatAndAnchor = function (node, format) {
- return format.links && node.tagName === 'A';
- };
- var find$4 = function (dom, node, next, inc) {
- node = $_dlfh233cjnlpaxes.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 = ed.settings.forced_root_block;
- if (format.block) {
- if (!forcedRootBlock) {
- if (dom.isBlock(node) && !dom.isBlock(parentNode)) {
- if (!find$4(dom, node, false) && !find$4(dom, node.firstChild, true, 1)) {
- node.insertBefore(dom.create('br'), node.firstChild);
- }
- if (!find$4(dom, node, true) && !find$4(dom, node.lastChild, false, 1)) {
- node.appendChild(dom.create('br'));
- }
- }
- } else {
- if (parentNode === dom.getRoot()) {
- if (!format.list_block || !isEq$5(node, format.list_block)) {
- each$13($_1q1txeljnlpawsa.grep(node.childNodes), function (node) {
- if ($_dlfh233cjnlpaxes.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$5(format.inline, node)) {
- return;
- }
- dom.remove(node, 1);
- };
- var removeFormat = function (ed, format, vars, node, compareNode) {
- var i, attrs, stylesModified;
- var dom = ed.dom;
- if (!matchName$1(dom, node, format) && !isColorFormatAndAnchor(node, format)) {
- return false;
- }
- if (format.remove !== 'all') {
- each$13(format.styles, function (value, name) {
- value = $_dlfh233cjnlpaxes.normalizeStyleValue(dom, $_dlfh233cjnlpaxes.replaceVars(value, vars), name);
- if (typeof name === 'number') {
- name = value;
- compareNode = 0;
- }
- if (format.remove_similar || (!compareNode || isEq$5($_dlfh233cjnlpaxes.getStyle(dom, compareNode, name), value))) {
- dom.setStyle(node, name, '');
- }
- stylesModified = 1;
- });
- if (stylesModified && dom.getAttrib(node, 'style') === '') {
- node.removeAttribute('style');
- node.removeAttribute('data-mce-style');
- }
- each$13(format.attributes, function (value, name) {
- var valueOut;
- value = $_dlfh233cjnlpaxes.replaceVars(value, vars);
- if (typeof name === 'number') {
- name = value;
- compareNode = 0;
- }
- if (!compareNode || isEq$5(dom.getAttrib(compareNode, name), value)) {
- if (name === 'class') {
- value = dom.getAttrib(node, name);
- if (value) {
- valueOut = '';
- each$13(value.split(/\s+/), function (cls) {
- if (/mce\-\w+/.test(cls)) {
- valueOut += (valueOut ? ' ' : '') + cls;
- }
- });
- if (valueOut) {
- dom.setAttrib(node, name, valueOut);
- return;
- }
- }
- }
- if (name === 'class') {
- node.removeAttribute('className');
- }
- if (MCE_ATTR_RE.test(name)) {
- node.removeAttribute('data-mce-' + name);
- }
- node.removeAttribute(name);
- }
- });
- each$13(format.classes, function (value) {
- value = $_dlfh233cjnlpaxes.replaceVars(value, vars);
- if (!compareNode || dom.hasClass(compareNode, value)) {
- dom.removeClass(node, value);
- }
- });
- attrs = dom.getAttribs(node);
- for (i = 0; i < attrs.length; i++) {
- var attrName = attrs[i].nodeName;
- if (attrName.indexOf('_') !== 0 && attrName.indexOf('data-') !== 0) {
- return false;
- }
- }
- }
- if (format.remove !== 'none') {
- removeNode$1(ed, node, format);
- return true;
- }
- };
- var findFormatRoot = function (editor, container, name, vars, similar) {
- var formatRoot;
- each$13($_dlfh233cjnlpaxes.getParents(editor.dom, container.parentNode).reverse(), function (parent) {
- var format;
- if (!formatRoot && parent.id !== '_start' && parent.id !== '_end') {
- format = $_706y6v68jnlpay1a.matchNode(editor, parent, name, vars, similar);
- if (format && format.split !== false) {
- formatRoot = parent;
- }
- }
- });
- return formatRoot;
- };
- var wrapAndSplit = function (editor, formatList, formatRoot, container, target, split, format, vars) {
- var parent, clone, lastClone, firstClone, i, formatRootParent;
- var dom = editor.dom;
- if (formatRoot) {
- formatRootParent = formatRoot.parentNode;
- for (parent = container.parentNode; parent && parent !== formatRootParent; parent = parent.parentNode) {
- clone = dom.clone(parent, false);
- for (i = 0; i < formatList.length; i++) {
- if (removeFormat(editor, formatList[i], vars, clone, clone)) {
- clone = 0;
- 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);
- }
- }
- return container;
- };
- var remove$8 = function (ed, name, vars, node, similar) {
- var formatList = ed.formatter.get(name), format = formatList[0];
- var bookmark, rng, 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 process = function (node) {
- var children, i, l, lastContentEditable, hasContentEditableState;
- if ($_fy28ei1rjnlpax2o.isElement(node) && dom.getContentEditable(node)) {
- lastContentEditable = contentEditable;
- contentEditable = dom.getContentEditable(node) === 'true';
- hasContentEditableState = true;
- }
- children = $_1q1txeljnlpawsa.grep(node.childNodes);
- if (contentEditable && !hasContentEditableState) {
- for (i = 0, l = formatList.length; i < l; i++) {
- if (removeFormat(ed, formatList[i], vars, node, node)) {
- break;
- }
- }
- }
- if (format.deep) {
- if (children.length) {
- for (i = 0, l = children.length; i < l; 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 ($_43l8qj2xjnlpaxb1.isBookmarkNode(out)) {
- out = out[start ? 'firstChild' : 'lastChild'];
- }
- if ($_fy28ei1rjnlpax2o.isText(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 commonAncestorContainer = rng.commonAncestorContainer;
- rng = $_3cscnj2wjnlpaxau.expandRng(ed, rng, formatList, true);
- if (format.split) {
- rng = $_fvyfxh69jnlpay1e.split(rng);
- startContainer = getContainer(ed, rng, true);
- endContainer = getContainer(ed, rng);
- if (startContainer !== endContainer) {
- if (/^(TR|TH|TD)$/.test(startContainer.nodeName) && startContainer.firstChild) {
- if (startContainer.nodeName === 'TR') {
- startContainer = startContainer.firstChild.firstChild || startContainer;
- } else {
- startContainer = startContainer.firstChild || startContainer;
- }
- }
- if (commonAncestorContainer && /^T(HEAD|BODY|FOOT|R)$/.test(commonAncestorContainer.nodeName) && isTableCell$4(endContainer) && endContainer.firstChild) {
- endContainer = endContainer.firstChild || endContainer;
- }
- if (dom.isChildOf(startContainer, endContainer) && startContainer !== endContainer && !dom.isBlock(endContainer) && !isTableCell$4(startContainer) && !isTableCell$4(endContainer)) {
- var wrappedContent = wrapWithSiblings(dom, startContainer, 'span', true, {
- 'id': '_start',
- 'data-mce-type': 'bookmark'
- });
- splitToFormatRoot(wrappedContent);
- startContainer = unwrap(true);
- 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'
- });
- splitToFormatRoot(startContainer);
- splitToFormatRoot(endContainer);
- startContainer = unwrap(true);
- endContainer = unwrap();
- } else {
- startContainer = endContainer = splitToFormatRoot(startContainer);
- }
- rng.startContainer = startContainer.parentNode ? startContainer.parentNode : startContainer;
- rng.startOffset = dom.nodeIndex(startContainer);
- rng.endContainer = endContainer.parentNode ? endContainer.parentNode : endContainer;
- rng.endOffset = dom.nodeIndex(endContainer) + 1;
- }
- $_6wozuu3djnlpaxew.walk(dom, rng, function (nodes) {
- each$13(nodes, function (node) {
- process(node);
- if ($_fy28ei1rjnlpax2o.isElement(node) && ed.dom.getStyle(node, 'text-decoration') === 'underline' && node.parentNode && $_dlfh233cjnlpaxes.getTextDecoration(dom, node.parentNode) === 'underline') {
- removeFormat(ed, {
- deep: false,
- exact: true,
- inline: 'span',
- styles: { textDecoration: 'underline' }
- }, null, node);
- }
- });
- });
- };
- if (node) {
- if (node.nodeType) {
- 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, l = formatList.length; i < l; i++) {
- if (formatList[i].ceFalseOverride) {
- if (removeFormat(ed, formatList[i], vars, node, node)) {
- break;
- }
- }
- }
- return;
- }
- if (!selection.isCollapsed() || !format.inline || dom.select('td[data-mce-selected],th[data-mce-selected]').length) {
- bookmark = $_5l0mu32ljnlpax8x.getPersistentBookmark(ed.selection, true);
- removeRngStyle(selection.getRng());
- selection.moveToBookmark(bookmark);
- if (format.inline && $_706y6v68jnlpay1a.match(ed, name, vars, selection.getStart())) {
- $_dlfh233cjnlpaxes.moveStart(dom, selection, selection.getRng());
- }
- ed.nodeChanged();
- } else {
- removeCaretFormat(ed, name, vars, similar);
- }
- };
- var $_4dimpr6cjnlpay1t = {
- removeFormat: removeFormat,
- remove: remove$8
- };
-
- var each$14 = $_1q1txeljnlpawsa.each;
- var isElementNode = function (node) {
- return node && node.nodeType === 1 && !$_43l8qj2xjnlpaxb1.isBookmarkNode(node) && !isCaretNode(node) && !$_fy28ei1rjnlpax2o.isBogus(node);
- };
- var findElementSibling = function (node, siblingName) {
- var sibling;
- for (sibling = node; sibling; sibling = sibling[siblingName]) {
- if (sibling.nodeType === 3 && sibling.nodeValue.length !== 0) {
- return node;
- }
- if (sibling.nodeType === 1 && !$_43l8qj2xjnlpaxb1.isBookmarkNode(sibling)) {
- return sibling;
- }
- }
- return node;
- };
- var mergeSiblingsNodes = function (dom, prev, next) {
- var sibling, tmpSibling;
- var elementUtils = new 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);
- $_1q1txeljnlpawsa.each($_1q1txeljnlpawsa.grep(next.childNodes), function (node) {
- prev.appendChild(node);
- });
- return prev;
- }
- }
- return next;
- };
- var processChildElements = function (node, filter, process) {
- each$14(node.childNodes, function (node) {
- if (isElementNode(node)) {
- if (filter(node)) {
- process(node);
- }
- if (node.hasChildNodes()) {
- processChildElements(node, filter, process);
- }
- }
- });
- };
- var hasStyle = function (dom, name) {
- return curry(function (name, node) {
- return !!(node && $_dlfh233cjnlpaxes.getStyle(dom, node, name));
- }, name);
- };
- var applyStyle = function (dom, name, value) {
- return curry(function (name, value, node) {
- dom.setStyle(node, name, value);
- if (node.getAttribute('style') === '') {
- node.removeAttribute('style');
- }
- unwrapEmptySpan(dom, node);
- }, name, value);
- };
- var unwrapEmptySpan = function (dom, node) {
- if (node.nodeName === 'SPAN' && dom.getAttribs(node).length === 0) {
- dom.remove(node, true);
- }
- };
- var processUnderlineAndColor = function (dom, node) {
- var textDecoration;
- if (node.nodeType === 1 && node.parentNode && node.parentNode.nodeType === 1) {
- textDecoration = $_dlfh233cjnlpaxes.getTextDecoration(dom, node.parentNode);
- if (dom.getStyle(node, 'color') && textDecoration) {
- dom.setStyle(node, 'text-decoration', textDecoration);
- } else if (dom.getStyle(node, 'text-decoration') === textDecoration) {
- dom.setStyle(node, 'text-decoration', null);
- }
- }
- };
- var mergeUnderlineAndColor = function (dom, format, vars, node) {
- if (format.styles.color || format.styles.textDecoration) {
- $_1q1txeljnlpawsa.walk(node, curry(processUnderlineAndColor, dom), 'childNodes');
- processUnderlineAndColor(dom, node);
- }
- };
- var mergeBackgroundColorAndFontSize = function (dom, format, vars, node) {
- if (format.styles && format.styles.backgroundColor) {
- processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'backgroundColor', $_dlfh233cjnlpaxes.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 mergeSiblings = function (dom, format, vars, node) {
- if (node && format.merge_siblings !== false) {
- node = mergeSiblingsNodes(dom, $_dlfh233cjnlpaxes.getNonWhiteSpaceSibling(node), node);
- node = mergeSiblingsNodes(dom, node, $_dlfh233cjnlpaxes.getNonWhiteSpaceSibling(node, true));
- }
- };
- var clearChildStyles = function (dom, format, node) {
- if (format.clear_child_styles) {
- var selector = format.links ? '*:not(a)' : '*';
- each$14(dom.select(selector, node), function (node) {
- if (isElementNode(node)) {
- each$14(format.styles, function (value, name) {
- dom.setStyle(node, name, '');
- });
- }
- });
- }
- };
- var mergeWithChildren = function (editor, formatList, vars, node) {
- each$14(formatList, function (format) {
- each$14(editor.dom.select(format.inline, node), function (child) {
- if (!isElementNode(child)) {
- return;
- }
- $_4dimpr6cjnlpay1t.removeFormat(editor, format, vars, child, format.exact ? child : null);
- });
- clearChildStyles(editor.dom, format, node);
- });
- };
- var mergeWithParents = function (editor, format, name, vars, node) {
- if ($_706y6v68jnlpay1a.matchNode(editor, node.parentNode, name, vars)) {
- if ($_4dimpr6cjnlpay1t.removeFormat(editor, format, vars, node)) {
- return;
- }
- }
- if (format.merge_with_parents) {
- editor.dom.getParent(node.parentNode, function (parent) {
- if ($_706y6v68jnlpay1a.matchNode(editor, parent, name, vars)) {
- $_4dimpr6cjnlpay1t.removeFormat(editor, format, vars, node);
- return true;
- }
- });
- }
- };
- var $_4luhzy6bjnlpay1j = {
- mergeWithChildren: mergeWithChildren,
- mergeUnderlineAndColor: mergeUnderlineAndColor,
- mergeBackgroundColorAndFontSize: mergeBackgroundColorAndFontSize,
- mergeSubSup: mergeSubSup,
- mergeSiblings: mergeSiblings,
- mergeWithParents: mergeWithParents
- };
-
- var each$15 = $_1q1txeljnlpawsa.each;
- var isElementNode$1 = function (node) {
- return node && node.nodeType === 1 && !$_43l8qj2xjnlpaxb1.isBookmarkNode(node) && !isCaretNode(node) && !$_fy28ei1rjnlpax2o.isBogus(node);
- };
- var applyFormat = function (ed, name, vars, node) {
- var formatList = ed.formatter.get(name);
- var format = formatList[0];
- var bookmark, rng;
- var isCollapsed = !node && ed.selection.isCollapsed();
- var dom = ed.dom, selection = ed.selection;
- var setElementFormat = function (elm, fmt) {
- fmt = fmt || format;
- if (elm) {
- if (fmt.onformat) {
- fmt.onformat(elm, fmt, vars, node);
- }
- each$15(fmt.styles, function (value, name) {
- dom.setStyle(elm, name, $_dlfh233cjnlpaxes.replaceVars(value, vars));
- });
- if (fmt.styles) {
- var styleVal = dom.getAttrib(elm, 'style');
- if (styleVal) {
- elm.setAttribute('data-mce-style', styleVal);
- }
- }
- each$15(fmt.attributes, function (value, name) {
- dom.setAttrib(elm, name, $_dlfh233cjnlpaxes.replaceVars(value, vars));
- });
- each$15(fmt.classes, function (value) {
- value = $_dlfh233cjnlpaxes.replaceVars(value, vars);
- if (!dom.hasClass(elm, value)) {
- dom.addClass(elm, value);
- }
- });
- }
- };
- var applyNodeStyle = function (formatList, node) {
- var found = false;
- if (!format.selector) {
- return false;
- }
- each$15(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 wrapName, wrapElm, contentEditable = true;
- wrapName = format.inline || format.block;
- wrapElm = dom.create(wrapName);
- setElementFormat(wrapElm);
- $_6wozuu3djnlpaxew.walk(dom, rng, function (nodes) {
- var currentWrapElm;
- var process = function (node) {
- var nodeName, parentName, hasContentEditableState, lastContentEditable;
- lastContentEditable = contentEditable;
- nodeName = node.nodeName.toLowerCase();
- parentName = node.parentNode.nodeName.toLowerCase();
- if (node.nodeType === 1 && dom.getContentEditable(node)) {
- lastContentEditable = contentEditable;
- contentEditable = dom.getContentEditable(node) === 'true';
- hasContentEditableState = true;
- }
- if ($_dlfh233cjnlpaxes.isEq(nodeName, 'br')) {
- currentWrapElm = 0;
- if (format.block) {
- dom.remove(node);
- }
- return;
- }
- if (format.wrapper && $_706y6v68jnlpay1a.matchNode(ed, node, name, vars)) {
- currentWrapElm = 0;
- return;
- }
- if (contentEditable && !hasContentEditableState && format.block && !format.wrapper && $_dlfh233cjnlpaxes.isTextBlock(ed, nodeName) && $_dlfh233cjnlpaxes.isValid(ed, parentName, wrapName)) {
- node = dom.rename(node, wrapName);
- setElementFormat(node);
- newWrappers.push(node);
- currentWrapElm = 0;
- return;
- }
- if (format.selector) {
- var found = applyNodeStyle(formatList, node);
- if (!format.inline || found) {
- currentWrapElm = 0;
- return;
- }
- }
- if (contentEditable && !hasContentEditableState && $_dlfh233cjnlpaxes.isValid(ed, wrapName, nodeName) && $_dlfh233cjnlpaxes.isValid(ed, parentName, wrapName) && !(!nodeSpecific && node.nodeType === 3 && node.nodeValue.length === 1 && node.nodeValue.charCodeAt(0) === 65279) && !isCaretNode(node) && (!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 = 0;
- each$15($_1q1txeljnlpawsa.grep(node.childNodes), process);
- if (hasContentEditableState) {
- contentEditable = lastContentEditable;
- }
- currentWrapElm = 0;
- }
- };
- each$15(nodes, process);
- });
- if (format.links === true) {
- each$15(newWrappers, function (node) {
- var process = function (node) {
- if (node.nodeName === 'A') {
- setElementFormat(node, format);
- }
- each$15($_1q1txeljnlpawsa.grep(node.childNodes), process);
- };
- process(node);
- });
- }
- each$15(newWrappers, function (node) {
- var childCount;
- var getChildCount = function (node) {
- var count = 0;
- each$15(node.childNodes, function (node) {
- if (!$_dlfh233cjnlpaxes.isWhiteSpaceNode(node) && !$_43l8qj2xjnlpaxb1.isBookmarkNode(node)) {
- count++;
- }
- });
- return count;
- };
- var getChildElementNode = function (root) {
- var child = false;
- each$15(root.childNodes, function (node) {
- if (isElementNode$1(node)) {
- child = node;
- return false;
- }
- });
- return child;
- };
- var mergeStyles = function (node) {
- var child, clone;
- child = getChildElementNode(node);
- if (child && !$_43l8qj2xjnlpaxb1.isBookmarkNode(child) && $_706y6v68jnlpay1a.matchName(dom, child, format)) {
- clone = dom.clone(child, false);
- setElementFormat(clone);
- dom.replace(clone, node, true);
- dom.remove(child, 1);
- }
- return clone || node;
- };
- childCount = getChildCount(node);
- if ((newWrappers.length > 1 || !dom.isBlock(node)) && childCount === 0) {
- dom.remove(node, 1);
- return;
- }
- if (format.inline || format.wrapper) {
- if (!format.exact && childCount === 1) {
- node = mergeStyles(node);
- }
- $_4luhzy6bjnlpay1j.mergeWithChildren(ed, formatList, vars, node);
- $_4luhzy6bjnlpay1j.mergeWithParents(ed, format, name, vars, node);
- $_4luhzy6bjnlpay1j.mergeBackgroundColorAndFontSize(dom, format, vars, node);
- $_4luhzy6bjnlpay1j.mergeSubSup(dom, format, vars, node);
- $_4luhzy6bjnlpay1j.mergeSiblings(dom, format, vars, node);
- }
- });
- };
- if (dom.getContentEditable(selection.getNode()) === 'false') {
- node = selection.getNode();
- for (var i = 0, l = formatList.length; i < l; i++) {
- if (formatList[i].ceFalseOverride && dom.is(node, formatList[i].selector)) {
- setElementFormat(node, formatList[i]);
- return;
- }
- }
- return;
- }
- if (format) {
- if (node) {
- if (node.nodeType) {
- if (!applyNodeStyle(formatList, node)) {
- rng = dom.createRng();
- rng.setStartBefore(node);
- rng.setEndAfter(node);
- applyRngStyle(dom, $_3cscnj2wjnlpaxau.expandRng(ed, rng, formatList), null, true);
- }
- } else {
- applyRngStyle(dom, node, null, true);
- }
- } else {
- if (!isCollapsed || !format.inline || dom.select('td[data-mce-selected],th[data-mce-selected]').length) {
- var curSelNode = ed.selection.getNode();
- if (!ed.settings.forced_root_block && formatList[0].defaultBlock && !dom.getParent(curSelNode, dom.isBlock)) {
- applyFormat(ed, formatList[0].defaultBlock);
- }
- ed.selection.setRng($_4fmn0j3qjnlpaxhi.normalize(ed.selection.getRng()));
- bookmark = $_5l0mu32ljnlpax8x.getPersistentBookmark(ed.selection, true);
- applyRngStyle(dom, $_3cscnj2wjnlpaxau.expandRng(ed, selection.getRng(), formatList), bookmark);
- if (format.styles) {
- $_4luhzy6bjnlpay1j.mergeUnderlineAndColor(dom, format, vars, curSelNode);
- }
- selection.moveToBookmark(bookmark);
- $_dlfh233cjnlpaxes.moveStart(dom, selection, selection.getRng());
- ed.nodeChanged();
- } else {
- applyCaretFormat(ed, name, vars);
- }
- }
- $_48059m6ajnlpay1h.postProcess(name, ed);
- }
- };
- var $_f4ruu466jnlpay08 = { applyFormat: applyFormat };
-
- var each$16 = $_1q1txeljnlpawsa.each;
- var setup$5 = function (formatChangeData, editor) {
- var currentFormats = {};
- formatChangeData.set({});
- editor.on('NodeChange', function (e) {
- var parents = $_dlfh233cjnlpaxes.getParents(editor.dom, e.element);
- var matchedFormats = {};
- parents = $_1q1txeljnlpawsa.grep(parents, function (node) {
- return node.nodeType === 1 && !node.getAttribute('data-mce-bogus');
- });
- each$16(formatChangeData.get(), function (callbacks, format) {
- each$16(parents, function (node) {
- if (editor.formatter.matchNode(node, format, {}, callbacks.similar)) {
- if (!currentFormats[format]) {
- each$16(callbacks, function (callback) {
- callback(true, {
- node: node,
- format: format,
- parents: parents
- });
- });
- currentFormats[format] = callbacks;
- }
- matchedFormats[format] = callbacks;
- return false;
- }
- if ($_706y6v68jnlpay1a.matchesUnInheritedFormatSelector(editor, node, format)) {
- return false;
- }
- });
- });
- each$16(currentFormats, function (callbacks, format) {
- if (!matchedFormats[format]) {
- delete currentFormats[format];
- each$16(callbacks, function (callback) {
- callback(false, {
- node: e.element,
- format: format,
- parents: parents
- });
- });
- }
- });
- });
- };
- var addListeners = function (formatChangeData, formats, callback, similar) {
- var formatChangeItems = formatChangeData.get();
- each$16(formats.split(','), function (format) {
- if (!formatChangeItems[format]) {
- formatChangeItems[format] = [];
- formatChangeItems[format].similar = similar;
- }
- formatChangeItems[format].push(callback);
- });
- formatChangeData.set(formatChangeItems);
- };
- var formatChanged = function (editor, formatChangeState, formats, callback, similar) {
- if (formatChangeState.get() === null) {
- setup$5(formatChangeState, editor);
- }
- addListeners(formatChangeState, formats, callback, similar);
- };
- var $_10ddoa6djnlpay24 = { formatChanged: formatChanged };
-
- var get$8 = 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',
- 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',
- 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',
- 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'
- },
- {
- inline: 'span',
- styles: { fontWeight: 'bold' }
- },
- {
- inline: 'b',
- remove: 'all'
- }
- ],
- italic: [
- {
- inline: 'em',
- remove: 'all'
- },
- {
- inline: 'span',
- styles: { fontStyle: 'italic' }
- },
- {
- inline: 'i',
- remove: 'all'
- }
- ],
- underline: [
- {
- inline: 'span',
- styles: { textDecoration: 'underline' },
- exact: true
- },
- {
- inline: 'u',
- remove: 'all'
- }
- ],
- strikethrough: [
- {
- inline: 'span',
- styles: { textDecoration: 'line-through' },
- exact: true
- },
- {
- inline: 'strike',
- remove: 'all'
- }
- ],
- 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
- },
- fontsize_class: {
- inline: 'span',
- attributes: { class: '%value' }
- },
- blockquote: {
- block: 'blockquote',
- wrapper: 1,
- remove: 'all'
- },
- subscript: { inline: 'sub' },
- superscript: { inline: 'sup' },
- code: { inline: 'code' },
- link: {
- inline: 'a',
- selector: 'a',
- remove: 'all',
- split: true,
- deep: true,
- onmatch: function () {
- return true;
- },
- onformat: function (elm, fmt, vars) {
- $_1q1txeljnlpawsa.each(vars, function (value, key) {
- dom.setAttrib(elm, key, value);
- });
- }
- },
- removeformat: [
- {
- selector: 'b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins',
- 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
- }
- ]
- };
- $_1q1txeljnlpawsa.each('p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp'.split(/\s/), function (name) {
- formats[name] = {
- block: name,
- remove: 'all'
- };
- });
- return formats;
- };
- var $_2j3wlv6fjnlpay2d = { get: get$8 };
-
- function FormatRegistry (editor) {
- var formats = {};
- var get = function (name) {
- return name ? formats[name] : formats;
- };
- var register = function (name, format) {
- if (name) {
- if (typeof name !== 'string') {
- $_1q1txeljnlpawsa.each(name, function (format, name) {
- register(name, format);
- });
- } else {
- format = format.length ? format : [format];
- $_1q1txeljnlpawsa.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($_2j3wlv6fjnlpay2d.get(editor.dom));
- register(editor.settings.formats);
- return {
- get: get,
- register: register,
- unregister: unregister
- };
- }
-
- var each$17 = $_1q1txeljnlpawsa.each;
- var dom = DOMUtils$1.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) {
- var elm;
- item = typeof sItem === 'string' ? {
- name: sItem,
- classes: [],
- attrs: {}
- } : sItem;
- 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 && $_1q1txeljnlpawsa.inArray(parentsRequired, candidate) !== -1 ? candidate : parentsRequired[0];
- } else {
- return false;
- }
- };
- var wrapInHtml = function (elm, ancestry, siblings) {
- var parent, parentCandidate, parentRequired;
- var ancestor = ancestry.length > 0 && ancestry[0];
- var ancestorName = ancestor && ancestor.name;
- 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);
- }
- $_1q1txeljnlpawsa.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 selectorToHtml = function (selector, editor) {
- return parsedSelectorToHtml(parseSelector(selector), editor);
- };
- var parseSelectorItem = function (item) {
- var tagName;
- var obj = {
- classes: [],
- attrs: {}
- };
- item = obj.selector = $_1q1txeljnlpawsa.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 ($_1q1txeljnlpawsa.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 $_1q1txeljnlpawsa.map(selector.split(/(?:>|\s+(?![^\[\]]+\]))/), function (item) {
- var siblings = $_1q1txeljnlpawsa.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, previewElm, items;
- var previewCss = '', parentFontSize, previewStyles;
- previewStyles = editor.settings.preview_styles;
- if (previewStyles === false) {
- return '';
- }
- if (typeof previewStyles !== 'string') {
- previewStyles = 'font-family font-size font-weight font-style text-decoration ' + 'text-transform color background-color border border-radius outline text-shadow';
- }
- 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) {
- previewStyles = format.preview;
- if (previewStyles === false) {
- return '';
- }
- }
- name = format.block || format.inline || 'span';
- 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);
- }
- previewElm = dom.select(name, previewFrag)[0] || previewFrag.firstChild;
- each$17(format.styles, function (value, name) {
- value = removeVars(value);
- if (value) {
- dom.setStyle(previewElm, name, value);
- }
- });
- each$17(format.attributes, function (value, name) {
- value = removeVars(value);
- if (value) {
- dom.setAttrib(previewElm, name, value);
- }
- });
- each$17(format.classes, function (value) {
- value = removeVars(value);
- if (!dom.hasClass(previewElm, value)) {
- dom.addClass(previewElm, value);
- }
- });
- 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$17(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 $_6yt3d06gjnlpay2j = {
- getCssText: getCssText,
- parseSelector: parseSelector,
- selectorToHtml: selectorToHtml
- };
-
- var toggle$3 = function (editor, formats, name, vars, node) {
- var fmt = formats.get(name);
- if ($_706y6v68jnlpay1a.match(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) {
- $_4dimpr6cjnlpay1t.remove(editor, name, vars, node);
- } else {
- $_f4ruu466jnlpay08.applyFormat(editor, name, vars, node);
- }
- };
- var $_div70r6hjnlpay2r = { toggle: toggle$3 };
-
- 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 $_azkj2d6ijnlpay2t = { setup: setup$6 };
-
- function Formatter (editor) {
- var formats = FormatRegistry(editor);
- var formatChangeState = Cell(null);
- $_azkj2d6ijnlpay2t.setup(editor);
- setup$4(editor);
- return {
- get: formats.get,
- register: formats.register,
- unregister: formats.unregister,
- apply: curry($_f4ruu466jnlpay08.applyFormat, editor),
- remove: curry($_4dimpr6cjnlpay1t.remove, editor),
- toggle: curry($_div70r6hjnlpay2r.toggle, editor, formats),
- match: curry($_706y6v68jnlpay1a.match, editor),
- matchAll: curry($_706y6v68jnlpay1a.matchAll, editor),
- matchNode: curry($_706y6v68jnlpay1a.matchNode, editor),
- canApply: curry($_706y6v68jnlpay1a.canApply, editor),
- formatChanged: curry($_10ddoa6djnlpay24.formatChanged, editor, formatChangeState),
- getCssText: curry($_6yt3d06gjnlpay2j.getCssText, editor)
- };
- }
-
- var hasOwnProperty$2 = Object.prototype.hasOwnProperty;
- var shallow$1 = function (old, nu) {
- return nu;
- };
- var baseMerge = function (merger) {
- return function () {
- var objects = new Array(arguments.length);
- for (var i = 0; i < objects.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 merge = baseMerge(shallow$1);
-
- var register = 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.attributes.map['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.attributes.map[internalName];
- if (value !== undefined) {
- node.attr(name, value.length > 0 ? value : null);
- node.attr(internalName, null);
- } else {
- value = node.attributes.map[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.attributes.map['data-mce-type'] === 'bookmark' && !args.cleanup) {
- node.remove();
- }
- }
- });
- htmlParser.addNodeFilter('noscript', function (nodes) {
- var i = nodes.length, node;
- while (i--) {
- node = nodes[i].firstChild;
- if (node) {
- node.value = $_bea7j51sjnlpax2u.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 (node.value.indexOf('[CDATA[') === 0) {
- node.name = '#cdata';
- node.type = 4;
- node.value = 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' && !('type' in node.attributes.map)) {
- 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', function (nodes, name) {
- var i = nodes.length;
- while (i--) {
- nodes[i].attr(name, null);
- }
- });
- };
- var trimTrailingBr = function (rootNode) {
- var brNode1, brNode2;
- var isBr = function (node) {
- return node && node.name === 'br';
- };
- brNode1 = rootNode.lastChild;
- if (isBr(brNode1)) {
- brNode2 = brNode1.prev;
- if (isBr(brNode2)) {
- brNode1.remove();
- brNode2.remove();
- }
- }
- };
- var $_bpervq6mjnlpay3i = {
- register: register,
- trimTrailingBr: trimTrailingBr
- };
-
- var preProcess = function (editor, node, args) {
- var impl, doc, oldDoc;
- var dom = editor.dom;
- node = node.cloneNode(true);
- impl = document.implementation;
- if (impl.createHTMLDocument) {
- doc = impl.createHTMLDocument('');
- $_1q1txeljnlpawsa.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;
- }
- $_5atig84wjnlpaxs7.firePreProcess(editor, merge(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 $_5tjdgs6njnlpay3r = { process: process };
-
- 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, $_1q1txeljnlpawsa.explode(settings.font_size_legacy_values));
- }
- addStrikeToSpanFilter(domParser, styles);
- };
- var register$1 = function (domParser, settings) {
- if (settings.inline_styles) {
- addFilters(domParser, settings);
- }
- };
- var $_2wvuyy6pjnlpay4e = { register: register$1 };
-
- var whiteSpaceRegExp$3 = /^[ \t\r\n]*$/;
- var typeLookup = {
- '#text': 3,
- '#comment': 8,
- '#cdata': 4,
- '#pi': 7,
- '#doctype': 10,
- '#document-fragment': 11
- };
- var walk$3 = function (node, root, prev) {
- var sibling;
- var parent;
- var startName = prev ? 'lastChild' : 'firstChild';
- var siblingName = prev ? 'prev' : 'next';
- if (node[startName]) {
- return node[startName];
- }
- if (node !== root) {
- sibling = node[siblingName];
- if (sibling) {
- return sibling;
- }
- for (parent = node.parent; parent && parent !== root; parent = parent.parent) {
- sibling = parent[siblingName];
- if (sibling) {
- return sibling;
- }
- }
- }
- };
- var Node$2 = function () {
- function Node(name, type) {
- this.name = name;
- this.type = type;
- if (type === 1) {
- this.attributes = [];
- this.attributes.map = {};
- }
- }
- Node.create = function (name, attrs) {
- var node, attrName;
- node = new Node(name, typeLookup[name] || 1);
- if (attrs) {
- for (attrName in attrs) {
- node.attr(attrName, attrs[attrName]);
- }
- }
- return node;
- };
- Node.prototype.replace = function (node) {
- var self = this;
- if (node.parent) {
- node.remove();
- }
- self.insert(node, self);
- self.remove();
- return self;
- };
- Node.prototype.attr = function (name, value) {
- var self = this;
- var attrs, i;
- if (typeof name !== 'string') {
- for (i in name) {
- self.attr(i, name[i]);
- }
- return self;
- }
- if (attrs = self.attributes) {
- if (value !== undefined) {
- if (value === null) {
- if (name in attrs.map) {
- delete attrs.map[name];
- i = attrs.length;
- while (i--) {
- if (attrs[i].name === name) {
- attrs = attrs.splice(i, 1);
- return self;
- }
- }
- }
- return self;
- }
- if (name in attrs.map) {
- 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];
- }
- };
- Node.prototype.clone = function () {
- var self = this;
- var clone = new Node(self.name, self.type);
- var i, l, selfAttrs, selfAttr, cloneAttrs;
- if (selfAttrs = self.attributes) {
- cloneAttrs = [];
- cloneAttrs.map = {};
- for (i = 0, l = selfAttrs.length; i < l; i++) {
- 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;
- };
- Node.prototype.wrap = function (wrapper) {
- var self = this;
- self.parent.insert(wrapper, self);
- wrapper.append(self);
- return self;
- };
- Node.prototype.unwrap = function () {
- var self = this;
- var node, next;
- for (node = self.firstChild; node;) {
- next = node.next;
- self.insert(node, self, true);
- node = next;
- }
- self.remove();
- };
- Node.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;
- };
- Node.prototype.append = function (node) {
- var self = this;
- var last;
- if (node.parent) {
- node.remove();
- }
- 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;
- };
- Node.prototype.insert = function (node, refNode, before) {
- var parent;
- if (node.parent) {
- node.remove();
- }
- 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;
- };
- Node.prototype.getAll = function (name) {
- var self = this;
- var node;
- var collection = [];
- for (node = self.firstChild; node; node = walk$3(node, self)) {
- if (node.name === name) {
- collection.push(node);
- }
- }
- return collection;
- };
- Node.prototype.empty = function () {
- var self = this;
- var nodes, i, node;
- if (self.firstChild) {
- nodes = [];
- for (node = self.firstChild; node; node = walk$3(node, self)) {
- nodes.push(node);
- }
- i = nodes.length;
- while (i--) {
- node = nodes[i];
- node.parent = node.firstChild = node.lastChild = node.next = node.prev = null;
- }
- }
- self.firstChild = self.lastChild = null;
- return self;
- };
- Node.prototype.isEmpty = function (elements, whitespace, predicate) {
- var self = this;
- var node = self.firstChild, i, name;
- whitespace = whitespace || {};
- if (node) {
- do {
- if (node.type === 1) {
- if (node.attributes.map['data-mce-bogus']) {
- continue;
- }
- if (elements[node.name]) {
- return false;
- }
- i = node.attributes.length;
- while (i--) {
- name = node.attributes[i].name;
- if (name === 'name' || name.indexOf('data-mce-bookmark') === 0) {
- return false;
- }
- }
- }
- if (node.type === 8) {
- return false;
- }
- if (node.type === 3 && !whiteSpaceRegExp$3.test(node.value)) {
- return false;
- }
- if (node.type === 3 && node.parent && whitespace[node.parent.name] && whiteSpaceRegExp$3.test(node.value)) {
- return false;
- }
- if (predicate && predicate(node)) {
- return false;
- }
- } while (node = walk$3(node, self));
- }
- return true;
- };
- Node.prototype.walk = function (prev) {
- return walk$3(this, null, prev);
- };
- return Node;
- }();
-
- 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 Node$2('br', 1)).shortEnded = true;
- } else {
- node.empty().append(new Node$2('#text', 3)).value = '\xA0';
- }
- };
- var isPaddedWithNbsp = function (node) {
- return hasOnlyChild(node, '#text') && node.firstChild.value === '\xA0';
- };
- 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 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 = $_1q1txeljnlpawsa.extend({}, schema.getBlockElements());
- var nonEmptyElements = schema.getNonEmptyElements();
- var parent, lastParent, prev, prevName;
- var whiteSpaceElements = schema.getNonEmptyElements();
- 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') {
- break;
- }
- 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 Node$2('#text', 3);
- textNode.value = '\xA0';
- node.replace(textNode);
- }
- }
- }
- });
- }
- parser.addAttributeFilter('href', function (nodes) {
- var i = nodes.length, node;
- 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 ? $_1q1txeljnlpawsa.trim(rel) : '';
- if (!/\b(noopener)\b/g.test(newRel)) {
- return appendRel(newRel);
- } else {
- return newRel;
- }
- };
- if (!settings.allow_unsafe_link_target) {
- while (i--) {
- 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 Node$2('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);
- }
- });
- }
- };
-
- var makeMap$4 = $_1q1txeljnlpawsa.makeMap;
- var each$18 = $_1q1txeljnlpawsa.each;
- var explode$3 = $_1q1txeljnlpawsa.explode;
- var extend$3 = $_1q1txeljnlpawsa.extend;
- function DomParser (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 nonEmptyElements, whitespaceElements, nonSplitableElements, textBlockElements, specialElements, sibling, nextNode;
- nonSplitableElements = makeMap$4('tr,td,th,tbody,thead,tfoot,table');
- nonEmptyElements = schema.getNonEmptyElements();
- whitespaceElements = schema.getWhiteSpaceElements();
- textBlockElements = schema.getTextBlockElements();
- 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 === 'ul')) {
- sibling.append(node);
- continue;
- }
- sibling = node.next;
- if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {
- sibling.insert(node, sibling.firstChild, true);
- continue;
- }
- node.wrap(filterNode(new Node$2('ul', 1)));
- continue;
- }
- if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {
- node.wrap(filterNode(new Node$2('div', 1)));
- } else {
- if (specialElements[node.name]) {
- node.empty().remove();
- } else {
- node.unwrap();
- }
- }
- }
- }
- };
- var filterNode = function (node) {
- var i, name, list;
- 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$18(explode$3(name), function (name) {
- var list = nodeFilters[name];
- if (!list) {
- nodeFilters[name] = list = [];
- }
- list.push(callback);
- });
- };
- var getNodeFilters = function () {
- var out = [];
- for (var name in nodeFilters) {
- if (nodeFilters.hasOwnProperty(name)) {
- out.push({
- name: name,
- callbacks: nodeFilters[name]
- });
- }
- }
- return out;
- };
- var addAttributeFilter = function (name, callback) {
- each$18(explode$3(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 parser, nodes, i, l, fi, fl, list, name;
- var blockElements;
- var invalidChildren = [];
- var isInWhiteSpacePreservedElement;
- var node;
- args = args || {};
- matchedNodes = {};
- matchedAttributes = {};
- blockElements = extend$3(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 rootBlockName = 'forced_root_block' in args ? args.forced_root_block : settings.forced_root_block;
- 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 Node$2(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;
- };
- parser = SaxParser$1({
- validate: validate,
- allow_script_urls: settings.allow_script_urls,
- allow_conditional_comments: settings.allow_conditional_comments,
- 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;
- newNode = node.append(createNode('#doctype', 10));
- newNode.value = text;
- removeWhitespaceBefore(node);
- },
- start: function (name, attrs, empty) {
- var newNode, attrFiltersLen, elementRule, attrName, parent;
- 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, elementRule, text, sibling, tempNode;
- 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)) {
- if (!node.attributes.map.name && !node.attr('id')) {
- 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 Node$2(args.context || settings.root_name, 11);
- parser.parse(html);
- 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) {
- 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);
- $_2wvuyy6pjnlpay4e.register(exports, settings);
- return exports;
- }
-
- var addTempAttr = function (htmlParser, tempAttrs, name) {
- if ($_1q1txeljnlpawsa.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 = $_5atig84wjnlpaxs7.firePostProcess(editor, merge(args, { content: content }));
- return outArgs.content;
- } else {
- return content;
- }
- };
- var getHtmlFromNode = function (dom, node, args) {
- var html = $_90hfb72rjnlpaxae.trim(args.getInner ? node.innerHTML : dom.getOuterHTML(node));
- return args.selection || isWsPreserveElement(Element$$1.fromDom(node)) ? html : $_1q1txeljnlpawsa.trim(html);
- };
- var parseHtml = function (htmlParser, html, args) {
- var parserArgs = args.selection ? merge({ forced_root_block: false }, args) : args;
- var rootNode = htmlParser.parse(html, parserArgs);
- $_bpervq6mjnlpay3i.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);
- };
- function DomSerializer (settings, editor) {
- var dom, schema, htmlParser;
- var tempAttrs = ['data-mce-selected'];
- dom = editor && editor.dom ? editor.dom : DOMUtils$1.DOM;
- 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;
- htmlParser = DomParser(settings, schema);
- $_bpervq6mjnlpay3i.register(htmlParser, settings, dom);
- var serialize = function (node, parserArgs) {
- var args = merge({ format: 'html' }, parserArgs ? parserArgs : {});
- var targetNode = $_5tjdgs6njnlpay3r.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: function () {
- return tempAttrs;
- }
- };
- }
-
- function DomSerializer$1 (settings, editor) {
- var domSerializer = DomSerializer(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
- };
- }
-
- function BookmarkManager(selection) {
- return {
- getBookmark: curry($_43l8qj2xjnlpaxb1.getBookmark, selection),
- moveToBookmark: curry($_43l8qj2xjnlpaxb1.moveToBookmark, selection)
- };
- }
- (function (BookmarkManager) {
- BookmarkManager.isBookmarkNode = $_43l8qj2xjnlpaxb1.isBookmarkNode;
- }(BookmarkManager || (BookmarkManager = {})));
- var BookmarkManager$1 = BookmarkManager;
-
- var isContentEditableFalse$10 = $_fy28ei1rjnlpax2o.isContentEditableFalse;
- var isContentEditableTrue$6 = $_fy28ei1rjnlpax2o.isContentEditableTrue;
- var getContentEditableRoot$2 = function (root, node) {
- while (node && node !== root) {
- if (isContentEditableTrue$6(node) || isContentEditableFalse$10(node)) {
- return node;
- }
- node = node.parentNode;
- }
- return null;
- };
- var ControlSelection = function (selection, editor) {
- var dom = editor.dom, each = $_1q1txeljnlpawsa.each;
- var selectedElm, selectedElmGhost, resizeHelper, resizeHandles, selectedHandle;
- 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;
- resizeHandles = {
- nw: [
- 0,
- 0,
- -1,
- -1
- ],
- ne: [
- 1,
- 0,
- 1,
- -1
- ],
- se: [
- 1,
- 1,
- 1,
- 1
- ],
- sw: [
- 0,
- 1,
- -1,
- 1
- ]
- };
- var rootClass = '.mce-content-body';
- editor.contentStyles.push(rootClass + ' div.mce-resizehandle {' + 'position: absolute;' + 'border: 1px solid black;' + 'box-sizing: content-box;' + 'background: #FFF;' + 'width: 7px;' + 'height: 7px;' + 'z-index: 10000' + '}' + rootClass + ' .mce-resizehandle:hover {' + 'background: #000' + '}' + rootClass + ' img[data-mce-selected],' + rootClass + ' hr[data-mce-selected] {' + 'outline: 1px solid black;' + 'resize: none' + '}' + rootClass + ' .mce-clonedresizable {' + 'position: absolute;' + ($_cseqobajnlpawll.gecko ? '' : 'outline: 1px dashed black;') + 'opacity: .5;' + 'filter: alpha(opacity=50);' + 'z-index: 10000' + '}' + rootClass + ' .mce-resize-helper {' + 'background: #555;' + 'background: rgba(0,0,0,0.75);' + 'border-radius: 3px;' + 'border: 1px;' + 'color: white;' + 'display: none;' + 'font-family: sans-serif;' + 'font-size: 12px;' + 'white-space: nowrap;' + 'line-height: 14px;' + 'margin: 5px 10px;' + 'padding: 5px;' + 'position: absolute;' + 'z-index: 10001' + '}');
- var isImage = function (elm) {
- return elm && (elm.nodeName === 'IMG' || editor.dom.is(elm, 'figure.image'));
- };
- var isEventOnImageOutsideRange = function (evt, range) {
- return isImage(evt.target) && !$_5xpdav5wjnlpaxyf.isXYWithinRange(evt.clientX, evt.clientY, range);
- };
- var contextMenuSelectImage = function (evt) {
- var target = evt.target;
- if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {
- evt.preventDefault();
- editor.selection.select(target);
- }
- };
- var getResizeTarget = function (elm) {
- return editor.dom.is(elm, 'figure.image') ? elm.querySelector('img') : elm;
- };
- var isResizable = function (elm) {
- var selector = editor.settings.object_resizing;
- if (selector === false || $_cseqobajnlpawll.iOS) {
- return false;
- }
- if (typeof selector !== 'string') {
- selector = 'table,img,figure.image,div';
- }
- if (elm.getAttribute('data-mce-resize') === 'false') {
- return false;
- }
- if (elm === editor.getBody()) {
- return false;
- }
- return $_d8v5lf1gjnlpax0y.is(Element$$1.fromDom(elm), selector);
- };
- 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) && editor.settings.resize_img_proportional !== false) {
- proportional = !$_1qv0695yjnlpaxyk.modifierPressed(e);
- } else {
- proportional = $_1qv0695yjnlpaxyk.modifierPressed(e) || isImage(selectedElm) && selectedHandle[2] * selectedHandle[3] !== 0;
- }
- if (proportional) {
- if (abs(deltaX) > abs(deltaY)) {
- height = round(width * ratio);
- width = round(height / ratio);
- } else {
- width = round(height / ratio);
- height = round(width * ratio);
- }
- }
- dom.setStyles(getResizeTarget(selectedElmGhost), {
- width: width,
- height: 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) {
- $_5atig84wjnlpaxs7.fireObjectResizeStart(editor, selectedElm, startW, startH);
- resizeStarted = true;
- }
- };
- var endGhostResize = function () {
- resizeStarted = false;
- var setSizeProp = function (name$$1, value) {
- if (value) {
- if (selectedElm.style[name$$1] || !editor.schema.isValid(selectedElm.nodeName.toLowerCase(), name$$1)) {
- dom.setStyle(getResizeTarget(selectedElm), name$$1, value);
- } else {
- dom.setAttrib(getResizeTarget(selectedElm), name$$1, value);
- }
- }
- };
- setSizeProp('width', width);
- setSizeProp('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);
- showResizeRect(selectedElm);
- $_5atig84wjnlpaxs7.fireObjectResized(editor, selectedElm, width, height);
- dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style'));
- editor.nodeChanged();
- };
- var showResizeRect = function (targetElm) {
- var position, targetWidth, targetHeight, e, rect;
- hideResizeRect();
- unbindResizeHandleEvents();
- position = dom.getPos(targetElm, rootElement);
- selectedElmX = position.x;
- selectedElmY = position.y;
- rect = targetElm.getBoundingClientRect();
- targetWidth = rect.width || rect.right - rect.left;
- targetHeight = rect.height || rect.bottom - rect.top;
- if (selectedElm !== targetElm) {
- selectedElm = targetElm;
- width = height = 0;
- }
- e = editor.fire('ObjectSelected', { target: targetElm });
- if (isResizable(targetElm) && !e.isDefaultPrevented()) {
- each(resizeHandles, function (handle, name$$1) {
- var handleElm;
- var startDrag = function (e) {
- startX = e.screenX;
- startY = e.screenY;
- startW = getResizeTarget(selectedElm).clientWidth;
- startH = getResizeTarget(selectedElm).clientHeight;
- ratio = startH / startW;
- selectedHandle = handle;
- handle.startPos = {
- x: targetWidth * handle[0] + selectedElmX,
- y: targetHeight * handle[1] + selectedElmY
- };
- startScrollWidth = rootElement.scrollWidth;
- startScrollHeight = rootElement.scrollHeight;
- selectedElmGhost = selectedElm.cloneNode(true);
- dom.addClass(selectedElmGhost, 'mce-clonedresizable');
- dom.setAttrib(selectedElmGhost, 'data-mce-bogus', 'all');
- selectedElmGhost.contentEditable = false;
- selectedElmGhost.unSelectabe = true;
- dom.setStyles(selectedElmGhost, {
- left: selectedElmX,
- top: selectedElmY,
- margin: 0
- });
- selectedElmGhost.removeAttribute('data-mce-selected');
- 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$$1);
- if (handleElm) {
- dom.remove(handleElm);
- }
- handleElm = dom.add(rootElement, 'div', {
- 'id': 'mceResizeHandle' + name$$1,
- 'data-mce-bogus': 'all',
- 'class': 'mce-resizehandle',
- 'unselectable': true,
- 'style': 'cursor:' + name$$1 + '-resize; margin:0; padding:0'
- });
- if ($_cseqobajnlpawll.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();
- }
- selectedElm.setAttribute('data-mce-selected', '1');
- };
- var hideResizeRect = function () {
- var name$$1, handleElm;
- unbindResizeHandleEvents();
- if (selectedElm) {
- selectedElm.removeAttribute('data-mce-selected');
- }
- for (name$$1 in resizeHandles) {
- handleElm = dom.get('mceResizeHandle' + name$$1);
- if (handleElm) {
- dom.unbind(handleElm);
- dom.remove(handleElm);
- }
- }
- };
- var updateResizeRect = function (e) {
- var startElm, controlElm;
- var isChildOrEqual = function (node, parent$$1) {
- if (node) {
- do {
- if (node === parent$$1) {
- return true;
- }
- } while (node = node.parentNode);
- }
- };
- if (resizeStarted || editor.removed) {
- return;
- }
- each(dom.select('img[data-mce-selected],hr[data-mce-selected]'), function (img) {
- img.removeAttribute('data-mce-selected');
- });
- controlElm = e.type === 'mousedown' ? e.target : selection.getNode();
- controlElm = dom.$(controlElm).closest('table,img,figure.image,hr')[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$10(getContentEditableRoot$2(editor.getBody(), elm));
- };
- var unbindResizeHandleEvents = function () {
- for (var name$$1 in resizeHandles) {
- var handle = resizeHandles[name$$1];
- 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 ($_cseqobajnlpawll.ie && $_cseqobajnlpawll.ie >= 11) {
- 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();
- }
- }
- });
- editor.dom.bind(rootElement, 'mscontrolselect', function (e) {
- var delayedSelect = function (node) {
- $_2nbnh1ijnlpawpi.setEditorTimeout(editor, function () {
- editor.selection.select(node);
- });
- };
- if (isWithinContentEditableFalse(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);
- }
- }
- });
- }
- var throttledUpdateResizeRect = $_2nbnh1ijnlpawpi.throttle(function (e) {
- if (!editor.composing) {
- updateResizeRect(e);
- }
- });
- editor.on('nodechange ResizeEditor ResizeWindow drop FullscreenStateChanged', throttledUpdateResizeRect);
- editor.on('keyup compositionend', function (e) {
- if (selectedElm && selectedElm.nodeName === 'TABLE') {
- throttledUpdateResizeRect(e);
- }
- });
- editor.on('hide blur', hideResizeRect);
- editor.on('contextmenu', contextMenuSelectImage);
- });
- editor.on('remove', unbindResizeHandleEvents);
- var destroy = function () {
- selectedElm = selectedElmGhost = null;
- };
- return {
- isResizable: isResizable,
- showResizeRect: showResizeRect,
- hideResizeRect: hideResizeRect,
- updateResizeRect: updateResizeRect,
- destroy: destroy
- };
- };
-
- var hasCeProperty = function (node) {
- return $_fy28ei1rjnlpax2o.isContentEditableTrue(node) || $_fy28ei1rjnlpax2o.isContentEditableFalse(node);
- };
- var findParent$1 = 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 element, rng, rects;
- element = doc.elementFromPoint(clientX, clientY);
- rng = doc.body.createTextRange();
- if (!element || element.tagName === 'HTML') {
- element = doc.body;
- }
- rng.moveToElementText(element);
- rects = $_1q1txeljnlpawsa.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 $_fy28ei1rjnlpax2o.isContentEditableFalse(findParent$1(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 $_445zg66wjnlpay63 = { fromPoint: fromPoint$1 };
-
- var processRanges = function (editor, ranges) {
- return map(ranges, function (range$$1) {
- var evt = editor.fire('GetSelectionRange', { range: range$$1 });
- return evt.range !== range$$1 ? evt.range : range$$1;
- });
- };
- var $_76ma076xjnlpay65 = { processRanges: processRanges };
-
- var fromElements = function (elements, scope) {
- var doc = scope || document;
- var fragment = doc.createDocumentFragment();
- each(elements, function (element) {
- fragment.appendChild(element.dom());
- });
- return Element$$1.fromDom(fragment);
- };
- var $_8n4csb70jnlpay6p = { fromElements: fromElements };
-
- var tableModel = Immutable('element', 'width', 'rows');
- var tableRow = Immutable('element', 'cells');
- var cellPosition = Immutable('x', 'y');
- var getSpan = function (td, key) {
- var value = parseInt($_521j8z15jnlpawz7.get(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($_5sdpl92ijnlpax8h.deep(tr), []);
- }
- for (var x2 = x; x2 < x + colspan; x2++) {
- var cells = rows[y2].cells();
- cells[x2] = y2 === y && x2 === x ? td : $_5sdpl92ijnlpax8h.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 ($_5h7cor1ejnlpax0k.eq(cells[x], element)) {
- return Option.some(cellPosition(x, y));
- }
- }
- }
- return Option.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 = $_5sdpl92ijnlpax8h.shallow(table.element());
- var tableBody = Element$$1.fromTag('tbody');
- $_9vd3j51xjnlpax4s.append(tableBody, rows);
- $_ag89ax1yjnlpax4x.append(tableElement, tableBody);
- return tableElement;
- };
- var modelRowsToDomRows = function (table) {
- return map(table.rows(), function (row) {
- var cells = map(row.cells(), function (cell) {
- var td = $_5sdpl92ijnlpax8h.deep(cell);
- $_521j8z15jnlpawz7.remove(td, 'colspan');
- $_521j8z15jnlpawz7.remove(td, 'rowspan');
- return td;
- });
- var tr = $_5sdpl92ijnlpax8h.shallow(row.element());
- $_9vd3j51xjnlpax4s.append(tr, cells);
- return tr;
- });
- };
- var fromDom$2 = function (tableElm) {
- var table = tableModel($_5sdpl92ijnlpax8h.shallow(tableElm), 0, []);
- each($_cmitir27jnlpax6e.descendants(tableElm, 'tr'), function (tr, y) {
- each($_cmitir27jnlpax6e.descendants(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 $_7mbdap71jnlpay6v = {
- fromDom: fromDom$2,
- toDom: toDom,
- subsection: subsection
- };
-
- var findParentListContainer = function (parents) {
- return find(parents, function (elm) {
- return $_7u5fzs11jnlpawv6.name(elm) === 'ul' || $_7u5fzs11jnlpawv6.name(elm) === 'ol';
- });
- };
- var getFullySelectedListWrappers = function (parents, rng) {
- return find(parents, function (elm) {
- return $_7u5fzs11jnlpawv6.name(elm) === 'li' && hasAllContentsSelected(elm, rng);
- }).fold(constant([]), function (li) {
- return findParentListContainer(parents).map(function (listCont) {
- return [
- Element$$1.fromTag('li'),
- Element$$1.fromTag($_7u5fzs11jnlpawv6.name(listCont))
- ];
- }).getOr([]);
- });
- };
- var wrap$3 = function (innerElm, elms) {
- var wrapped = foldl(elms, function (acc, elm) {
- $_ag89ax1yjnlpax4x.append(elm, acc);
- return elm;
- }, innerElm);
- return elms.length > 0 ? $_8n4csb70jnlpay6p.fromElements([wrapped]) : wrapped;
- };
- var directListWrappers = function (commonAnchorContainer) {
- if (isListItem(commonAnchorContainer)) {
- return $_dr4ybh18jnlpawzt.parent(commonAnchorContainer).filter(isList).fold(constant([]), function (listElm) {
- return [
- commonAnchorContainer,
- listElm
- ];
- });
- } else {
- return isList(commonAnchorContainer) ? [commonAnchorContainer] : [];
- }
- };
- var getWrapElements = function (rootNode, rng) {
- var commonAnchorContainer = Element$$1.fromDom(rng.commonAncestorContainer);
- var parents = $_4b88sj42jnlpaxkd.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, $_5sdpl92ijnlpax8h.shallow);
- };
- var emptyFragment = function () {
- return $_8n4csb70jnlpay6p.fromElements([]);
- };
- var getFragmentFromRange = function (rootNode, rng) {
- return wrap$3(Element$$1.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng));
- };
- var getParentTable = function (rootElm, cell) {
- return $_2kbu29jnlpax6t.ancestor(cell, 'table', curry($_5h7cor1ejnlpax0k.eq, 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 = $_7mbdap71jnlpay6v.fromDom(tableElm);
- return $_7mbdap71jnlpay6v.subsection(fullTableModel, firstCell, lastCell).map(function (sectionedTableModel) {
- return $_8n4csb70jnlpay6p.fromElements([$_7mbdap71jnlpay6v.toDom(sectionedTableModel)]);
- });
- }).getOrThunk(emptyFragment);
- };
- var getSelectionFragment = function (rootNode, ranges) {
- return ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0]);
- };
- var read$4 = function (rootNode, ranges) {
- var selectedCells = $_1yq8wz4hjnlpaxo7.getCellsFromElementOrRanges(ranges, rootNode);
- return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges);
- };
- var $_7ki6146zjnlpay6b = { read: read$4 };
-
- var getContent = function (editor, args) {
- var rng = editor.selection.getRng(), tmpElm = editor.dom.create('body');
- var sel = editor.selection.getSel();
- var fragment;
- var ranges = $_76ma076xjnlpay65.processRanges(editor, $_533sn84ijnlpaxoe.getRanges(sel));
- args = args || {};
- args.get = true;
- args.format = args.format || 'html';
- args.selection = true;
- args = editor.fire('BeforeGetContent', args);
- if (args.isDefaultPrevented()) {
- editor.fire('GetContent', args);
- return args.content;
- }
- if (args.format === 'text') {
- return editor.selection.isCollapsed() ? '' : $_90hfb72rjnlpaxae.trim(rng.text || (sel.toString ? sel.toString() : ''));
- }
- if (rng.cloneContents) {
- fragment = args.contextual ? $_7ki6146zjnlpay6b.read(Element$$1.fromDom(editor.getBody()), ranges).dom() : rng.cloneContents();
- if (fragment) {
- tmpElm.appendChild(fragment);
- }
- } else if (rng.item !== undefined || rng.htmlText !== undefined) {
- tmpElm.innerHTML = '
' + (rng.item ? rng.item(0).outerHTML : rng.htmlText);
- tmpElm.removeChild(tmpElm.firstChild);
- } else {
- tmpElm.innerHTML = rng.toString();
- }
- args.getInner = true;
- var content = editor.selection.serializer.serialize(tmpElm, args);
- if (args.format === 'tree') {
- return content;
- }
- args.content = editor.selection.isCollapsed() ? '' : content;
- editor.fire('GetContent', args);
- return args.content;
- };
- var $_d9gs4y6yjnlpay67 = { getContent: getContent };
-
- var setContent = function (editor, content, args) {
- var rng = editor.selection.getRng(), caretNode;
- var doc = editor.getDoc();
- var frag, temp;
- args = args || { format: 'html' };
- args.set = true;
- args.selection = true;
- args.content = content;
- if (!args.no_events) {
- args = editor.fire('BeforeSetContent', args);
- if (args.isDefaultPrevented()) {
- editor.fire('SetContent', args);
- return;
- }
- }
- content = args.content;
- if (rng.insertNode) {
- content += '_';
- if (rng.startContainer === doc && rng.endContainer === doc) {
- doc.body.innerHTML = content;
- } else {
- rng.deleteContents();
- if (doc.body.childNodes.length === 0) {
- doc.body.innerHTML = content;
- } else {
- if (rng.createContextualFragment) {
- rng.insertNode(rng.createContextualFragment(content));
- } else {
- frag = doc.createDocumentFragment();
- temp = doc.createElement('div');
- frag.appendChild(temp);
- temp.outerHTML = content;
- rng.insertNode(frag);
- }
- }
- }
- caretNode = editor.dom.get('__caret');
- rng = doc.createRange();
- rng.setStartBefore(caretNode);
- rng.setEndBefore(caretNode);
- editor.selection.setRng(rng);
- editor.dom.remove('__caret');
- try {
- editor.selection.setRng(rng);
- } catch (ex) {
- }
- } else {
- if (rng.item) {
- doc.execCommand('Delete', false, null);
- rng = editor.getRng();
- }
- if (/^\s+/.test(content)) {
- rng.pasteHTML('_' + content);
- editor.dom.remove('__mce_tmp');
- } else {
- rng.pasteHTML(content);
- }
- }
- if (!args.no_events) {
- editor.fire('SetContent', args);
- }
- };
- var $_b3j7u072jnlpaybw = { setContent: setContent };
-
- var getEndpointElement = function (root, rng, start, real, resolve) {
- var container = start ? rng.startContainer : rng.endContainer;
- var offset = start ? rng.startOffset : rng.endOffset;
- return Option.from(container).map(Element$$1.fromDom).map(function (elm) {
- return !real || !rng.collapsed ? $_dr4ybh18jnlpawzt.child(elm, resolve(elm, offset)).getOr(elm) : elm;
- }).bind(function (elm) {
- return $_7u5fzs11jnlpawv6.isElement(elm) ? Option.some(elm) : $_dr4ybh18jnlpawzt.parent(elm);
- }).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($_dr4ybh18jnlpawzt.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 && $_fy28ei1rjnlpax2o.isText(node) && node.length === 0) {
- node = forwards ? node.nextSibling : node.previousSibling;
- }
- return node || orig;
- };
- var getNode$1 = function (root, rng) {
- var elm, startContainer, endContainer, startOffset, endOffset;
- if (!rng) {
- return root;
- }
- startContainer = rng.startContainer;
- endContainer = rng.endContainer;
- startOffset = rng.startOffset;
- 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, root;
- var selectedBlocks = [];
- 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 TreeWalker(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 Option.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 each$19 = $_1q1txeljnlpawsa.each;
- var isNativeIeSelection = function (rng) {
- return !!rng.select;
- };
- var isAttachedToDom = function (node) {
- return !!(node && node.ownerDocument) && $_5h7cor1ejnlpax0k.contains(Element$$1.fromDom(node.ownerDocument), Element$$1.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 Selection$1 = function (dom, win, serializer, editor) {
- var bookmarkManager, controlSelection;
- var selectedRange, explicitRange, selectorChangedData;
- var setCursorLocation = function (node, offset) {
- var rng = dom.createRng();
- if (!node) {
- moveEndPoint$1(dom, rng, editor.getBody(), true);
- setRng(rng);
- } else {
- rng.setStart(node, offset);
- rng.setEnd(node, offset);
- setRng(rng);
- collapse(false);
- }
- };
- var getContent = function (args) {
- return $_d9gs4y6yjnlpay67.getContent(editor, args);
- };
- var setContent = function (content, args) {
- return $_b3j7u072jnlpaybw.setContent(editor, content, args);
- };
- var getStart = function (real) {
- return getStart$2(editor.getBody(), getRng(), real);
- };
- var getEnd$$1 = function (real) {
- return getEnd(editor.getBody(), getRng(), 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(), 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();
- rng.collapse(!!toStart);
- setRng(rng);
- };
- var getSel = function () {
- return win.getSelection ? win.getSelection() : win.document.selection;
- };
- var getRng = function () {
- var selection, rng, elm, doc;
- var tryCompareBoundaryPoints = function (how, sourceRange, destinationRange) {
- try {
- return sourceRange.compareBoundaryPoints(how, destinationRange);
- } catch (ex) {
- return -1;
- }
- };
- if (!win) {
- return null;
- }
- doc = win.document;
- if (typeof doc === 'undefined' || doc === null) {
- return null;
- }
- if (editor.bookmark !== undefined && $_8odu5n4yjnlpaxsg.hasFocus(editor) === false) {
- var bookmark = $_13pqgk4ojnlpaxqr.getRng(editor);
- if (bookmark.isSome()) {
- return bookmark.map(function (r) {
- return $_76ma076xjnlpay65.processRanges(editor, [r])[0];
- }).getOr(doc.createRange());
- }
- }
- try {
- if (selection = getSel()) {
- if (selection.rangeCount > 0) {
- rng = selection.getRangeAt(0);
- } else {
- rng = selection.createRange ? selection.createRange() : doc.createRange();
- }
- }
- } catch (ex) {
- }
- rng = $_76ma076xjnlpay65.processRanges(editor, [rng])[0];
- 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 sel, node, evt;
- if (!isValidRange(rng)) {
- return;
- }
- var ieRange = isNativeIeSelection(rng) ? rng : null;
- if (ieRange) {
- explicitRange = null;
- try {
- ieRange.select();
- } catch (ex) {
- }
- return;
- }
- sel = getSel();
- 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 && !$_cseqobajnlpawll.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());
- };
- var getSelectedBlocks$$1 = function (startElm, endElm) {
- return getSelectedBlocks(dom, getRng(), startElm, endElm);
- };
- var isForward = function () {
- var sel = getSel();
- var anchorRange, focusRange;
- if (!sel || !sel.anchorNode || !sel.focusNode) {
- return true;
- }
- anchorRange = dom.createRng();
- anchorRange.setStart(sel.anchorNode, sel.anchorOffset);
- anchorRange.collapse(true);
- focusRange = dom.createRng();
- focusRange.setStart(sel.focusNode, sel.focusOffset);
- focusRange.collapse(true);
- return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;
- };
- var normalize = function () {
- var rng = getRng();
- var sel = getSel();
- if (!$_533sn84ijnlpaxoe.hasMultipleRanges(sel) && hasAnyRanges(editor)) {
- var normRng = $_afh56j4mjnlpaxpx.normalize(dom, rng);
- normRng.each(function (normRng) {
- setRng(normRng, isForward());
- });
- return normRng.getOr(rng);
- }
- return rng;
- };
- var selectorChanged = function (selector, callback) {
- var currentSelectors;
- if (!selectorChangedData) {
- selectorChangedData = {};
- currentSelectors = {};
- editor.on('NodeChange', function (e) {
- var node = e.element, parents = dom.getParents(node, null, dom.getRoot()), matchedSelectors = {};
- each$19(selectorChangedData, function (callbacks, selector) {
- each$19(parents, function (node) {
- if (dom.is(node, selector)) {
- if (!currentSelectors[selector]) {
- each$19(callbacks, function (callback) {
- callback(true, {
- node: node,
- selector: selector,
- parents: parents
- });
- });
- currentSelectors[selector] = callbacks;
- }
- matchedSelectors[selector] = callbacks;
- return false;
- }
- });
- });
- each$19(currentSelectors, function (callbacks, selector) {
- if (!matchedSelectors[selector]) {
- delete currentSelectors[selector];
- each$19(callbacks, function (callback) {
- callback(false, {
- node: node,
- selector: selector,
- parents: parents
- });
- });
- }
- });
- });
- }
- if (!selectorChangedData[selector]) {
- selectorChangedData[selector] = [];
- }
- selectorChangedData[selector].push(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 $_av60ug39jnlpaxee.scrollElementIntoView(editor, elm, alignToTop);
- };
- var placeCaretAt = function (clientX, clientY) {
- return setRng($_445zg66wjnlpay63.fromPoint(clientX, clientY, editor.getDoc()));
- };
- var getBoundingClientRect = function () {
- var rng = getRng();
- return rng.collapsed ? CaretPosition$1.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,
- getStart: getStart,
- getEnd: getEnd$$1,
- getSelectedBlocks: getSelectedBlocks$$1,
- normalize: normalize,
- selectorChanged: selectorChanged,
- getScrollContainer: getScrollContainer,
- scrollIntoView: scrollIntoView,
- placeCaretAt: placeCaretAt,
- getBoundingClientRect: getBoundingClientRect,
- destroy: destroy
- };
- bookmarkManager = BookmarkManager$1(exports);
- controlSelection = ControlSelection(exports, editor);
- exports.bookmarkManager = bookmarkManager;
- exports.controlSelection = controlSelection;
- return exports;
- };
-
- var isContentEditableFalse$11 = $_fy28ei1rjnlpax2o.isContentEditableFalse;
- var getSelectedNode$1 = getSelectedNode;
- var isAfterContentEditableFalse$2 = isAfterContentEditableFalse;
- var isBeforeContentEditableFalse$2 = isBeforeContentEditableFalse;
- 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 && $_fy28ei1rjnlpax2o.isBr(from.getNode())) {
- return true;
- }
- return inSameBlock;
- };
- var moveToCeFalseHorizontally = function (direction, editor, getNextPosFn, range) {
- var node, caretPosition, peekCaretPosition, rangeIsInContainerBlock;
- var forwards = direction === HDirection.Forwards;
- var isBeforeContentEditableFalseFn = forwards ? isBeforeContentEditableFalse$2 : isAfterContentEditableFalse$2;
- if (!range.collapsed) {
- node = getSelectedNode$1(range);
- if (isContentEditableFalse$11(node)) {
- return showCaret(direction, editor, node, direction === HDirection.Backwards, true);
- }
- }
- rangeIsInContainerBlock = isRangeInCaretContainerBlock(range);
- caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);
- if (isBeforeContentEditableFalseFn(caretPosition)) {
- return selectNode(editor, caretPosition.getNode(!forwards));
- }
- caretPosition = getNextPosFn(caretPosition);
- if (!caretPosition) {
- if (rangeIsInContainerBlock) {
- return range;
- }
- return null;
- }
- if (isBeforeContentEditableFalseFn(caretPosition)) {
- return showCaret(direction, editor, caretPosition.getNode(!forwards), forwards, true);
- }
- peekCaretPosition = getNextPosFn(caretPosition);
- if (isBeforeContentEditableFalseFn(peekCaretPosition)) {
- if (isMoveInsideSameBlock(caretPosition, peekCaretPosition)) {
- return showCaret(direction, editor, peekCaretPosition.getNode(!forwards), forwards, true);
- }
- }
- if (rangeIsInContainerBlock) {
- return renderRangeCaret(editor, caretPosition.toRange(), true);
- }
- return null;
- };
- var moveToCeFalseVertically = function (direction, editor, walkerFn, range) {
- var caretPosition, linePositions, nextLinePositions;
- var closestNextLineRect, caretClientRect, clientX;
- var dist1, dist2, contentEditableFalseNode;
- contentEditableFalseNode = getSelectedNode$1(range);
- caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);
- linePositions = walkerFn(editor.getBody(), isAboveLine(1), caretPosition);
- nextLinePositions = $_n452lmjnlpawsj.filter(linePositions, isLine(1));
- caretClientRect = $_n452lmjnlpawsj.last(caretPosition.getClientRects());
- if (isBeforeContentEditableFalse$2(caretPosition) || isBeforeTable(caretPosition)) {
- contentEditableFalseNode = caretPosition.getNode();
- }
- if (isAfterContentEditableFalse$2(caretPosition) || isAfterTable(caretPosition)) {
- contentEditableFalseNode = caretPosition.getNode(true);
- }
- if (!caretClientRect) {
- return null;
- }
- clientX = caretClientRect.left;
- closestNextLineRect = findClosestClientRect(nextLinePositions, clientX);
- if (closestNextLineRect) {
- if (isContentEditableFalse$11(closestNextLineRect.node)) {
- dist1 = Math.abs(clientX - closestNextLineRect.left);
- dist2 = Math.abs(clientX - closestNextLineRect.right);
- return showCaret(direction, editor, closestNextLineRect.node, dist1 < dist2, true);
- }
- }
- if (contentEditableFalseNode) {
- var caretPositions = positionsUntil(direction, editor.getBody(), isAboveLine(1), contentEditableFalseNode);
- closestNextLineRect = findClosestClientRect($_n452lmjnlpawsj.filter(caretPositions, isLine(1)), clientX);
- if (closestNextLineRect) {
- return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true);
- }
- closestNextLineRect = $_n452lmjnlpawsj.last($_n452lmjnlpawsj.filter(caretPositions, isLine(0)));
- if (closestNextLineRect) {
- return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true);
- }
- }
- };
- var createTextBlock = function (editor) {
- var textBlock = editor.dom.create(editor.settings.forced_root_block);
- if (!$_cseqobajnlpawll.ie || $_cseqobajnlpawll.ie >= 11) {
- textBlock.innerHTML = '
';
- }
- return textBlock;
- };
- var exitPreBlock = function (editor, direction, range) {
- var pre, caretPos, newBlock;
- var caretWalker = CaretWalker(editor.getBody());
- var getNextVisualCaretPosition = $_dv6bef2njnlpax9l.curry(getVisualCaretPosition, caretWalker.next);
- var getPrevVisualCaretPosition = $_dv6bef2njnlpax9l.curry(getVisualCaretPosition, caretWalker.prev);
- if (range.collapsed && editor.settings.forced_root_block) {
- pre = editor.dom.getParent(range.startContainer, 'PRE');
- if (!pre) {
- return;
- }
- if (direction === 1) {
- caretPos = getNextVisualCaretPosition(CaretPosition$1.fromRangeStart(range));
- } else {
- caretPos = getPrevVisualCaretPosition(CaretPosition$1.fromRangeStart(range));
- }
- if (!caretPos) {
- 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 caretWalker = CaretWalker(editor.getBody());
- var getNextVisualCaretPosition = $_dv6bef2njnlpax9l.curry(getVisualCaretPosition, caretWalker.next);
- var getPrevVisualCaretPosition = $_dv6bef2njnlpax9l.curry(getVisualCaretPosition, caretWalker.prev);
- var newRange;
- var direction = forward ? HDirection.Forwards : HDirection.Backwards;
- var getNextPosFn = forward ? getNextVisualCaretPosition : getPrevVisualCaretPosition;
- var range = editor.selection.getRng();
- newRange = moveToCeFalseHorizontally(direction, editor, getNextPosFn, range);
- if (newRange) {
- return newRange;
- }
- newRange = exitPreBlock(editor, direction, range);
- if (newRange) {
- return newRange;
- }
- return null;
- };
- var getVerticalRange = function (editor, down) {
- var newRange;
- var direction = down ? 1 : -1;
- var walkerFn = down ? downUntil : upUntil;
- var range = editor.selection.getRng();
- newRange = moveToCeFalseVertically(direction, editor, walkerFn, range);
- if (newRange) {
- return newRange;
- }
- newRange = exitPreBlock(editor, direction, range);
- if (newRange) {
- return newRange;
- }
- return null;
- };
- var moveH$1 = function (editor, forward) {
- return function () {
- var newRng = getHorizontalRange(editor, forward);
- if (newRng) {
- editor.selection.setRng(newRng);
- return true;
- } else {
- return false;
- }
- };
- };
- var moveV$1 = function (editor, down) {
- return function () {
- var newRng = getVerticalRange(editor, down);
- if (newRng) {
- editor.selection.setRng(newRng);
- return true;
- } else {
- return false;
- }
- };
- };
-
- var defaultPatterns = function (patterns) {
- return map(patterns, function (pattern) {
- return merge({
- 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];
- }
- var args = Array.prototype.slice.call(arguments, 1);
- return function () {
- return f.apply(null, args);
- };
- };
- var execute = function (patterns, evt) {
- return find(match$1(patterns, evt), function (pattern) {
- return pattern.action();
- });
- };
- var $_4wmttl77jnlpaycu = {
- match: match$1,
- action: action,
- execute: execute
- };
-
- var executeKeydownOverride = function (editor, caret, evt) {
- var os = $_766rx4ojnlpawtd.detect().os;
- $_4wmttl77jnlpaycu.execute([
- {
- keyCode: $_1qv0695yjnlpaxyk.RIGHT,
- action: moveH$1(editor, true)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.LEFT,
- action: moveH$1(editor, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.UP,
- action: moveV$1(editor, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.DOWN,
- action: moveV$1(editor, true)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.RIGHT,
- action: moveH(editor, true)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.LEFT,
- action: moveH(editor, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.UP,
- action: moveV(editor, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.DOWN,
- action: moveV(editor, true)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.RIGHT,
- action: $_1971nm4djnlpaxmv.move(editor, caret, true)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.LEFT,
- action: $_1971nm4djnlpaxmv.move(editor, caret, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.RIGHT,
- ctrlKey: !os.isOSX(),
- altKey: os.isOSX(),
- action: $_1971nm4djnlpaxmv.moveNextWord(editor, caret)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.LEFT,
- ctrlKey: !os.isOSX(),
- altKey: os.isOSX(),
- action: $_1971nm4djnlpaxmv.movePrevWord(editor, caret)
- }
- ], evt).each(function (_) {
- evt.preventDefault();
- });
- };
- var setup$7 = function (editor, caret) {
- editor.on('keydown', function (evt) {
- if (evt.isDefaultPrevented() === false) {
- executeKeydownOverride(editor, caret, evt);
- }
- });
- };
- var $_61j8yg75jnlpayck = { setup: setup$7 };
-
- var getParentInlines = function (rootElm, startElm) {
- var parents = $_4b88sj42jnlpaxkd.parentsAndSelf(startElm, rootElm);
- return findIndex(parents, isBlock).fold(constant(parents), function (index) {
- return parents.slice(0, index);
- });
- };
- var hasOnlyOneChild$1 = function (elm) {
- return $_dr4ybh18jnlpawzt.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) {
- $_ezizyx47jnlpaxle.deleteElement(editor, forward, target);
- } else {
- var pos = replaceWithCaretFormat(target.dom(), formatNodes);
- editor.selection.setRng(pos.toRange());
- }
- };
- var deleteCaret$1 = function (editor, forward) {
- var rootElm = Element$$1.fromDom(editor.getBody());
- var startElm = Element$$1.fromDom(editor.selection.getStart());
- var parentInlines = filter(getParentInlines(rootElm, startElm), hasOnlyOneChild$1);
- return last(parentInlines).map(function (target) {
- var fromPos = CaretPosition$1.fromRangeStart(editor.selection.getRng());
- if ($_dfzzw73vjnlpaxik.willDeleteLastPositionInElement(forward, fromPos, target.dom())) {
- deleteLastPosition(forward, editor, target, parentInlines);
- return true;
- } else {
- return false;
- }
- }).getOr(false);
- };
- var backspaceDelete$5 = function (editor, forward) {
- return editor.selection.isCollapsed() ? deleteCaret$1(editor, forward) : false;
- };
- var $_7joyou79jnlpayd3 = { backspaceDelete: backspaceDelete$5 };
-
- var executeKeydownOverride$1 = function (editor, caret, evt) {
- $_4wmttl77jnlpaycu.execute([
- {
- keyCode: $_1qv0695yjnlpaxyk.BACKSPACE,
- action: $_4wmttl77jnlpaycu.action($_jcgv344jnlpaxks.backspaceDelete, editor, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.DELETE,
- action: $_4wmttl77jnlpaycu.action($_jcgv344jnlpaxks.backspaceDelete, editor, true)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.BACKSPACE,
- action: $_4wmttl77jnlpaycu.action($_5d7kmb48jnlpaxm1.backspaceDelete, editor, caret, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.DELETE,
- action: $_4wmttl77jnlpaycu.action($_5d7kmb48jnlpaxm1.backspaceDelete, editor, caret, true)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.BACKSPACE,
- action: $_4wmttl77jnlpaycu.action($_3apnm14fjnlpaxn8.backspaceDelete, editor, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.DELETE,
- action: $_4wmttl77jnlpaycu.action($_3apnm14fjnlpaxn8.backspaceDelete, editor, true)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.BACKSPACE,
- action: $_4wmttl77jnlpaycu.action($_f5evyu43jnlpaxki.backspaceDelete, editor, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.DELETE,
- action: $_4wmttl77jnlpaycu.action($_f5evyu43jnlpaxki.backspaceDelete, editor, true)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.BACKSPACE,
- action: $_4wmttl77jnlpaycu.action($_3n8adg3tjnlpaxi5.backspaceDelete, editor, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.DELETE,
- action: $_4wmttl77jnlpaycu.action($_3n8adg3tjnlpaxi5.backspaceDelete, editor, true)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.BACKSPACE,
- action: $_4wmttl77jnlpaycu.action($_7joyou79jnlpayd3.backspaceDelete, editor, false)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.DELETE,
- action: $_4wmttl77jnlpaycu.action($_7joyou79jnlpayd3.backspaceDelete, editor, true)
- }
- ], evt).each(function (_) {
- evt.preventDefault();
- });
- };
- var executeKeyupOverride = function (editor, evt) {
- $_4wmttl77jnlpaycu.execute([
- {
- keyCode: $_1qv0695yjnlpaxyk.BACKSPACE,
- action: $_4wmttl77jnlpaycu.action($_jcgv344jnlpaxks.paddEmptyElement, editor)
- },
- {
- keyCode: $_1qv0695yjnlpaxyk.DELETE,
- action: $_4wmttl77jnlpaycu.action($_jcgv344jnlpaxks.paddEmptyElement, editor)
- }
- ], evt);
- };
- var setup$8 = 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 $_7bt40278jnlpayd0 = { setup: setup$8 };
-
- 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 walker, node, rng, lastNode = root, tempElm;
- 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('\xA0'), root.firstChild);
- }
- }
- rng = dom.createRng();
- root.normalize();
- if (root.hasChildNodes()) {
- walker = new TreeWalker(root, root);
- while (node = walker.current()) {
- if ($_fy28ei1rjnlpax2o.isText(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 ($_fy28ei1rjnlpax2o.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);
- dom.remove(tempElm);
- editor.selection.scrollIntoView(root);
- };
- 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 Option.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(Element$$1.fromDom(elm));
- }).isSome();
- };
- var $_f5kh147ejnlpaye2 = {
- moveToCaretPosition: moveToCaretPosition,
- getEditableRoot: getEditableRoot,
- getParentBlock: getParentBlock$2,
- getParentBlockName: getParentBlockName,
- isListItemParentBlock: isListItemParentBlock
- };
-
- var hasFirstChild = function (elm, name) {
- return elm.firstChild && elm.firstChild.nodeName === name;
- };
- 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 ($_fy28ei1rjnlpax2o.isElement(node)) {
- break;
- }
- node = node[first ? 'nextSibling' : 'previousSibling'];
- }
- return node === parentBlock;
- };
- var insert$1 = 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')) {
- dom.insertAfter(newBlock, getContainerBlock(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);
- }
- } else if (isFirstOrLastLi(containerBlock, parentBlock, false)) {
- dom.insertAfter(newBlock, getContainerBlock(containerBlock));
- } 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);
- $_f5kh147ejnlpaye2.moveToCaretPosition(editor, newBlock);
- };
- var $_ejp82b7djnlpaydz = { insert: insert$1 };
-
- var isEmptyAnchor = function (elm) {
- return elm && elm.nodeName === 'A' && $_1q1txeljnlpawsa.trim($_90hfb72rjnlpaxae.trim(elm.innerText || elm.textContent)).length === 0;
- };
- 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 ($_fy28ei1rjnlpax2o.isElement(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(node)) {
- dom.remove(node);
- }
- }
- }
- };
- var normalizeZwspOffset = function (start, container, offset) {
- if ($_fy28ei1rjnlpax2o.isText(container) === false) {
- return offset;
- } else if (start) {
- return offset === 1 && container.data.charAt(offset - 1) === $_90hfb72rjnlpaxae.ZWSP ? 0 : offset;
- } else {
- return offset === container.data.length - 1 && container.data.charAt(offset) === $_90hfb72rjnlpaxae.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 ($_fy28ei1rjnlpax2o.isText(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 setForcedBlockAttrs = function (editor, node) {
- var forcedRootBlockName = $_c6e09z3ajnlpaxek.getForcedRootBlock(editor);
- if (forcedRootBlockName && forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {
- editor.dom.setAttribs(node, $_c6e09z3ajnlpaxek.getForcedRootBlockAttrs(editor));
- }
- };
- 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) {
- var lastChild;
- block.normalize();
- lastChild = block.lastChild;
- if (!lastChild || /^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true))) {
- dom.add(block, 'br');
- }
- };
- var insert$2 = function (editor, evt) {
- var tmpRng, editableRoot, container, offset, parentBlock, shiftKey;
- var newBlock, fragment, containerBlock, parentBlockName, containerBlockName, 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);
- setForcedBlockAttrs(editor, block);
- } else {
- block = parentBlock.cloneNode(false);
- }
- caretNode = block;
- if ($_c6e09z3ajnlpaxek.shouldKeepStyles(editor) === false) {
- dom.setAttrib(block, 'style', null);
- dom.setAttrib(block, 'class', null);
- } else {
- do {
- if (textInlineElements[node.nodeName]) {
- if (isCaretNode(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);
- }
- emptyBlock(caretNode);
- return block;
- };
- var isCaretAtStartOrEndOfBlock = function (start) {
- var walker, node, name, normalizedOffset;
- normalizedOffset = normalizeZwspOffset(start, container, offset);
- if ($_fy28ei1rjnlpax2o.isText(container) && (start ? normalizedOffset > 0 : normalizedOffset < container.nodeValue.length)) {
- return false;
- }
- if (container.parentNode === parentBlock && isAfterLastNodeInContainer && !start) {
- return true;
- }
- if (start && $_fy28ei1rjnlpax2o.isElement(container) && container === parentBlock.firstChild) {
- return true;
- }
- if (containerAndSiblingName(container, 'TABLE') || containerAndSiblingName(container, 'HR')) {
- return isAfterLastNodeInContainer && !start || !isAfterLastNodeInContainer && start;
- }
- walker = new TreeWalker(container, parentBlock);
- if ($_fy28ei1rjnlpax2o.isText(container)) {
- if (start && normalizedOffset === 0) {
- walker.prev();
- } else if (!start && normalizedOffset === container.nodeValue.length) {
- walker.next();
- }
- }
- while (node = walker.current()) {
- if ($_fy28ei1rjnlpax2o.isElement(node)) {
- if (!node.getAttribute('data-mce-bogus')) {
- name = node.nodeName.toLowerCase();
- if (nonEmptyElementsMap[name] && name !== 'br') {
- return false;
- }
- }
- } else if ($_fy28ei1rjnlpax2o.isText(node) && !/^[ \t\r\n]*$/.test(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 ($_c6e09z3ajnlpaxek.shouldEndContainerOnEmptyBlock(editor) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock)) {
- newBlock = dom.split(containerBlock, parentBlock);
- } else {
- dom.insertAfter(newBlock, parentBlock);
- }
- $_f5kh147ejnlpaye2.moveToCaretPosition(editor, newBlock);
- };
- $_afh56j4mjnlpaxpx.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 = $_c6e09z3ajnlpaxek.getForcedRootBlock(editor);
- shiftKey = evt.shiftKey;
- if ($_fy28ei1rjnlpax2o.isElement(container) && container.hasChildNodes()) {
- isAfterLastNodeInContainer = offset > container.childNodes.length - 1;
- container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;
- if (isAfterLastNodeInContainer && $_fy28ei1rjnlpax2o.isText(container)) {
- offset = container.nodeValue.length;
- } else {
- offset = 0;
- }
- }
- 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() : '';
- containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';
- if (containerBlockName === 'LI' && !evt.ctrlKey) {
- parentBlock = containerBlock;
- containerBlock = containerBlock.parentNode;
- parentBlockName = containerBlockName;
- }
- if (/^(LI|DT|DD)$/.test(parentBlockName)) {
- if (dom.isEmpty(parentBlock)) {
- $_ejp82b7djnlpaydz.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);
- }
- $_f5kh147ejnlpaye2.moveToCaretPosition(editor, newBlock);
- } else if (isCaretAtStartOrEndOfBlock()) {
- insertNewBlockAfter();
- } else if (isCaretAtStartOrEndOfBlock(true)) {
- newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock);
- $_f5kh147ejnlpaye2.moveToCaretPosition(editor, containerAndSiblingName(parentBlock, 'HR') ? newBlock : parentBlock);
- } else {
- tmpRng = includeZwspInRange(rng).cloneRange();
- tmpRng.setEndAfter(parentBlock);
- fragment = tmpRng.extractContents();
- 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 {
- $_f5kh147ejnlpaye2.moveToCaretPosition(editor, newBlock);
- }
- }
- dom.setAttrib(newBlock, 'id', '');
- editor.fire('NewBlock', { newBlock: newBlock });
- };
- var $_dytumn7cjnlpaydl = { insert: insert$2 };
-
- var matchesSelector = function (editor, selector) {
- return $_f5kh147ejnlpaye2.getParentBlock(editor).filter(function (parentBlock) {
- return selector.length > 0 && $_d8v5lf1gjnlpax0y.is(Element$$1.fromDom(parentBlock), selector);
- }).isSome();
- };
- var shouldInsertBr = function (editor) {
- return matchesSelector(editor, $_c6e09z3ajnlpaxek.getBrNewLineSelector(editor));
- };
- var shouldBlockNewLine = function (editor) {
- return matchesSelector(editor, $_c6e09z3ajnlpaxek.getNoNewLineSelector(editor));
- };
- var $_8nqlsa7gjnlpayev = {
- shouldInsertBr: shouldInsertBr,
- shouldBlockNewLine: shouldBlockNewLine
- };
-
- var newLineAction = Adt.generate([
- { br: [] },
- { block: [] },
- { none: [] }
- ]);
- var shouldBlockNewLine$1 = function (editor, shiftKey) {
- return $_8nqlsa7gjnlpayev.shouldBlockNewLine(editor);
- };
- var isBrMode = function (requiredState) {
- return function (editor, shiftKey) {
- var brMode = $_c6e09z3ajnlpaxek.getForcedRootBlock(editor) === '';
- return brMode === requiredState;
- };
- };
- var inListBlock = function (requiredState) {
- return function (editor, shiftKey) {
- return $_f5kh147ejnlpaye2.isListItemParentBlock(editor) === requiredState;
- };
- };
- var inBlock = function (blockName, requiredState) {
- return function (editor, shiftKey) {
- var state = $_f5kh147ejnlpaye2.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 $_c6e09z3ajnlpaxek.shouldPutBrInPre(editor) === requiredState;
- };
- };
- var inBrContext = function (editor, shiftKey) {
- return $_8nqlsa7gjnlpayev.shouldInsertBr(editor);
- };
- var hasShiftKey = function (editor, shiftKey) {
- return shiftKey;
- };
- var canInsertIntoEditableRoot = function (editor) {
- var forcedRootBlock = $_c6e09z3ajnlpaxek.getForcedRootBlock(editor);
- var rootEditable = $_f5kh147ejnlpaye2.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 ? Option.some(action) : Option.none();
- };
- };
- var getAction$1 = function (editor, evt) {
- return $_3eehvl4cjnlpaxms.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.shiftKey
- ]).getOr(newLineAction.none());
- };
- var $_5478lv7fjnlpayeb = { getAction: getAction$1 };
-
- var insert$3 = function (editor, evt) {
- $_5478lv7fjnlpayeb.getAction(editor, evt).fold(function () {
- $_ejrlhl4ljnlpaxpg.insert(editor, evt);
- }, function () {
- $_dytumn7cjnlpaydl.insert(editor, evt);
- }, noop);
- };
- var $_en8mkp7bjnlpaydc = { insert: insert$3 };
-
- var endTypingLevel = function (undoManager) {
- if (undoManager.typing) {
- undoManager.typing = false;
- undoManager.add();
- }
- };
- var handleEnterKeyEvent = function (editor, event) {
- if (event.isDefaultPrevented()) {
- return;
- }
- event.preventDefault();
- endTypingLevel(editor.undoManager);
- editor.undoManager.transact(function () {
- if (editor.selection.isCollapsed() === false) {
- editor.execCommand('Delete');
- }
- $_en8mkp7bjnlpaydc.insert(editor, event);
- });
- };
- var setup$9 = function (editor) {
- editor.on('keydown', function (event) {
- if (event.keyCode === $_1qv0695yjnlpaxyk.ENTER) {
- handleEnterKeyEvent(editor, event);
- }
- });
- };
- var $_39dxqo7ajnlpaydb = { setup: setup$9 };
-
- var isValidInsertPoint = function (location, caretPosition) {
- return isAtStartOrEnd(location) && $_fy28ei1rjnlpax2o.isText(caretPosition.container());
- };
- var insertNbspAtPosition = function (editor, caretPosition) {
- var container = caretPosition.container();
- var offset = caretPosition.offset();
- container.insertData(offset, '\xA0');
- editor.selection.setCursorLocation(container, offset + 1);
- };
- var insertAtLocation = function (editor, caretPosition, location) {
- if (isValidInsertPoint(location, caretPosition)) {
- insertNbspAtPosition(editor, caretPosition);
- return true;
- } else {
- return false;
- }
- };
- var insertAtCaret$2 = function (editor) {
- var isInlineTarget = curry($_955v2u3wjnlpaxit.isInlineTarget, editor);
- var caretPosition = CaretPosition$1.fromRangeStart(editor.selection.getRng());
- var boundaryLocation = $_1wxx4j4bjnlpaxmj.readLocation(isInlineTarget, editor.getBody(), caretPosition);
- return boundaryLocation.map(curry(insertAtLocation, editor, caretPosition)).getOr(false);
- };
- var isAtStartOrEnd = function (location) {
- return location.fold(constant(false), constant(true), constant(true), constant(false));
- };
- var insertAtSelection = function (editor) {
- return editor.selection.isCollapsed() ? insertAtCaret$2(editor) : false;
- };
- var $_55jipx7ijnlpayf1 = { insertAtSelection: insertAtSelection };
-
- var executeKeydownOverride$2 = function (editor, evt) {
- $_4wmttl77jnlpaycu.execute([{
- keyCode: $_1qv0695yjnlpaxyk.SPACEBAR,
- action: $_4wmttl77jnlpaycu.action($_55jipx7ijnlpayf1.insertAtSelection, editor)
- }], evt).each(function (_) {
- evt.preventDefault();
- });
- };
- var setup$10 = function (editor) {
- editor.on('keydown', function (evt) {
- if (evt.isDefaultPrevented() === false) {
- executeKeydownOverride$2(editor, evt);
- }
- });
- };
- var $_4zpmte7hjnlpayez = { setup: setup$10 };
-
- var findBlockCaretContainer = function (editor) {
- return $_2kbu29jnlpax6t.descendant(Element$$1.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$11 = function (editor) {
- editor.on('keyup compositionstart', curry(handleBlockContainer, editor));
- };
- var $_fb76tn7jjnlpayf4 = { setup: setup$11 };
-
- var setup$12 = function (editor) {
- var caret = $_1971nm4djnlpaxmv.setupSelectedState(editor);
- $_fb76tn7jjnlpayf4.setup(editor);
- $_61j8yg75jnlpayck.setup(editor, caret);
- $_7bt40278jnlpayd0.setup(editor, caret);
- $_39dxqo7ajnlpaydb.setup(editor);
- $_4zpmte7hjnlpayez.setup(editor);
- };
- var $_cvby1r74jnlpayci = { setup: setup$12 };
-
- function Quirks (editor) {
- var each = $_1q1txeljnlpawsa.each;
- var BACKSPACE = $_1qv0695yjnlpaxyk.BACKSPACE, DELETE = $_1qv0695yjnlpaxyk.DELETE, dom = editor.dom, selection = editor.selection, settings = editor.settings, parser = editor.parser;
- var isGecko = $_cseqobajnlpawll.gecko, isIE = $_cseqobajnlpawll.ie, isWebKit = $_cseqobajnlpawll.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.settings.content_editable) {
- 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();
- $_2nbnh1ijnlpawpi.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();
- $_2nbnh1ijnlpawpi.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, container, offset, root, parent$$1;
- if (isDefaultPrevented(e) || e.keyCode !== $_1qv0695yjnlpaxyk.BACKSPACE) {
- return;
- }
- rng = selection.getRng();
- container = rng.startContainer;
- offset = rng.startOffset;
- root = dom.getRoot();
- parent$$1 = container;
- if (!rng.collapsed || offset !== 0) {
- return;
- }
- while (parent$$1 && parent$$1.parentNode && parent$$1.parentNode.firstChild === parent$$1 && parent$$1.parentNode !== root) {
- parent$$1 = parent$$1.parentNode;
- }
- if (parent$$1.tagName === 'BLOCKQUOTE') {
- editor.formatter.toggle('blockquote', null, parent$$1);
- 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 (!settings.object_resizing) {
- setEditorCommandState('enableObjectResizing', false);
- }
- };
- if (!settings.readonly) {
- 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 (settings.forced_root_block) {
- editor.on('init', function () {
- setEditorCommandState('DefaultParagraphSeparator', settings.forced_root_block);
- });
- }
- };
- var normalizeSelection = function () {
- editor.on('keyup focusin mouseup', function (e) {
- if (!$_1qv0695yjnlpaxyk.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 ($_cseqobajnlpawll.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 ($_cseqobajnlpawll.mac) {
- editor.on('keydown', function (e) {
- if ($_1qv0695yjnlpaxyk.metaKeyPressed(e) && !e.shiftKey && (e.keyCode === 37 || e.keyCode === 39)) {
- e.preventDefault();
- editor.selection.getSel().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 = $_445zg66wjnlpay63.fromPoint(e.x, e.y, editor.getDoc());
- selection.setRng(rng);
- insertClipboardContents(internalContent.html, true);
- }
- }
- });
- };
- var refreshContentEditable = function () {
- };
- var isHidden = function () {
- var sel;
- if (!isGecko || editor.removed) {
- return 0;
- }
- sel = editor.selection.getSel();
- return !sel || !sel.rangeCount || sel.rangeCount === 0;
- };
- removeBlockQuoteOnBackSpace();
- emptyEditorWhenDeleting();
- if (!$_cseqobajnlpawll.windowsPhone) {
- normalizeSelection();
- }
- if (isWebKit) {
- inputMethodFocus();
- selectControlElements();
- setDefaultBlockType();
- blockFormSubmitInsideEditor();
- disableBackspaceIntoATable();
- removeAppleInterchangeBrs();
- if ($_cseqobajnlpawll.iOS) {
- restoreFocusOnKeyDown();
- bodyHeight();
- tapLinksAndImages();
- } else {
- selectAll();
- }
- }
- if ($_cseqobajnlpawll.ie >= 11) {
- bodyHeight();
- disableBackspaceIntoATable();
- }
- if ($_cseqobajnlpawll.ie) {
- selectAll();
- disableAutoUrlDetect();
- ieInternalDragAndDrop();
- }
- if (isGecko) {
- removeHrOnBackspace();
- focusBody();
- removeStylesWhenDeletingAcrossBlockElements();
- setGeckoEditingOptions();
- addBrAfterLastLinks();
- showBrokenImageIcon();
- blockCmdArrowNavigation();
- disableBackspaceIntoATable();
- }
- return {
- refreshContentEditable: refreshContentEditable,
- isHidden: isHidden
- };
- }
-
- var isTextBlockNode = function (node) {
- return $_fy28ei1rjnlpax2o.isElement(node) && isTextBlock(Element$$1.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)) {
- $_32xcvk30jnlpaxbn.firstPositionIn(container).each(function (pos) {
- return rng.setStart(pos.container(), pos.offset());
- });
- }
- }
- if (CaretPosition.isElementPosition(endPos)) {
- var container = startPos.container();
- if (isTextBlockNode(container)) {
- $_32xcvk30jnlpaxbn.lastPositionIn(container).each(function (pos) {
- return rng.setEnd(pos.container(), pos.offset());
- });
- }
- }
- editor.selection.setRng($_4fmn0j3qjnlpaxhi.normalize(rng));
- };
- var setup$13 = function (editor) {
- editor.on('click', function (e) {
- if (e.detail >= 3) {
- normalizeSelection$1(editor);
- }
- });
- };
-
- 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$14 = function (editor) {
- preventSummaryToggle(editor);
- filterDetails(editor);
- };
-
- var DOM$2 = DOMUtils$1.DOM;
- var appendStyle = function (editor, text) {
- var head = Element$$1.fromDom(editor.getDoc().head);
- var tag = Element$$1.fromTag('style');
- $_521j8z15jnlpawz7.set(tag, 'type', 'text/css');
- $_ag89ax1yjnlpax4x.append(tag, Element$$1.fromText(text));
- $_ag89ax1yjnlpax4x.append(head, tag);
- };
- var createParser = function (editor) {
- var parser = DomParser(editor.settings, editor.schema);
- parser.addAttributeFilter('src,href,style,tabindex', function (nodes, name$$1) {
- var i = nodes.length, node;
- var dom = editor.dom;
- var value, internalName;
- while (i--) {
- node = nodes[i];
- value = node.attr(name$$1);
- internalName = 'data-mce-' + name$$1;
- if (!node.attributes.map[internalName]) {
- if (value.indexOf('data:') === 0 || value.indexOf('blob:') === 0) {
- continue;
- }
- if (name$$1 === 'style') {
- value = dom.serializeStyle(dom.parseStyle(value), node.name);
- if (!value.length) {
- value = null;
- }
- node.attr(internalName, value);
- node.attr(name$$1, value);
- } else if (name$$1 === 'tabindex') {
- node.attr(internalName, value);
- node.attr(name$$1, null);
- } else {
- node.attr(internalName, editor.convertURL(value, name$$1, node.name));
- }
- }
- }
- });
- parser.addNodeFilter('script', function (nodes) {
- var i = nodes.length, node, type;
- while (i--) {
- node = nodes[i];
- type = node.attr('type') || 'no/type';
- if (type.indexOf('mce-') !== 0) {
- node.attr('type', 'mce-' + type);
- }
- }
- });
- parser.addNodeFilter('#cdata', function (nodes) {
- var i = nodes.length, node;
- while (i--) {
- node = nodes[i];
- node.type = 8;
- node.name = '#comment';
- node.value = '[CDATA[' + node.value + ']]';
- }
- });
- parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function (nodes) {
- var i = nodes.length, node;
- var nonEmptyElements = editor.schema.getNonEmptyElements();
- while (i--) {
- node = nodes[i];
- if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) {
- node.append(new Node$2('br', 1)).shortEnded = true;
- }
- }
- });
- return parser;
- };
- var autoFocus = function (editor) {
- if (editor.settings.auto_focus) {
- $_2nbnh1ijnlpawpi.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 initEditor = function (editor) {
- editor.bindPendingEventDelegates();
- editor.initialized = true;
- editor.fire('init');
- editor.focus(true);
- editor.nodeChanged({ initial: true });
- editor.execCallback('init_instance_callback', editor);
- autoFocus(editor);
- };
- var getStyleSheetLoader = function (editor) {
- return editor.inline ? DOM$2.styleSheetLoader : editor.dom.styleSheetLoader;
- };
- var initContentBody = function (editor, skipWrite) {
- var settings = editor.settings;
- var targetElm = editor.getElement();
- var doc = editor.getDoc(), body, contentCssText;
- if (!settings.inline) {
- editor.getElement().style.visibility = editor.orgVisibility;
- }
- if (!skipWrite && !settings.content_editable) {
- doc.open();
- doc.write(editor.iframeHTML);
- doc.close();
- }
- if (settings.content_editable) {
- editor.on('remove', function () {
- var bodyEl = this.getBody();
- DOM$2.removeClass(bodyEl, 'mce-content-body');
- DOM$2.removeClass(bodyEl, 'mce-edit-focus');
- DOM$2.setAttrib(bodyEl, 'contentEditable', null);
- });
- DOM$2.addClass(targetElm, 'mce-content-body');
- editor.contentDocument = doc = settings.content_document || document;
- editor.contentWindow = settings.content_window || window;
- editor.bodyElement = targetElm;
- settings.content_document = settings.content_window = null;
- settings.root_name = targetElm.nodeName.toLowerCase();
- }
- body = editor.getBody();
- body.disabled = true;
- editor.readonly = settings.readonly;
- if (!editor.readonly) {
- if (editor.inline && DOM$2.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$1(doc, {
- keep_values: true,
- url_converter: editor.convertURL,
- url_converter_scope: editor,
- hex_colors: settings.force_hex_style_colors,
- class_filter: settings.class_filter,
- update_styles: true,
- root_element: editor.inline ? editor.getBody() : null,
- collect: settings.content_editable,
- schema: editor.schema,
- onSetAttrib: function (e) {
- editor.fire('SetAttrib', e);
- }
- });
- editor.parser = createParser(editor);
- editor.serializer = DomSerializer$1(settings, editor);
- editor.selection = Selection$1(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$14(editor);
- setup$13(editor);
- $_cvby1r74jnlpayci.setup(editor);
- $_cjqvqq5njnlpaxw3.setup(editor);
- editor.fire('PreInit');
- if (!settings.browser_spellcheck && !settings.gecko_spellcheck) {
- doc.body.spellcheck = false;
- DOM$2.setAttrib(body, 'spellcheck', 'false');
- }
- editor.quirks = Quirks(editor);
- editor.fire('PostRender');
- if (settings.directionality) {
- body.dir = settings.directionality;
- }
- if (settings.nowrap) {
- body.style.whiteSpace = 'nowrap';
- }
- if (settings.protect) {
- editor.on('BeforeSetContent', function (e) {
- $_1q1txeljnlpawsa.each(settings.protect, function (pattern) {
- e.content = e.content.replace(pattern, function (str) {
- return '';
- });
- });
- });
- }
- editor.on('SetContent', function () {
- editor.addVisual(editor.getBody());
- });
- 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) {
- contentCssText = '';
- $_1q1txeljnlpawsa.each(editor.contentStyles, function (style) {
- contentCssText += style + '\r\n';
- });
- editor.dom.addStyle(contentCssText);
- }
- getStyleSheetLoader(editor).loadAll(editor.contentCSS, function (_) {
- initEditor(editor);
- }, function (urls) {
- initEditor(editor);
- });
- if (settings.content_style) {
- appendStyle(editor, settings.content_style);
- }
- };
- var $_8cqui75bjnlpaxue = { initContentBody: initContentBody };
-
- var DOM$3 = DOMUtils$1.DOM;
- var relaxDomain = function (editor, ifr) {
- if (document.domain !== window.location.hostname && $_cseqobajnlpawll.ie && $_cseqobajnlpawll.ie < 12) {
- var bodyUuid = $_cb5mec5ljnlpaxvz.uuid('mce');
- editor[bodyUuid] = function () {
- $_8cqui75bjnlpaxue.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$3.setAttrib(ifr, 'src', domainRelaxUrl);
- return true;
- }
- return false;
- };
- var normalizeHeight = function (height) {
- var normalizedHeight = typeof height === 'number' ? height + 'px' : height;
- return normalizedHeight ? normalizedHeight : '';
- };
- var createIframeElement = function (id, title, height, customAttrs) {
- var iframe = Element$$1.fromTag('iframe');
- $_521j8z15jnlpawz7.setAll(iframe, customAttrs);
- $_521j8z15jnlpawz7.setAll(iframe, {
- id: id + '_ifr',
- frameBorder: '0',
- allowTransparency: 'true',
- title: title
- });
- $_asiuhf13jnlpawvc.setAll(iframe, {
- width: '100%',
- height: normalizeHeight(height),
- display: 'block'
- });
- return iframe;
- };
- var getIframeHtml = function (editor) {
- var bodyId, bodyClass, iframeHTML;
- iframeHTML = $_c6e09z3ajnlpaxek.getDocType(editor) + '';
- if ($_c6e09z3ajnlpaxek.getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {
- iframeHTML += '';
- }
- iframeHTML += '';
- bodyId = $_c6e09z3ajnlpaxek.getBodyId(editor);
- bodyClass = $_c6e09z3ajnlpaxek.getBodyClass(editor);
- if ($_c6e09z3ajnlpaxek.getContentSecurityPolicy(editor)) {
- iframeHTML += '';
- }
- iframeHTML += '
';
- return iframeHTML;
- };
- var createIframe = function (editor, o) {
- var title = editor.editorManager.translate('Rich Text Area. Press ALT-F9 for menu. ' + 'Press ALT-F10 for toolbar. Press ALT-0 for help');
- var ifr = createIframeElement(editor.id, title, o.height, $_c6e09z3ajnlpaxek.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$3.add(o.iframeContainer, ifr);
- return isDomainRelaxed;
- };
- var init$1 = function (editor, boxInfo) {
- var isDomainRelaxed = createIframe(editor, boxInfo);
- if (boxInfo.editorContainer) {
- DOM$3.get(boxInfo.editorContainer).style.display = editor.orgDisplay;
- editor.hidden = DOM$3.isHidden(boxInfo.editorContainer);
- }
- editor.getElement().style.display = 'none';
- DOM$3.setAttrib(editor.id, 'aria-hidden', 'true');
- if (!isDomainRelaxed) {
- $_8cqui75bjnlpaxue.initContentBody(editor);
- }
- };
- var $_aablho7njnlpayfx = { init: init$1 };
-
- var DOM$4 = DOMUtils$1.DOM;
- var initPlugin = function (editor, initializedPlugins, plugin) {
- var Plugin = PluginManager$1.get(plugin);
- var pluginUrl, pluginInstance;
- pluginUrl = PluginManager$1.urls[plugin] || editor.documentBaseUrl.replace(/\/$/, '');
- plugin = $_1q1txeljnlpawsa.trim(plugin);
- if (Plugin && $_1q1txeljnlpawsa.inArray(initializedPlugins, plugin) === -1) {
- $_1q1txeljnlpawsa.each(PluginManager$1.dependencies(plugin), function (dep) {
- initPlugin(editor, initializedPlugins, dep);
- });
- if (editor.plugins[plugin]) {
- return;
- }
- pluginInstance = new Plugin(editor, pluginUrl, editor.$);
- editor.plugins[plugin] = pluginInstance;
- if (pluginInstance.init) {
- pluginInstance.init(editor, pluginUrl);
- initializedPlugins.push(plugin);
- }
- }
- };
- var trimLegacyPrefix = function (name) {
- return name.replace(/^\-/, '');
- };
- var initPlugins = function (editor) {
- var initializedPlugins = [];
- $_1q1txeljnlpawsa.each(editor.settings.plugins.split(/[ ,]/), function (name) {
- initPlugin(editor, initializedPlugins, trimLegacyPrefix(name));
- });
- };
- var initTheme = function (editor) {
- var Theme;
- var theme = editor.settings.theme;
- if (isString(theme)) {
- editor.settings.theme = trimLegacyPrefix(theme);
- 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) {
- var w, h, minHeight, re, info;
- var settings = editor.settings;
- var elm = editor.getElement();
- w = settings.width || DOM$4.getStyle(elm, 'width') || '100%';
- h = settings.height || DOM$4.getStyle(elm, 'height') || elm.offsetHeight;
- minHeight = settings.min_height || 100;
- re = /^[0-9\.]+(|px)$/i;
- if (re.test('' + w)) {
- w = Math.max(parseInt(w, 10), 100);
- }
- if (re.test('' + h)) {
- h = Math.max(parseInt(h, 10), minHeight);
- }
- info = editor.theme.renderUI({
- targetNode: elm,
- width: w,
- height: h,
- deltaWidth: settings.delta_width,
- deltaHeight: settings.delta_height
- });
- if (!settings.content_editable) {
- h = (info.iframeHeight || h) + (typeof h === 'number' ? info.deltaHeight || 0 : '');
- if (h < minHeight) {
- h = minHeight;
- }
- }
- info.height = h;
- return info;
- };
- var renderFromThemeFunc = function (editor) {
- var info;
- var elm = editor.getElement();
- info = editor.settings.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
- };
- };
- var renderThemeFalseIframe = function (targetElement) {
- var iframeContainer = DOM$4.create('div');
- DOM$4.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 settings = editor.settings, elm = editor.getElement();
- editor.orgDisplay = elm.style.display;
- if (isString(settings.theme)) {
- return renderFromLoadedTheme(editor);
- } else if (isFunction(settings.theme)) {
- return renderFromThemeFunc(editor);
- } else {
- return renderThemeFalse(editor);
- }
- };
- var init$2 = function (editor) {
- var settings = editor.settings;
- var elm = editor.getElement();
- var boxInfo;
- editor.rtl = settings.rtl_ui || editor.editorManager.i18n.rtl;
- editor.editorManager.i18n.setCode(settings.language);
- settings.aria_label = settings.aria_label || DOM$4.getAttrib(elm, 'aria-label', editor.getLang('aria.rich_text_area'));
- editor.fire('ScriptsLoaded');
- initTheme(editor);
- initPlugins(editor);
- boxInfo = renderThemeUi(editor);
- editor.editorContainer = boxInfo.editorContainer ? boxInfo.editorContainer : null;
- if (settings.content_css) {
- $_1q1txeljnlpawsa.each($_1q1txeljnlpawsa.explode(settings.content_css), function (u) {
- editor.contentCSS.push(editor.documentBaseURI.toAbsolute(u));
- });
- }
- if (settings.content_editable) {
- return $_8cqui75bjnlpaxue.initContentBody(editor);
- } else {
- return $_aablho7njnlpayfx.init(editor, boxInfo);
- }
- };
- var $_99cvli58jnlpaxu5 = { init: init$2 };
-
- var DOM$5 = DOMUtils$1.DOM;
- var hasSkipLoadPrefix = function (name$$1) {
- return name$$1.charAt(0) === '-';
- };
- var loadLanguage = function (scriptLoader, editor) {
- var settings = editor.settings;
- if (settings.language && settings.language !== 'en' && !settings.language_url) {
- settings.language_url = editor.editorManager.baseURL + '/langs/' + settings.language + '.js';
- }
- if (settings.language_url && !editor.editorManager.i18n.data[settings.language]) {
- scriptLoader.add(settings.language_url);
- }
- };
- var loadTheme = function (scriptLoader, editor, suffix, callback) {
- var settings = editor.settings, theme = settings.theme;
- if (isString(theme)) {
- if (!hasSkipLoadPrefix(theme) && !ThemeManager.urls.hasOwnProperty(theme)) {
- var themeUrl = settings.theme_url;
- 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 loadPlugins = function (settings, suffix) {
- if ($_1q1txeljnlpawsa.isArray(settings.plugins)) {
- settings.plugins = settings.plugins.join(' ');
- }
- $_1q1txeljnlpawsa.each(settings.external_plugins, function (url, name$$1) {
- PluginManager$1.load(name$$1, url);
- settings.plugins += ' ' + name$$1;
- });
- $_1q1txeljnlpawsa.each(settings.plugins.split(/[ ,]/), function (plugin) {
- plugin = $_1q1txeljnlpawsa.trim(plugin);
- if (plugin && !PluginManager$1.urls[plugin]) {
- if (hasSkipLoadPrefix(plugin)) {
- plugin = plugin.substr(1, plugin.length);
- var dependencies = PluginManager$1.dependencies(plugin);
- $_1q1txeljnlpawsa.each(dependencies, function (dep) {
- var defaultSettings = {
- prefix: 'plugins/',
- resource: dep,
- suffix: '/plugin' + suffix + '.js'
- };
- dep = PluginManager$1.createUrl(defaultSettings, dep);
- PluginManager$1.load(dep.resource, dep);
- });
- } else {
- PluginManager$1.load(plugin, {
- prefix: 'plugins/',
- resource: plugin,
- suffix: '/plugin' + suffix + '.js'
- });
- }
- }
- });
- };
- var loadScripts = function (editor, suffix) {
- var scriptLoader = ScriptLoader.ScriptLoader;
- loadTheme(scriptLoader, editor, suffix, function () {
- loadLanguage(scriptLoader, editor);
- loadPlugins(editor.settings, suffix);
- scriptLoader.loadQueue(function () {
- if (!editor.removed) {
- $_99cvli58jnlpaxu5.init(editor);
- }
- }, editor, function (urls) {
- $_2xhw4u57jnlpaxu1.pluginLoadError(editor, urls[0]);
- if (!editor.removed) {
- $_99cvli58jnlpaxu5.init(editor);
- }
- });
- });
- };
- var render = function (editor) {
- var settings = editor.settings, id = editor.id;
- var readyHandler = function () {
- DOM$5.unbind(window, 'ready', readyHandler);
- editor.render();
- };
- if (!EventUtils.Event.domLoaded) {
- DOM$5.bind(window, 'ready', readyHandler);
- return;
- }
- if (!editor.getElement()) {
- return;
- }
- if (!$_cseqobajnlpawll.contentEditable) {
- return;
- }
- if (!settings.inline) {
- editor.orgVisibility = editor.getElement().style.visibility;
- editor.getElement().style.visibility = 'hidden';
- } else {
- editor.inline = true;
- }
- var form = editor.getElement().form || DOM$5.getParent(id, 'form');
- if (form) {
- editor.formElement = form;
- if (settings.hidden_input && !/TEXTAREA|INPUT/i.test(editor.getElement().nodeName)) {
- DOM$5.insertAfter(DOM$5.create('input', {
- type: 'hidden',
- name: id
- }), id);
- editor.hasHiddenInput = true;
- }
- editor.formEventDelegate = function (e) {
- editor.fire(e.type, e);
- };
- DOM$5.bind(form, 'submit reset', editor.formEventDelegate);
- editor.on('reset', function () {
- editor.setContent(editor.startContent, { format: 'raw' });
- });
- if (settings.submit_patch && !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 (settings.encoding === 'xml') {
- editor.on('GetContent', function (e) {
- if (e.save) {
- e.content = DOM$5.encode(e.content);
- }
- });
- }
- if (settings.add_form_submit_trigger) {
- editor.on('submit', function () {
- if (editor.initialized) {
- editor.save();
- }
- });
- }
- if (settings.add_unload_trigger) {
- 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 $_eajmw851jnlpaxt7 = { render: render };
-
- var add$4 = function (editor, name, settings) {
- var sidebars = editor.sidebars ? editor.sidebars : [];
- sidebars.push({
- name: name,
- settings: settings
- });
- editor.sidebars = sidebars;
- };
- var $_g47nm77ojnlpayg6 = { add: add$4 };
-
- var each$20 = $_1q1txeljnlpawsa.each;
- var trim$4 = $_1q1txeljnlpawsa.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 (url, settings) {
- var self$$1 = this;
- var baseUri, baseUrl;
- url = trim$4(url);
- settings = self$$1.settings = settings || {};
- baseUri = settings.base_uri;
- if (/^([\w\-]+):([^\/]{2})/i.test(url) || /^\s*#/.test(url)) {
- self$$1.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)) {
- baseUrl = settings.base_uri ? settings.base_uri.path : new URI(document.location.href).directory;
- if (settings.base_uri.protocol == '') {
- url = '//mce_host' + self$$1.toAbsPath(baseUrl, url);
- } else {
- url = /([^#?]*)([#?]?.*)/.exec(url);
- url = (baseUri && baseUri.protocol || 'http') + '://mce_host' + self$$1.toAbsPath(baseUrl, url[1]) + url[2];
- }
- }
- url = url.replace(/@@/g, '(mce_at)');
- url = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(url);
- each$20(queryParts, function (v, i) {
- var part = url[i];
- if (part) {
- part = part.replace(/\(mce_at\)/g, '@@');
- }
- self$$1[v] = part;
- });
- if (baseUri) {
- if (!self$$1.protocol) {
- self$$1.protocol = baseUri.protocol;
- }
- if (!self$$1.userInfo) {
- self$$1.userInfo = baseUri.userInfo;
- }
- if (!self$$1.port && self$$1.host === 'mce_host') {
- self$$1.port = baseUri.port;
- }
- if (!self$$1.host || self$$1.host === 'mce_host') {
- self$$1.host = baseUri.host;
- }
- self$$1.source = '';
- }
- if (isProtocolRelative) {
- self$$1.protocol = '';
- }
- };
- URI.prototype = {
- setPath: function (path) {
- var self$$1 = this;
- path = /^(.*?)\/?(\w+)?$/.exec(path);
- self$$1.path = path[0];
- self$$1.directory = path[1];
- self$$1.file = path[2];
- self$$1.source = '';
- self$$1.getURI();
- },
- toRelative: function (uri) {
- var self$$1 = this;
- var output;
- if (uri === './') {
- return uri;
- }
- uri = new URI(uri, { base_uri: self$$1 });
- if (uri.host !== 'mce_host' && self$$1.host !== uri.host && uri.host || self$$1.port !== uri.port || self$$1.protocol !== uri.protocol && uri.protocol !== '') {
- return uri.getURI();
- }
- var tu = self$$1.getURI(), uu = uri.getURI();
- if (tu === uu || tu.charAt(tu.length - 1) === '/' && tu.substr(0, tu.length - 1) === uu) {
- return tu;
- }
- output = self$$1.toRelPath(self$$1.path, uri.path);
- if (uri.query) {
- output += '?' + uri.query;
- }
- if (uri.anchor) {
- output += '#' + uri.anchor;
- }
- return output;
- },
- toAbsolute: function (uri, noHost) {
- uri = new URI(uri, { base_uri: this });
- return uri.getURI(noHost && this.isSameOrigin(uri));
- },
- 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;
- },
- toRelPath: function (base, path) {
- var items, breakPoint = 0, out = '', i, l;
- base = base.substring(0, base.lastIndexOf('/'));
- base = base.split('/');
- items = path.split('/');
- if (base.length >= items.length) {
- for (i = 0, l = base.length; i < l; i++) {
- if (i >= items.length || base[i] !== items[i]) {
- breakPoint = i + 1;
- break;
- }
- }
- }
- if (base.length < items.length) {
- for (i = 0, l = items.length; i < l; i++) {
- if (i >= base.length || base[i] !== items[i]) {
- breakPoint = i + 1;
- break;
- }
- }
- }
- if (breakPoint === 1) {
- return path;
- }
- for (i = 0, l = base.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;
- },
- toAbsPath: function (base, path) {
- var i, nb = 0, o = [], tr, outPath;
- tr = /\/$/.test(path) ? '/' : '';
- base = base.split('/');
- path = path.split('/');
- each$20(base, function (k) {
- if (k) {
- o.push(k);
- }
- });
- base = o;
- for (i = path.length - 1, o = []; i >= 0; i--) {
- if (path[i].length === 0 || path[i] === '.') {
- continue;
- }
- if (path[i] === '..') {
- nb++;
- continue;
- }
- if (nb > 0) {
- nb--;
- continue;
- }
- o.push(path[i]);
- }
- i = base.length - nb;
- if (i <= 0) {
- outPath = o.reverse().join('/');
- } else {
- outPath = base.slice(0, i).join('/') + '/' + o.reverse().join('/');
- }
- if (outPath.indexOf('/') !== 0) {
- outPath = '/' + outPath;
- }
- if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) {
- outPath += tr;
- }
- return outPath;
- },
- getURI: function (noProtoHost) {
- var s;
- var self$$1 = this;
- if (!self$$1.source || noProtoHost) {
- s = '';
- if (!noProtoHost) {
- if (self$$1.protocol) {
- s += self$$1.protocol + '://';
- } else {
- s += '//';
- }
- if (self$$1.userInfo) {
- s += self$$1.userInfo + '@';
- }
- if (self$$1.host) {
- s += self$$1.host;
- }
- if (self$$1.port) {
- s += ':' + self$$1.port;
- }
- }
- if (self$$1.path) {
- s += self$$1.path;
- }
- if (self$$1.query) {
- s += '?' + self$$1.query;
- }
- if (self$$1.anchor) {
- s += '#' + self$$1.anchor;
- }
- self$$1.source = s;
- }
- return self$$1.source;
- }
- };
- URI.parseDataUri = function (uri) {
- var type, matches;
- uri = decodeURIComponent(uri).split(',');
- matches = /data:([^;]+)/.exec(uri[0]);
- if (matches) {
- type = matches[1];
- }
- return {
- type: type,
- data: uri[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;
- };
-
- var defaultFormat = 'html';
- var trimEmptyContents = function (editor, html) {
- var blockName = $_c6e09z3ajnlpaxek.getForcedRootBlock(editor);
- var emptyRegExp = new RegExp('^(<' + blockName + '[^>]*>( | |\\s|\xA0|
|)<\\/' + blockName + '>[\r\n]*|
[\r\n]*)$');
- return html.replace(emptyRegExp, '');
- };
- var getContentFromBody = function (editor, args, body) {
- var content;
- args.format = args.format ? args.format : defaultFormat;
- args.get = true;
- args.getInner = true;
- if (!args.no_events) {
- editor.fire('BeforeGetContent', args);
- }
- if (args.format === 'raw') {
- content = $_1q1txeljnlpawsa.trim($_9cq8vj61jnlpaxzc.trimExternal(editor.serializer, body.innerHTML));
- } else if (args.format === 'text') {
- content = $_90hfb72rjnlpaxae.trim(body.innerText || body.textContent);
- } else if (args.format === 'tree') {
- return editor.serializer.serialize(body, args);
- } else {
- content = trimEmptyContents(editor, editor.serializer.serialize(body, args));
- }
- if (args.format !== 'text' && !isWsPreserveElement(Element$$1.fromDom(body))) {
- args.content = $_1q1txeljnlpawsa.trim(content);
- } else {
- args.content = content;
- }
- if (!args.no_events) {
- editor.fire('GetContent', args);
- }
- return args.content;
- };
- var getContent$1 = function (editor, args) {
- if (args === void 0) {
- args = {};
- }
- return Option.from(editor.getBody()).fold(constant(args.format === 'tree' ? new Node$2('body', 11) : ''), function (body) {
- return getContentFromBody(editor, args, body);
- });
- };
-
- 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$$1) {
- if (filter$$1.name === node.name) {
- if (nodeMatches[filter$$1.name]) {
- nodeMatches[filter$$1.name].nodes.push(node);
- } else {
- nodeMatches[filter$$1.name] = {
- filter: filter$$1,
- nodes: [node]
- };
- }
- }
- });
- each(attributeFilters, function (filter$$1) {
- if (typeof node.attr(filter$$1.name) === 'string') {
- if (attrMatches[filter$$1.name]) {
- attrMatches[filter$$1.name].nodes.push(node);
- } else {
- attrMatches[filter$$1.name] = {
- filter: filter$$1,
- nodes: [node]
- };
- }
- }
- });
- });
- }
- for (var name in nodeMatches) {
- if (nodeMatches.hasOwnProperty(name)) {
- matches.push(nodeMatches[name]);
- }
- }
- for (var name in attrMatches) {
- if (attrMatches.hasOwnProperty(name)) {
- matches.push(attrMatches[name]);
- }
- }
- 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$1 = 'html';
- var isTreeNode = function (content) {
- return content instanceof Node$2;
- };
- var moveSelection = function (editor) {
- if ($_8odu5n4yjnlpaxsg.hasFocus(editor)) {
- $_32xcvk30jnlpaxbn.firstPositionIn(editor.getBody()).each(function (pos) {
- var node = pos.getNode();
- var caretPos = $_fy28ei1rjnlpax2o.isTable(node) ? $_32xcvk30jnlpaxbn.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 = $_c6e09z3ajnlpaxek.getForcedRootBlock(editor);
- if (forcedRootBlockName && editor.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) {
- content = padd;
- content = editor.dom.createHTML(forcedRootBlockName, editor.settings.forced_root_block_attrs, 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(Element$$1.fromDom(body)) ? content : $_1q1txeljnlpawsa.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(Element$$1.fromDom(body)) ? html : $_1q1txeljnlpawsa.trim(html);
- setEditorHtml(editor, args.content);
- if (!args.no_events) {
- editor.fire('SetContent', args);
- }
- return content;
- };
- var setContent$1 = function (editor, content, args) {
- if (args === void 0) {
- args = {};
- }
- args.format = args.format ? args.format : defaultFormat$1;
- args.set = true;
- args.content = isTreeNode(content) ? '' : content;
- if (!isTreeNode(content) && !args.no_events) {
- editor.fire('BeforeSetContent', args);
- content = args.content;
- }
- return Option.from(editor.getBody()).fold(constant(content), function (body) {
- return isTreeNode(content) ? setContentTree(editor, body, content, args) : setContentString(editor, body, content, args);
- });
- };
-
- var DOM$6 = DOMUtils$1.DOM;
- var restoreOriginalStyles = function (editor) {
- DOM$6.setStyle(editor.id, 'display', editor.orgDisplay);
- };
- var safeDestroy = function (x) {
- return Option.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$6.unbind(form, 'submit reset', editor.formEventDelegate);
- }
- };
- var remove$9 = 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$6.remove(element.nextSibling);
- }
- if (!editor.inline && body) {
- restoreOriginalStyles(editor);
- }
- $_5atig84wjnlpaxs7.fireRemove(editor);
- editor.editorManager.remove(editor);
- DOM$6.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 DOM$7 = DOMUtils$1.DOM;
- var extend$4 = $_1q1txeljnlpawsa.extend;
- var each$21 = $_1q1txeljnlpawsa.each;
- var resolve$4 = $_1q1txeljnlpawsa.resolve;
- var ie$2 = $_cseqobajnlpawll.ie;
- var Editor = function (id, settings, editorManager) {
- var self = this;
- var documentBaseUrl = self.documentBaseUrl = editorManager.documentBaseURL;
- var baseUri = editorManager.baseURI;
- settings = getEditorSettings(self, id, documentBaseUrl, editorManager.defaultSettings, settings);
- self.settings = settings;
- AddOnManager.language = settings.language || 'en';
- AddOnManager.languageLoad = settings.language_load;
- AddOnManager.baseURL = editorManager.baseURL;
- self.id = id;
- self.setDirty(false);
- self.plugins = {};
- self.documentBaseURI = new URI(settings.document_base_url, { base_uri: baseUri });
- self.baseURI = baseUri;
- self.contentCSS = [];
- self.contentStyles = [];
- self.shortcuts = new Shortcuts(self);
- self.loadedCSS = {};
- self.editorCommands = new EditorCommands(self);
- self.suffix = editorManager.suffix;
- self.editorManager = editorManager;
- self.inline = settings.inline;
- self.buttons = {};
- self.menuItems = {};
- if (settings.cache_suffix) {
- $_cseqobajnlpawll.cacheSuffix = settings.cache_suffix.replace(/^[\?\&]+/, '');
- }
- if (settings.override_viewport === false) {
- $_cseqobajnlpawll.overrideViewPort = false;
- }
- editorManager.fire('SetupEditor', { editor: self });
- self.execCallback('setup', self);
- self.$ = DomQuery.overrideDefaults(function () {
- return {
- context: self.inline ? self.getBody() : self.getDoc(),
- element: self.getBody()
- };
- });
- };
- Editor.prototype = {
- render: function () {
- $_eajmw851jnlpaxt7.render(this);
- },
- focus: function (skipFocus) {
- $_8odu5n4yjnlpaxsg.focus(this, skipFocus);
- },
- hasFocus: function () {
- return $_8odu5n4yjnlpaxsg.hasFocus(this);
- },
- 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$4(scope) : 0;
- callback = resolve$4(callback);
- self.callbackLookup = self.callbackLookup || {};
- self.callbackLookup[name] = {
- func: callback,
- scope: scope
- };
- }
- return callback.apply(scope || self, Array.prototype.slice.call(arguments, 1));
- },
- translate: function (text) {
- if (text && $_1q1txeljnlpawsa.is(text, 'string')) {
- var lang_1 = this.settings.language || 'en', i18n_1 = this.editorManager.i18n;
- text = i18n_1.data[lang_1 + '.' + text] || text.replace(/\{\#([^\}]+)\}/g, function (a, b) {
- return i18n_1.data[lang_1 + '.' + b] || '{#' + b + '}';
- });
- }
- return this.editorManager.translate(text);
- },
- getLang: function (name, defaultVal) {
- return this.editorManager.i18n.data[(this.settings.language || 'en') + '.' + name] || (defaultVal !== undefined ? defaultVal : '{#' + name + '}');
- },
- getParam: function (name, defaultVal, type) {
- return getParam(this, name, defaultVal, type);
- },
- nodeChanged: function (args) {
- this._nodeChangeDispatcher.nodeChanged(args);
- },
- addButton: function (name, settings) {
- var self = this;
- if (settings.cmd) {
- settings.onclick = function () {
- self.execCommand(settings.cmd);
- };
- }
- if (settings.stateSelector && typeof settings.active === 'undefined') {
- settings.active = false;
- }
- if (!settings.text && !settings.icon) {
- settings.icon = name;
- }
- settings.tooltip = settings.tooltip || settings.title;
- self.buttons[name] = settings;
- },
- addSidebar: function (name, settings) {
- return $_g47nm77ojnlpayg6.add(this, name, settings);
- },
- addMenuItem: function (name, settings) {
- var self = this;
- if (settings.cmd) {
- settings.onclick = function () {
- self.execCommand(settings.cmd);
- };
- }
- self.menuItems[name] = settings;
- },
- addContextToolbar: function (predicate, items) {
- var self = this;
- var selector;
- self.contextToolbars = self.contextToolbars || [];
- if (typeof predicate === 'string') {
- selector = predicate;
- predicate = function (elm) {
- return self.dom.is(elm, selector);
- };
- }
- self.contextToolbars.push({
- id: $_cb5mec5ljnlpaxvz.uuid('mcet'),
- predicate: predicate,
- items: items
- });
- },
- addCommand: function (name, callback, scope) {
- this.editorCommands.addCommand(name, callback, scope);
- },
- addQueryStateHandler: function (name, callback, scope) {
- this.editorCommands.addQueryStateHandler(name, callback, scope);
- },
- addQueryValueHandler: function (name, callback, scope) {
- this.editorCommands.addQueryValueHandler(name, callback, scope);
- },
- addShortcut: function (pattern, desc, cmdFunc, scope) {
- this.shortcuts.add(pattern, desc, cmdFunc, scope);
- },
- execCommand: function (cmd, ui, value, args) {
- return this.editorCommands.execCommand(cmd, ui, value, args);
- },
- queryCommandState: function (cmd) {
- return this.editorCommands.queryCommandState(cmd);
- },
- queryCommandValue: function (cmd) {
- return this.editorCommands.queryCommandValue(cmd);
- },
- queryCommandSupported: function (cmd) {
- return this.editorCommands.queryCommandSupported(cmd);
- },
- show: function () {
- var self = this;
- if (self.hidden) {
- self.hidden = false;
- if (self.inline) {
- self.getBody().contentEditable = true;
- } else {
- DOM$7.show(self.getContainer());
- DOM$7.hide(self.id);
- }
- self.load();
- self.fire('show');
- }
- },
- hide: function () {
- var self = this, doc = self.getDoc();
- if (!self.hidden) {
- if (ie$2 && 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$7.hide(self.getContainer());
- DOM$7.setStyle(self.id, 'display', self.orgDisplay);
- }
- self.hidden = true;
- self.fire('hide');
- }
- },
- isHidden: function () {
- return !!this.hidden;
- },
- setProgressState: function (state, time) {
- this.fire('ProgressState', {
- state: state,
- time: time
- });
- },
- load: function (args) {
- var self = this;
- var elm = self.getElement(), html;
- if (self.removed) {
- return '';
- }
- if (elm) {
- args = args || {};
- args.load = true;
- html = self.setContent(elm.value !== undefined ? elm.value : elm.innerHTML, args);
- args.element = elm;
- if (!args.no_events) {
- self.fire('LoadContent', args);
- }
- args.element = elm = null;
- return html;
- }
- },
- 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 (!/TEXTAREA|INPUT/i.test(elm.nodeName)) {
- if (args.is_removing || !self.inline) {
- elm.innerHTML = html;
- }
- if (form = DOM$7.getParent(self.id, 'form')) {
- each$21(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;
- },
- setContent: function (content, args) {
- return setContent$1(this, content, args);
- },
- getContent: function (args) {
- return getContent$1(this, args);
- },
- insertContent: function (content, args) {
- if (args) {
- content = extend$4({ content: content }, args);
- }
- this.execCommand('mceInsertContent', false, content);
- },
- isDirty: function () {
- return !this.isNotDirty;
- },
- setDirty: function (state) {
- var oldState = !this.isNotDirty;
- this.isNotDirty = !state;
- if (state && state !== oldState) {
- this.fire('dirty');
- }
- },
- setMode: function (mode) {
- setMode(this, mode);
- },
- getContainer: function () {
- var self = this;
- if (!self.container) {
- self.container = DOM$7.get(self.editorContainer || self.id + '_parent');
- }
- return self.container;
- },
- getContentAreaContainer: function () {
- return this.contentAreaContainer;
- },
- getElement: function () {
- if (!this.targetElm) {
- this.targetElm = DOM$7.get(this.id);
- }
- return this.targetElm;
- },
- getWin: function () {
- var self = this;
- var elm;
- if (!self.contentWindow) {
- elm = self.iframeElement;
- if (elm) {
- self.contentWindow = elm.contentWindow;
- }
- }
- return self.contentWindow;
- },
- getDoc: function () {
- var self = this;
- var win;
- if (!self.contentDocument) {
- win = self.getWin();
- if (win) {
- self.contentDocument = win.document;
- }
- }
- return self.contentDocument;
- },
- getBody: function () {
- var doc = this.getDoc();
- return this.bodyElement || (doc ? doc.body : null);
- },
- 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;
- },
- addVisual: function (elm) {
- var self = this;
- var settings = self.settings;
- var dom = self.dom;
- var cls;
- elm = elm || self.getBody();
- if (self.hasVisual === undefined) {
- self.hasVisual = settings.visual;
- }
- each$21(dom.select('table,a', elm), function (elm) {
- var value;
- switch (elm.nodeName) {
- case 'TABLE':
- cls = settings.visual_table_class || 'mce-item-table';
- value = dom.getAttrib(elm, 'border');
- if ((!value || value === '0') && self.hasVisual) {
- dom.addClass(elm, cls);
- } else {
- dom.removeClass(elm, cls);
- }
- return;
- case 'A':
- if (!dom.getAttrib(elm, 'href')) {
- value = dom.getAttrib(elm, 'name') || elm.id;
- cls = settings.visual_anchor_class || 'mce-item-anchor';
- if (value && self.hasVisual) {
- dom.addClass(elm, cls);
- } else {
- dom.removeClass(elm, cls);
- }
- }
- return;
- }
- });
- self.fire('VisualAid', {
- element: elm,
- hasVisual: self.hasVisual
- });
- },
- remove: function () {
- remove$9(this);
- },
- destroy: function (automatic) {
- destroy(this, automatic);
- },
- uploadImages: function (callback) {
- return this.editorUpload.uploadImages(callback);
- },
- _scanForImages: function () {
- return this.editorUpload.scanForImages();
- }
- };
- extend$4(Editor.prototype, EditorObservable$1);
-
- var isEditorUIElement = function (elm) {
- return elm.className.toString().indexOf('mce-') !== -1;
- };
- var $_598dic7xjnlpayi4 = { isEditorUIElement: isEditorUIElement };
-
- var isManualNodeChange = function (e) {
- return e.type === 'nodechange' && e.selectionChange;
- };
- var registerPageMouseUp = function (editor, throttledStore) {
- var mouseUpPage = function () {
- throttledStore.throttle();
- };
- DOMUtils$1.DOM.bind(document, 'mouseup', mouseUpPage);
- editor.on('remove', function () {
- DOMUtils$1.DOM.unbind(document, 'mouseup', mouseUpPage);
- });
- };
- var registerFocusOut = function (editor) {
- editor.on('focusout', function () {
- $_13pqgk4ojnlpaxqr.store(editor);
- });
- };
- var registerMouseUp = function (editor, throttledStore) {
- editor.on('mouseup touchend', function (e) {
- throttledStore.throttle();
- });
- };
- var registerEditorEvents = function (editor, throttledStore) {
- var browser = $_766rx4ojnlpawtd.detect().browser;
- if (browser.isIE()) {
- registerFocusOut(editor);
- } else {
- registerMouseUp(editor, throttledStore);
- }
- editor.on('keyup nodechange', function (e) {
- if (!isManualNodeChange(e)) {
- $_13pqgk4ojnlpaxqr.store(editor);
- }
- });
- };
- var register$3 = function (editor) {
- var throttledStore = first$1(function () {
- $_13pqgk4ojnlpaxqr.store(editor);
- }, 0);
- if (editor.inline) {
- registerPageMouseUp(editor, throttledStore);
- }
- editor.on('init', function () {
- registerEditorEvents(editor, throttledStore);
- });
- editor.on('remove', function () {
- throttledStore.cancel();
- });
- };
- var $_8hqfi17yjnlpayi5 = { register: register$3 };
-
- var documentFocusInHandler;
- var DOM$8 = DOMUtils$1.DOM;
- var isEditorUIElement$1 = function (elm) {
- return $_598dic7xjnlpayi4.isEditorUIElement(elm);
- };
- var isUIElement = function (editor, elm) {
- var customSelector = editor ? editor.settings.custom_ui_selector : '';
- var parent$$1 = DOM$8.getParent(elm, function (elm) {
- return isEditorUIElement$1(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false);
- });
- return parent$$1 !== null;
- };
- var getActiveElement = function () {
- try {
- return document.activeElement;
- } catch (ex) {
- return document.body;
- }
- };
- var registerEvents = function (editorManager, e) {
- var editor = e.editor;
- $_8hqfi17yjnlpayi5.register(editor);
- editor.on('focusin', function () {
- var self$$1 = this;
- var focusedEditor = editorManager.focusedEditor;
- if (focusedEditor !== self$$1) {
- if (focusedEditor) {
- focusedEditor.fire('blur', { focusedEditor: self$$1 });
- }
- editorManager.setActive(self$$1);
- editorManager.focusedEditor = self$$1;
- self$$1.fire('focus', { blurredEditor: focusedEditor });
- self$$1.focus(true);
- }
- });
- editor.on('focusout', function () {
- var self$$1 = this;
- $_2nbnh1ijnlpawpi.setEditorTimeout(self$$1, function () {
- var focusedEditor = editorManager.focusedEditor;
- if (!isUIElement(self$$1, getActiveElement()) && focusedEditor === self$$1) {
- self$$1.fire('blur', { focusedEditor: null });
- editorManager.focusedEditor = null;
- }
- });
- });
- if (!documentFocusInHandler) {
- documentFocusInHandler = function (e) {
- var activeEditor = editorManager.activeEditor;
- var target;
- target = e.target;
- if (activeEditor && target.ownerDocument === document) {
- if (target !== document.body && !isUIElement(activeEditor, target) && editorManager.focusedEditor === activeEditor) {
- activeEditor.fire('blur', { focusedEditor: null });
- editorManager.focusedEditor = null;
- }
- }
- };
- DOM$8.bind(document, 'focusin', documentFocusInHandler);
- }
- };
- var unregisterDocumentEvents = function (editorManager, e) {
- if (editorManager.focusedEditor === e.editor) {
- editorManager.focusedEditor = null;
- }
- if (!editorManager.activeEditor) {
- DOM$8.unbind(document, 'focusin', documentFocusInHandler);
- documentFocusInHandler = null;
- }
- };
- var setup$15 = function (editorManager) {
- editorManager.on('AddEditor', curry(registerEvents, editorManager));
- editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager));
- };
- var $_8pld3r7wjnlpayhz = {
- setup: setup$15,
- isEditorUIElement: isEditorUIElement$1,
- isUIElement: isUIElement
- };
-
- var data = {};
- var code = 'en';
- var $_f6nmn17zjnlpayic = {
- setCode: function (newCode) {
- if (newCode) {
- code = newCode;
- this.rtl = this.data[newCode] ? this.data[newCode]._dir === 'rtl' : false;
- }
- },
- getCode: function () {
- return code;
- },
- rtl: false,
- add: function (code, items) {
- var langData = data[code];
- if (!langData) {
- data[code] = langData = {};
- }
- for (var name in items) {
- langData[name] = items[name];
- }
- this.setCode(code);
- },
- translate: function (text) {
- var langData = data[code] || {};
- var toString = function (obj) {
- if ($_1q1txeljnlpawsa.is(obj, 'function')) {
- return Object.prototype.toString.call(obj);
- }
- return !isEmpty(obj) ? '' + obj : '';
- };
- var isEmpty = function (text) {
- return text === '' || text === null || $_1q1txeljnlpawsa.is(text, 'undefined');
- };
- var getLangData = function (text) {
- text = toString(text);
- return $_1q1txeljnlpawsa.hasOwn(langData, text) ? toString(langData[text]) : text;
- };
- if (isEmpty(text)) {
- return '';
- }
- if ($_1q1txeljnlpawsa.is(text, 'object') && $_1q1txeljnlpawsa.hasOwn(text, 'raw')) {
- return toString(text.raw);
- }
- if ($_1q1txeljnlpawsa.is(text, 'array')) {
- var values_1 = text.slice(1);
- text = getLangData(text[0]).replace(/\{([0-9]+)\}/g, function ($1, $2) {
- return $_1q1txeljnlpawsa.hasOwn(values_1, $2) ? toString(values_1[$2]) : $1;
- });
- }
- return getLangData(text).replace(/{context:\w+}$/, '');
- },
- data: data
- };
-
- var DOM$9 = DOMUtils$1.DOM;
- var explode$4 = $_1q1txeljnlpawsa.explode;
- var each$22 = $_1q1txeljnlpawsa.each;
- var extend$5 = $_1q1txeljnlpawsa.extend;
- var instanceCounter = 0;
- var beforeUnloadDelegate;
- var EditorManager;
- var boundGlobalEvents = false;
- var legacyEditors = [];
- var editors = [];
- var isValidLegacyKey = function (id) {
- return id !== 'length';
- };
- var globalEventDelegate = function (e) {
- each$22(EditorManager.get(), function (editor) {
- if (e.type === 'scroll') {
- editor.fire('ScrollWindow', e);
- } else {
- editor.fire('ResizeWindow', e);
- }
- });
- };
- 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;
- };
- EditorManager = {
- defaultSettings: {},
- $: DomQuery,
- majorVersion: '4',
- minorVersion: '8.4',
- releaseDate: '2018-10-23',
- editors: legacyEditors,
- i18n: $_f6nmn17zjnlpayic,
- activeEditor: null,
- settings: {},
- setup: function () {
- var self$$1 = this;
- var baseURL, documentBaseURL, suffix = '', preInit, src;
- documentBaseURL = URI.getDocumentBaseUrl(document.location);
- if (/^[^:]+:\/\/\/?[^\/]+\//.test(documentBaseURL)) {
- documentBaseURL = documentBaseURL.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, '');
- if (!/[\/\\]$/.test(documentBaseURL)) {
- documentBaseURL += '/';
- }
- }
- 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++) {
- src = scripts[i].src;
- 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) {
- src = document.currentScript.src;
- if (src.indexOf('.min') !== -1) {
- suffix = '.min';
- }
- baseURL = src.substring(0, src.lastIndexOf('/'));
- }
- }
- self$$1.baseURL = new URI(documentBaseURL).toAbsolute(baseURL);
- self$$1.documentBaseURL = documentBaseURL;
- self$$1.baseURI = new URI(self$$1.baseURL);
- self$$1.suffix = suffix;
- $_8pld3r7wjnlpayhz.setup(self$$1);
- },
- overrideDefaults: function (defaultSettings) {
- var baseUrl, suffix;
- baseUrl = defaultSettings.base_url;
- if (baseUrl) {
- this.baseURL = new URI(this.documentBaseURL).toAbsolute(baseUrl.replace(/\/+$/, ''));
- this.baseURI = new URI(this.baseURL);
- }
- suffix = defaultSettings.suffix;
- if (defaultSettings.suffix) {
- this.suffix = suffix;
- }
- this.defaultSettings = defaultSettings;
- var pluginBaseUrls = defaultSettings.plugin_base_urls;
- for (var name$$1 in pluginBaseUrls) {
- AddOnManager.PluginManager.urls[name$$1] = pluginBaseUrls[name$$1];
- }
- },
- init: function (settings) {
- var self$$1 = this;
- var result, invalidInlineTargets;
- invalidInlineTargets = $_1q1txeljnlpawsa.makeMap('area base basefont br col frame hr img input isindex link meta param embed source wbr track ' + 'colgroup option tbody tfoot thead tr 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 = elm.name;
- if (id && !DOM$9.get(id)) {
- id = elm.name;
- } else {
- id = DOM$9.uniqueId();
- }
- elm.setAttribute('id', id);
- }
- return id;
- };
- var execCallback = function (name$$1) {
- var callback = settings[name$$1];
- if (!callback) {
- return;
- }
- return callback.apply(self$$1, Array.prototype.slice.call(arguments, 2));
- };
- var hasClass = function (elm, className) {
- return className.constructor === RegExp ? className.test(elm.className) : DOM$9.hasClass(elm, className);
- };
- var findTargets = function (settings) {
- var l, targets = [];
- if ($_cseqobajnlpawll.ie && $_cseqobajnlpawll.ie < 11) {
- $_2xhw4u57jnlpaxu1.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 [];
- }
- if (settings.types) {
- each$22(settings.types, function (type) {
- targets = targets.concat(DOM$9.select(type.selector));
- });
- return targets;
- } else if (settings.selector) {
- return DOM$9.select(settings.selector);
- } else if (settings.target) {
- return [settings.target];
- }
- switch (settings.mode) {
- case 'exact':
- l = settings.elements || '';
- if (l.length > 0) {
- each$22(explode$4(l), function (id) {
- var elm;
- if (elm = DOM$9.get(id)) {
- targets.push(elm);
- } else {
- each$22(document.forms, function (f) {
- each$22(f.elements, function (e) {
- if (e.name === id) {
- id = 'mce_editor_' + instanceCounter++;
- DOM$9.setAttrib(e, 'id', id);
- targets.push(e);
- }
- });
- });
- }
- });
- }
- break;
- case 'textareas':
- case 'specific_textareas':
- each$22(DOM$9.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$$1);
- editors.push(editor);
- editor.on('init', function () {
- if (++initCount === targets.length) {
- provideResults(editors);
- }
- });
- editor.targetElm = editor.targetElm || targetElm;
- editor.render();
- };
- DOM$9.unbind(window, 'ready', initEditors);
- execCallback('onpageload');
- targets = DomQuery.unique(findTargets(settings));
- if (settings.types) {
- each$22(settings.types, function (type) {
- $_1q1txeljnlpawsa.each(targets, function (elm) {
- if (DOM$9.is(elm, type.selector)) {
- createEditor(createId(elm), extend$5({}, settings, type), elm);
- return false;
- }
- return true;
- });
- });
- return;
- }
- $_1q1txeljnlpawsa.each(targets, function (elm) {
- purgeDestroyedEditor(self$$1.get(elm.id));
- });
- targets = $_1q1txeljnlpawsa.grep(targets, function (elm) {
- return !self$$1.get(elm.id);
- });
- if (targets.length === 0) {
- provideResults([]);
- } else {
- each$22(targets, function (elm) {
- if (isInvalidInlineTarget(settings, elm)) {
- $_2xhw4u57jnlpaxu1.initError('Could not initialize inline editor on invalid inline target element', elm);
- } else {
- createEditor(createId(elm), settings, elm);
- }
- });
- }
- };
- self$$1.settings = settings;
- DOM$9.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$$1 = this;
- var existingEditor;
- existingEditor = legacyEditors[editor.id];
- if (existingEditor === editor) {
- return editor;
- }
- if (self$$1.get(editor.id) === null) {
- if (isValidLegacyKey(editor.id)) {
- legacyEditors[editor.id] = editor;
- }
- legacyEditors.push(editor);
- editors.push(editor);
- }
- toggleGlobalEvents(true);
- self$$1.activeEditor = editor;
- self$$1.fire('AddEditor', { editor: editor });
- if (!beforeUnloadDelegate) {
- beforeUnloadDelegate = function () {
- self$$1.fire('BeforeUnload');
- };
- DOM$9.bind(window, 'beforeunload', beforeUnloadDelegate);
- }
- return editor;
- },
- createEditor: function (id, settings) {
- return this.add(new Editor(id, settings, this));
- },
- remove: function (selector) {
- var self$$1 = this;
- var i, editor;
- if (!selector) {
- for (i = editors.length - 1; i >= 0; i--) {
- self$$1.remove(editors[i]);
- }
- return;
- }
- if (isString(selector)) {
- each$22(DOM$9.select(selector), function (elm) {
- editor = self$$1.get(elm.id);
- if (editor) {
- self$$1.remove(editor);
- }
- });
- return;
- }
- editor = selector;
- if (isNull(self$$1.get(editor.id))) {
- return null;
- }
- if (removeEditorFromList(editor)) {
- self$$1.fire('RemoveEditor', { editor: editor });
- }
- if (editors.length === 0) {
- DOM$9.unbind(window, 'beforeunload', beforeUnloadDelegate);
- }
- editor.remove();
- toggleGlobalEvents(editors.length > 0);
- return editor;
- },
- execCommand: function (cmd, ui, value) {
- var self$$1 = this, editor = self$$1.get(value);
- switch (cmd) {
- case 'mceAddEditor':
- if (!self$$1.get(value)) {
- new Editor(value, self$$1.settings, self$$1).render();
- }
- return true;
- case 'mceRemoveEditor':
- if (editor) {
- editor.remove();
- }
- return true;
- case 'mceToggleEditor':
- if (!editor) {
- self$$1.execCommand('mceAddEditor', 0, value);
- return true;
- }
- if (editor.isHidden()) {
- editor.show();
- } else {
- editor.hide();
- }
- return true;
- }
- if (self$$1.activeEditor) {
- return self$$1.activeEditor.execCommand(cmd, ui, value);
- }
- return false;
- },
- triggerSave: function () {
- each$22(editors, function (editor) {
- editor.save();
- });
- },
- addI18n: function (code, items) {
- $_f6nmn17zjnlpayic.add(code, items);
- },
- translate: function (text) {
- return $_f6nmn17zjnlpayic.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;
- }
- };
- extend$5(EditorManager, $_c8v03c4tjnlpaxrw);
- EditorManager.setup();
- var EditorManager$1 = EditorManager;
-
- function RangeUtils(dom) {
- var walk = function (rng, callback) {
- return $_6wozuu3djnlpaxew.walk(dom, rng, callback);
- };
- var split = $_fvyfxh69jnlpay1e.split;
- var normalize = function (rng) {
- return $_afh56j4mjnlpaxpx.normalize(dom, rng).fold(constant(false), function (normalizedRng) {
- rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset);
- rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset);
- return true;
- });
- };
- return {
- walk: walk,
- split: split,
- normalize: normalize
- };
- }
- (function (RangeUtils) {
- RangeUtils.compareRanges = $_3s8g9y4njnlpaxqj.isEq;
- RangeUtils.getCaretRangeFromPoint = $_445zg66wjnlpay63.fromPoint;
- RangeUtils.getSelectedNode = getSelectedNode;
- RangeUtils.getNode = getNode;
- }(RangeUtils || (RangeUtils = {})));
- var RangeUtils$1 = RangeUtils;
-
- var min = Math.min;
- var max = Math.max;
- var round$2 = Math.round;
- var relativePosition = function (rect, targetRect, rel) {
- var x, y, w, h, targetW, targetH;
- x = targetRect.x;
- y = targetRect.y;
- w = rect.w;
- h = rect.h;
- targetW = targetRect.w;
- targetH = targetRect.h;
- rel = (rel || '').split('');
- if (rel[0] === 'b') {
- y += targetH;
- }
- if (rel[1] === 'r') {
- x += targetW;
- }
- if (rel[0] === 'c') {
- y += round$2(targetH / 2);
- }
- if (rel[1] === 'c') {
- x += round$2(targetW / 2);
- }
- if (rel[3] === 'b') {
- y -= h;
- }
- if (rel[4] === 'r') {
- x -= w;
- }
- if (rel[3] === 'c') {
- y -= round$2(h / 2);
- }
- if (rel[4] === 'c') {
- x -= round$2(w / 2);
- }
- return create$3(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$3(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2);
- };
- var intersect = function (rect, cropRect) {
- var x1, y1, x2, y2;
- x1 = max(rect.x, cropRect.x);
- y1 = max(rect.y, cropRect.y);
- x2 = min(rect.x + rect.w, cropRect.x + cropRect.w);
- y2 = min(rect.y + rect.h, cropRect.y + cropRect.h);
- if (x2 - x1 < 0 || y2 - y1 < 0) {
- return null;
- }
- return create$3(x1, y1, x2 - x1, y2 - y1);
- };
- var clamp$1 = function (rect, clampRect, fixedSize) {
- var underflowX1, underflowY1, overflowX2, overflowY2, x1, y1, x2, y2, cx2, cy2;
- x1 = rect.x;
- y1 = rect.y;
- x2 = rect.x + rect.w;
- y2 = rect.y + rect.h;
- cx2 = clampRect.x + clampRect.w;
- cy2 = clampRect.y + clampRect.h;
- underflowX1 = max(0, clampRect.x - x1);
- underflowY1 = max(0, clampRect.y - y1);
- overflowX2 = max(0, x2 - cx2);
- 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$3(x1, y1, x2 - x1, y2 - y1);
- };
- var create$3 = function (x, y, w, h) {
- return {
- x: x,
- y: y,
- w: w,
- h: h
- };
- };
- var fromClientRect = function (clientRect) {
- return create$3(clientRect.left, clientRect.top, clientRect.width, clientRect.height);
- };
- var $_f1a1rs81jnlpayiu = {
- inflate: inflate,
- relativePosition: relativePosition,
- findBestRelativePosition: findBestRelativePosition,
- intersect: intersect,
- clamp: clamp$1,
- create: create$3,
- fromClientRect: fromClientRect
- };
-
- var types = {};
- var $_4cmhbp82jnlpayiz = {
- add: function (type, typeClass) {
- types[type.toLowerCase()] = typeClass;
- },
- has: function (type) {
- return !!types[type.toLowerCase()];
- },
- get: function (type) {
- var lctype = type.toLowerCase();
- var controlType = types.hasOwnProperty(lctype) ? types[lctype] : null;
- if (controlType === null) {
- throw new Error('Could not find module for type: ' + type);
- }
- return controlType;
- },
- create: function (type, settings) {
- var ControlType;
- if (typeof type === 'string') {
- settings = settings || {};
- settings.type = type;
- } else {
- settings = type;
- type = settings.type;
- }
- type = type.toLowerCase();
- ControlType = types[type];
- if (!ControlType) {
- throw new Error('Could not find control by type: ' + type);
- }
- ControlType = new ControlType(settings);
- ControlType.type = type;
- return ControlType;
- }
- };
-
- var each$23 = $_1q1txeljnlpawsa.each;
- var extend$6 = $_1q1txeljnlpawsa.extend;
- var extendClass;
- var initializing;
- var Class$1 = function () {
- };
- Class$1.extend = extendClass = function (prop) {
- var self = this;
- var _super = self.prototype;
- var prototype, name, member;
- 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;
- var ret;
- self._super = _super[name];
- ret = fn.apply(self, arguments);
- self._super = tmp;
- return ret;
- };
- };
- initializing = true;
- prototype = new self();
- initializing = false;
- if (prop.Mixins) {
- each$23(prop.Mixins, function (mixin) {
- for (var name_1 in mixin) {
- if (name_1 !== 'init') {
- prop[name_1] = mixin[name_1];
- }
- }
- });
- if (_super.Mixins) {
- prop.Mixins = _super.Mixins.concat(prop.Mixins);
- }
- }
- if (prop.Methods) {
- each$23(prop.Methods.split(','), function (name) {
- prop[name] = dummy;
- });
- }
- if (prop.Properties) {
- each$23(prop.Properties.split(','), function (name) {
- var fieldName = '_' + name;
- prop[name] = function (value) {
- var self = this;
- if (value !== undefined) {
- self[fieldName] = value;
- return self;
- }
- return self[fieldName];
- };
- });
- }
- if (prop.Statics) {
- each$23(prop.Statics, function (func, name) {
- Class[name] = func;
- });
- }
- if (prop.Defaults && _super.Defaults) {
- prop.Defaults = extend$6({}, _super.Defaults, prop.Defaults);
- }
- for (name in prop) {
- member = prop[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;
- var max$1 = Math.max;
- var round$3 = 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, d, minRGB, maxRGB;
- h = 0;
- s = 0;
- v = 0;
- r = r / 255;
- g = g / 255;
- b = b / 255;
- minRGB = min$1(r, min$1(g, b));
- maxRGB = max$1(r, max$1(g, b));
- if (minRGB === maxRGB) {
- v = minRGB;
- return {
- h: 0,
- s: 0,
- v: v * 100
- };
- }
- 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$3(h),
- s: round$3(s * 100),
- v: round$3(v * 100)
- };
- };
- var hsvToRgb = function (hue, saturation, brightness) {
- var side, chroma, x, match;
- 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$3(255 * brightness);
- return;
- }
- side = hue / 60;
- chroma = brightness * saturation;
- x = chroma * (1 - Math.abs(side % 2 - 1));
- 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$3(255 * (r + match));
- g = round$3(255 * (g + match));
- b = round$3(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 (o, quote) {
- var i, v, t, name;
- quote = quote || '"';
- if (o === null) {
- return 'null';
- }
- t = typeof o;
- if (t === 'string') {
- v = '\bb\tt\nn\ff\rr""\'\'\\\\';
- return quote + o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g, function (a, b) {
- if (quote === '"' && a === '\'') {
- return a;
- }
- i = v.indexOf(b);
- if (i + 1) {
- return '\\' + v.charAt(i + 1);
- }
- a = b.charCodeAt().toString(16);
- return '\\u' + '0000'.substring(a.length) + a;
- }) + quote;
- }
- if (t === 'object') {
- if (o.hasOwnProperty && Object.prototype.toString.call(o) === '[object Array]') {
- for (i = 0, v = '['; i < o.length; i++) {
- v += (i > 0 ? ',' : '') + serialize(o[i], quote);
- }
- return v + ']';
- }
- v = '{';
- for (name in o) {
- if (o.hasOwnProperty(name)) {
- v += typeof o[name] !== 'function' ? (v.length > 1 ? ',' + quote : quote) + name + quote + ':' + serialize(o[name], quote) : '';
- }
- }
- return v + '}';
- }
- return '' + o;
- };
- var $_aw5rjw85jnlpayja = {
- serialize: serialize,
- parse: function (text) {
- try {
- return JSON.parse(text);
- } catch (ex) {
- }
- }
- };
-
- var $_oa3la86jnlpayji = {
- callbacks: {},
- count: 0,
- send: function (settings) {
- var self = this, dom = DOMUtils$1.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 = {
- 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 {
- 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 ? false : true;
- settings.data = settings.data || '';
- XHR.fire('beforeInitialize', { settings: settings });
- xhr = XMLHttpRequest();
- if (xhr) {
- 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) {
- $_1q1txeljnlpawsa.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();
- }
- setTimeout(ready, 10);
- }
- }
- };
- $_1q1txeljnlpawsa.extend(XHR, $_c8v03c4tjnlpaxrw);
-
- var extend$7 = $_1q1txeljnlpawsa.extend;
- var JSONRequest = function (settings) {
- this.settings = extend$7({}, 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;
- args = extend$7(this.settings, args);
- args.success = function (c, x) {
- c = $_aw5rjw85jnlpayja.parse(c);
- if (typeof c === 'undefined') {
- c = { error: 'JSON Parse error.' };
- }
- if (c.error) {
- ecb.call(args.error_scope || args.scope, c.error, x);
- } else {
- scb.call(args.success_scope || args.scope, c.result);
- }
- };
- args.error = function (ty, x) {
- if (ecb) {
- ecb.call(args.error_scope || args.scope, ty, x);
- }
- };
- args.data = $_aw5rjw85jnlpayja.serialize({
- id: args.id || 'c' + this.count++,
- method: args.method,
- params: args.params
- });
- args.content_type = 'application/json';
- XHR.send(args);
- }
- };
-
- var create$4 = 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$$1;
- try {
- localStorage$$1 = window.localStorage;
- } catch (e) {
- localStorage$$1 = create$4();
- }
- var LocalStorage = localStorage$$1;
-
- var tinymce = EditorManager$1;
- var publicApi = {
- geom: { Rect: $_f1a1rs81jnlpayiu },
- util: {
- Promise: promiseObj,
- Delay: $_2nbnh1ijnlpawpi,
- Tools: $_1q1txeljnlpawsa,
- VK: $_1qv0695yjnlpaxyk,
- URI: URI,
- Class: Class$1,
- EventDispatcher: Dispatcher,
- Observable: $_c8v03c4tjnlpaxrw,
- I18n: $_f6nmn17zjnlpayic,
- XHR: XHR,
- JSON: $_aw5rjw85jnlpayja,
- JSONRequest: JSONRequest,
- JSONP: $_oa3la86jnlpayji,
- LocalStorage: LocalStorage,
- Color: Color
- },
- dom: {
- EventUtils: EventUtils,
- Sizzle: Sizzle,
- DomQuery: DomQuery,
- TreeWalker: TreeWalker,
- DOMUtils: DOMUtils$1,
- ScriptLoader: ScriptLoader,
- RangeUtils: RangeUtils$1,
- Serializer: DomSerializer$1,
- ControlSelection: ControlSelection,
- BookmarkManager: BookmarkManager$1,
- Selection: Selection$1,
- Event: EventUtils.Event
- },
- html: {
- Styles: Styles,
- Entities: $_bea7j51sjnlpax2u,
- Node: Node$2,
- Schema: Schema,
- SaxParser: SaxParser$1,
- DomParser: DomParser,
- Writer: Writer,
- Serializer: HtmlSerializer
- },
- ui: { Factory: $_4cmhbp82jnlpayiz },
- Env: $_cseqobajnlpawll,
- AddOnManager: AddOnManager,
- Annotator: Annotator,
- Formatter: Formatter,
- UndoManager: UndoManager,
- EditorCommands: EditorCommands,
- WindowManager: WindowManager,
- NotificationManager: NotificationManager,
- EditorObservable: EditorObservable$1,
- Shortcuts: Shortcuts,
- Editor: Editor,
- FocusManager: $_598dic7xjnlpayi4,
- EditorManager: EditorManager$1,
- DOM: DOMUtils$1.DOM,
- ScriptLoader: ScriptLoader.ScriptLoader,
- PluginManager: AddOnManager.PluginManager,
- ThemeManager: AddOnManager.ThemeManager,
- trim: $_1q1txeljnlpawsa.trim,
- isArray: $_1q1txeljnlpawsa.isArray,
- is: $_1q1txeljnlpawsa.is,
- toArray: $_1q1txeljnlpawsa.toArray,
- makeMap: $_1q1txeljnlpawsa.makeMap,
- each: $_1q1txeljnlpawsa.each,
- map: $_1q1txeljnlpawsa.map,
- grep: $_1q1txeljnlpawsa.grep,
- inArray: $_1q1txeljnlpawsa.inArray,
- extend: $_1q1txeljnlpawsa.extend,
- create: $_1q1txeljnlpawsa.create,
- walk: $_1q1txeljnlpawsa.walk,
- createNS: $_1q1txeljnlpawsa.createNS,
- resolve: $_1q1txeljnlpawsa.resolve,
- explode: $_1q1txeljnlpawsa.explode,
- _addCacheSuffix: $_1q1txeljnlpawsa._addCacheSuffix,
- isOpera: $_cseqobajnlpawll.opera,
- isWebKit: $_cseqobajnlpawll.webkit,
- isIE: $_cseqobajnlpawll.ie,
- isGecko: $_cseqobajnlpawll.gecko,
- isMac: $_cseqobajnlpawll.mac
- };
- tinymce = $_1q1txeljnlpawsa.extend(tinymce, publicApi);
- var Tinymce = tinymce;
-
- 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/tinymce-1098dd3a232d42146ff7bf2cdffed0f7358ac2cf1798aa209abc7ab367ff59f4.js.gz b/public/assets/tinymce/tinymce-1098dd3a232d42146ff7bf2cdffed0f7358ac2cf1798aa209abc7ab367ff59f4.js.gz
deleted file mode 100644
index bb53beba..00000000
Binary files a/public/assets/tinymce/tinymce-1098dd3a232d42146ff7bf2cdffed0f7358ac2cf1798aa209abc7ab367ff59f4.js.gz and /dev/null differ
diff --git a/public/assets/tinymce/tinymce-31850548e5497145232118f93e5f8e31f1655790c0bfbd2ca754f0d4587deaaa.js b/public/assets/tinymce/tinymce-31850548e5497145232118f93e5f8e31f1655790c0bfbd2ca754f0d4587deaaa.js
new file mode 100644
index 00000000..e8a2aeff
--- /dev/null
+++ b/public/assets/tinymce/tinymce-31850548e5497145232118f93e5f8e31f1655790c0bfbd2ca754f0d4587deaaa.js
@@ -0,0 +1,26576 @@
+// 4.9.2 (2018-12-17)
+(function () {
+(function () {
+ 'use strict';
+
+ var noop = function () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ };
+ 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 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 () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ return !f.apply(null, args);
+ };
+ };
+ var die = function (msg) {
+ return function () {
+ throw new Error(msg);
+ };
+ };
+ var never = constant(false);
+ var always = constant(true);
+
+ var never$1 = never;
+ var always$1 = always;
+ var none = function () {
+ return NONE;
+ };
+ var NONE = function () {
+ var eq = function (o) {
+ return o.isNone();
+ };
+ var call$$1 = function (thunk) {
+ return thunk();
+ };
+ var id = function (n) {
+ return n;
+ };
+ var noop$$1 = function () {
+ };
+ var nul = function () {
+ return null;
+ };
+ var undef = function () {
+ return undefined;
+ };
+ var me = {
+ fold: function (n, s) {
+ return n();
+ },
+ is: never$1,
+ isSome: never$1,
+ isNone: always$1,
+ getOr: id,
+ getOrThunk: call$$1,
+ getOrDie: function (msg) {
+ throw new Error(msg || 'error: getOrDie called on none.');
+ },
+ getOrNull: nul,
+ getOrUndefined: undef,
+ or: id,
+ orThunk: call$$1,
+ map: none,
+ ap: none,
+ each: noop$$1,
+ bind: none,
+ flatten: none,
+ exists: never$1,
+ forall: always$1,
+ filter: none,
+ equals: eq,
+ equals_: eq,
+ toArray: function () {
+ return [];
+ },
+ toString: constant('none()')
+ };
+ if (Object.freeze)
+ Object.freeze(me);
+ return me;
+ }();
+ var some = function (a) {
+ var constant_a = function () {
+ return a;
+ };
+ var self = function () {
+ return me;
+ };
+ var map = function (f) {
+ return some(f(a));
+ };
+ var bind = function (f) {
+ return f(a);
+ };
+ var me = {
+ fold: function (n, s) {
+ return s(a);
+ },
+ is: function (v) {
+ return a === v;
+ },
+ isSome: always$1,
+ isNone: never$1,
+ getOr: constant_a,
+ getOrThunk: constant_a,
+ getOrDie: constant_a,
+ getOrNull: constant_a,
+ getOrUndefined: constant_a,
+ or: self,
+ orThunk: self,
+ map: map,
+ ap: function (optfab) {
+ return optfab.fold(none, function (fab) {
+ return some(fab(a));
+ });
+ },
+ each: function (f) {
+ f(a);
+ },
+ bind: bind,
+ flatten: constant_a,
+ exists: bind,
+ forall: bind,
+ filter: function (f) {
+ return f(a) ? me : NONE;
+ },
+ equals: function (o) {
+ return o.is(a);
+ },
+ equals_: function (o, elementEq) {
+ return o.fold(never$1, function (b) {
+ return elementEq(a, b);
+ });
+ },
+ toArray: function () {
+ return [a];
+ },
+ toString: function () {
+ return 'some(' + a + ')';
+ }
+ };
+ return me;
+ };
+ var from = function (value) {
+ return value === null || value === undefined ? NONE : some(value);
+ };
+ var Option = {
+ some: some,
+ none: none,
+ from: from
+ };
+
+ var typeOf = function (x) {
+ if (x === null)
+ return 'null';
+ var t = typeof x;
+ if (t === 'object' && Array.prototype.isPrototypeOf(x))
+ return 'array';
+ if (t === 'object' && String.prototype.isPrototypeOf(x))
+ return 'string';
+ return t;
+ };
+ var isType = function (type) {
+ return function (value) {
+ return typeOf(value) === type;
+ };
+ };
+ var isString = isType('string');
+ var isObject = isType('object');
+ var isArray = isType('array');
+ var isNull = isType('null');
+ var isBoolean = isType('boolean');
+ var isFunction = isType('function');
+ var isNumber = isType('number');
+
+ var rawIndexOf = function () {
+ var pIndexOf = Array.prototype.indexOf;
+ var fastIndex = function (xs, x) {
+ return pIndexOf.call(xs, x);
+ };
+ var slowIndex = function (xs, x) {
+ return slowIndexOf(xs, x);
+ };
+ return pIndexOf === undefined ? slowIndex : fastIndex;
+ }();
+ var indexOf = function (xs, x) {
+ var r = rawIndexOf(xs, x);
+ return r === -1 ? Option.none() : Option.some(r);
+ };
+ var contains = function (xs, x) {
+ return rawIndexOf(xs, x) > -1;
+ };
+ var exists = function (xs, pred) {
+ return findIndex(xs, pred).isSome();
+ };
+ 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, xs);
+ }
+ return r;
+ };
+ var each = function (xs, f) {
+ for (var i = 0, len = xs.length; i < len; i++) {
+ var x = xs[i];
+ f(x, i, xs);
+ }
+ };
+ var eachr = function (xs, f) {
+ for (var i = xs.length - 1; i >= 0; i--) {
+ var x = xs[i];
+ f(x, i, xs);
+ }
+ };
+ 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, xs) ? 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, xs)) {
+ 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 find = function (xs, pred) {
+ for (var i = 0, len = xs.length; i < len; i++) {
+ var x = xs[i];
+ if (pred(x, i, xs)) {
+ return Option.some(x);
+ }
+ }
+ return Option.none();
+ };
+ var findIndex = function (xs, pred) {
+ for (var i = 0, len = xs.length; i < len; i++) {
+ var x = xs[i];
+ if (pred(x, i, xs)) {
+ return Option.some(i);
+ }
+ }
+ return Option.none();
+ };
+ var slowIndexOf = function (xs, x) {
+ for (var i = 0, len = xs.length; i < len; ++i) {
+ if (xs[i] === x) {
+ return i;
+ }
+ }
+ return -1;
+ };
+ var push = Array.prototype.push;
+ var flatten = function (xs) {
+ var r = [];
+ for (var i = 0, len = xs.length; i < len; ++i) {
+ if (!Array.prototype.isPrototypeOf(xs[i]))
+ throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
+ push.apply(r, xs[i]);
+ }
+ return r;
+ };
+ var bind = function (xs, f) {
+ var output = map(xs, f);
+ return flatten(output);
+ };
+ var forall = function (xs, pred) {
+ for (var i = 0, len = xs.length; i < len; ++i) {
+ var x = xs[i];
+ if (pred(x, i, xs) !== true) {
+ return false;
+ }
+ }
+ return true;
+ };
+ var slice = Array.prototype.slice;
+ var reverse = function (xs) {
+ var r = slice.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 = function (xs, comparator) {
+ var copy = slice.call(xs, 0);
+ copy.sort(comparator);
+ return copy;
+ };
+ var head = function (xs) {
+ return xs.length === 0 ? Option.none() : Option.some(xs[0]);
+ };
+ var last = function (xs) {
+ return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);
+ };
+ var from$1 = isFunction(Array.from) ? Array.from : function (x) {
+ return slice.call(x);
+ };
+
+ var Global = typeof window !== 'undefined' ? window : Function('return this;')();
+
+ var path = function (parts, scope) {
+ var o = scope !== undefined && scope !== null ? scope : Global;
+ for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i)
+ o = o[parts[i]];
+ return o;
+ };
+ var resolve = function (p, scope) {
+ var parts = p.split('.');
+ return path(parts, scope);
+ };
+
+ var unsafe = function (name, scope) {
+ return resolve(name, scope);
+ };
+ var getOrDie = function (name, scope) {
+ var actual = unsafe(name, scope);
+ if (actual === undefined || actual === null)
+ throw name + ' not available on this browser';
+ return actual;
+ };
+ var Global$1 = { getOrDie: getOrDie };
+
+ var url = function () {
+ return Global$1.getOrDie('URL');
+ };
+ var createObjectURL = function (blob) {
+ return url().createObjectURL(blob);
+ };
+ var revokeObjectURL = function (u) {
+ url().revokeObjectURL(u);
+ };
+ var URL = {
+ createObjectURL: createObjectURL,
+ revokeObjectURL: revokeObjectURL
+ };
+
+ var nav = navigator, userAgent = nav.userAgent;
+ var opera, webkit, ie, ie11, ie12, gecko, mac, iDevice, android, fileApi, phone, tablet, windowsPhone;
+ var matchMediaQuery = function (query) {
+ return 'matchMedia' in window ? matchMedia(query).matches : false;
+ };
+ opera = false;
+ android = /Android/.test(userAgent);
+ webkit = /WebKit/.test(userAgent);
+ ie = !webkit && !opera && /MSIE/gi.test(userAgent) && /Explorer/gi.test(nav.appName);
+ ie = ie && /MSIE (\w+)\./.exec(userAgent)[1];
+ ie11 = userAgent.indexOf('Trident/') !== -1 && (userAgent.indexOf('rv:') !== -1 || nav.appName.indexOf('Netscape') !== -1) ? 11 : false;
+ ie12 = userAgent.indexOf('Edge/') !== -1 && !ie && !ie11 ? 12 : false;
+ ie = ie || ie11 || ie12;
+ gecko = !webkit && !ie11 && /Gecko/.test(userAgent);
+ mac = userAgent.indexOf('Mac') !== -1;
+ iDevice = /(iPad|iPhone)/.test(userAgent);
+ fileApi = 'FormData' in window && 'FileReader' in window && 'URL' in window && !!URL.createObjectURL;
+ phone = matchMediaQuery('only screen and (max-device-width: 480px)') && (android || iDevice);
+ tablet = matchMediaQuery('only screen and (min-width: 800px)') && (android || iDevice);
+ windowsPhone = userAgent.indexOf('Windows Phone') !== -1;
+ if (ie12) {
+ webkit = false;
+ }
+ var contentEditable = !iDevice || fileApi || parseInt(userAgent.match(/AppleWebKit\/(\d*)/)[1], 10) >= 534;
+ var Env = {
+ opera: opera,
+ webkit: webkit,
+ ie: ie,
+ gecko: gecko,
+ mac: mac,
+ iOS: iDevice,
+ android: android,
+ contentEditable: contentEditable,
+ transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',
+ caretAfter: ie !== 8,
+ range: window.getSelection && 'Range' in window,
+ documentMode: ie && !ie12 ? document.documentMode || 7 : 10,
+ fileApi: fileApi,
+ ceFalse: ie === false || ie > 8,
+ cacheSuffix: null,
+ container: null,
+ overrideViewPort: null,
+ experimentalShadowDom: false,
+ canHaveCSP: ie === false || ie > 11,
+ desktop: !phone && !tablet,
+ windowsPhone: windowsPhone
+ };
+
+ var promise = function () {
+ function bind(fn, thisArg) {
+ return function () {
+ fn.apply(thisArg, arguments);
+ };
+ }
+ 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) {
+ 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;
+ }
+ function doResolve(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 args = Array.prototype.slice.call(arguments.length === 1 && isArray(arguments[0]) ? arguments[0] : arguments);
+ 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);
+ }
+ });
+ };
+ return Promise;
+ };
+ var promiseObj = window.Promise ? window.Promise : promise();
+
+ var requestAnimationFramePromise;
+ var requestAnimationFrame$$1 = function (callback, element) {
+ var i, requestAnimationFrameFunc = window.requestAnimationFrame;
+ var vendors = [
+ 'ms',
+ 'moz',
+ 'webkit'
+ ];
+ var featurefill = function (callback) {
+ window.setTimeout(callback, 0);
+ };
+ for (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, func;
+ func = function () {
+ var args = arguments;
+ 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$$1(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;
+ timer = wrappedSetInterval(function () {
+ if (!editor.removed) {
+ callback();
+ } else {
+ clearInterval(timer);
+ }
+ }, time);
+ return timer;
+ },
+ debounce: debounce,
+ throttle: debounce,
+ clearInterval: wrappedClearInterval,
+ clearTimeout: wrappedClearTimeout
+ };
+
+ 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
+ };
+ var hasIsDefaultPrevented = function (event$$1) {
+ return event$$1.isDefaultPrevented === returnTrue || event$$1.isDefaultPrevented === returnFalse;
+ };
+ var returnFalse = function () {
+ return false;
+ };
+ var returnTrue = function () {
+ return true;
+ };
+ var addEvent = function (target, name$$1, callback, capture) {
+ if (target.addEventListener) {
+ target.addEventListener(name$$1, callback, capture || false);
+ } else if (target.attachEvent) {
+ target.attachEvent('on' + name$$1, callback);
+ }
+ };
+ var removeEvent = function (target, name$$1, callback, capture) {
+ if (target.removeEventListener) {
+ target.removeEventListener(name$$1, callback, capture || false);
+ } else if (target.detachEvent) {
+ target.detachEvent('on' + name$$1, callback);
+ }
+ };
+ var getTargetFromShadowDom = function (event$$1, defaultTarget) {
+ if (event$$1.composedPath) {
+ var composedPath = event$$1.composedPath();
+ if (composedPath && composedPath.length > 0) {
+ return composedPath[0];
+ }
+ }
+ return defaultTarget;
+ };
+ var fix = function (originalEvent, data) {
+ var name$$1;
+ var event$$1 = data || {};
+ for (name$$1 in originalEvent) {
+ if (!deprecated[name$$1]) {
+ event$$1[name$$1] = originalEvent[name$$1];
+ }
+ }
+ if (!event$$1.target) {
+ event$$1.target = event$$1.srcElement || document;
+ }
+ if (Env.experimentalShadowDom) {
+ event$$1.target = getTargetFromShadowDom(originalEvent, event$$1.target);
+ }
+ if (originalEvent && mouseEventRe.test(originalEvent.type) && originalEvent.pageX === undefined && originalEvent.clientX !== undefined) {
+ var eventDoc = event$$1.target.ownerDocument || document;
+ var doc = eventDoc.documentElement;
+ var body = eventDoc.body;
+ event$$1.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
+ event$$1.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
+ }
+ event$$1.preventDefault = function () {
+ event$$1.isDefaultPrevented = returnTrue;
+ if (originalEvent) {
+ if (originalEvent.preventDefault) {
+ originalEvent.preventDefault();
+ } else {
+ originalEvent.returnValue = false;
+ }
+ }
+ };
+ event$$1.stopPropagation = function () {
+ event$$1.isPropagationStopped = returnTrue;
+ if (originalEvent) {
+ if (originalEvent.stopPropagation) {
+ originalEvent.stopPropagation();
+ } else {
+ originalEvent.cancelBubble = true;
+ }
+ }
+ };
+ event$$1.stopImmediatePropagation = function () {
+ event$$1.isImmediatePropagationStopped = returnTrue;
+ event$$1.stopPropagation();
+ };
+ if (hasIsDefaultPrevented(event$$1) === false) {
+ event$$1.isDefaultPrevented = returnFalse;
+ event$$1.isPropagationStopped = returnFalse;
+ event$$1.isImmediatePropagationStopped = returnFalse;
+ }
+ if (typeof event$$1.metaKey === 'undefined') {
+ event$$1.metaKey = false;
+ }
+ return event$$1;
+ };
+ var bindOnReady = function (win, callback, eventUtils) {
+ var doc = win.document, event$$1 = { type: 'ready' };
+ if (eventUtils.domLoaded) {
+ callback(event$$1);
+ return;
+ }
+ var isDocReady = function () {
+ return doc.readyState === 'complete' || doc.readyState === 'interactive' && doc.body;
+ };
+ var readyHandler = function () {
+ if (!eventUtils.domLoaded) {
+ eventUtils.domLoaded = true;
+ callback(event$$1);
+ }
+ };
+ var waitForDomLoaded = function () {
+ if (isDocReady()) {
+ removeEvent(doc, 'readystatechange', waitForDomLoaded);
+ readyHandler();
+ }
+ };
+ var tryScroll = function () {
+ try {
+ doc.documentElement.doScroll('left');
+ } catch (ex) {
+ Delay.setTimeout(tryScroll);
+ return;
+ }
+ readyHandler();
+ };
+ if (doc.addEventListener && !(Env.ie && Env.ie < 11)) {
+ if (isDocReady()) {
+ readyHandler();
+ } else {
+ addEvent(win, 'DOMContentLoaded', readyHandler);
+ }
+ } else {
+ addEvent(doc, 'readystatechange', waitForDomLoaded);
+ if (doc.documentElement.doScroll && win.self === win.top) {
+ tryScroll();
+ }
+ }
+ addEvent(win, 'load', readyHandler);
+ };
+ var EventUtils = function () {
+ var self$$1 = this;
+ var events = {}, count, expando, hasFocusIn, hasMouseEnterLeave, mouseEnterLeave;
+ expando = eventExpandoPrefix + (+new Date()).toString(32);
+ hasMouseEnterLeave = 'onmouseenter' in document.documentElement;
+ hasFocusIn = 'onfocusin' in document.documentElement;
+ mouseEnterLeave = {
+ mouseenter: 'mouseover',
+ mouseleave: 'mouseout'
+ };
+ count = 1;
+ self$$1.domLoaded = false;
+ self$$1.events = events;
+ var executeHandlers = function (evt, id) {
+ var callbackList, i, l, callback;
+ var container = events[id];
+ callbackList = container && container[evt.type];
+ if (callbackList) {
+ for (i = 0, l = callbackList.length; i < l; i++) {
+ callback = callbackList[i];
+ if (callback && callback.func.call(callback.scope, evt) === false) {
+ evt.preventDefault();
+ }
+ if (evt.isImmediatePropagationStopped()) {
+ return;
+ }
+ }
+ }
+ };
+ self$$1.bind = function (target, names, callback, scope) {
+ var id, callbackList, i, name$$1, fakeName, nativeHandler, capture;
+ var win = window;
+ var defaultNativeHandler = function (evt) {
+ executeHandlers(fix(evt || win.event), id);
+ };
+ if (!target || target.nodeType === 3 || target.nodeType === 8) {
+ return;
+ }
+ if (!target[expando]) {
+ id = count++;
+ target[expando] = id;
+ events[id] = {};
+ } else {
+ id = target[expando];
+ }
+ scope = scope || target;
+ names = names.split(' ');
+ i = names.length;
+ while (i--) {
+ name$$1 = names[i];
+ nativeHandler = defaultNativeHandler;
+ fakeName = capture = false;
+ if (name$$1 === 'DOMContentLoaded') {
+ name$$1 = 'ready';
+ }
+ if (self$$1.domLoaded && name$$1 === 'ready' && target.readyState === 'complete') {
+ callback.call(scope, fix({ type: name$$1 }));
+ continue;
+ }
+ if (!hasMouseEnterLeave) {
+ fakeName = mouseEnterLeave[name$$1];
+ if (fakeName) {
+ nativeHandler = function (evt) {
+ var current, related;
+ current = evt.currentTarget;
+ 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;
+ executeHandlers(evt, id);
+ }
+ };
+ }
+ }
+ if (!hasFocusIn && (name$$1 === 'focusin' || name$$1 === 'focusout')) {
+ capture = true;
+ fakeName = name$$1 === 'focusin' ? 'focus' : 'blur';
+ nativeHandler = function (evt) {
+ evt = fix(evt || win.event);
+ evt.type = evt.type === 'focus' ? 'focusin' : 'focusout';
+ executeHandlers(evt, id);
+ };
+ }
+ callbackList = events[id][name$$1];
+ if (!callbackList) {
+ events[id][name$$1] = callbackList = [{
+ func: callback,
+ scope: scope
+ }];
+ callbackList.fakeName = fakeName;
+ callbackList.capture = capture;
+ callbackList.nativeHandler = nativeHandler;
+ if (name$$1 === 'ready') {
+ bindOnReady(target, nativeHandler, self$$1);
+ } else {
+ addEvent(target, fakeName || name$$1, nativeHandler, capture);
+ }
+ } else {
+ if (name$$1 === 'ready' && self$$1.domLoaded) {
+ callback({ type: name$$1 });
+ } else {
+ callbackList.push({
+ func: callback,
+ scope: scope
+ });
+ }
+ }
+ }
+ target = callbackList = 0;
+ return callback;
+ };
+ self$$1.unbind = function (target, names, callback) {
+ var id, callbackList, i, ci, name$$1, eventMap;
+ if (!target || target.nodeType === 3 || target.nodeType === 8) {
+ return self$$1;
+ }
+ id = target[expando];
+ if (id) {
+ eventMap = events[id];
+ if (names) {
+ names = names.split(' ');
+ i = names.length;
+ while (i--) {
+ name$$1 = names[i];
+ callbackList = eventMap[name$$1];
+ 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$$1] = callbackList;
+ }
+ }
+ }
+ if (!callback || callbackList.length === 0) {
+ delete eventMap[name$$1];
+ removeEvent(target, callbackList.fakeName || name$$1, callbackList.nativeHandler, callbackList.capture);
+ }
+ }
+ }
+ } else {
+ for (name$$1 in eventMap) {
+ callbackList = eventMap[name$$1];
+ removeEvent(target, callbackList.fakeName || name$$1, callbackList.nativeHandler, callbackList.capture);
+ }
+ eventMap = {};
+ }
+ for (name$$1 in eventMap) {
+ return self$$1;
+ }
+ delete events[id];
+ try {
+ delete target[expando];
+ } catch (ex) {
+ target[expando] = null;
+ }
+ }
+ return self$$1;
+ };
+ self$$1.fire = function (target, name$$1, args) {
+ var id;
+ if (!target || target.nodeType === 3 || target.nodeType === 8) {
+ return self$$1;
+ }
+ args = fix(null, args);
+ args.type = name$$1;
+ args.target = target;
+ do {
+ id = target[expando];
+ if (id) {
+ executeHandlers(args, id);
+ }
+ target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow;
+ } while (target && !args.isPropagationStopped());
+ return self$$1;
+ };
+ self$$1.clean = function (target) {
+ var i, children;
+ var unbind = self$$1.unbind;
+ if (!target || target.nodeType === 3 || target.nodeType === 8) {
+ return self$$1;
+ }
+ if (target[expando]) {
+ unbind(target);
+ }
+ if (!target.getElementsByTagName) {
+ target = target.document;
+ }
+ if (target && target.getElementsByTagName) {
+ unbind(target);
+ children = target.getElementsByTagName('*');
+ i = children.length;
+ while (i--) {
+ target = children[i];
+ if (target[expando]) {
+ unbind(target);
+ }
+ }
+ }
+ return self$$1;
+ };
+ self$$1.destroy = function () {
+ events = {};
+ };
+ self$$1.cancel = function (e) {
+ if (e) {
+ e.preventDefault();
+ e.stopImmediatePropagation();
+ }
+ return false;
+ };
+ };
+ EventUtils.Event = new EventUtils();
+ EventUtils.Event.bind(window, 'ready', function () {
+ });
+
+ var i, support, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, setDocument, document$1, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains$1, 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$1 = arr.push, slice$1 = arr.slice, indexOf$1 = 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$1.apply(arr = slice$1.call(preferredDoc.childNodes), preferredDoc.childNodes);
+ arr[preferredDoc.childNodes.length].nodeType;
+ } catch (e) {
+ push$1 = {
+ apply: arr.length ? function (target, els) {
+ push_native.apply(target, slice$1.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$1(context, elem) && elem.id === m) {
+ results.push(elem);
+ return results;
+ }
+ }
+ } else if (match[2]) {
+ push$1.apply(results, context.getElementsByTagName(selector));
+ return results;
+ } else if ((m = match[3]) && support.getElementsByClassName) {
+ push$1.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$1.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$$1 = elem.nodeName.toLowerCase();
+ return name$$1 === 'input' && elem.type === type;
+ };
+ }
+ function createButtonPseudo(type) {
+ return function (elem) {
+ var name$$1 = elem.nodeName.toLowerCase();
+ return (name$$1 === 'input' || name$$1 === '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$$1 = 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$$1 && parent$$1 !== getTop(parent$$1)) {
+ if (parent$$1.addEventListener) {
+ parent$$1.addEventListener('unload', function () {
+ setDocument();
+ }, false);
+ } else if (parent$$1.attachEvent) {
+ parent$$1.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$1 = 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$1(preferredDoc, a)) {
+ return -1;
+ }
+ if (b === doc || b.ownerDocument === preferredDoc && contains$1(preferredDoc, b)) {
+ return 1;
+ }
+ return sortInput ? indexOf$1.call(sortInput, a) - indexOf$1.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$1.call(sortInput, a) - indexOf$1.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$1(context, elem);
+ };
+ Sizzle.attr = function (elem, name$$1) {
+ if ((elem.ownerDocument || elem) !== document$1) {
+ setDocument(elem);
+ }
+ var fn = Expr.attrHandle[name$$1.toLowerCase()], val = fn && hasOwn.call(Expr.attrHandle, name$$1.toLowerCase()) ? fn(elem, name$$1, !documentIsHTML) : undefined;
+ return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name$$1) : (val = elem.getAttributeNode(name$$1)) && 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$$1, operator, check) {
+ return function (elem) {
+ var result = Sizzle.attr(elem, name$$1);
+ 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$$1 = elem.parentNode, name$$1 = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType;
+ if (parent$$1) {
+ if (simple) {
+ while (dir) {
+ node = elem;
+ while (node = node[dir]) {
+ if (ofType ? node.nodeName.toLowerCase() === name$$1 : node.nodeType === 1) {
+ return false;
+ }
+ }
+ start = dir = type === 'only' && !start && 'nextSibling';
+ }
+ return true;
+ }
+ start = [forward ? parent$$1.firstChild : parent$$1.lastChild];
+ if (forward && useCache) {
+ outerCache = parent$$1[expando] || (parent$$1[expando] = {});
+ cache = outerCache[type] || [];
+ nodeIndex = cache[0] === dirruns && cache[1];
+ diff = cache[0] === dirruns && cache[2];
+ node = nodeIndex && parent$$1.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$$1 : 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$1.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);
+ 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$$1 = elem.nodeName.toLowerCase();
+ return name$$1 === 'input' && elem.type === 'button' || name$$1 === '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$$1) {
+ return [length$$1 - 1];
+ }),
+ eq: createPositionalPseudo(function (matchIndexes, length$$1, argument) {
+ return [argument < 0 ? argument + length$$1 : argument];
+ }),
+ even: createPositionalPseudo(function (matchIndexes, length$$1) {
+ var i = 0;
+ for (; i < length$$1; i += 2) {
+ matchIndexes.push(i);
+ }
+ return matchIndexes;
+ }),
+ odd: createPositionalPseudo(function (matchIndexes, length$$1) {
+ var i = 1;
+ for (; i < length$$1; i += 2) {
+ matchIndexes.push(i);
+ }
+ return matchIndexes;
+ }),
+ lt: createPositionalPseudo(function (matchIndexes, length$$1, argument) {
+ var i = argument < 0 ? argument + length$$1 : argument;
+ for (; --i >= 0;) {
+ matchIndexes.push(i);
+ }
+ return matchIndexes;
+ }),
+ gt: createPositionalPseudo(function (matchIndexes, length$$1, argument) {
+ var i = argument < 0 ? argument + length$$1 : argument;
+ for (; ++i < length$$1;) {
+ matchIndexes.push(i);
+ }
+ return matchIndexes;
+ })
+ }
+ };
+ Expr.pseudos.nth = Expr.pseudos.eq;
+ for (i in {
+ radio: true,
+ checkbox: true,
+ file: true,
+ password: true,
+ image: true
+ }) {
+ Expr.pseudos[i] = createInputPseudo(i);
+ }
+ for (i in {
+ submit: true,
+ reset: true
+ }) {
+ 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 ((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$1.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$1.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$1.call(checkContext, elem) > -1;
+ }, implicitRelative, true), matchers = [function (elem, context, xml) {
+ return !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));
+ }];
+ 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$1.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$1.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 isArray$1 = Array.isArray;
+ var toArray = function (obj) {
+ var array = obj, i, l;
+ if (!isArray$1(obj)) {
+ array = [];
+ for (i = 0, l = obj.length; i < l; i++) {
+ array[i] = obj[i];
+ }
+ }
+ return array;
+ };
+ var each$1 = function (o, cb, s) {
+ var n, l;
+ if (!o) {
+ return 0;
+ }
+ 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 0;
+ }
+ }
+ } else {
+ for (n in o) {
+ if (o.hasOwnProperty(n)) {
+ if (cb.call(s, o[n], n, o) === false) {
+ return 0;
+ }
+ }
+ }
+ }
+ return 1;
+ };
+ var map$1 = function (array, callback) {
+ var out = [];
+ each$1(array, function (item, index) {
+ out.push(callback(item, index, array));
+ });
+ return out;
+ };
+ var filter$1 = function (a, f) {
+ var o = [];
+ each$1(a, function (v, index) {
+ if (!f || f(v, index, a)) {
+ o.push(v);
+ }
+ });
+ return o;
+ };
+ var indexOf$2 = function (a, v) {
+ var i, l;
+ if (a) {
+ for (i = 0, l = a.length; i < l; i++) {
+ if (a[i] === v) {
+ return i;
+ }
+ }
+ }
+ return -1;
+ };
+ var reduce = function (collection, iteratee, accumulator, thisArg) {
+ var i = 0;
+ if (arguments.length < 3) {
+ accumulator = collection[0];
+ }
+ for (; i < collection.length; i++) {
+ accumulator = iteratee.call(thisArg, accumulator, collection[i], i);
+ }
+ return accumulator;
+ };
+ 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 find$1 = function (array, predicate, thisArg) {
+ var idx = findIndex$1(array, predicate, thisArg);
+ if (idx !== -1) {
+ return array[idx];
+ }
+ return undefined;
+ };
+ var last$1 = function (collection) {
+ return collection[collection.length - 1];
+ };
+ var ArrUtils = {
+ isArray: isArray$1,
+ toArray: toArray,
+ each: each$1,
+ map: map$1,
+ filter: filter$1,
+ indexOf: indexOf$2,
+ reduce: reduce,
+ findIndex: findIndex$1,
+ find: find$1,
+ last: last$1
+ };
+
+ var whiteSpaceRegExp = /^\s*|\s*$/g;
+ var trim = function (str) {
+ return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp, '');
+ };
+ var is = function (obj, type) {
+ if (!type) {
+ return obj !== undefined;
+ }
+ if (type === 'array' && ArrUtils.isArray(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 = function (obj, prop) {
+ return Object.prototype.hasOwnProperty.call(obj, prop);
+ };
+ var create = function (s, p, root) {
+ var self$$1 = this;
+ var sp, ns, cn, scn, c, de = 0;
+ s = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(s);
+ cn = s[3].match(/(^|\.)(\w+)$/i)[2];
+ ns = self$$1.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$$1.extend(ns[cn].prototype, p);
+ if (s[5]) {
+ sp = self$$1.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$$1.each(sp, function (f, n) {
+ ns[cn].prototype[n] = sp[n];
+ });
+ self$$1.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$$1.each(p.static, function (f, n) {
+ ns[cn][n] = f;
+ });
+ };
+ var extend = function (obj, ext) {
+ var x = [];
+ for (var _i = 2; _i < arguments.length; _i++) {
+ x[_i - 2] = arguments[_i];
+ }
+ var i, l, name$$1;
+ var args = arguments;
+ var value;
+ for (i = 1, l = args.length; i < l; i++) {
+ ext = args[i];
+ for (name$$1 in ext) {
+ if (ext.hasOwnProperty(name$$1)) {
+ 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];
+ }
+ ArrUtils.each(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$1 = 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 ArrUtils.map(s.split(d || ','), trim);
+ };
+ var _addCacheSuffix = function (url) {
+ var cacheSuffix = Env.cacheSuffix;
+ if (cacheSuffix) {
+ url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix;
+ }
+ return url;
+ };
+ var Tools = {
+ trim: trim,
+ isArray: ArrUtils.isArray,
+ is: is,
+ toArray: ArrUtils.toArray,
+ makeMap: makeMap,
+ each: ArrUtils.each,
+ map: ArrUtils.map,
+ grep: ArrUtils.filter,
+ inArray: ArrUtils.indexOf,
+ hasOwn: hasOwnProperty,
+ extend: extend,
+ create: create,
+ walk: walk,
+ createNS: createNS,
+ resolve: resolve$1,
+ explode: explode,
+ _addCacheSuffix: _addCacheSuffix
+ };
+
+ var doc = document, push$2 = Array.prototype.push, slice$2 = Array.prototype.slice;
+ var rquickExpr$1 = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/;
+ var Event$$1 = 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) {
+ var frag, node, container;
+ fragDoc = fragDoc || doc;
+ container = fragDoc.createElement('div');
+ frag = fragDoc.createDocumentFragment();
+ container.innerHTML = html;
+ 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 = function (elements, wrapper, all) {
+ var lastParent, newWrapper;
+ wrapper = DomQuery(wrapper)[0];
+ elements.each(function () {
+ var self$$1 = this;
+ if (!all || lastParent !== self$$1.parentNode) {
+ lastParent = self$$1.parentNode;
+ newWrapper = wrapper.cloneNode(false);
+ self$$1.parentNode.insertBefore(newWrapper, self$$1);
+ newWrapper.appendChild(self$$1);
+ } else {
+ newWrapper.appendChild(self$$1);
+ }
+ });
+ 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 DomQuery = function (selector, context) {
+ return new DomQuery.fn.init(selector, context);
+ };
+ var inArray = 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$1 = /^\s*|\s*$/g;
+ var trim$1 = function (str) {
+ return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp$1, '');
+ };
+ var each$2 = function (obj, callback) {
+ var length$$1, key, i, value;
+ if (obj) {
+ length$$1 = obj.length;
+ if (length$$1 === 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$$1; i++) {
+ value = obj[i];
+ if (callback.call(value, i, value) === false) {
+ break;
+ }
+ }
+ }
+ }
+ return obj;
+ };
+ var grep = function (array, callback) {
+ var out = [];
+ each$2(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;
+ };
+ DomQuery.fn = DomQuery.prototype = {
+ constructor: DomQuery,
+ selector: '',
+ context: null,
+ length: 0,
+ init: function (selector, context) {
+ var self$$1 = this;
+ var match, node;
+ if (!selector) {
+ return self$$1;
+ }
+ if (selector.nodeType) {
+ self$$1.context = self$$1[0] = selector;
+ self$$1.length = 1;
+ return self$$1;
+ }
+ if (context && context.nodeType) {
+ self$$1.context = context;
+ } else {
+ if (context) {
+ return DomQuery(selector).attr(context);
+ }
+ self$$1.context = context = document;
+ }
+ if (isString$1(selector)) {
+ self$$1.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$2.call(self$$1, node);
+ node = node.nextSibling;
+ }
+ } else {
+ node = getElementDocument(context).getElementById(match[2]);
+ if (!node) {
+ return self$$1;
+ }
+ if (node.id !== match[2]) {
+ return self$$1.find(selector);
+ }
+ self$$1.length = 1;
+ self$$1[0] = node;
+ }
+ } else {
+ return DomQuery(context).find(selector);
+ }
+ } else {
+ this.add(selector, false);
+ }
+ return self$$1;
+ },
+ toArray: function () {
+ return Tools.toArray(this);
+ },
+ add: function (items, sort) {
+ var self$$1 = this;
+ var nodes, i;
+ if (isString$1(items)) {
+ return self$$1.add(DomQuery(items));
+ }
+ if (sort !== false) {
+ nodes = DomQuery.unique(self$$1.toArray().concat(DomQuery.makeArray(items)));
+ self$$1.length = nodes.length;
+ for (i = 0; i < nodes.length; i++) {
+ self$$1[i] = nodes[i];
+ }
+ } else {
+ push$2.apply(self$$1, DomQuery.makeArray(items));
+ }
+ return self$$1;
+ },
+ attr: function (name$$1, value) {
+ var self$$1 = this;
+ var hook;
+ if (typeof name$$1 === 'object') {
+ each$2(name$$1, function (name$$1, value) {
+ self$$1.attr(name$$1, value);
+ });
+ } else if (isDefined(value)) {
+ this.each(function () {
+ var hook;
+ if (this.nodeType === 1) {
+ hook = attrHooks[name$$1];
+ if (hook && hook.set) {
+ hook.set(this, value);
+ return;
+ }
+ if (value === null) {
+ this.removeAttribute(name$$1, 2);
+ } else {
+ this.setAttribute(name$$1, value, 2);
+ }
+ }
+ });
+ } else {
+ if (self$$1[0] && self$$1[0].nodeType === 1) {
+ hook = attrHooks[name$$1];
+ if (hook && hook.get) {
+ return hook.get(self$$1[0], name$$1);
+ }
+ if (booleanMap[name$$1]) {
+ return self$$1.prop(name$$1) ? name$$1 : undefined;
+ }
+ value = self$$1[0].getAttribute(name$$1, 2);
+ if (value === null) {
+ value = undefined;
+ }
+ }
+ return value;
+ }
+ return self$$1;
+ },
+ removeAttr: function (name$$1) {
+ return this.attr(name$$1, null);
+ },
+ prop: function (name$$1, value) {
+ var self$$1 = this;
+ name$$1 = propFix[name$$1] || name$$1;
+ if (typeof name$$1 === 'object') {
+ each$2(name$$1, function (name$$1, value) {
+ self$$1.prop(name$$1, value);
+ });
+ } else if (isDefined(value)) {
+ this.each(function () {
+ if (this.nodeType === 1) {
+ this[name$$1] = value;
+ }
+ });
+ } else {
+ if (self$$1[0] && self$$1[0].nodeType && name$$1 in self$$1[0]) {
+ return self$$1[0][name$$1];
+ }
+ return value;
+ }
+ return self$$1;
+ },
+ css: function (name$$1, value) {
+ var self$$1 = this;
+ var elm, hook;
+ var camel = function (name$$1) {
+ return name$$1.replace(/-(\D)/g, function (a, b) {
+ return b.toUpperCase();
+ });
+ };
+ var dashed = function (name$$1) {
+ return name$$1.replace(/[A-Z]/g, function (a) {
+ return '-' + a;
+ });
+ };
+ if (typeof name$$1 === 'object') {
+ each$2(name$$1, function (name$$1, value) {
+ self$$1.css(name$$1, value);
+ });
+ } else {
+ if (isDefined(value)) {
+ name$$1 = camel(name$$1);
+ if (typeof value === 'number' && !numericCssMap[name$$1]) {
+ value = value.toString() + 'px';
+ }
+ self$$1.each(function () {
+ var style = this.style;
+ hook = cssHooks[name$$1];
+ if (hook && hook.set) {
+ hook.set(this, value);
+ return;
+ }
+ try {
+ this.style[cssFix[name$$1] || name$$1] = value;
+ } catch (ex) {
+ }
+ if (value === null || value === '') {
+ if (style.removeProperty) {
+ style.removeProperty(dashed(name$$1));
+ } else {
+ style.removeAttribute(name$$1);
+ }
+ }
+ });
+ } else {
+ elm = self$$1[0];
+ hook = cssHooks[name$$1];
+ if (hook && hook.get) {
+ return hook.get(elm);
+ }
+ if (elm.ownerDocument.defaultView) {
+ try {
+ return elm.ownerDocument.defaultView.getComputedStyle(elm, null).getPropertyValue(dashed(name$$1));
+ } catch (ex) {
+ return undefined;
+ }
+ } else if (elm.currentStyle) {
+ return elm.currentStyle[camel(name$$1)];
+ } else {
+ return '';
+ }
+ }
+ }
+ return self$$1;
+ },
+ remove: function () {
+ var self$$1 = this;
+ var node, i = this.length;
+ while (i--) {
+ node = self$$1[i];
+ Event$$1.clean(node);
+ if (node.parentNode) {
+ node.parentNode.removeChild(node);
+ }
+ }
+ return this;
+ },
+ empty: function () {
+ var self$$1 = this;
+ var node, i = this.length;
+ while (i--) {
+ node = self$$1[i];
+ while (node.firstChild) {
+ node.removeChild(node.firstChild);
+ }
+ }
+ return this;
+ },
+ html: function (value) {
+ var self$$1 = this;
+ var i;
+ if (isDefined(value)) {
+ i = self$$1.length;
+ try {
+ while (i--) {
+ self$$1[i].innerHTML = value;
+ }
+ } catch (ex) {
+ DomQuery(self$$1[i]).empty().append(value);
+ }
+ return self$$1;
+ }
+ return self$$1[0] ? self$$1[0].innerHTML : '';
+ },
+ text: function (value) {
+ var self$$1 = this;
+ var i;
+ if (isDefined(value)) {
+ i = self$$1.length;
+ while (i--) {
+ if ('innerText' in self$$1[i]) {
+ self$$1[i].innerText = value;
+ } else {
+ self$$1[0].textContent = value;
+ }
+ }
+ return self$$1;
+ }
+ return self$$1[0] ? self$$1[0].innerText || self$$1[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$$1 = this;
+ if (self$$1[0] && self$$1[0].parentNode) {
+ return domManipulate(self$$1, arguments, function (node) {
+ this.parentNode.insertBefore(node, this);
+ });
+ }
+ return self$$1;
+ },
+ after: function () {
+ var self$$1 = this;
+ if (self$$1[0] && self$$1[0].parentNode) {
+ return domManipulate(self$$1, arguments, function (node) {
+ this.parentNode.insertBefore(node, this.nextSibling);
+ }, true);
+ }
+ return self$$1;
+ },
+ 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(this, content);
+ },
+ wrapAll: function (content) {
+ return wrap(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$$1 = this;
+ if (typeof className !== 'string') {
+ return self$$1;
+ }
+ if (className.indexOf(' ') !== -1) {
+ each$2(className.split(' '), function () {
+ self$$1.toggleClass(this, state);
+ });
+ } else {
+ self$$1.each(function (index, node) {
+ var existingClassName, classState;
+ classState = hasClass(node, className);
+ if (classState !== state) {
+ existingClassName = node.className;
+ if (classState) {
+ node.className = trim$1((' ' + existingClassName + ' ').replace(' ' + className + ' ', ' '));
+ } else {
+ node.className += existingClassName ? ' ' + className : className;
+ }
+ }
+ });
+ }
+ return self$$1;
+ },
+ hasClass: function (className) {
+ return hasClass(this[0], className);
+ },
+ each: function (callback) {
+ return each$2(this, callback);
+ },
+ on: function (name$$1, callback) {
+ return this.each(function () {
+ Event$$1.bind(this, name$$1, callback);
+ });
+ },
+ off: function (name$$1, callback) {
+ return this.each(function () {
+ Event$$1.unbind(this, name$$1, callback);
+ });
+ },
+ trigger: function (name$$1) {
+ return this.each(function () {
+ if (typeof name$$1 === 'object') {
+ Event$$1.fire(this, name$$1.type, name$$1);
+ } else {
+ Event$$1.fire(this, name$$1);
+ }
+ });
+ },
+ show: function () {
+ return this.css('display', '');
+ },
+ hide: function () {
+ return this.css('display', 'none');
+ },
+ slice: function () {
+ return new DomQuery(slice$2.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$2,
+ sort: [].sort,
+ splice: [].splice
+ };
+ Tools.extend(DomQuery, {
+ extend: Tools.extend,
+ makeArray: function (object) {
+ if (isWindow(object) || object.nodeType) {
+ return [object];
+ }
+ return Tools.toArray(object);
+ },
+ inArray: inArray,
+ isArray: Tools.isArray,
+ each: each$2,
+ trim: trim$1,
+ 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 = 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$2({
+ parent: function (node) {
+ var parent$$1 = node.parentNode;
+ return parent$$1 && parent$$1.nodeType !== 11 ? parent$$1 : 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(node.firstChild, 'nextSibling', 1);
+ },
+ contents: function (node) {
+ return Tools.toArray((node.nodeName === 'iframe' ? node.contentDocument || node.contentWindow.document : node).childNodes);
+ }
+ }, function (name$$1, fn) {
+ DomQuery.fn[name$$1] = function (selector) {
+ var self$$1 = this;
+ var result = [];
+ self$$1.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$$1]) {
+ result = DomQuery.unique(result);
+ }
+ if (name$$1.indexOf('parents') === 0) {
+ result = result.reverse();
+ }
+ }
+ result = DomQuery(result);
+ if (selector) {
+ return result.filter(selector);
+ }
+ return result;
+ };
+ });
+ each$2({
+ parentsUntil: function (node, until) {
+ return dir(node, 'parentNode', until);
+ },
+ nextUntil: function (node, until) {
+ return sibling(node, 'nextSibling', 1, until).slice(1);
+ },
+ prevUntil: function (node, until) {
+ return sibling(node, 'previousSibling', 1, until).slice(1);
+ }
+ }, function (name$$1, fn) {
+ DomQuery.fn[name$$1] = function (selector, filter) {
+ var self$$1 = this;
+ var result = [];
+ self$$1.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$$1.indexOf('parents') === 0 || name$$1 === 'prevUntil') {
+ result = result.reverse();
+ }
+ }
+ result = DomQuery(result);
+ if (filter) {
+ return result.filter(filter);
+ }
+ return result;
+ };
+ });
+ DomQuery.fn.is = function (selector) {
+ return !!selector && this.filter(selector).length > 0;
+ };
+ DomQuery.fn.init.prototype = DomQuery.fn;
+ DomQuery.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;
+ };
+ var appendHooks = function (targetHooks, prop, hooks) {
+ each$2(hooks, function (name$$1, func) {
+ targetHooks[name$$1] = targetHooks[name$$1] || {};
+ targetHooks[name$$1][prop] = func;
+ });
+ };
+ if (Env.ie && Env.ie < 8) {
+ appendHooks(attrHooks, 'get', {
+ maxlength: function (elm) {
+ var value = elm.maxLength;
+ if (value === 2147483647) {
+ return undefined;
+ }
+ return value;
+ },
+ size: function (elm) {
+ var value = elm.size;
+ if (value === 20) {
+ return undefined;
+ }
+ return value;
+ },
+ class: function (elm) {
+ return elm.className;
+ },
+ style: function (elm) {
+ var value = elm.style.cssText;
+ if (value.length === 0) {
+ return undefined;
+ }
+ return value;
+ }
+ });
+ appendHooks(attrHooks, 'set', {
+ class: function (elm, value) {
+ elm.className = value;
+ },
+ style: function (elm, value) {
+ elm.style.cssText = value;
+ }
+ });
+ }
+ if (Env.ie && Env.ie < 9) {
+ cssFix.float = 'styleFloat';
+ appendHooks(cssHooks, 'set', {
+ opacity: function (elm, value) {
+ var style = elm.style;
+ if (value === null || value === '') {
+ style.removeAttribute('filter');
+ } else {
+ style.zoom = 1;
+ style.filter = 'alpha(opacity=' + value * 100 + ')';
+ }
+ }
+ });
+ }
+ DomQuery.attrHooks = attrHooks;
+ DomQuery.cssHooks = cssHooks;
+
+ 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 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$2 = 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$2(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 edge = 'Edge';
+ var chrome = 'Chrome';
+ var ie$1 = 'IE';
+ var opera$1 = 'Opera';
+ var firefox = 'Firefox';
+ var safari = 'Safari';
+ var isBrowser = function (name, current) {
+ return function () {
+ return current === name;
+ };
+ };
+ 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;
+ return {
+ current: current,
+ version: version,
+ isEdge: isBrowser(edge, current),
+ isChrome: isBrowser(chrome, current),
+ isIE: isBrowser(ie$1, current),
+ isOpera: isBrowser(opera$1, current),
+ isFirefox: isBrowser(firefox, current),
+ isSafari: isBrowser(safari, current)
+ };
+ };
+ var Browser = {
+ unknown: unknown$1,
+ nu: nu$1,
+ edge: constant(edge),
+ chrome: constant(chrome),
+ ie: constant(ie$1),
+ opera: constant(opera$1),
+ firefox: constant(firefox),
+ safari: constant(safari)
+ };
+
+ var windows = 'Windows';
+ var ios = 'iOS';
+ var android$1 = 'Android';
+ var linux = 'Linux';
+ var osx = 'OSX';
+ var solaris = 'Solaris';
+ var freebsd = 'FreeBSD';
+ var isOS = function (name, current) {
+ return function () {
+ return current === name;
+ };
+ };
+ 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;
+ return {
+ current: current,
+ version: version,
+ isWindows: isOS(windows, current),
+ isiOS: isOS(ios, current),
+ isAndroid: isOS(android$1, current),
+ isOSX: isOS(osx, current),
+ isLinux: isOS(linux, current),
+ isSolaris: isOS(solaris, current),
+ isFreeBSD: isOS(freebsd, current)
+ };
+ };
+ var OperatingSystem = {
+ unknown: unknown$2,
+ nu: nu$2,
+ windows: constant(windows),
+ ios: constant(ios),
+ android: constant(android$1),
+ linux: constant(linux),
+ osx: constant(osx),
+ solaris: constant(solaris),
+ freebsd: constant(freebsd)
+ };
+
+ var DeviceType = function (os, browser, userAgent) {
+ var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;
+ var isiPhone = os.isiOS() && !isiPad;
+ var isAndroid3 = os.isAndroid() && os.version.major === 3;
+ var isAndroid4 = os.isAndroid() && os.version.major === 4;
+ var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;
+ var isTouch = os.isiOS() || os.isAndroid();
+ var isPhone = isTouch && !isTablet;
+ var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;
+ 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)
+ };
+ };
+
+ 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 contains$2 = function (str, substr) {
+ return str.indexOf(substr) !== -1;
+ };
+ var trim$2 = function (str) {
+ return str.replace(/^\s+|\s+$/g, '');
+ };
+ var lTrim = function (str) {
+ return str.replace(/^\s+/g, '');
+ };
+ var rTrim = function (str) {
+ return str.replace(/\s+$/g, '');
+ };
+
+ var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/;
+ var checkContains = function (target) {
+ return function (uastring) {
+ return contains$2(uastring, target);
+ };
+ };
+ var browsers = [
+ {
+ name: 'Edge',
+ versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
+ search: function (uastring) {
+ var monstrosity = contains$2(uastring, 'edge/') && contains$2(uastring, 'chrome') && contains$2(uastring, 'safari') && contains$2(uastring, 'applewebkit');
+ return monstrosity;
+ }
+ },
+ {
+ name: 'Chrome',
+ versionRegexes: [
+ /.*?chrome\/([0-9]+)\.([0-9]+).*/,
+ normalVersionRegex
+ ],
+ search: function (uastring) {
+ return contains$2(uastring, 'chrome') && !contains$2(uastring, 'chromeframe');
+ }
+ },
+ {
+ name: 'IE',
+ versionRegexes: [
+ /.*?msie\ ?([0-9]+)\.([0-9]+).*/,
+ /.*?rv:([0-9]+)\.([0-9]+).*/
+ ],
+ search: function (uastring) {
+ return contains$2(uastring, 'msie') || contains$2(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$2(uastring, 'safari') || contains$2(uastring, 'mobile/')) && contains$2(uastring, 'applewebkit');
+ }
+ }
+ ];
+ var oses = [
+ {
+ name: 'Windows',
+ search: checkContains('win'),
+ versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
+ },
+ {
+ name: 'iOS',
+ search: function (uastring) {
+ return contains$2(uastring, 'iphone') || contains$2(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('os x'),
+ versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]
+ },
+ {
+ name: 'Linux',
+ search: checkContains('linux'),
+ versionRegexes: []
+ },
+ {
+ name: 'Solaris',
+ search: checkContains('sunos'),
+ versionRegexes: []
+ },
+ {
+ name: 'FreeBSD',
+ search: checkContains('freebsd'),
+ versionRegexes: []
+ }
+ ];
+ var PlatformInfo = {
+ browsers: constant(browsers),
+ oses: constant(oses)
+ };
+
+ var detect$2 = function (userAgent) {
+ 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);
+ return {
+ browser: browser,
+ os: os,
+ deviceType: deviceType
+ };
+ };
+ var PlatformDetection = { detect: detect$2 };
+
+ var detect$3 = cached(function () {
+ var userAgent = navigator.userAgent;
+ return PlatformDetection.detect(userAgent);
+ });
+ var PlatformDetection$1 = { detect: detect$3 };
+
+ 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 '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: constant(node) };
+ };
+ var fromPoint = function (docElm, x, y) {
+ var doc = docElm.dom();
+ return Option.from(doc.elementFromPoint(x, y)).map(fromDom);
+ };
+ var Element$$1 = {
+ fromHtml: fromHtml,
+ fromTag: fromTag,
+ fromText: fromText,
+ fromDom: fromDom,
+ fromPoint: fromPoint
+ };
+
+ var ATTRIBUTE = Node.ATTRIBUTE_NODE;
+ var CDATA_SECTION = Node.CDATA_SECTION_NODE;
+ var COMMENT = Node.COMMENT_NODE;
+ var DOCUMENT = Node.DOCUMENT_NODE;
+ var DOCUMENT_TYPE = Node.DOCUMENT_TYPE_NODE;
+ var DOCUMENT_FRAGMENT = Node.DOCUMENT_FRAGMENT_NODE;
+ var ELEMENT = Node.ELEMENT_NODE;
+ var TEXT = Node.TEXT_NODE;
+ var PROCESSING_INSTRUCTION = Node.PROCESSING_INSTRUCTION_NODE;
+ var ENTITY_REFERENCE = Node.ENTITY_REFERENCE_NODE;
+ var ENTITY = Node.ENTITY_NODE;
+ var NOTATION = Node.NOTATION_NODE;
+
+ 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 isElement = isType$1(ELEMENT);
+ var isText = isType$1(TEXT);
+
+ var keys = Object.keys;
+ var hasOwnProperty$1 = Object.hasOwnProperty;
+ var each$3 = 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, obj);
+ }
+ };
+ var map$2 = function (obj, f) {
+ return tupleMap(obj, function (x, i, obj) {
+ return {
+ k: i,
+ v: f(x, i, obj)
+ };
+ });
+ };
+ var tupleMap = function (obj, f) {
+ var r = {};
+ each$3(obj, function (x, i) {
+ var tuple = f(x, i, obj);
+ r[tuple.k] = tuple.v;
+ });
+ return r;
+ };
+ var bifilter = function (obj, pred) {
+ var t = {};
+ var f = {};
+ each$3(obj, function (x, i) {
+ var branch = pred(x, i) ? t : f;
+ branch[i] = x;
+ });
+ return {
+ t: t,
+ f: f
+ };
+ };
+ var has = function (obj, key) {
+ return hasOwnProperty$1.call(obj, key);
+ };
+
+ var rawSet = function (dom, key, value$$1) {
+ if (isString(value$$1) || isBoolean(value$$1) || isNumber(value$$1)) {
+ dom.setAttribute(key, value$$1 + '');
+ } else {
+ console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value$$1, ':: Element ', dom);
+ throw new Error('Attribute value was not simple');
+ }
+ };
+ var set = function (element, key, value$$1) {
+ rawSet(element.dom(), key, value$$1);
+ };
+ var setAll = function (element, attrs) {
+ var dom = element.dom();
+ each$3(attrs, function (v, k) {
+ rawSet(dom, k, v);
+ });
+ };
+ var get$1 = function (element, key) {
+ var v = element.dom().getAttribute(key);
+ return v === null ? undefined : v;
+ };
+ var has$1 = function (element, key) {
+ var dom = element.dom();
+ return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;
+ };
+ var remove = function (element, key) {
+ element.dom().removeAttribute(key);
+ };
+
+ var inBody = function (element) {
+ var dom = isText(element) ? element.dom().parentNode : element.dom();
+ return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);
+ };
+
+ var isSupported = function (dom) {
+ return dom.style !== undefined;
+ };
+
+ var internalSet = function (dom, property, value$$1) {
+ if (!isString(value$$1)) {
+ console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value$$1, ':: Element ', dom);
+ throw new Error('CSS value must be a string: ' + value$$1);
+ }
+ if (isSupported(dom))
+ dom.style.setProperty(property, value$$1);
+ };
+ var setAll$1 = function (element, css) {
+ var dom = element.dom();
+ each$3(css, function (v, k) {
+ internalSet(dom, k, v);
+ });
+ };
+ var get$2 = function (element, property) {
+ var dom = element.dom();
+ var styles = window.getComputedStyle(dom);
+ var r = styles.getPropertyValue(property);
+ var v = r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;
+ return v === null ? undefined : v;
+ };
+ var getUnsafeProperty = function (dom, property) {
+ return isSupported(dom) ? dom.style.getPropertyValue(property) : '';
+ };
+ var getRaw = function (element, property) {
+ var dom = element.dom();
+ var raw = getUnsafeProperty(dom, property);
+ return Option.from(raw).filter(function (r) {
+ return r.length > 0;
+ });
+ };
+
+ var Immutable = function () {
+ var fields = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ fields[_i] = arguments[_i];
+ }
+ return function () {
+ var values = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ values[_i] = arguments[_i];
+ }
+ if (fields.length !== values.length) {
+ throw new Error('Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments');
+ }
+ var struct = {};
+ each(fields, function (name, i) {
+ struct[name] = constant(values[i]);
+ });
+ return struct;
+ };
+ };
+
+ 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 Recurse = { toArray: toArray$1 };
+
+ var node = function () {
+ var f = Global$1.getOrDie('Node');
+ return f;
+ };
+ var compareDocumentPosition = function (a, b, match) {
+ return (a.compareDocumentPosition(b) & match) !== 0;
+ };
+ var documentPositionPreceding = function (a, b) {
+ return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);
+ };
+ var documentPositionContainedBy = function (a, b) {
+ return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);
+ };
+ var Node$1 = {
+ documentPositionPreceding: documentPositionPreceding,
+ documentPositionContainedBy: documentPositionContainedBy
+ };
+
+ var ELEMENT$1 = ELEMENT;
+ var DOCUMENT$1 = DOCUMENT;
+ var is$1 = function (element, selector) {
+ var elem = element.dom();
+ if (elem.nodeType !== ELEMENT$1)
+ return false;
+ else 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$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;
+ };
+ var all = function (selector, scope) {
+ var base = scope === undefined ? document : scope.dom();
+ return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element$$1.fromDom);
+ };
+ var one = function (selector, scope) {
+ var base = scope === undefined ? document : scope.dom();
+ return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element$$1.fromDom);
+ };
+
+ var eq = function (e1, e2) {
+ return e1.dom() === e2.dom();
+ };
+ var regularContains = function (e1, e2) {
+ var d1 = e1.dom(), d2 = e2.dom();
+ return d1 === d2 ? false : d1.contains(d2);
+ };
+ var ieContains = function (e1, e2) {
+ return Node$1.documentPositionContainedBy(e1.dom(), e2.dom());
+ };
+ var browser = PlatformDetection$1.detect().browser;
+ var contains$3 = browser.isIE() ? ieContains : regularContains;
+
+ var owner = function (element) {
+ return Element$$1.fromDom(element.dom().ownerDocument);
+ };
+ var documentElement = function (element) {
+ return Element$$1.fromDom(element.dom().ownerDocument.documentElement);
+ };
+ var defaultView = function (element) {
+ var el = element.dom();
+ var defaultView = el.ownerDocument.defaultView;
+ return Element$$1.fromDom(defaultView);
+ };
+ var parent = function (element) {
+ var dom = element.dom();
+ return Option.from(dom.parentNode).map(Element$$1.fromDom);
+ };
+ var parents = function (element, isRoot) {
+ var stop = isFunction(isRoot) ? isRoot : constant(false);
+ var dom = element.dom();
+ var ret = [];
+ while (dom.parentNode !== null && dom.parentNode !== undefined) {
+ var rawParent = dom.parentNode;
+ var parent = Element$$1.fromDom(rawParent);
+ ret.push(parent);
+ if (stop(parent) === true)
+ break;
+ else
+ dom = rawParent;
+ }
+ return ret;
+ };
+ var prevSibling = function (element) {
+ var dom = element.dom();
+ return Option.from(dom.previousSibling).map(Element$$1.fromDom);
+ };
+ var nextSibling = function (element) {
+ var dom = element.dom();
+ return Option.from(dom.nextSibling).map(Element$$1.fromDom);
+ };
+ var prevSiblings = function (element) {
+ return reverse(Recurse.toArray(element, prevSibling));
+ };
+ var nextSiblings = function (element) {
+ return Recurse.toArray(element, nextSibling);
+ };
+ var children = function (element) {
+ var dom = element.dom();
+ return map(dom.childNodes, Element$$1.fromDom);
+ };
+ var child = function (element, index) {
+ var children = element.dom().childNodes;
+ return Option.from(children[index]).map(Element$$1.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 spot = Immutable('element', 'offset');
+
+ var browser$1 = PlatformDetection$1.detect().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 getPos = function (body, elm, rootElm) {
+ var x = 0, y = 0, offsetParent$$1;
+ var doc = body.ownerDocument;
+ var pos;
+ rootElm = rootElm ? rootElm : body;
+ if (elm) {
+ if (rootElm === body && elm.getBoundingClientRect && get$2(Element$$1.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$$1 = elm;
+ while (offsetParent$$1 && offsetParent$$1 !== rootElm && offsetParent$$1.nodeType) {
+ x += offsetParent$$1.offsetLeft || 0;
+ y += offsetParent$$1.offsetTop || 0;
+ offsetParent$$1 = offsetParent$$1.offsetParent;
+ }
+ offsetParent$$1 = elm.parentNode;
+ while (offsetParent$$1 && offsetParent$$1 !== rootElm && offsetParent$$1.nodeType) {
+ x -= offsetParent$$1.scrollLeft || 0;
+ y -= offsetParent$$1.scrollTop || 0;
+ offsetParent$$1 = offsetParent$$1.parentNode;
+ }
+ y += getTableCaptionDeltaY(Element$$1.fromDom(elm));
+ }
+ return {
+ x: x,
+ y: y
+ };
+ };
+ var Position = { getPos: getPos };
+
+ var nu$3 = function (baseFn) {
+ var data = Option.none();
+ var callbacks = [];
+ var map$$1 = 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) {
+ data = Option.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$$1,
+ isReady: isReady
+ };
+ };
+ var pure$1 = function (a) {
+ return nu$3(function (callback) {
+ callback(a);
+ });
+ };
+ var LazyValue = {
+ nu: nu$3,
+ pure: pure$1
+ };
+
+ var bounce = function (f) {
+ return function () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ var me = this;
+ setTimeout(function () {
+ f.apply(me, args);
+ }, 0);
+ };
+ };
+
+ var nu$4 = function (baseFn) {
+ var get = function (callback) {
+ baseFn(bounce(callback));
+ };
+ var map = function (fab) {
+ return nu$4(function (callback) {
+ get(function (a) {
+ var value = fab(a);
+ callback(value);
+ });
+ });
+ };
+ var bind = function (aFutureB) {
+ return nu$4(function (callback) {
+ get(function (a) {
+ aFutureB(a).get(callback);
+ });
+ });
+ };
+ var anonBind = function (futureB) {
+ return nu$4(function (callback) {
+ get(function (a) {
+ futureB.get(callback);
+ });
+ });
+ };
+ var toLazy = function () {
+ return LazyValue.nu(get);
+ };
+ var toCached = function () {
+ var cache = null;
+ return nu$4(function (callback) {
+ if (cache === null) {
+ cache = toLazy();
+ }
+ cache.get(callback);
+ });
+ };
+ return {
+ map: map,
+ bind: bind,
+ anonBind: anonBind,
+ toLazy: toLazy,
+ toCached: toCached,
+ get: get
+ };
+ };
+ var pure$2 = function (a) {
+ return nu$4(function (callback) {
+ callback(a);
+ });
+ };
+ var Future = {
+ nu: nu$4,
+ pure: pure$2
+ };
+
+ 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$1 = function (o) {
+ var is = function (v) {
+ return o === v;
+ };
+ var or = function (opt) {
+ return value$1(o);
+ };
+ var orThunk = function (f) {
+ return value$1(o);
+ };
+ var map = function (f) {
+ return value$1(f(o));
+ };
+ var mapError = function (f) {
+ return value$1(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 toOption = function () {
+ return Option.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,
+ toOption: toOption
+ };
+ };
+ 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,
+ toOption: Option.none
+ };
+ };
+ var Result = {
+ value: value$1,
+ error: error
+ };
+
+ function StyleSheetLoader(document$$1, settings) {
+ if (settings === void 0) {
+ settings = {};
+ }
+ var idCount = 0;
+ var loadedStates = {};
+ var maxLoadTime;
+ maxLoadTime = settings.maxLoadTime || 5000;
+ var appendToHead = function (node) {
+ document$$1.getElementsByTagName('head')[0].appendChild(node);
+ };
+ var load = function (url, loadedCallback, errorCallback) {
+ var link, style, startTime, state;
+ var passed = function () {
+ var callbacks = state.passed;
+ var i = callbacks.length;
+ while (i--) {
+ callbacks[i]();
+ }
+ state.status = 2;
+ state.passed = [];
+ state.failed = [];
+ };
+ var failed = function () {
+ var callbacks = state.failed;
+ var i = callbacks.length;
+ while (i--) {
+ callbacks[i]();
+ }
+ state.status = 3;
+ state.passed = [];
+ state.failed = [];
+ };
+ var isOldWebKit = function () {
+ var webKitChunks = navigator.userAgent.match(/WebKit\/(\d*)/);
+ return !!(webKitChunks && parseInt(webKitChunks[1], 10) < 536);
+ };
+ var wait = function (testCallback, waitCallback) {
+ if (!testCallback()) {
+ if (new Date().getTime() - startTime < maxLoadTime) {
+ Delay.setTimeout(waitCallback);
+ } else {
+ failed();
+ }
+ }
+ };
+ var waitForWebKitLinkLoaded = function () {
+ wait(function () {
+ var styleSheets = document$$1.styleSheets;
+ var styleSheet, i = styleSheets.length, owner;
+ while (i--) {
+ styleSheet = styleSheets[i];
+ owner = styleSheet.ownerNode ? styleSheet.ownerNode : styleSheet.owningElement;
+ if (owner && owner.id === link.id) {
+ passed();
+ return true;
+ }
+ }
+ }, waitForWebKitLinkLoaded);
+ };
+ var waitForGeckoLinkLoaded = function () {
+ wait(function () {
+ try {
+ var cssRules = style.sheet.cssRules;
+ passed();
+ return !!cssRules;
+ } catch (ex) {
+ }
+ }, waitForGeckoLinkLoaded);
+ };
+ url = Tools._addCacheSuffix(url);
+ if (!loadedStates[url]) {
+ state = {
+ passed: [],
+ failed: []
+ };
+ loadedStates[url] = state;
+ } else {
+ state = loadedStates[url];
+ }
+ if (loadedCallback) {
+ state.passed.push(loadedCallback);
+ }
+ if (errorCallback) {
+ state.failed.push(errorCallback);
+ }
+ if (state.status === 1) {
+ return;
+ }
+ if (state.status === 2) {
+ passed();
+ return;
+ }
+ if (state.status === 3) {
+ failed();
+ return;
+ }
+ state.status = 1;
+ link = document$$1.createElement('link');
+ link.rel = 'stylesheet';
+ link.type = 'text/css';
+ link.id = 'u' + idCount++;
+ link.async = false;
+ link.defer = false;
+ startTime = new Date().getTime();
+ if (settings.contentCssCors) {
+ link.crossOrigin = 'anonymous';
+ }
+ if ('onload' in link && !isOldWebKit()) {
+ link.onload = waitForWebKitLinkLoaded;
+ link.onerror = failed;
+ } else {
+ if (navigator.userAgent.indexOf('Firefox') > 0) {
+ style = document$$1.createElement('style');
+ style.textContent = '@import "' + url + '"';
+ waitForGeckoLinkLoaded();
+ appendToHead(style);
+ return;
+ }
+ waitForWebKitLinkLoaded();
+ }
+ appendToHead(link);
+ link.href = url;
+ };
+ var loadF = function (url) {
+ return Future.nu(function (resolve) {
+ load(url, compose(resolve, constant(Result.value(url))), compose(resolve, constant(Result.error(url))));
+ });
+ };
+ var unbox = function (result) {
+ return result.fold(identity, identity);
+ };
+ 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(unbox));
+ } else {
+ success(parts.pass.map(unbox));
+ }
+ });
+ };
+ return {
+ load: load,
+ loadAll: loadAll
+ };
+ }
+
+ function TreeWalker (startNode, rootNode) {
+ var node = startNode;
+ var findSibling = function (node, startName, siblingName, shallow) {
+ var sibling, parent;
+ if (node) {
+ if (!shallow && node[startName]) {
+ return node[startName];
+ }
+ if (node !== rootNode) {
+ sibling = node[siblingName];
+ if (sibling) {
+ return sibling;
+ }
+ for (parent = node.parentNode; parent && parent !== rootNode; parent = parent.parentNode) {
+ sibling = parent[siblingName];
+ if (sibling) {
+ return sibling;
+ }
+ }
+ }
+ }
+ };
+ var findPreviousNode = function (node, startName, siblingName, shallow) {
+ var sibling, parent, child;
+ if (node) {
+ sibling = node[siblingName];
+ if (rootNode && sibling === 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 !== rootNode) {
+ return parent;
+ }
+ }
+ };
+ this.current = function () {
+ return node;
+ };
+ this.next = function (shallow) {
+ node = findSibling(node, 'firstChild', 'nextSibling', shallow);
+ return node;
+ };
+ this.prev = function (shallow) {
+ node = findSibling(node, 'lastChild', 'previousSibling', shallow);
+ return node;
+ };
+ this.prev2 = function (shallow) {
+ node = findPreviousNode(node, 'lastChild', 'previousSibling', shallow);
+ return node;
+ };
+ }
+
+ 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 voids = [
+ 'area',
+ 'base',
+ 'basefont',
+ 'br',
+ 'col',
+ 'frame',
+ 'hr',
+ 'img',
+ 'input',
+ 'isindex',
+ 'link',
+ 'meta',
+ 'param',
+ 'embed',
+ 'source',
+ 'wbr',
+ 'track'
+ ];
+ 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, constant(true));
+ return lookup.hasOwnProperty(name(node));
+ };
+ };
+ var isHeading = lazyLookup(headings);
+ var isBlock = lazyLookup(blocks);
+ var isInline = function (node) {
+ return isElement(node) && !isBlock(node);
+ };
+ var isBr = function (node) {
+ return isElement(node) && name(node) === 'br';
+ };
+ var isTextBlock = lazyLookup(textBlocks);
+ var isList = lazyLookup(lists);
+ var isListItem = lazyLookup(listItems);
+ var isVoid = lazyLookup(voids);
+ var isTableSection = lazyLookup(tableSections);
+ var isTableCell = lazyLookup(tableCells);
+ var isWsPreserveElement = lazyLookup(wsElements);
+
+ var isNodeType = function (type) {
+ return function (node) {
+ return !!node && node.nodeType === type;
+ };
+ };
+ var isElement$1 = isNodeType(1);
+ var matchNodeNames = function (names) {
+ var items = names.toLowerCase().split(' ');
+ return function (node) {
+ var i, name;
+ if (node && node.nodeType) {
+ name = node.nodeName.toLowerCase();
+ for (i = 0; i < items.length; i++) {
+ if (name === items[i]) {
+ return true;
+ }
+ }
+ }
+ 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 hasPropValue = function (propName, propValue) {
+ return function (node) {
+ return isElement$1(node) && node[propName] === propValue;
+ };
+ };
+ var hasAttribute = function (attrName, attrValue) {
+ 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 isText$1 = isNodeType(3);
+ var isComment$1 = isNodeType(8);
+ var isDocument$1 = isNodeType(9);
+ var isBr$1 = matchNodeNames('br');
+ var isContentEditableTrue = hasContentEditableState('true');
+ var isContentEditableFalse = hasContentEditableState('false');
+ var NodeType = {
+ isText: isText$1,
+ isElement: isElement$1,
+ isComment: isComment$1,
+ isDocument: isDocument$1,
+ isBr: isBr$1,
+ isContentEditableTrue: isContentEditableTrue,
+ isContentEditableFalse: isContentEditableFalse,
+ matchNodeNames: matchNodeNames,
+ hasPropValue: hasPropValue,
+ hasAttribute: hasAttribute,
+ hasAttributeValue: hasAttributeValue,
+ matchStyleValues: matchStyleValues,
+ isBogus: isBogus,
+ isBogusAll: isBogusAll,
+ isTable: isTable
+ };
+
+ var surroundedBySpans = function (node) {
+ var previousIsSpan = node.previousSibling && node.previousSibling.nodeName === 'SPAN';
+ var nextIsSpan = node.nextSibling && node.nextSibling.nodeName === 'SPAN';
+ return previousIsSpan && nextIsSpan;
+ };
+ var isBookmarkNode = function (node) {
+ return node && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';
+ };
+ var trimNode = function (dom, node) {
+ var i, children = node.childNodes;
+ if (NodeType.isElement(node) && isBookmarkNode(node)) {
+ return;
+ }
+ for (i = children.length - 1; i >= 0; i--) {
+ trimNode(dom, children[i]);
+ }
+ if (NodeType.isDocument(node) === false) {
+ if (NodeType.isText(node) && node.nodeValue.length > 0) {
+ var trimmedLength = Tools.trim(node.nodeValue).length;
+ if (dom.isBlock(node.parentNode) || trimmedLength > 0) {
+ return;
+ }
+ if (trimmedLength === 0 && surroundedBySpans(node)) {
+ return;
+ }
+ } else if (NodeType.isElement(node)) {
+ children = node.childNodes;
+ if (children.length === 1 && isBookmarkNode(children[0])) {
+ node.parentNode.insertBefore(children[0], node);
+ }
+ if (children.length || isVoid(Element$$1.fromDom(node))) {
+ return;
+ }
+ }
+ dom.remove(node);
+ }
+ return node;
+ };
+ var TrimNode = { trimNode: trimNode };
+
+ var makeMap$1 = Tools.makeMap;
+ var namedEntities, baseEntities, reverseEntities;
+ 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'
+ };
+ baseEntities = {
+ '"': '"',
+ '\'': ''',
+ '<': '<',
+ '>': '>',
+ '&': '&',
+ '`': '`'
+ };
+ reverseEntities = {
+ '<': '<',
+ '>': '>',
+ '&': '&',
+ '"': '"',
+ ''': '\''
+ };
+ var nativeDecode = function (text) {
+ var elm;
+ elm = Element$$1.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;
+ }
+ };
+ 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$4 = Tools.each, extend$1 = Tools.extend, explode$1 = Tools.explode, inArray$1 = 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);
+ }
+ name = split(name);
+ ni = name.length;
+ while (ni--) {
+ attributesOrder = split([
+ globalAttributes,
+ attributes
+ ].join(' '));
+ element = {
+ attributes: arrayToMap(attributesOrder),
+ attributesOrder: attributesOrder,
+ children: arrayToMap(children, dummyObj)
+ };
+ schema[name[ni]] = element;
+ }
+ };
+ var addAttrs = function (name, attributes) {
+ var ni, schemaItem, i, l;
+ name = split(name);
+ ni = name.length;
+ attributes = split(attributes);
+ while (ni--) {
+ schemaItem = schema[name[ni]];
+ for (i = 0, l = attributes.length; i < l; i++) {
+ schemaItem.attributes[attributes[i]] = {};
+ schemaItem.attributesOrder.push(attributes[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$4(split(html4PhrasingContent), function (name) {
+ add(name, '', phrasingContent);
+ });
+ html4BlockContent = 'center dir isindex noframes';
+ blockContent = [
+ blockContent,
+ html4BlockContent
+ ].join(' ');
+ flowContent = [
+ blockContent,
+ phrasingContent
+ ].join(' ');
+ each$4(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', 'onchange');
+ 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('iframe', 'sandbox seamless allowfullscreen');
+ }
+ each$4(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$4(value, function (value, key) {
+ styles[key] = styles[key.toUpperCase()] = mode === 'map' ? makeMap$2(value, /[, ]/) : explode$1(value, /[, ]/);
+ });
+ }
+ return styles;
+ };
+ function Schema(settings) {
+ var elements = {};
+ var children = {};
+ var patternElements = [];
+ var validStyles;
+ var invalidStyles;
+ var schemaItems;
+ var whiteSpaceElementsMap, selfClosingElementsMap, shortEndedElementsMap, boolAttrMap, validClasses;
+ var blockElementsMap, nonEmptyElementsMap, moveCaretBeforeOnEnterElementsMap, textBlockElementsMap, textInlineElementsMap;
+ 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 || {};
+ schemaItems = compileSchema(settings.schema);
+ if (settings.verify_html === false) {
+ settings.valid_elements = '*[*]';
+ }
+ validStyles = compileElementMap(settings.valid_styles);
+ invalidStyles = compileElementMap(settings.invalid_styles, 'map');
+ validClasses = compileElementMap(settings.valid_classes, 'map');
+ whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code');
+ selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');
+ shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track');
+ boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls');
+ nonEmptyElementsMap = createLookupTable('non_empty_elements', 'td th iframe video audio object ' + 'script pre code', shortEndedElementsMap);
+ moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', 'table', nonEmptyElementsMap);
+ 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');
+ 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);
+ textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font strike u var cite ' + 'dfn code mark q sup sub samp');
+ each$4((settings.special || 'script noscript noframes noembed title style textarea xmp').split(' '), function (name) {
+ specialElements[name] = new RegExp('' + name + '[^>]*>', '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, key, value;
+ var elementRuleRegExp = /^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/, attrRuleRegExp = /^([!\-])?(\w+[\\:]:\w+|[^=:<]+)?(?:([=:<])(.*))?$/, hasPatternsRegExp = /[*?+]/;
+ if (validElements) {
+ validElements = split(validElements, ',');
+ if (elements['@']) {
+ globalAttributes = elements['@'].attributes;
+ globalAttributesOrder = elements['@'].attributesOrder;
+ }
+ for (ei = 0, el = validElements.length; ei < el; ei++) {
+ matches = elementRuleRegExp.exec(validElements[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) {
+ for (key in globalAttributes) {
+ attributes[key] = globalAttributes[key];
+ }
+ 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$1(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$4(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$4(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$4(children, function (element, elmName) {
+ if (element[cloneName]) {
+ children[elmName] = element = extend$1({}, children[elmName]);
+ element[name] = element[cloneName];
+ }
+ });
+ });
+ }
+ };
+ var addValidChildren = function (validChildren) {
+ var childRuleRegExp = /^([+\-]?)(\w+)\[([^\]]+)\]$/;
+ mapCache[settings.schema] = null;
+ if (validChildren) {
+ each$4(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$4(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$4(schemaItems, function (element, name) {
+ elements[name] = {
+ attributes: element.attributes,
+ attributesOrder: element.attributesOrder
+ };
+ children[name] = element.children;
+ });
+ if (settings.schema !== 'html5') {
+ each$4(split('strong/b em/i'), function (item) {
+ item = split(item, '/');
+ elements[item[1]].outputName = item[0];
+ });
+ }
+ each$4(split('ol ul sub sup blockquote span font a table tbody tr strong em b i'), function (name) {
+ if (elements[name]) {
+ elements[name].removeEmpty = true;
+ }
+ });
+ each$4(split('p h1 h2 h3 h4 h5 h6 th td pre div address caption li'), function (name) {
+ elements[name].paddEmpty = true;
+ });
+ each$4(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$4({
+ 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$4(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);
+ };
+ function Styles(settings, schema) {
+ 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 encodingItems;
+ var validStyles;
+ var invalidStyles;
+ var invisibleChar = '\uFEFF';
+ settings = settings || {};
+ if (schema) {
+ validStyles = schema.getValidStyles();
+ invalidStyles = schema.getInvalidStyles();
+ }
+ 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, right, bottom, left;
+ top = styles[prefix + '-top' + suffix];
+ if (!top) {
+ return;
+ }
+ right = styles[prefix + '-right' + suffix];
+ if (!right) {
+ return;
+ }
+ bottom = styles[prefix + '-bottom' + suffix];
+ if (!bottom) {
+ return;
+ }
+ 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 = '', name, value;
+ var serializeStyles = function (name) {
+ var styleList, i, l, value;
+ styleList = validStyles[name];
+ if (styleList) {
+ for (i = 0, l = styleList.length; i < l; i++) {
+ name = styleList[i];
+ value = styles[name];
+ if (value) {
+ css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';
+ }
+ }
+ }
+ };
+ var isValid = function (name, elementName) {
+ var styleMap;
+ styleMap = invalidStyles['*'];
+ if (styleMap && styleMap[name]) {
+ return false;
+ }
+ styleMap = invalidStyles[elementName];
+ if (styleMap && styleMap[name]) {
+ return false;
+ }
+ return true;
+ };
+ if (elementName && validStyles) {
+ serializeStyles('*');
+ serializeStyles(elementName);
+ } else {
+ for (name in styles) {
+ value = styles[name];
+ if (value && (!invalidStyles || isValid(name, elementName))) {
+ css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';
+ }
+ }
+ }
+ return css;
+ }
+ };
+ }
+
+ var each$5 = Tools.each;
+ var grep$1 = Tools.grep;
+ var isIE = Env.ie;
+ var simpleSelectorRe = /^([a-z0-9],?)+$/i;
+ var whiteSpaceRegExp$2 = /^[ \t\r\n]*$/;
+ var setupAttrHooks = function (styles, settings, getContext) {
+ var attrHooks = {};
+ var keepValues = settings.keep_values;
+ var keepUrlHook = {
+ set: function ($elm, value, name$$1) {
+ if (settings.url_converter) {
+ value = settings.url_converter.call(settings.url_converter_scope || getContext(), value, name$$1, $elm[0]);
+ }
+ $elm.attr('data-mce-' + name$$1, value).attr(name$$1, value);
+ },
+ get: function ($elm, name$$1) {
+ return $elm.attr('data-mce-' + name$$1) || $elm.attr(name$$1);
+ }
+ };
+ attrHooks = {
+ style: {
+ set: function ($elm, value) {
+ if (value !== null && typeof value === 'object') {
+ $elm.css(value);
+ return;
+ }
+ if (keepValues) {
+ $elm.attr('data-mce-style', value);
+ }
+ $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;
+ };
+ function DOMUtils(doc, settings) {
+ var _this = this;
+ if (settings === void 0) {
+ settings = {};
+ }
+ var attrHooks;
+ var addedStyles = {};
+ var win = window;
+ var files = {};
+ var counter = 0;
+ var stdMode = true;
+ var boxModel = true;
+ var styleSheetLoader = StyleSheetLoader(doc, { contentCssCors: settings.contentCssCors });
+ 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(settings.proxy) : EventUtils.Event;
+ var blockElementsMap = schema.getBlockElements();
+ var $ = DomQuery.overrideDefaults(function () {
+ return {
+ context: doc,
+ element: self$$1.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) {
+ if (elm && doc && typeof elm === 'string') {
+ var node = doc.getElementById(elm);
+ if (node && node.id !== elm) {
+ return doc.getElementsByName(elm)[1];
+ } else {
+ return node;
+ }
+ }
+ return elm;
+ };
+ var $$ = function (elm) {
+ if (typeof elm === 'string') {
+ elm = get(elm);
+ }
+ return $(elm);
+ };
+ var getAttrib = function (elm, name$$1, defaultVal) {
+ var hook, value;
+ var $elm = $$(elm);
+ if ($elm.length) {
+ hook = attrHooks[name$$1];
+ if (hook && hook.get) {
+ value = hook.get($elm, name$$1);
+ } else {
+ value = $elm.attr(name$$1);
+ }
+ }
+ 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$$1, value) {
+ var originalValue, hook;
+ if (value === '') {
+ value = null;
+ }
+ var $elm = $$(elm);
+ originalValue = $elm.attr(name$$1);
+ if (!$elm.length) {
+ return;
+ }
+ hook = attrHooks[name$$1];
+ if (hook && hook.set) {
+ hook.set($elm, value, name$$1);
+ } else {
+ $elm.attr(name$$1, value);
+ }
+ if (originalValue !== value && settings.onSetAttrib) {
+ settings.onSetAttrib({
+ attrElm: $elm,
+ attrName: name$$1,
+ attrValue: value
+ });
+ }
+ };
+ var clone = function (node, deep) {
+ if (!isIE || node.nodeType !== 1 || deep) {
+ return node.cloneNode(deep);
+ }
+ if (!deep) {
+ 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;
+ }
+ return null;
+ };
+ var getRoot = function () {
+ return settings.root_element || doc.body;
+ };
+ var getViewPort = function (argWin) {
+ var actWin = !argWin ? win : argWin;
+ var doc = actWin.document;
+ var rootElm = boxModel ? doc.documentElement : doc.body;
+ return {
+ x: actWin.pageXOffset || rootElm.scrollLeft,
+ y: actWin.pageYOffset || rootElm.scrollTop,
+ w: actWin.innerWidth || rootElm.clientWidth,
+ h: actWin.innerHeight || rootElm.clientHeight
+ };
+ };
+ var getPos = function (elm, rootElm) {
+ return Position.getPos(doc.body, get(elm), rootElm);
+ };
+ var setStyle = function (elm, name$$1, value) {
+ var $elm = $$(elm).css(name$$1, value);
+ 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$$1, computed) {
+ var $elm = $$(elm);
+ if (computed) {
+ return $elm.css(name$$1);
+ }
+ name$$1 = name$$1.replace(/-(\D)/g, function (a, b) {
+ return b.toUpperCase();
+ });
+ if (name$$1 === 'float') {
+ name$$1 = Env.ie && Env.ie < 12 ? 'styleFloat' : 'cssFloat';
+ }
+ return $elm[0] && $elm[0].style ? $elm[0].style[name$$1] : 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) {
+ var pos, size;
+ elm = get(elm);
+ pos = getPos(elm);
+ 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 || !node.nodeType || node.nodeType === 9) {
+ 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$$1) {
+ var func = selector;
+ if (node) {
+ if (typeof selector === 'string') {
+ func = function (node) {
+ return is(node, selector);
+ };
+ }
+ for (node = node[name$$1]; node; node = node[name$$1]) {
+ 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) {
+ if (typeof elm === 'string') {
+ elm = get(elm);
+ }
+ result.push(func.call(scope, 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$$1) {
+ setAttrib(node, name$$1, 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$$1, attrs, html, create) {
+ return run(parentElm, function (parentElm) {
+ var newElm = typeof name$$1 === 'string' ? doc.createElement(name$$1) : name$$1;
+ 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$$1, attrs, html) {
+ return add(doc.createElement(name$$1), name$$1, attrs, html, true);
+ };
+ var decode = Entities.decode;
+ var encode = Entities.encodeAllRaw;
+ var createHTML = function (name$$1, attrs, html) {
+ var outHtml = '', key;
+ outHtml += '<' + name$$1;
+ 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 + '' + name$$1 + '>';
+ }
+ return outHtml + ' />';
+ };
+ var createFragment = function (html) {
+ var node;
+ var container = doc.createElement('div');
+ var frag = doc.createDocumentFragment();
+ if (html) {
+ container.innerHTML = html;
+ }
+ while (node = container.firstChild) {
+ frag.appendChild(node);
+ }
+ 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$$1) {
+ return styles.serialize(stylesArg, name$$1);
+ };
+ var addStyle = function (cssText) {
+ var head, styleElm;
+ if (self$$1 !== 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 (url) {
+ var head;
+ if (self$$1 !== DOMUtils.DOM && doc === document) {
+ DOMUtils.DOM.loadCSS(url);
+ return;
+ }
+ if (!url) {
+ url = '';
+ }
+ head = doc.getElementsByTagName('head')[0];
+ each$5(url.split(','), function (url) {
+ var link;
+ url = Tools._addCacheSuffix(url);
+ if (files[url]) {
+ return;
+ }
+ files[url] = true;
+ link = create('link', {
+ rel: 'stylesheet',
+ href: url
+ });
+ head.appendChild(link);
+ });
+ };
+ 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 NodeType.isElement(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$$1, nextSibling;
+ parent$$1 = referenceNode.parentNode;
+ nextSibling = referenceNode.nextSibling;
+ if (nextSibling) {
+ parent$$1.insertBefore(node, nextSibling);
+ } else {
+ parent$$1.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$$1) {
+ var newElm;
+ if (elm.nodeName !== name$$1.toUpperCase()) {
+ newElm = create(name$$1);
+ 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 isEmpty = function (node, elements) {
+ var i, attributes, type, whitespace, walker, name$$1, brCount = 0;
+ node = node.firstChild;
+ if (node) {
+ walker = new TreeWalker(node, node.parentNode);
+ elements = elements || (schema ? schema.getNonEmptyElements() : null);
+ whitespace = schema ? schema.getWhiteSpaceElements() : {};
+ do {
+ type = node.nodeType;
+ if (NodeType.isElement(node)) {
+ var bogusVal = node.getAttribute('data-mce-bogus');
+ if (bogusVal) {
+ node = walker.next(bogusVal === 'all');
+ continue;
+ }
+ name$$1 = node.nodeName.toLowerCase();
+ if (elements && elements[name$$1]) {
+ if (name$$1 === 'br') {
+ brCount++;
+ node = walker.next();
+ continue;
+ }
+ return false;
+ }
+ attributes = getAttribs(node);
+ i = attributes.length;
+ while (i--) {
+ name$$1 = attributes[i].nodeName;
+ if (name$$1 === 'name' || name$$1 === 'data-mce-bookmark') {
+ return false;
+ }
+ }
+ }
+ if (type === 8) {
+ return false;
+ }
+ if (type === 3 && !whiteSpaceRegExp$2.test(node.nodeValue)) {
+ return false;
+ }
+ if (type === 3 && node.parentNode && whitespace[node.parentNode.nodeName] && whiteSpaceRegExp$2.test(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 r = createRng(), bef, aft, pa;
+ if (parentElm && splitElm) {
+ r.setStart(parentElm.parentNode, findNodeIndex(parentElm));
+ r.setEnd(splitElm.parentNode, findNodeIndex(splitElm));
+ bef = r.extractContents();
+ r = createRng();
+ r.setStart(splitElm.parentNode, findNodeIndex(splitElm) + 1);
+ r.setEnd(parentElm.parentNode, findNodeIndex(parentElm) + 1);
+ aft = r.extractContents();
+ pa = parentElm.parentNode;
+ pa.insertBefore(TrimNode.trimNode(self$$1, bef), parentElm);
+ if (replacementElm) {
+ pa.insertBefore(replacementElm, parentElm);
+ } else {
+ pa.insertBefore(splitElm, parentElm);
+ }
+ pa.insertBefore(TrimNode.trimNode(self$$1, aft), parentElm);
+ remove(parentElm);
+ return replacementElm || splitElm;
+ }
+ };
+ var bind = function (target, name$$1, func, scope) {
+ if (Tools.isArray(target)) {
+ var i = target.length;
+ while (i--) {
+ target[i] = bind(target[i], name$$1, func, scope);
+ }
+ return target;
+ }
+ if (settings.collect && (target === doc || target === win)) {
+ boundEvents.push([
+ target,
+ name$$1,
+ func,
+ scope
+ ]);
+ }
+ return events.bind(target, name$$1, func, scope || self$$1);
+ };
+ var unbind = function (target, name$$1, func) {
+ var i;
+ if (Tools.isArray(target)) {
+ i = target.length;
+ while (i--) {
+ target[i] = unbind(target[i], name$$1, func);
+ }
+ return target;
+ }
+ if (boundEvents && (target === doc || target === win)) {
+ i = boundEvents.length;
+ while (i--) {
+ var item = boundEvents[i];
+ if (target === item[0] && (!name$$1 || name$$1 === item[1]) && (!func || func === item[2])) {
+ events.unbind(item[0], item[1], item[2]);
+ }
+ }
+ }
+ return events.unbind(target, name$$1, func);
+ };
+ var fire = function (target, name$$1, evt) {
+ return events.fire(target, name$$1, evt);
+ };
+ var getContentEditable = function (node) {
+ if (node && NodeType.isElement(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) {
+ var i = boundEvents.length;
+ while (i--) {
+ var item = boundEvents[i];
+ events.unbind(item[0], item[1], item[2]);
+ }
+ }
+ if (Sizzle.setDocument) {
+ Sizzle.setDocument();
+ }
+ };
+ var isChildOf = function (node, parent$$1) {
+ while (node) {
+ if (parent$$1 === 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$$1 = {
+ 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,
+ 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
+ };
+ attrHooks = setupAttrHooks(styles, settings, function () {
+ return self$$1;
+ });
+ return self$$1;
+ }
+ (function (DOMUtils) {
+ DOMUtils.DOM = DOMUtils(document);
+ DOMUtils.nodeIndex = findNodeIndex;
+ }(DOMUtils || (DOMUtils = {})));
+ var DOMUtils$1 = DOMUtils;
+
+ var DOM = DOMUtils$1.DOM;
+ var each$6 = Tools.each, grep$2 = Tools.grep;
+ var isFunction$1 = function (f) {
+ return typeof f === 'function';
+ };
+ var ScriptLoader = function () {
+ var QUEUED = 0;
+ var LOADING = 1;
+ var LOADED = 2;
+ var FAILED = 3;
+ var states = {};
+ var queue = [];
+ var scriptLoadedCallbacks = {};
+ var queueLoadedCallbacks = [];
+ var loading = 0;
+ var loadScript = function (url, success, failure) {
+ var dom = DOM;
+ var elm, id;
+ var done = function () {
+ dom.remove(id);
+ if (elm) {
+ elm.onreadystatechange = elm.onload = elm = null;
+ }
+ success();
+ };
+ var error = function () {
+ if (isFunction$1(failure)) {
+ failure();
+ } else {
+ if (typeof console !== 'undefined' && console.log) {
+ console.log('Failed to load script: ' + url);
+ }
+ }
+ };
+ id = dom.uniqueId();
+ elm = document.createElement('script');
+ elm.id = id;
+ elm.type = 'text/javascript';
+ elm.src = Tools._addCacheSuffix(url);
+ elm.onload = done;
+ elm.onerror = error;
+ (document.getElementsByTagName('head')[0] || document.body).appendChild(elm);
+ };
+ this.isDone = function (url) {
+ return states[url] === LOADED;
+ };
+ this.markDone = function (url) {
+ states[url] = LOADED;
+ };
+ this.add = this.load = function (url, success, scope, failure) {
+ var state = states[url];
+ if (state === undefined) {
+ queue.push(url);
+ states[url] = QUEUED;
+ }
+ if (success) {
+ if (!scriptLoadedCallbacks[url]) {
+ scriptLoadedCallbacks[url] = [];
+ }
+ scriptLoadedCallbacks[url].push({
+ success: success,
+ failure: failure,
+ scope: scope || this
+ });
+ }
+ };
+ this.remove = function (url) {
+ delete states[url];
+ delete scriptLoadedCallbacks[url];
+ };
+ this.loadQueue = function (success, scope, failure) {
+ this.loadScripts(queue, success, scope, failure);
+ };
+ this.loadScripts = function (scripts, success, scope, failure) {
+ var loadScripts;
+ var failures = [];
+ var execCallbacks = function (name$$1, url) {
+ each$6(scriptLoadedCallbacks[url], function (callback) {
+ if (isFunction$1(callback[name$$1])) {
+ callback[name$$1].call(callback.scope);
+ }
+ });
+ scriptLoadedCallbacks[url] = undefined;
+ };
+ queueLoadedCallbacks.push({
+ success: success,
+ failure: failure,
+ scope: scope || this
+ });
+ loadScripts = function () {
+ var loadingScripts = grep$2(scripts);
+ scripts.length = 0;
+ each$6(loadingScripts, function (url) {
+ if (states[url] === LOADED) {
+ execCallbacks('success', url);
+ return;
+ }
+ if (states[url] === FAILED) {
+ execCallbacks('failure', url);
+ return;
+ }
+ if (states[url] !== LOADING) {
+ states[url] = LOADING;
+ loading++;
+ loadScript(url, function () {
+ states[url] = LOADED;
+ loading--;
+ execCallbacks('success', url);
+ loadScripts();
+ }, function () {
+ states[url] = FAILED;
+ loading--;
+ failures.push(url);
+ execCallbacks('failure', url);
+ loadScripts();
+ });
+ }
+ });
+ if (!loading) {
+ var notifyCallbacks = queueLoadedCallbacks.slice(0);
+ queueLoadedCallbacks.length = 0;
+ each$6(notifyCallbacks, function (callback) {
+ if (failures.length === 0) {
+ if (isFunction$1(callback.success)) {
+ callback.success.call(callback.scope);
+ }
+ } else {
+ if (isFunction$1(callback.failure)) {
+ callback.failure.call(callback.scope, failures);
+ }
+ }
+ });
+ }
+ };
+ loadScripts();
+ };
+ };
+ ScriptLoader.ScriptLoader = new ScriptLoader();
+
+ var each$7 = Tools.each;
+ function AddOnManager() {
+ var _this = this;
+ var items = [];
+ var urls = {};
+ var lookup = {};
+ var _listeners = [];
+ 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) {
+ var language = AddOnManager.language;
+ if (language && AddOnManager.languageLoad !== false) {
+ if (languages) {
+ languages = ',' + languages + ',';
+ if (languages.indexOf(',' + language.substr(0, 2) + ',') !== -1) {
+ language = language.substr(0, 2);
+ } else if (languages.indexOf(',' + language + ',') === -1) {
+ return;
+ }
+ }
+ ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js');
+ }
+ };
+ var add = function (id, addOn, dependencies) {
+ items.push(addOn);
+ lookup[id] = {
+ instance: addOn,
+ dependencies: dependencies
+ };
+ var result = partition(_listeners, function (listener) {
+ return listener.name === id;
+ });
+ _listeners = result.fail;
+ each$7(result.pass, function (listener) {
+ listener.callback();
+ });
+ return addOn;
+ };
+ 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 = _this.urls[pluginName];
+ each$7(scripts, function (script) {
+ ScriptLoader.ScriptLoader.add(pluginUrl + '/' + script);
+ });
+ };
+ var loadDependencies = function (name, addOnUrl, success, scope) {
+ var deps = dependencies(name);
+ each$7(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('/'));
+ if (lookup[name]) {
+ loadDependencies(name, addOnUrl, success, scope);
+ } else {
+ ScriptLoader.ScriptLoader.add(urlString, function () {
+ return loadDependencies(name, addOnUrl, success, scope);
+ }, scope, failure);
+ }
+ };
+ var waitFor = function (name, callback) {
+ if (lookup.hasOwnProperty(name)) {
+ callback();
+ } else {
+ _listeners.push({
+ name: name,
+ 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
+ };
+ }
+ (function (AddOnManager) {
+ AddOnManager.PluginManager = AddOnManager();
+ AddOnManager.ThemeManager = AddOnManager();
+ }(AddOnManager || (AddOnManager = {})));
+
+ 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$$1, element) {
+ var firstChild$$1 = firstChild(parent$$1);
+ firstChild$$1.fold(function () {
+ append(parent$$1, element);
+ }, function (v) {
+ parent$$1.dom().insertBefore(element.dom(), v.dom());
+ });
+ };
+ var append = function (parent$$1, element) {
+ parent$$1.dom().appendChild(element.dom());
+ };
+ var wrap$1 = 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$2(rogue);
+ });
+ };
+ var remove$2 = 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$2(wrapper);
+ };
+
+ var first$1 = 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$3 = 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 Cell = function (initial) {
+ var value = initial;
+ var get = function () {
+ return value;
+ };
+ var set = function (v) {
+ value = v;
+ };
+ var clone = function () {
+ return Cell(get());
+ };
+ return {
+ get: get,
+ set: set,
+ clone: clone
+ };
+ };
+
+ var read = function (element, attr) {
+ var value = get$1(element, attr);
+ return value === undefined || value === '' ? [] : value.split(' ');
+ };
+ var add = function (element, attr, id) {
+ var old = read(element, attr);
+ var nu = old.concat([id]);
+ set(element, attr, nu.join(' '));
+ return true;
+ };
+ var remove$3 = 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(element, attr);
+ return false;
+ };
+
+ var supports = function (element) {
+ return element.dom().classList !== undefined;
+ };
+ var get$3 = function (element) {
+ return read(element, 'class');
+ };
+ var add$1 = function (element, clazz) {
+ return add(element, 'class', clazz);
+ };
+ var remove$4 = function (element, clazz) {
+ return remove$3(element, 'class', clazz);
+ };
+
+ var add$2 = function (element, clazz) {
+ if (supports(element))
+ element.dom().classList.add(clazz);
+ else
+ add$1(element, clazz);
+ };
+ var cleanClass = function (element) {
+ var classList = supports(element) ? element.dom().classList : get$3(element);
+ if (classList.length === 0) {
+ remove(element, 'class');
+ }
+ };
+ var remove$5 = function (element, clazz) {
+ if (supports(element)) {
+ var classList = element.dom().classList;
+ classList.remove(clazz);
+ } else
+ remove$4(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);
+ };
+
+ function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {
+ return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);
+ }
+
+ var ancestor = function (scope, predicate, isRoot) {
+ var element = scope.dom();
+ var stop = isFunction(isRoot) ? isRoot : constant(false);
+ while (element.parentNode) {
+ element = element.parentNode;
+ var el = Element$$1.fromDom(element);
+ if (predicate(el))
+ return Option.some(el);
+ else if (stop(el))
+ break;
+ }
+ return Option.none();
+ };
+ var closest = function (scope, predicate, isRoot) {
+ var is = function (scope) {
+ return predicate(scope);
+ };
+ return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);
+ };
+
+ var ancestor$1 = function (scope, selector, isRoot) {
+ return ancestor(scope, function (e) {
+ return is$1(e, selector);
+ }, isRoot);
+ };
+ var descendant$1 = function (scope, selector) {
+ return one(selector, scope);
+ };
+ var closest$1 = function (scope, selector, isRoot) {
+ return ClosestOrAncestor(is$1, ancestor$1, scope, selector, isRoot);
+ };
+
+ 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 = Element$$1.fromDom(rng.startContainer);
+ var root = Element$$1.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(n, root);
+ });
+ var getAttr = function (c, property) {
+ if (has$1(c, property)) {
+ return Option.some(get$1(c, property));
+ } else {
+ return Option.none();
+ }
+ };
+ return closest.bind(function (c) {
+ return getAttr(c, '' + dataAnnotationId()).bind(function (uid) {
+ return getAttr(c, '' + dataAnnotation()).map(function (name$$1) {
+ var elements = findMarkers(editor, uid);
+ return {
+ uid: uid,
+ name: name$$1,
+ elements: elements
+ };
+ });
+ });
+ });
+ };
+ var isAnnotation = function (elem) {
+ return isElement(elem) && has$2(elem, annotation());
+ };
+ var findMarkers = function (editor, uid) {
+ var body = Element$$1.fromDom(editor.getBody());
+ return descendants$1(body, '[' + dataAnnotationId() + '="' + uid + '"]');
+ };
+ var findAll = function (editor, name$$1) {
+ var body = Element$$1.fromDom(editor.getBody());
+ var markers = descendants$1(body, '[' + dataAnnotation() + '="' + name$$1 + '"]');
+ var directory = {};
+ each(markers, function (m) {
+ var uid = get$1(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(Option.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$3(function () {
+ var callbackMap = changeCallbacks.get();
+ var annotations = sort(keys(callbackMap));
+ each(annotations, function (name) {
+ updateCallbacks(name, function (data) {
+ var prev = data.previous.get();
+ identify(editor, Option.some(name)).fold(function () {
+ if (prev.isSome()) {
+ fireNoAnnotation(name);
+ data.previous.set(Option.none());
+ }
+ }, function (_a) {
+ var uid = _a.uid, name = _a.name, elements = _a.elements;
+ if (!prev.is(uid)) {
+ fireCallbacks(name, uid, elements);
+ data.previous.set(Option.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) {
+ var optAnnotation = Option.from(span.attributes.map[dataAnnotation()]);
+ return optAnnotation.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$1 = function () {
+ var annotations = {};
+ var register = function (name, settings) {
+ annotations[name] = {
+ name: name,
+ settings: settings
+ };
+ };
+ var lookup = function (name) {
+ return annotations.hasOwnProperty(name) ? Option.from(annotations[name]).map(function (a) {
+ return a.settings;
+ }) : Option.none();
+ };
+ return {
+ register: register,
+ lookup: lookup
+ };
+ };
+
+ 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)
+ t[p[i]] = s[p[i]];
+ return t;
+ }
+
+ var unique = 0;
+ var generate = 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$3 = function (element, classes) {
+ each(classes, function (x) {
+ add$2(element, x);
+ });
+ };
+
+ var clone$1 = function (original, deep) {
+ return Element$$1.fromDom(original.dom().cloneNode(deep));
+ };
+ var shallow = function (original) {
+ return clone$1(original, false);
+ };
+ var deep = function (original) {
+ return clone$1(original, true);
+ };
+
+ var fromHtml$1 = function (html, scope) {
+ var doc = scope || document;
+ var div = doc.createElement('div');
+ div.innerHTML = html;
+ return children(Element$$1.fromDom(div));
+ };
+
+ var get$5 = function (element) {
+ return element.dom().innerHTML;
+ };
+ var set$2 = function (element, content) {
+ var owner$$1 = owner(element);
+ var docDom = owner$$1.dom();
+ var fragment = Element$$1.fromDom(docDom.createDocumentFragment());
+ var contentElements = fromHtml$1(content, docDom);
+ append$1(fragment, contentElements);
+ empty(element);
+ append(element, fragment);
+ };
+
+ var ZWSP = '\uFEFF';
+ var isZwsp = function (chr) {
+ return chr === ZWSP;
+ };
+ var trim$3 = function (text) {
+ return text.replace(new RegExp(ZWSP, 'g'), '');
+ };
+ var Zwsp = {
+ isZwsp: isZwsp,
+ ZWSP: ZWSP,
+ trim: trim$3
+ };
+
+ var isElement$2 = NodeType.isElement;
+ var isText$2 = NodeType.isText;
+ 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) && Zwsp.isZwsp(node.data);
+ };
+ var isCaretContainer = function (node) {
+ return isCaretContainerBlock(node) || isCaretContainerInline(node);
+ };
+ var hasContent = function (node) {
+ return node.firstChild !== node.lastChild || !NodeType.isBr(node.firstChild);
+ };
+ var insertInline = function (node, before) {
+ var doc, sibling, textNode, parentNode;
+ doc = node.ownerDocument;
+ textNode = doc.createTextNode(Zwsp.ZWSP);
+ 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();
+ return pos && NodeType.isText(container) && container.data.charAt(pos.offset()) === Zwsp.ZWSP;
+ };
+ var isAfterInline = function (pos) {
+ var container = pos.container();
+ return pos && NodeType.isText(container) && container.data.charAt(pos.offset() - 1) === Zwsp.ZWSP;
+ };
+ var createBogusBr = function () {
+ var br = document.createElement('br');
+ br.setAttribute('data-mce-bogus', '1');
+ return br;
+ };
+ var insertBlock = function (blockName, node, before) {
+ var doc, blockNode, parentNode;
+ doc = node.ownerDocument;
+ blockNode = doc.createElement(blockName);
+ blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after');
+ blockNode.setAttribute('data-mce-bogus', 'all');
+ blockNode.appendChild(createBogusBr());
+ 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.ZWSP;
+ };
+ var endsWithCaretContainer = function (node) {
+ return isText$2(node) && node.data[node.data.length - 1] === Zwsp.ZWSP;
+ };
+ var trimBogusBr = function (elm) {
+ var brs = elm.getElementsByTagName('br');
+ var lastBr = brs[brs.length - 1];
+ if (NodeType.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 = NodeType.isContentEditableTrue;
+ var isContentEditableFalse$1 = NodeType.isContentEditableFalse;
+ var isBr$2 = NodeType.isBr;
+ var isText$3 = NodeType.isText;
+ var isInvalidTextElement = NodeType.matchNodeNames('script style textarea');
+ var isAtomicInline = NodeType.matchNodeNames('img input textarea hr iframe video audio object');
+ var isTable$1 = NodeType.matchNodeNames('table');
+ var isCaretContainer$1 = isCaretContainer;
+ var isCaretCandidate = function (node) {
+ if (isCaretContainer$1(node)) {
+ return false;
+ }
+ if (isText$3(node)) {
+ if (isInvalidTextElement(node.parentNode)) {
+ return false;
+ }
+ return true;
+ }
+ return isAtomicInline(node) || isBr$2(node) || isTable$1(node) || isNonUiContentEditableFalse(node);
+ };
+ var isUnselectable = function (node) {
+ return NodeType.isElement(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 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) {
+ if (rect1.bottom - rect1.height / 2 < 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 overflowX = function (outer, inner) {
+ if (inner.left > outer.left && inner.right < outer.right) {
+ return 0;
+ } else {
+ return inner.left < outer.left ? inner.left - outer.left : inner.right - outer.right;
+ }
+ };
+ var overflowY = function (outer, inner) {
+ if (inner.top > outer.top && inner.bottom < outer.bottom) {
+ return 0;
+ } else {
+ return inner.top < outer.top ? inner.top - outer.top : inner.bottom - outer.bottom;
+ }
+ };
+ var getOverflow = function (outer, inner) {
+ return {
+ x: overflowX(outer, inner),
+ y: overflowY(outer, inner)
+ };
+ };
+
+ 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 liftN = function (arr, f) {
+ var r = [];
+ for (var i = 0; i < arr.length; i++) {
+ var x = arr[i];
+ if (x.isSome()) {
+ r.push(x.getOrDie());
+ } else {
+ return Option.none();
+ }
+ }
+ return Option.some(f.apply(null, r));
+ };
+
+ var slice$3 = [].slice;
+ var or = function () {
+ var x = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ x[_i] = arguments[_i];
+ }
+ var args = slice$3.call(arguments);
+ return function (x) {
+ for (var i = 0; i < args.length; i++) {
+ if (args[i](x)) {
+ return true;
+ }
+ }
+ return false;
+ };
+ };
+ var and = function () {
+ var x = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ x[_i] = arguments[_i];
+ }
+ var args = slice$3.call(arguments);
+ return function (x) {
+ for (var i = 0; i < args.length; i++) {
+ if (!args[i](x)) {
+ return false;
+ }
+ }
+ return true;
+ };
+ };
+ var Predicate = {
+ and: and,
+ or: or
+ };
+
+ var isElement$3 = NodeType.isElement;
+ var isCaretCandidate$1 = isCaretCandidate;
+ var isBlock$1 = NodeType.matchStyleValues('display', 'block table');
+ var isFloated = NodeType.matchStyleValues('float', 'left right');
+ var isValidElementCaretCandidate = Predicate.and(isElement$3, isCaretCandidate$1, not(isFloated));
+ var isNotPre = not(NodeType.matchStyleValues('white-space', 'pre pre-line pre-wrap'));
+ var isText$4 = NodeType.isText;
+ var isBr$3 = NodeType.isBr;
+ var nodeIndex = DOMUtils$1.nodeIndex;
+ var resolveIndex = getNode;
+ var createRange = function (doc) {
+ return 'createRange' in doc ? doc.createRange() : DOMUtils$1.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$$1) {
+ var container = range$$1.startContainer;
+ var offset = range$$1.startOffset;
+ var text;
+ if (isWhiteSpace(range$$1.toString()) && isNotPre(container.parentNode) && NodeType.isText(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 = doc.createTextNode('\xA0');
+ var parentNode = brNode.parentNode;
+ var clientRect;
+ parentNode.insertBefore(nbsp, brNode);
+ rng.setStart(nbsp, 0);
+ rng.setEnd(nbsp, 1);
+ clientRect = clone$2(rng.getBoundingClientRect());
+ parentNode.removeChild(nbsp);
+ 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 && NodeType.isText(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, clientRects;
+ 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$$1 = createRange(container.ownerDocument);
+ if (offset < container.data.length) {
+ if (isExtendingChar(container.data[offset])) {
+ return clientRects;
+ }
+ if (isExtendingChar(container.data[offset - 1])) {
+ range$$1.setStart(container, offset);
+ range$$1.setEnd(container, offset + 1);
+ if (!isHiddenWhiteSpaceRange(range$$1)) {
+ addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range$$1), false));
+ return clientRects;
+ }
+ }
+ }
+ if (offset > 0) {
+ range$$1.setStart(container, offset - 1);
+ range$$1.setEnd(container, offset);
+ if (!isHiddenWhiteSpaceRange(range$$1)) {
+ addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range$$1), false));
+ }
+ }
+ if (offset < container.data.length) {
+ range$$1.setStart(container, offset);
+ range$$1.setEnd(container, offset + 1);
+ if (!isHiddenWhiteSpaceRange(range$$1)) {
+ addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range$$1), 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;
+ };
+ function CaretPosition(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$$1;
+ range$$1 = createRange(container.ownerDocument);
+ range$$1.setStart(container, offset);
+ range$$1.setEnd(container, offset);
+ return range$$1;
+ };
+ var getClientRects = function () {
+ if (!clientRects) {
+ clientRects = getCaretPositionClientRects(CaretPosition(container, offset));
+ }
+ return clientRects;
+ };
+ var isVisible = function () {
+ return getClientRects().length > 0;
+ };
+ var isEqual$$1 = function (caretPosition) {
+ return caretPosition && container === caretPosition.container() && offset === caretPosition.offset();
+ };
+ var getNode$$1 = 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$$1,
+ getNode: getNode$$1
+ };
+ }
+ (function (CaretPosition) {
+ CaretPosition.fromRangeStart = function (range$$1) {
+ return CaretPosition(range$$1.startContainer, range$$1.startOffset);
+ };
+ CaretPosition.fromRangeEnd = function (range$$1) {
+ return CaretPosition(range$$1.endContainer, range$$1.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 liftN([
+ head(pos2.getClientRects()),
+ last(pos1.getClientRects())
+ ], isAbove).getOr(false);
+ };
+ CaretPosition.isBelow = function (pos1, pos2) {
+ return liftN([
+ 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 ? NodeType.isText(pos.container()) : false;
+ };
+ CaretPosition.isElementPosition = function (pos) {
+ return CaretPosition.isTextPosition(pos) === false;
+ };
+ }(CaretPosition || (CaretPosition = {})));
+ var CaretPosition$1 = CaretPosition;
+
+ var isText$5 = NodeType.isText;
+ var isBogus$1 = NodeType.isBogus;
+ var nodeIndex$1 = DOMUtils$1.nodeIndex;
+ var normalizedParent = function (node) {
+ var parentNode = node.parentNode;
+ if (isBogus$1(parentNode)) {
+ return normalizedParent(parentNode);
+ }
+ return parentNode;
+ };
+ var getChildNodes = function (node) {
+ if (!node) {
+ return [];
+ }
+ return ArrUtils.reduce(node.childNodes, function (result, node) {
+ if (isBogus$1(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, numTextFragments;
+ nodes = getChildNodes(normalizedParent(node));
+ index = ArrUtils.findIndex(nodes, equal$1(node), node);
+ nodes = nodes.slice(0, index + 1);
+ numTextFragments = ArrUtils.reduce(nodes, function (result, node, i) {
+ if (isText$5(node) && isText$5(nodes[i - 1])) {
+ result++;
+ }
+ return result;
+ }, 0);
+ nodes = ArrUtils.filter(nodes, NodeType.matchNodeNames(node.nodeName));
+ index = ArrUtils.findIndex(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$2 = 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 = ArrUtils.filter(parents, not(NodeType.isBogus));
+ path = path.concat(ArrUtils.map(parents, function (node) {
+ return createPathItem(node);
+ }));
+ return path.reverse().join('/') + ',' + outputOffset;
+ };
+ var resolvePathItem = function (node, name, index) {
+ var nodes = getChildNodes(node);
+ nodes = ArrUtils.filter(nodes, function (node, index) {
+ return !isText$5(node) || !isText$5(nodes[index - 1]);
+ });
+ nodes = ArrUtils.filter(nodes, NodeType.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$1(container, offset);
+ };
+ var resolve$2 = function (root, path) {
+ var parts, container, offset;
+ if (!path) {
+ return null;
+ }
+ parts = path.split(',');
+ path = parts[0].split('/');
+ offset = parts.length > 1 ? parts[1] : 'before';
+ container = ArrUtils.reduce(path, function (result, value) {
+ value = /([\w\-\(\)]+)\[([0-9]+)\]/.exec(value);
+ if (!value) {
+ return null;
+ }
+ if (value[1] === 'text()') {
+ value[1] = '#text';
+ }
+ return resolvePathItem(result, value[1], parseInt(value[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$1(container.parentNode, offset);
+ }
+ return findTextPosition(container, parseInt(offset, 10));
+ };
+
+ var isContentEditableFalse$2 = NodeType.isContentEditableFalse;
+ var getNormalizedTextOffset = function (trim, container, offset) {
+ var node, trimmedOffset;
+ trimmedOffset = trim(container.data.slice(0, offset)).length;
+ for (node = container.previousSibling; node && NodeType.isText(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 (NodeType.isText(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 trimEmptyTextNode = function (node) {
+ if (NodeType.isText(node) && node.data.length === 0) {
+ node.parentNode.removeChild(node);
+ }
+ };
+ var findIndex$3 = 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 (NodeType.isElement(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 (NodeType.isElement(node)) {
+ node = getNode(node, offset);
+ if (isContentEditableFalse$2(node)) {
+ return node;
+ }
+ }
+ if (isCaretContainer(node)) {
+ if (NodeType.isText(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$3(selection.dom, name, element)
+ };
+ }
+ var sibling = findAdjacentContentEditableFalseElm(rng);
+ if (sibling) {
+ name = sibling.tagName;
+ return {
+ name: name,
+ index: findIndex$3(selection.dom, name, sibling)
+ };
+ }
+ return getLocation(trim, selection, normalized, rng);
+ };
+ var getCaretBookmark = function (selection) {
+ var rng = selection.getRng();
+ return {
+ start: create$2(selection.dom.getRoot(), CaretPosition$1.fromRangeStart(rng)),
+ end: create$2(selection.dom.getRoot(), CaretPosition$1.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$3(dom, name, element)
+ };
+ }
+ var rng2 = normalizeTableCellSelection(rng.cloneRange());
+ if (!collapsed) {
+ rng2.collapse(false);
+ var endBookmarkNode = createBookmarkSpan(dom, id + '_end', filled);
+ rng2.insertNode(endBookmarkNode);
+ trimEmptyTextNode(endBookmarkNode.nextSibling);
+ }
+ rng = normalizeTableCellSelection(rng);
+ rng.collapse(true);
+ var startBookmarkNode = createBookmarkSpan(dom, id + '_start', filled);
+ rng.insertNode(startBookmarkNode);
+ trimEmptyTextNode(startBookmarkNode.previousSibling);
+ trimEmptyTextNode(startBookmarkNode.nextSibling);
+ selection.moveToBookmark({
+ id: id,
+ keep: 1
+ });
+ return { id: id };
+ };
+ var getBookmark = function (selection, type, normalized) {
+ if (type === 2) {
+ return getOffsetBookmark(Zwsp.trim, normalized, selection);
+ } else if (type === 3) {
+ return getCaretBookmark(selection);
+ } else if (type) {
+ return getRangeBookmark(selection);
+ } else {
+ return getPersistentBookmark(selection, false);
+ }
+ };
+ var GetBookmark = {
+ getBookmark: getBookmark,
+ getUndoBookmark: curry(getOffsetBookmark, identity, true),
+ getPersistentBookmark: getPersistentBookmark
+ };
+
+ var CARET_ID = '_mce_caret';
+ var isCaretNode = function (node) {
+ return NodeType.isElement(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 isElement$4 = NodeType.isElement;
+ var isText$6 = NodeType.isText;
+ var removeNode = function (node) {
+ var parentNode = node.parentNode;
+ if (parentNode) {
+ parentNode.removeChild(node);
+ }
+ };
+ var getNodeValue = function (node) {
+ try {
+ return node.nodeValue;
+ } catch (ex) {
+ return '';
+ }
+ };
+ var setNodeValue = function (node, text) {
+ if (text.length === 0) {
+ removeNode(node);
+ } else {
+ node.nodeValue = text;
+ }
+ };
+ var trimCount = function (text) {
+ var trimmedText = Zwsp.trim(text);
+ return {
+ count: text.length - trimmedText.length,
+ text: trimmedText
+ };
+ };
+ var removeUnchanged = function (caretContainer, pos) {
+ remove$7(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) {
+ setNodeValue(caretContainer, text);
+ return CaretPosition$1(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$1(parentNode, pos.offset() - 1) : pos;
+ }).getOr(pos);
+ remove$7(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$1.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos);
+ };
+ var remove$7 = function (caretContainerNode) {
+ if (isElement$4(caretContainerNode) && isCaretContainer(caretContainerNode)) {
+ if (hasContent(caretContainerNode)) {
+ caretContainerNode.removeAttribute('data-mce-caret');
+ } else {
+ removeNode(caretContainerNode);
+ }
+ }
+ if (isText$6(caretContainerNode)) {
+ var text = Zwsp.trim(getNodeValue(caretContainerNode));
+ setNodeValue(caretContainerNode, text);
+ }
+ };
+ var CaretContainerRemove = {
+ removeAndReposition: removeAndReposition,
+ remove: remove$7
+ };
+
+ var browser$2 = PlatformDetection$1.detect().browser;
+ var isContentEditableFalse$3 = NodeType.isContentEditableFalse;
+ var isTableCell$1 = function (node) {
+ return NodeType.isElement(node) && /^(TD|TH)$/i.test(node.tagName);
+ };
+ 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 contentEditableFalseNodes, node, sibling, i, data;
+ contentEditableFalseNodes = DomQuery('*[contentEditable=false]', root);
+ for (i = 0; i < contentEditableFalseNodes.length; i++) {
+ node = contentEditableFalseNodes[i];
+ sibling = node.previousSibling;
+ if (endsWithCaretContainer(sibling)) {
+ data = sibling.data;
+ if (data.length === 1) {
+ sibling.parentNode.removeChild(sibling);
+ } else {
+ sibling.deleteData(data.length - 1, 1);
+ }
+ }
+ sibling = node.nextSibling;
+ if (startsWithCaretContainer(sibling)) {
+ data = sibling.data;
+ if (data.length === 1) {
+ sibling.parentNode.removeChild(sibling);
+ } else {
+ sibling.deleteData(0, 1);
+ }
+ }
+ }
+ };
+ var FakeCaret = function (root, isBlock, hasFocus) {
+ var lastVisualCaret = Cell(Option.none());
+ var cursorInterval, caretContainerNode;
+ var show = function (before, element) {
+ var clientRect, rng;
+ hide();
+ if (isTableCell$1(element)) {
+ return null;
+ }
+ if (isBlock(element)) {
+ caretContainerNode = insertBlock('p', element, before);
+ clientRect = getAbsoluteClientRect(root, element, before);
+ DomQuery(caretContainerNode).css('top', clientRect.top);
+ var caret = DomQuery('').css(clientRect).appendTo(root)[0];
+ lastVisualCaret.set(Option.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 (isContentEditableFalse$3(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) {
+ CaretContainerRemove.remove(caretContainerNode);
+ caretContainerNode = null;
+ }
+ lastVisualCaret.get().each(function (caretState) {
+ DomQuery(caretState.caret).remove();
+ lastVisualCaret.set(Option.none());
+ });
+ clearInterval(cursorInterval);
+ };
+ 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(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 isFakeCaretTarget = function (node) {
+ return isContentEditableFalse$3(node) || NodeType.isTable(node) && isFakeCaretTableBrowser();
+ };
+
+ var is$3 = function (expected) {
+ return function (actual) {
+ return expected === actual;
+ };
+ };
+ var isNbsp = is$3('\xA0');
+ var isWhiteSpace$1 = function (chr) {
+ return /^[\r\n\t ]$/.test(chr);
+ };
+ var isContent = function (chr) {
+ return !isWhiteSpace$1(chr) && !isNbsp(chr);
+ };
+
+ var isContentEditableFalse$4 = NodeType.isContentEditableFalse;
+ var isBlockLike = NodeType.matchStyleValues('display', 'block table table-cell table-caption list-item');
+ var isCaretContainer$2 = isCaretContainer;
+ var isCaretContainerBlock$1 = isCaretContainerBlock;
+ var isElement$5 = NodeType.isElement;
+ 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 TreeWalker(node, rootNode);
+ if (isBackwards(direction)) {
+ if (isContentEditableFalse$4(node) || isCaretContainerBlock$1(node)) {
+ node = skipCaretContainers(walker.prev, true);
+ if (predicateFn(node)) {
+ return node;
+ }
+ }
+ while (node = skipCaretContainers(walker.prev, shallow)) {
+ if (predicateFn(node)) {
+ return node;
+ }
+ }
+ }
+ if (isForwards(direction)) {
+ if (isContentEditableFalse$4(node) || isCaretContainerBlock$1(node)) {
+ node = skipCaretContainers(walker.next, true);
+ if (predicateFn(node)) {
+ return node;
+ }
+ }
+ while (node = skipCaretContainers(walker.next, 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) {
+ var container, offset;
+ if (!caretPosition) {
+ return null;
+ }
+ container = caretPosition.container();
+ 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)) {
+ 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$2 = curry(beforeAfter, false);
+ var normalizeRange = function (direction, root, range) {
+ var node, container, offset, location;
+ var leanLeft = curry(lean, true, root);
+ var leanRight = curry(lean, false, root);
+ container = range.startContainer;
+ 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$2(node);
+ }
+ }
+ }
+ if (!range.collapsed) {
+ return range;
+ }
+ if (NodeType.isText(container)) {
+ if (isCaretContainer$2(container)) {
+ if (direction === 1) {
+ node = leanRight(container);
+ if (node) {
+ return before$2(node);
+ }
+ node = leanLeft(container);
+ if (node) {
+ return after$2(node);
+ }
+ }
+ if (direction === -1) {
+ node = leanLeft(container);
+ if (node) {
+ return after$2(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$2(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$2(node);
+ }
+ return range;
+ }
+ }
+ return range;
+ };
+ var isNextToContentEditableFalse = function (relativeOffset, caretPosition) {
+ var node = getChildNodeAtRelativeOffset(relativeOffset, caretPosition);
+ return isContentEditableFalse$4(node) && !NodeType.isBogusAll(node);
+ };
+ var isNextToTable = function (relativeOffset, caretPosition) {
+ return NodeType.isTable(getChildNodeAtRelativeOffset(relativeOffset, caretPosition));
+ };
+ var getRelativeCefElm = function (forward, caretPosition) {
+ return Option.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 isBeforeContentEditableFalse = curry(isNextToContentEditableFalse, 0);
+ var isAfterContentEditableFalse = curry(isNextToContentEditableFalse, -1);
+ var isBeforeTable = curry(isNextToTable, 0);
+ var isAfterTable = curry(isNextToTable, -1);
+ var isChar = function (forward, predicate, pos) {
+ return Option.from(pos.container()).filter(NodeType.isText).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 getElementFromPosition = function (pos) {
+ return Option.from(pos.getNode()).map(Element$$1.fromDom);
+ };
+ var getElementFromPrevPosition = function (pos) {
+ return Option.from(pos.getNode(true)).map(Element$$1.fromDom);
+ };
+
+ var HDirection;
+ (function (HDirection) {
+ HDirection[HDirection['Backwards'] = -1] = 'Backwards';
+ HDirection[HDirection['Forwards'] = 1] = 'Forwards';
+ }(HDirection || (HDirection = {})));
+ var isContentEditableFalse$5 = NodeType.isContentEditableFalse;
+ var isText$7 = NodeType.isText;
+ var isElement$6 = NodeType.isElement;
+ var isBr$4 = NodeType.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$1.before(node);
+ }
+ if (isText$7(node)) {
+ return CaretPosition$1(node, 0);
+ }
+ }
+ if (isBackwards(direction)) {
+ if (isCaretCandidate$3(node.nextSibling) && !isText$7(node.nextSibling)) {
+ return CaretPosition$1.after(node);
+ }
+ if (isText$7(node)) {
+ return CaretPosition$1(node, node.data.length);
+ }
+ }
+ if (isBackwards(direction)) {
+ if (isBr$4(node)) {
+ return CaretPosition$1.before(node);
+ }
+ return CaretPosition$1.after(node);
+ }
+ return CaretPosition$1.before(node);
+ };
+ var moveForwardFromBr = function (root, nextNode) {
+ var nextSibling = nextNode.nextSibling;
+ if (nextSibling && isCaretCandidate$3(nextSibling)) {
+ if (isText$7(nextSibling)) {
+ return CaretPosition$1(nextSibling, 0);
+ } else {
+ return CaretPosition$1.before(nextSibling);
+ }
+ } else {
+ return findCaretPosition(HDirection.Forwards, CaretPosition$1.after(nextNode), root);
+ }
+ };
+ var findCaretPosition = function (direction, startPos, root) {
+ var node, nextNode, innerNode;
+ var rootContentEditableFalseElm, caretPosition;
+ if (!isElement$6(root) || !startPos) {
+ return null;
+ }
+ if (startPos.isEqual(CaretPosition$1.after(root)) && root.lastChild) {
+ caretPosition = CaretPosition$1.after(root.lastChild);
+ if (isBackwards(direction) && isCaretCandidate$3(root.lastChild) && isElement$6(root.lastChild)) {
+ return isBr$4(root.lastChild) ? CaretPosition$1.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$1(container, --offset);
+ }
+ if (isForwards(direction) && offset < container.length) {
+ return CaretPosition$1(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$1(innerNode, innerNode.data.length);
+ }
+ return CaretPosition$1.after(innerNode);
+ }
+ }
+ if (isText$7(nextNode)) {
+ return CaretPosition$1(nextNode, nextNode.data.length);
+ }
+ return CaretPosition$1.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$1(innerNode, 0);
+ }
+ return CaretPosition$1.before(innerNode);
+ }
+ }
+ if (isText$7(nextNode)) {
+ return CaretPosition$1(nextNode, 0);
+ }
+ return CaretPosition$1.after(nextNode);
+ }
+ }
+ node = nextNode ? nextNode : caretPosition.getNode();
+ }
+ if (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart()) {
+ node = findNode(node, direction, constant(true), root, true);
+ if (isEditableCaretCandidate$1(node, root)) {
+ return getCaretCandidatePosition(direction, node);
+ }
+ }
+ nextNode = findNode(node, direction, isEditableCaretCandidate$1, root);
+ rootContentEditableFalseElm = ArrUtils.last(filter(getParents(container, root), isContentEditableFalse$5));
+ if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) {
+ if (isForwards(direction)) {
+ caretPosition = CaretPosition$1.after(rootContentEditableFalseElm);
+ } else {
+ caretPosition = CaretPosition$1.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$1.before(start) : CaretPosition$1.after(start);
+ return fromPosition(forward, root, position);
+ };
+ var afterElement = function (node) {
+ return NodeType.isBr(node) ? CaretPosition$1.before(node) : CaretPosition$1.after(node);
+ };
+ var isBeforeOrStart = function (position) {
+ if (CaretPosition$1.isTextPosition(position)) {
+ return position.offset() === 0;
+ } else {
+ return isCaretCandidate(position.getNode());
+ }
+ };
+ var isAfterOrEnd = function (position) {
+ if (CaretPosition$1.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$1.isTextPosition(from) && !CaretPosition$1.isTextPosition(to) && from.getNode() === to.getNode(true);
+ };
+ var isAtBr = function (position) {
+ return !CaretPosition$1.isTextPosition(position) && NodeType.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 Option.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 Option.some(to);
+ }
+ });
+ };
+ var positionIn = function (forward, element) {
+ var startNode = forward ? element.firstChild : element.lastChild;
+ if (NodeType.isText(startNode)) {
+ return Option.some(CaretPosition$1(startNode, forward ? 0 : startNode.data.length));
+ } else if (startNode) {
+ if (isCaretCandidate(startNode)) {
+ return Option.some(forward ? CaretPosition$1.before(startNode) : afterElement(startNode));
+ } else {
+ return walkToPositionIn(forward, element, startNode);
+ }
+ } else {
+ return Option.none();
+ }
+ };
+ var nextPosition = curry(fromPosition, true);
+ var prevPosition = curry(fromPosition, false);
+ var CaretFinder = {
+ fromPosition: fromPosition,
+ nextPosition: nextPosition,
+ prevPosition: prevPosition,
+ navigate: navigate,
+ positionIn: positionIn,
+ firstPositionIn: curry(positionIn, true),
+ lastPositionIn: curry(positionIn, false)
+ };
+
+ var isStringPathBookmark = function (bookmark) {
+ return typeof bookmark.start === 'string';
+ };
+ 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 (dom.isBlock(node) && !node.innerHTML && !Env.ie) {
+ node.innerHTML = '
';
+ }
+ return node;
+ };
+ var resolveCaretPositionBookmark = function (dom, bookmark) {
+ var rng, pos;
+ rng = dom.createRng();
+ pos = resolve$2(dom.getRoot(), bookmark.start);
+ rng.setStart(pos.container(), pos.offset());
+ pos = resolve$2(dom.getRoot(), bookmark.end);
+ rng.setEnd(pos.container(), pos.offset());
+ return rng;
+ };
+ var insertZwsp = function (node, rng) {
+ var textNode = node.ownerDocument.createTextNode(Zwsp.ZWSP);
+ node.appendChild(textNode);
+ rng.setStart(textNode, 0);
+ rng.setEnd(textNode, 0);
+ };
+ var isEmpty = function (node) {
+ return node.hasChildNodes() === false;
+ };
+ var tryFindRangePosition = function (node, rng) {
+ return CaretFinder.lastPositionIn(node).fold(function () {
+ return false;
+ }, function (pos) {
+ rng.setStart(pos.container(), pos.offset());
+ rng.setEnd(pos.container(), pos.offset());
+ return true;
+ });
+ };
+ var padEmptyCaretContainer = function (root, node, rng) {
+ if (isEmpty(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 NodeType.isText(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 (NodeType.isText(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 && NodeType.isText(prev) && !Env.opera) {
+ idx = prev.nodeValue.length;
+ prev.appendData(next.nodeValue);
+ dom.remove(next);
+ if (suffix === 'start') {
+ container = prev;
+ offset = idx;
+ } else {
+ container = prev;
+ offset = idx;
+ }
+ }
+ }
+ return Option.some(CaretPosition$1(container, offset));
+ } else {
+ return Option.none();
+ }
+ };
+ var alt = function (o1, o2) {
+ return o1.isSome() ? o1 : o2;
+ };
+ var resolvePaths = function (dom, bookmark) {
+ var rng = dom.createRng();
+ if (setEndPoint(dom, true, bookmark, rng) && setEndPoint(dom, false, bookmark, rng)) {
+ return Option.some(rng);
+ } else {
+ return Option.none();
+ }
+ };
+ var resolveId = function (dom, bookmark) {
+ var startPos = restoreEndPoint(dom, 'start', bookmark);
+ var endPos = restoreEndPoint(dom, 'end', bookmark);
+ return liftN([
+ startPos,
+ alt(endPos, 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 Option.from(dom.select(bookmark.name)[bookmark.index]).map(function (elm) {
+ var rng = dom.createRng();
+ rng.selectNode(elm);
+ return rng;
+ });
+ };
+ var resolve$3 = function (selection, bookmark) {
+ var dom = selection.dom;
+ if (bookmark) {
+ if (isPathBookmark(bookmark)) {
+ return resolvePaths(dom, bookmark);
+ } else if (isStringPathBookmark(bookmark)) {
+ return Option.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 Option.some(bookmark.rng);
+ }
+ }
+ return Option.none();
+ };
+ var ResolveBookmark = { resolve: resolve$3 };
+
+ var getBookmark$1 = function (selection, type, normalized) {
+ return GetBookmark.getBookmark(selection, type, normalized);
+ };
+ var moveToBookmark = function (selection, bookmark) {
+ ResolveBookmark.resolve(selection, bookmark).each(function (rng) {
+ selection.setRng(rng);
+ });
+ };
+ var isBookmarkNode$1 = function (node) {
+ return NodeType.isElement(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';
+ };
+ var Bookmarks = {
+ getBookmark: getBookmark$1,
+ moveToBookmark: moveToBookmark,
+ isBookmarkNode: isBookmarkNode$1
+ };
+
+ 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 TreeWalker(container, dom.getParent(container, dom.isBlock));
+ } else {
+ container = nodes[nodes.length - 1];
+ walker = new TreeWalker(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) {
+ next = next ? 'nextSibling' : 'previousSibling';
+ for (node = inc ? node : node[next]; node; node = node[next]) {
+ if (node.nodeType === 1 || !isWhiteSpaceNode(node)) {
+ return node;
+ }
+ }
+ }
+ };
+ var isTextBlock$1 = function (editor, name) {
+ if (name.nodeType) {
+ 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) {
+ return node && node.nodeType === 3 && /^([\t \r\n]+|)$/.test(node.nodeValue);
+ };
+ 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 FormatUtils = {
+ isInlineBlock: isInlineBlock,
+ moveStart: moveStart,
+ getNonWhiteSpaceSibling: getNonWhiteSpaceSibling,
+ isTextBlock: isTextBlock$1,
+ isValid: isValid,
+ isWhiteSpaceNode: isWhiteSpaceNode,
+ replaceVars: replaceVars,
+ isEq: isEq,
+ normalizeStyleValue: normalizeStyleValue,
+ getStyle: getStyle,
+ getTextDecoration: getTextDecoration,
+ getParents: getParents$1
+ };
+
+ var isBookmarkNode$2 = Bookmarks.isBookmarkNode;
+ var getParents$2 = FormatUtils.getParents, isWhiteSpaceNode$1 = FormatUtils.isWhiteSpaceNode, isTextBlock$2 = FormatUtils.isTextBlock;
+ var findLeaf = function (node, offset) {
+ if (typeof offset === 'undefined') {
+ offset = node.nodeType === 3 ? node.length : node.childNodes.length;
+ }
+ while (node && node.hasChildNodes()) {
+ node = node.childNodes[offset];
+ if (node) {
+ offset = node.nodeType === 3 ? node.length : node.childNodes.length;
+ }
+ }
+ return {
+ node: node,
+ offset: offset
+ };
+ };
+ var excludeTrailingWhitespace = function (endContainer, endOffset) {
+ var leaf = findLeaf(endContainer, endOffset);
+ if (leaf.node) {
+ while (leaf.node && leaf.offset === 0 && leaf.node.previousSibling) {
+ leaf = findLeaf(leaf.node.previousSibling);
+ }
+ if (leaf.node && leaf.offset > 0 && leaf.node.nodeType === 3 && leaf.node.nodeValue.charAt(leaf.offset - 1) === ' ') {
+ if (leaf.offset > 1) {
+ endContainer = leaf.node;
+ endContainer.splitText(leaf.offset - 1);
+ }
+ }
+ }
+ return endContainer;
+ };
+ var isBogusBr = function (node) {
+ return node.nodeName === 'BR' && node.getAttribute('data-mce-bogus') && !node.nextSibling;
+ };
+ var findParentContentEditable = function (dom, node) {
+ var parent = node;
+ while (parent) {
+ if (parent.nodeType === 1 && dom.getContentEditable(parent)) {
+ return dom.getContentEditable(parent) === 'false' ? parent : node;
+ }
+ parent = parent.parentNode;
+ }
+ return node;
+ };
+ var findSpace = function (start, remove, node, offset) {
+ var pos, pos2;
+ var str = node.nodeValue;
+ if (typeof offset === 'undefined') {
+ offset = start ? str.length : 0;
+ }
+ if (start) {
+ pos = str.lastIndexOf(' ', offset);
+ pos2 = str.lastIndexOf('\xA0', offset);
+ pos = pos > pos2 ? pos : pos2;
+ if (pos !== -1 && !remove && (pos < offset || !start) && pos <= str.length) {
+ pos++;
+ }
+ } else {
+ pos = str.indexOf(' ', offset);
+ pos2 = str.indexOf('\xA0', offset);
+ pos = pos !== -1 && (pos2 === -1 || pos < pos2) ? pos : pos2;
+ }
+ return pos;
+ };
+ var findWordEndPoint = function (dom, body, container, offset, start, remove) {
+ var walker, node, pos, lastTextNode;
+ if (container.nodeType === 3) {
+ pos = findSpace(start, remove, container, offset);
+ if (pos !== -1) {
+ return {
+ container: container,
+ offset: pos
+ };
+ }
+ lastTextNode = container;
+ }
+ walker = new TreeWalker(container, dom.getParent(container, dom.isBlock) || body);
+ while (node = walker[start ? 'prev' : 'next']()) {
+ if (node.nodeType === 3 && !isBookmarkNode$2(node.parentNode)) {
+ lastTextNode = node;
+ pos = findSpace(start, remove, node);
+ if (pos !== -1) {
+ return {
+ container: node,
+ offset: pos
+ };
+ }
+ } else if (dom.isBlock(node) || FormatUtils.isEq(node, 'BR')) {
+ break;
+ }
+ }
+ if (lastTextNode) {
+ if (start) {
+ offset = 0;
+ } else {
+ offset = lastTextNode.length;
+ }
+ return {
+ container: lastTextNode,
+ offset: offset
+ };
+ }
+ };
+ var findSelectorEndPoint = function (dom, format, rng, container, siblingName) {
+ var parents, i, y, curFormat;
+ if (container.nodeType === 3 && container.nodeValue.length === 0 && container[siblingName]) {
+ container = container[siblingName];
+ }
+ parents = getParents$2(dom, container);
+ for (i = 0; i < parents.length; i++) {
+ for (y = 0; y < format.length; y++) {
+ 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(container.nodeType === 3 ? 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 (FormatUtils.isEq(node, 'br')) {
+ break;
+ }
+ }
+ }
+ return node || container;
+ };
+ var findParentContainer = function (dom, format, startContainer, startOffset, endContainer, endOffset, start) {
+ var container, parent, sibling, siblingName, root;
+ container = parent = start ? startContainer : endContainer;
+ siblingName = start ? 'previousSibling' : 'nextSibling';
+ root = dom.getRoot();
+ if (container.nodeType === 3 && !isWhiteSpaceNode$1(container)) {
+ if (start ? startOffset > 0 : endOffset < container.nodeValue.length) {
+ return container;
+ }
+ }
+ while (true) {
+ if (!format[0].block_expand && dom.isBlock(parent)) {
+ return parent;
+ }
+ for (sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {
+ if (!isBookmarkNode$2(sibling) && !isWhiteSpaceNode$1(sibling) && !isBogusBr(sibling)) {
+ return parent;
+ }
+ }
+ if (parent === root || parent.parentNode === root) {
+ container = parent;
+ break;
+ }
+ parent = parent.parentNode;
+ }
+ return container;
+ };
+ var expandRng = function (editor, rng, format, remove) {
+ var endPoint, startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;
+ var dom = editor.dom;
+ if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) {
+ startContainer = getNode(startContainer, startOffset);
+ if (startContainer.nodeType === 3) {
+ startOffset = 0;
+ }
+ }
+ if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) {
+ endContainer = getNode(endContainer, rng.collapsed ? endOffset : endOffset - 1);
+ if (endContainer.nodeType === 3) {
+ endOffset = endContainer.nodeValue.length;
+ }
+ }
+ startContainer = findParentContentEditable(dom, startContainer);
+ endContainer = findParentContentEditable(dom, endContainer);
+ if (isBookmarkNode$2(startContainer.parentNode) || isBookmarkNode$2(startContainer)) {
+ startContainer = isBookmarkNode$2(startContainer) ? startContainer : startContainer.parentNode;
+ if (rng.collapsed) {
+ startContainer = startContainer.previousSibling || startContainer;
+ } else {
+ startContainer = startContainer.nextSibling || startContainer;
+ }
+ if (startContainer.nodeType === 3) {
+ startOffset = rng.collapsed ? startContainer.length : 0;
+ }
+ }
+ if (isBookmarkNode$2(endContainer.parentNode) || isBookmarkNode$2(endContainer)) {
+ endContainer = isBookmarkNode$2(endContainer) ? endContainer : endContainer.parentNode;
+ if (rng.collapsed) {
+ endContainer = endContainer.nextSibling || endContainer;
+ } else {
+ endContainer = endContainer.previousSibling || endContainer;
+ }
+ if (endContainer.nodeType === 3) {
+ endOffset = rng.collapsed ? 0 : endContainer.length;
+ }
+ }
+ if (rng.collapsed) {
+ endPoint = findWordEndPoint(dom, editor.getBody(), startContainer, startOffset, true, remove);
+ if (endPoint) {
+ startContainer = endPoint.container;
+ startOffset = endPoint.offset;
+ }
+ endPoint = findWordEndPoint(dom, editor.getBody(), endContainer, endOffset, false, remove);
+ if (endPoint) {
+ endContainer = endPoint.container;
+ endOffset = endPoint.offset;
+ }
+ }
+ if (format[0].inline) {
+ endContainer = remove ? endContainer : excludeTrailingWhitespace(endContainer, endOffset);
+ }
+ if (format[0].inline || format[0].block_expand) {
+ if (!format[0].inline || (startContainer.nodeType !== 3 || startOffset === 0)) {
+ startContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, true);
+ }
+ if (!format[0].inline || (endContainer.nodeType !== 3 || endOffset === endContainer.nodeValue.length)) {
+ endContainer = findParentContainer(dom, format, startContainer, startOffset, 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, endContainer, endOffset, true);
+ }
+ if (!dom.isBlock(endContainer)) {
+ endContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, false);
+ }
+ }
+ }
+ if (startContainer.nodeType === 1) {
+ startOffset = dom.nodeIndex(startContainer);
+ startContainer = startContainer.parentNode;
+ }
+ if (endContainer.nodeType === 1) {
+ endOffset = dom.nodeIndex(endContainer) + 1;
+ endContainer = endContainer.parentNode;
+ }
+ return {
+ startContainer: startContainer,
+ startOffset: startOffset,
+ endContainer: endContainer,
+ endOffset: endOffset
+ };
+ };
+ var ExpandRange = { expandRng: expandRng };
+
+ var each$8 = Tools.each;
+ var getEndChild = function (container, index) {
+ var childNodes = container.childNodes;
+ index--;
+ if (index > childNodes.length - 1) {
+ index = childNodes.length - 1;
+ } else if (index < 0) {
+ index = 0;
+ }
+ return childNodes[index] || container;
+ };
+ var walk$1 = function (dom, rng, callback) {
+ var startContainer = rng.startContainer;
+ var startOffset = rng.startOffset;
+ var endContainer = rng.endContainer;
+ var endOffset = rng.endOffset;
+ var ancestor;
+ var startPoint;
+ var endPoint;
+ var node;
+ var parent;
+ var siblings;
+ var nodes;
+ nodes = dom.select('td[data-mce-selected],th[data-mce-selected]');
+ if (nodes.length > 0) {
+ each$8(nodes, function (node) {
+ callback([node]);
+ });
+ return;
+ }
+ 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 (node = startNode, parent = node.parentNode; node && node !== endNode; node = parent) {
+ parent = node.parentNode;
+ siblings = collectSiblings(node === startNode ? node : node[siblingName], siblingName);
+ if (siblings.length) {
+ if (!next) {
+ siblings.reverse();
+ }
+ callback(exclude(siblings));
+ }
+ }
+ };
+ if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) {
+ startContainer = startContainer.childNodes[startOffset];
+ }
+ if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) {
+ endContainer = getEndChild(endContainer, endOffset);
+ }
+ if (startContainer === endContainer) {
+ return callback(exclude([startContainer]));
+ }
+ ancestor = dom.findCommonAncestor(startContainer, endContainer);
+ for (node = startContainer; node; node = node.parentNode) {
+ if (node === endContainer) {
+ return walkBoundary(startContainer, ancestor, true);
+ }
+ if (node === ancestor) {
+ break;
+ }
+ }
+ for (node = endContainer; node; node = node.parentNode) {
+ if (node === startContainer) {
+ return walkBoundary(endContainer, ancestor);
+ }
+ if (node === ancestor) {
+ break;
+ }
+ }
+ startPoint = findEndPoint(startContainer, ancestor) || startContainer;
+ endPoint = findEndPoint(endContainer, ancestor) || endContainer;
+ walkBoundary(startContainer, startPoint, true);
+ siblings = collectSiblings(startPoint === startContainer ? startPoint : startPoint.nextSibling, 'nextSibling', endPoint === endContainer ? endPoint.nextSibling : endPoint);
+ if (siblings.length) {
+ callback(exclude(siblings));
+ }
+ walkBoundary(endContainer, endPoint);
+ };
+ var RangeWalk = { walk: walk$1 };
+
+ var zeroWidth = function () {
+ return '\uFEFF';
+ };
+
+ function NodeValue (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 getOptionIE10 = function (element) {
+ try {
+ return getOptionSafe(element);
+ } catch (e) {
+ return Option.none();
+ }
+ };
+ var getOptionSafe = function (element) {
+ return is(element) ? Option.from(element.dom().nodeValue) : Option.none();
+ };
+ var browser = PlatformDetection$1.detect().browser;
+ var getOption = browser.isIE() && browser.version.major === 10 ? getOptionIE10 : getOptionSafe;
+ 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$6 = function (element) {
+ return api.get(element);
+ };
+
+ var isZeroWidth = function (elem) {
+ return isText(elem) && get$6(elem) === zeroWidth();
+ };
+ var context = function (editor, elem, wrapName, nodeName) {
+ return parent(elem).fold(function () {
+ return 'skipping';
+ }, function (parent$$1) {
+ if (nodeName === 'br' || isZeroWidth(elem)) {
+ return 'valid';
+ } else if (isAnnotation(elem)) {
+ return 'existing';
+ } else if (isCaretNode(elem)) {
+ return 'caret';
+ } else if (!FormatUtils.isValid(editor, wrapName, nodeName) || !FormatUtils.isValid(editor, name(parent$$1), wrapName)) {
+ return 'invalid-child';
+ } else {
+ return 'valid';
+ }
+ });
+ };
+
+ var shouldApplyToTrailingSpaces = function (rng) {
+ return rng.startContainer.nodeType === 3 && rng.startContainer.nodeValue.length >= rng.startOffset && rng.startContainer.nodeValue[rng.startOffset] === '\xA0';
+ };
+ var applyWordGrab = function (editor, rng) {
+ var r = ExpandRange.expandRng(editor, rng, [{ inline: true }], shouldApplyToTrailingSpaces(rng));
+ 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('mce-annotation') : _b, data = __rest(_a, ['uid']);
+ var master = Element$$1.fromTag('span', eDoc);
+ add$2(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$3(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(Option.none());
+ var finishWrapper = function () {
+ wrapper.set(Option.none());
+ };
+ var getOrOpenWrapper = function () {
+ return wrapper.get().getOrThunk(function () {
+ var nu = shallow(master);
+ newWrappers.push(nu);
+ wrapper.set(Option.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$1(elem, w);
+ break;
+ }
+ case 'skipping':
+ case 'existing':
+ case 'caret':
+ }
+ };
+ var processNodes = function (nodes) {
+ var elems = map(nodes, Element$$1.fromDom);
+ processElements(elems);
+ };
+ RangeWalk.walk(editor.dom, rng, function (nodes) {
+ finishWrapper();
+ processNodes(nodes);
+ });
+ return newWrappers;
+ };
+ var annotateWithBookmark = function (editor, name$$1, settings, data) {
+ editor.undoManager.transact(function () {
+ var initialRng = editor.selection.getRng();
+ if (initialRng.collapsed) {
+ applyWordGrab(editor, initialRng);
+ }
+ if (editor.selection.getRng().collapsed) {
+ var wrapper = makeAnnotation(editor.getDoc(), data, name$$1, settings.decorate);
+ set$2(wrapper, '\xA0');
+ editor.selection.getRng().insertNode(wrapper.dom());
+ editor.selection.select(wrapper.dom());
+ } else {
+ var bookmark = GetBookmark.getPersistentBookmark(editor.selection, false);
+ var rng = editor.selection.getRng();
+ annotate(editor, rng, name$$1, settings.decorate, data);
+ editor.selection.moveToBookmark(bookmark);
+ }
+ });
+ };
+
+ function Annotator (editor) {
+ var registry = create$1();
+ setup$1(editor, registry);
+ var changes = setup(editor, registry);
+ 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, Option.some(name)).each(function (_a) {
+ var elements = _a.elements;
+ each(elements, unwrap);
+ });
+ },
+ getAll: function (name) {
+ var directory = findAll(editor, name);
+ return map$2(directory, function (elems) {
+ return map(elems, function (elem) {
+ return elem.dom();
+ });
+ });
+ }
+ };
+ }
+
+ var hasOnlyOneChild = function (node) {
+ return node.firstChild && node.firstChild === node.lastChild;
+ };
+ var isPaddingNode = function (node) {
+ return node.name === 'br' || node.value === '\xA0';
+ };
+ 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 === '\xA0' || NodeType.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$1.before(node);
+ var caretWalker = CaretWalker(rootNode);
+ var newCaretPos = caretWalker.next(caretPos);
+ return newCaretPos ? newCaretPos.toRange() : null;
+ };
+ var findLastOf = function (node, rootNode) {
+ var caretPos = CaretPosition$1.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$1.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 InsertList = {
+ isListFragment: isListFragment,
+ insertAtCaret: insertAtCaret,
+ isParentBlockLi: isParentBlockLi,
+ trimListItems: trimListItems,
+ listItems: listItems$1
+ };
+
+ var each$9 = Tools.each;
+ var ElementUtils = function (dom) {
+ this.compare = function (node1, node2) {
+ if (node1.nodeName !== node2.nodeName) {
+ return false;
+ }
+ var getAttribs = function (node) {
+ var attribs = {};
+ each$9(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 !Bookmarks.isBookmarkNode(node1) && !Bookmarks.isBookmarkNode(node2);
+ };
+ };
+
+ var getLastChildren = function (elm) {
+ var children$$1 = [];
+ var rawNode = elm.dom();
+ while (rawNode) {
+ children$$1.push(Element$$1.fromDom(rawNode));
+ rawNode = rawNode.lastChild;
+ }
+ return children$$1;
+ };
+ var removeTrailingBr = function (elm) {
+ var allBrs = descendants$1(elm, 'br');
+ var brs = filter(getLastChildren(elm).slice(-1), isBr);
+ if (allBrs.length === brs.length) {
+ each(brs, remove$2);
+ }
+ };
+ var fillWithPaddingBr = function (elm) {
+ empty(elm);
+ append(elm, Element$$1.fromHtml('
'));
+ };
+ var isPaddingContents = function (elm) {
+ return isText(elm) ? get$6(elm) === '\xA0' : isBr(elm);
+ };
+ var isPaddedElement = function (elm) {
+ return filter(children(elm), isPaddingContents).length === 1;
+ };
+ var trimBlockTrailingBr = function (elm) {
+ lastChild(elm).each(function (lastChild$$1) {
+ prevSibling(lastChild$$1).each(function (lastChildPrevSibling) {
+ if (isBlock(elm) && isBr(lastChild$$1) && isBlock(lastChildPrevSibling)) {
+ remove$2(lastChild$$1);
+ }
+ });
+ });
+ };
+ var PaddingBr = {
+ removeTrailingBr: removeTrailingBr,
+ fillWithPaddingBr: fillWithPaddingBr,
+ isPaddedElement: isPaddedElement,
+ trimBlockTrailingBr: trimBlockTrailingBr
+ };
+
+ var makeMap$3 = Tools.makeMap;
+ function Writer (settings) {
+ var html = [];
+ var indent, indentBefore, indentAfter, encode, htmlOutput;
+ settings = settings || {};
+ indent = settings.indent;
+ indentBefore = makeMap$3(settings.indent_before || '');
+ indentAfter = makeMap$3(settings.indent_after || '');
+ encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);
+ 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('', name, '>');
+ 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('', name, ' ', encode(text), '?>');
+ } else {
+ html.push('', name, '?>');
+ }
+ if (indent) {
+ html.push('\n');
+ }
+ },
+ doctype: function (text) {
+ html.push('', indent ? '\n' : '');
+ },
+ reset: function () {
+ html.length = 0;
+ },
+ getContent: function () {
+ return html.join('').replace(/\n$/, '');
+ }
+ };
+ }
+
+ function Serializer (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 handlers, validate;
+ validate = settings.validate;
+ 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 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$1.fromRangeStart(rng);
+ var endPos = CaretPosition$1.fromRangeEnd(rng);
+ var rootNode = rng.commonAncestorContainer;
+ return CaretFinder.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 = function (rng) {
+ return rng.collapsed ? rng : normalizeBlockSelectionRange(rng);
+ };
+ var RangeNormalizer = { normalize: normalize };
+
+ var isAfterNbsp = function (container, offset) {
+ return NodeType.isText(container) && container.nodeValue[offset - 1] === '\xA0';
+ };
+ var trimOrPadLeftRight = function (rng, html) {
+ var container, offset;
+ container = rng.startContainer;
+ offset = rng.startOffset;
+ var hasSiblingText = function (siblingName) {
+ return container[siblingName] && container[siblingName].nodeType === 3;
+ };
+ if (container.nodeType === 3) {
+ if (offset > 0) {
+ html = html.replace(/^ /, ' ');
+ } else if (!hasSiblingText('previousSibling')) {
+ html = html.replace(/^ /, ' ');
+ }
+ if (offset < container.length) {
+ html = html.replace(/ (
|)$/, ' ');
+ } else if (!hasSiblingText('nextSibling')) {
+ html = html.replace(/( | )(
|)$/, ' ');
+ }
+ }
+ return html;
+ };
+ var trimNbspAfterDeleteAndPadValue = function (rng, value) {
+ var container, offset;
+ container = rng.startContainer;
+ offset = rng.startOffset;
+ if (container.nodeType === 3 && rng.collapsed) {
+ if (container.data[offset] === '\xA0') {
+ container.deleteData(offset, 1);
+ if (!/[\u00a0| ]$/.test(value)) {
+ value += ' ';
+ }
+ } else if (container.data[offset - 1] === '\xA0') {
+ container.deleteData(offset - 1, 1);
+ if (!/[\u00a0| ]$/.test(value)) {
+ value = ' ' + value;
+ }
+ }
+ }
+ return value;
+ };
+
+ var isTableCell$2 = NodeType.matchNodeNames('td th');
+ var selectionSetContent = function (editor, content) {
+ var rng = editor.selection.getRng();
+ var container = rng.startContainer;
+ var offset = rng.startOffset;
+ if (rng.collapsed && isAfterNbsp(container, offset) && NodeType.isText(container)) {
+ container.insertData(offset - 1, ' ');
+ container.deleteData(offset, 1);
+ rng.setStart(container, offset);
+ rng.setEnd(container, offset);
+ editor.selection.setRng(rng);
+ }
+ editor.selection.setContent(content);
+ };
+ 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 {
+ selectionSetContent(editor, value);
+ }
+ }
+ };
+ var trimBrsFromTableCell = function (dom, elm) {
+ Option.from(dom.getParent(elm, 'td,th')).map(Element$$1.fromDom).each(PaddingBr.trimBlockTrailingBr);
+ };
+ var reduceInlineTextElements = function (editor, merge) {
+ var textInlineElements = editor.schema.getTextInlineElements();
+ var dom = editor.dom;
+ if (merge) {
+ var root_1 = editor.getBody(), elementUtils_1 = new ElementUtils(dom);
+ Tools.each(dom.select('*[data-mce-fragment]'), function (node) {
+ for (var testNode = node.parentNode; testNode && testNode !== root_1; testNode = testNode.parentNode) {
+ if (textInlineElements[node.nodeName.toLowerCase()] && elementUtils_1.compare(testNode, node)) {
+ dom.remove(node, true);
+ }
+ }
+ });
+ }
+ };
+ var markFragmentElements = function (fragment) {
+ var node = fragment;
+ while (node = node.walk()) {
+ if (node.type === 1) {
+ node.attr('data-mce-fragment', '1');
+ }
+ }
+ };
+ var umarkFragmentElements = 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 parentEditableFalseElm, parentBlock, nextRng;
+ var dom = editor.dom, selection = editor.selection;
+ var node, node2;
+ var getContentEditableFalseParent = function (node) {
+ var root = editor.getBody();
+ for (; node && node !== root; node = node.parentNode) {
+ if (editor.dom.getContentEditable(node) === 'false') {
+ return node;
+ }
+ }
+ return null;
+ };
+ if (!marker) {
+ return;
+ }
+ editor.selection.scrollIntoView(marker);
+ parentEditableFalseElm = getContentEditableFalseParent(marker);
+ if (parentEditableFalseElm) {
+ dom.remove(marker);
+ selection.select(parentEditableFalseElm);
+ return;
+ }
+ var rng = dom.createRng();
+ 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$1.fromRangeStart(rng);
+ var caretWalker = CaretWalker(editor.getBody());
+ caretPos = caretWalker.next(caretPos);
+ if (caretPos) {
+ return caretPos.toRange();
+ }
+ };
+ 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$2(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 insertHtmlAtCaret = function (editor, value, details) {
+ var parser, serializer, parentNode, rootNode, fragment, args;
+ var marker, rng, node, bookmarkHtml, merge;
+ var selection = editor.selection, dom = editor.dom;
+ if (/^ | $/.test(value)) {
+ value = trimOrPadLeftRight(selection.getRng(), value);
+ }
+ parser = editor.parser;
+ merge = details.merge;
+ serializer = Serializer({ validate: editor.settings.validate }, editor.schema);
+ 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()) {
+ editor.selection.setRng(RangeNormalizer.normalize(editor.selection.getRng()));
+ editor.getDoc().execCommand('Delete', false, null);
+ value = trimNbspAfterDeleteAndPadValue(editor.selection.getRng(), value);
+ }
+ parentNode = selection.getNode();
+ var parserArgs = {
+ context: parentNode.nodeName.toLowerCase(),
+ data: details.data,
+ insert: true
+ };
+ fragment = parser.parse(value, parserArgs);
+ if (details.paste === true && InsertList.isListFragment(editor.schema, fragment) && InsertList.isParentBlockLi(dom, parentNode)) {
+ rng = InsertList.insertAtCaret(serializer, dom, editor.selection.getRng(), fragment);
+ editor.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 {
+ selectionSetContent(editor, 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'));
+ umarkFragmentElements(editor.getBody());
+ trimBrsFromTableCell(editor.dom, editor.selection.getStart());
+ editor.fire('SetContent', args);
+ editor.addVisual();
+ };
+ 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);
+ insertHtmlAtCaret(editor, result.content, result.details);
+ };
+ var InsertContent = { insertAtCaret: insertAtCaret$1 };
+
+ var sectionResult = Immutable('sections', 'settings');
+ var detection = PlatformDetection$1.detect();
+ var isTouch = detection.deviceType.isTouch();
+ var mobilePlugins = [
+ 'lists',
+ 'autolink',
+ 'autosave'
+ ];
+ var defaultMobileSettings = { theme: 'mobile' };
+ var normalizePlugins = function (plugins) {
+ var pluginNames = isArray(plugins) ? plugins.join(' ') : plugins;
+ var trimmedPlugins = map(isString(pluginNames) ? pluginNames.split(' ') : [], trim$2);
+ return filter(trimmedPlugins, function (item) {
+ return item.length > 0;
+ });
+ };
+ var filterMobilePlugins = function (plugins) {
+ return filter(plugins, curry(contains, mobilePlugins));
+ };
+ var extractSections = function (keys$$1, settings) {
+ var result = bifilter(settings, function (value, key) {
+ return contains(keys$$1, key);
+ });
+ return sectionResult(result.t, result.f);
+ };
+ var getSection = function (sectionResult, name, 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 getDefaultSettings = function (id, documentBaseUrl, editor) {
+ return {
+ id: id,
+ theme: 'modern',
+ delta_width: 0,
+ delta_height: 0,
+ popup_css: '',
+ 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_style_values: 'xx-small,x-small,small,medium,large,x-large,xx-large',
+ font_size_legacy_values: 'xx-small,small,medium,large,x-large,xx-large,300%',
+ forced_root_block: 'p',
+ hidden_input: true,
+ render_ui: true,
+ indentation: '40px',
+ inline_styles: true,
+ convert_fonts_to_spans: true,
+ indent: 'simple',
+ 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,
+ ie7_compat: true
+ };
+ };
+ var getExternalPlugins = 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 processPlugins = function (isTouchDevice, sectionResult, defaultOverrideSettings, settings) {
+ var forcedPlugins = normalizePlugins(defaultOverrideSettings.forced_plugins);
+ var plugins = normalizePlugins(settings.plugins);
+ var platformPlugins = isTouchDevice && hasSection(sectionResult, 'mobile') ? filterMobilePlugins(plugins) : plugins;
+ var combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);
+ return Tools.extend(settings, { plugins: combinedPlugins.join(' ') });
+ };
+ var isOnMobile = function (isTouchDevice, sectionResult) {
+ var isInline = sectionResult.settings().inline;
+ return isTouchDevice && hasSection(sectionResult, 'mobile') && !isInline;
+ };
+ var combineSettings = function (isTouchDevice, defaultSettings, defaultOverrideSettings, settings) {
+ var sectionResult = extractSections(['mobile'], settings);
+ var extendedSettings = Tools.extend(defaultSettings, defaultOverrideSettings, sectionResult.settings(), isOnMobile(isTouchDevice, sectionResult) ? getSection(sectionResult, 'mobile', defaultMobileSettings) : {}, {
+ validate: true,
+ content_editable: sectionResult.settings().inline,
+ external_plugins: getExternalPlugins(defaultOverrideSettings, sectionResult.settings())
+ });
+ return processPlugins(isTouchDevice, sectionResult, defaultOverrideSettings, extendedSettings);
+ };
+ var getEditorSettings = function (editor, id, documentBaseUrl, defaultOverrideSettings, settings) {
+ var defaultSettings = getDefaultSettings(id, documentBaseUrl, editor);
+ return combineSettings(isTouch, defaultSettings, defaultOverrideSettings, settings);
+ };
+ var getFiltered = function (predicate, editor, name) {
+ return Option.from(editor.settings[name]).filter(predicate);
+ };
+ var getString = curry(getFiltered, isString);
+ 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);
+ }
+ });
+ } 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 strongRtl = /[\u0591-\u07FF\uFB1D-\uFDFF\uFE70-\uFEFC]/;
+ var hasStrongRtl = function (text) {
+ return strongRtl.test(text);
+ };
+
+ var isInlineTarget = function (editor, elm) {
+ var selector = getString(editor, 'inline_boundaries_selector').getOr('a[href],code');
+ return is$1(Element$$1.fromDom(elm), selector);
+ };
+ var isRtl = function (element) {
+ return DOMUtils$1.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl(element.textContent);
+ };
+ var findInlineParents = function (isInlineTarget, rootNode, pos) {
+ return filter(DOMUtils$1.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget);
+ };
+ var findRootInline = function (isInlineTarget, rootNode, pos) {
+ var parents = findInlineParents(isInlineTarget, rootNode, pos);
+ return Option.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) {
+ var container = pos.container(), offset = pos.offset();
+ if (forward) {
+ if (isCaretContainerInline(container)) {
+ if (NodeType.isText(container.nextSibling)) {
+ return CaretPosition$1(container.nextSibling, 0);
+ } else {
+ return CaretPosition$1.after(container);
+ }
+ } else {
+ return isBeforeInline(pos) ? CaretPosition$1(container, offset + 1) : pos;
+ }
+ } else {
+ if (isCaretContainerInline(container)) {
+ if (NodeType.isText(container.previousSibling)) {
+ return CaretPosition$1(container.previousSibling, container.previousSibling.data.length);
+ } else {
+ return CaretPosition$1.before(container);
+ }
+ } else {
+ return isAfterInline(pos) ? CaretPosition$1(container, offset - 1) : pos;
+ }
+ }
+ };
+ var normalizeForwards = curry(normalizePosition, true);
+ var normalizeBackwards = curry(normalizePosition, false);
+ var InlineUtils = {
+ isInlineTarget: isInlineTarget,
+ findRootInline: findRootInline,
+ isRtl: isRtl,
+ isAtZwsp: isAtZwsp,
+ normalizePosition: normalizePosition,
+ normalizeForwards: normalizeForwards,
+ normalizeBackwards: normalizeBackwards,
+ hasSameParentBlock: hasSameParentBlock
+ };
+
+ var isBeforeRoot = function (rootNode) {
+ return function (elm) {
+ return eq(rootNode, Element$$1.fromDom(elm.dom().parentNode));
+ };
+ };
+ var getParentBlock$1 = function (rootNode, elm) {
+ return contains$3(rootNode, elm) ? closest(elm, function (element) {
+ return isTextBlock(element) || isListItem(element);
+ }, isBeforeRoot(rootNode)) : Option.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 liftN([
+ CaretFinder.firstPositionIn(elm),
+ CaretFinder.lastPositionIn(elm)
+ ], function (firstPos, lastPos) {
+ var normalizedFirstPos = InlineUtils.normalizePosition(true, firstPos);
+ var normalizedLastPos = InlineUtils.normalizePosition(false, lastPos);
+ var normalizedFromPos = InlineUtils.normalizePosition(false, fromPos);
+ if (forward) {
+ return CaretFinder.nextPosition(elm, normalizedFromPos).map(function (nextPos) {
+ return nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos);
+ }).getOr(false);
+ } else {
+ return CaretFinder.prevPosition(elm, normalizedFromPos).map(function (prevPos) {
+ return prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos);
+ }).getOr(false);
+ }
+ }).getOr(true);
+ };
+ var DeleteUtils = {
+ getParentBlock: getParentBlock$1,
+ paddEmptyBody: paddEmptyBody,
+ willDeleteLastPositionInElement: willDeleteLastPositionInElement
+ };
+
+ var ancestor$2 = function (scope, selector, isRoot) {
+ return ancestor$1(scope, selector, isRoot).isSome();
+ };
+
+ var hasWhitespacePreserveParent = function (rootNode, node) {
+ var rootElement = Element$$1.fromDom(rootNode);
+ var startNode = Element$$1.fromDom(node);
+ return ancestor$2(startNode, 'pre,code', curry(eq, rootElement));
+ };
+ var isWhitespace = function (rootNode, node) {
+ return NodeType.isText(node) && /^[ \t\r\n]*$/.test(node.data) && hasWhitespacePreserveParent(rootNode, node) === false;
+ };
+ var isNamedAnchor = function (node) {
+ return NodeType.isElement(node) && node.nodeName === 'A' && node.hasAttribute('name');
+ };
+ var isContent$1 = function (rootNode, node) {
+ return isCaretCandidate(node) && isWhitespace(rootNode, node) === false || isNamedAnchor(node) || isBookmark(node);
+ };
+ var isBookmark = NodeType.hasAttribute('data-mce-bookmark');
+ var isBogus$2 = NodeType.hasAttribute('data-mce-bogus');
+ var isBogusAll$1 = NodeType.hasAttributeValue('data-mce-bogus', 'all');
+ var isEmptyNode = function (targetNode) {
+ var walker, node, brCount = 0;
+ if (isContent$1(targetNode, targetNode)) {
+ return false;
+ } else {
+ node = targetNode.firstChild;
+ if (!node) {
+ return true;
+ }
+ walker = new TreeWalker(node, targetNode);
+ do {
+ if (isBogusAll$1(node)) {
+ node = walker.next(true);
+ continue;
+ }
+ if (isBogus$2(node)) {
+ node = walker.next();
+ continue;
+ }
+ if (NodeType.isBr(node)) {
+ brCount++;
+ node = walker.next();
+ continue;
+ }
+ if (isContent$1(targetNode, node)) {
+ return false;
+ }
+ node = walker.next();
+ } while (node);
+ return brCount <= 1;
+ }
+ };
+ var isEmpty$1 = function (elm) {
+ return isEmptyNode(elm.dom());
+ };
+ var Empty = { isEmpty: isEmpty$1 };
+
+ var BlockPosition = Immutable('block', 'position');
+ var BlockBoundary = Immutable('from', 'to');
+ var getBlockPosition = function (rootNode, pos) {
+ var rootElm = Element$$1.fromDom(rootNode);
+ var containerElm = Element$$1.fromDom(pos.container());
+ return DeleteUtils.getParentBlock(rootElm, containerElm).map(function (block) {
+ return BlockPosition(block, pos);
+ });
+ };
+ var isDifferentBlocks = function (blockBoundary) {
+ return eq(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(parent1, parent2);
+ });
+ }).isSome();
+ };
+ var isEditable = function (blockBoundary) {
+ return NodeType.isContentEditableFalse(blockBoundary.from().block()) === false && NodeType.isContentEditableFalse(blockBoundary.to().block()) === false;
+ };
+ var skipLastBr = function (rootNode, forward, blockPosition) {
+ if (NodeType.isBr(blockPosition.position().getNode()) && Empty.isEmpty(blockPosition.block()) === false) {
+ return CaretFinder.positionIn(false, blockPosition.block().dom()).bind(function (lastPositionInBlock) {
+ if (lastPositionInBlock.isEqual(blockPosition.position())) {
+ return CaretFinder.fromPosition(forward, rootNode, lastPositionInBlock).bind(function (to) {
+ return getBlockPosition(rootNode, to);
+ });
+ } else {
+ return Option.some(blockPosition);
+ }
+ }).getOr(blockPosition);
+ } else {
+ return blockPosition;
+ }
+ };
+ var readFromRange = function (rootNode, forward, rng) {
+ var fromBlockPos = getBlockPosition(rootNode, CaretPosition$1.fromRangeStart(rng));
+ var toBlockPos = fromBlockPos.bind(function (blockPos) {
+ return CaretFinder.fromPosition(forward, rootNode, blockPos.position()).bind(function (to) {
+ return getBlockPosition(rootNode, to).map(function (blockPos) {
+ return skipLastBr(rootNode, forward, blockPos);
+ });
+ });
+ });
+ return liftN([
+ fromBlockPos,
+ toBlockPos
+ ], BlockBoundary).filter(function (blockBoundary) {
+ return isDifferentBlocks(blockBoundary) && hasSameParent(blockBoundary) && isEditable(blockBoundary);
+ });
+ };
+ var read$1 = function (rootNode, forward, rng) {
+ return rng.collapsed ? readFromRange(rootNode, forward, rng) : Option.none();
+ };
+ var BlockMergeBoundary = { read: read$1 };
+
+ var dropLast = function (xs) {
+ return xs.slice(0, -1);
+ };
+ var parentsUntil$1 = function (start, root, predicate) {
+ if (contains$3(root, start)) {
+ return dropLast(parents(start, function (elm) {
+ return predicate(elm) || eq(elm, root);
+ }));
+ } else {
+ return [];
+ }
+ };
+ var parents$1 = function (start, root) {
+ return parentsUntil$1(start, root, constant(false));
+ };
+ var parentsAndSelf = function (start, root) {
+ return [start].concat(parents$1(start, root));
+ };
+ var Parents = {
+ parentsUntil: parentsUntil$1,
+ parents: parents$1,
+ parentsAndSelf: parentsAndSelf
+ };
+
+ 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$$1 = getChildrenUntilBlockBoundary(block);
+ each(children$$1, remove$2);
+ return children$$1;
+ };
+ var removeEmptyRoot = function (rootNode, block) {
+ var parents$$1 = Parents.parentsAndSelf(block, rootNode);
+ return find(parents$$1.reverse(), Empty.isEmpty).each(remove$2);
+ };
+ var isEmptyBefore = function (el) {
+ return filter(prevSiblings(el), function (el) {
+ return !Empty.isEmpty(el);
+ }).length === 0;
+ };
+ var nestedBlockMerge = function (rootNode, fromBlock, toBlock, insertionPoint) {
+ if (Empty.isEmpty(toBlock)) {
+ PaddingBr.fillWithPaddingBr(toBlock);
+ return CaretFinder.firstPositionIn(toBlock.dom());
+ }
+ if (isEmptyBefore(insertionPoint) && Empty.isEmpty(fromBlock)) {
+ before(insertionPoint, Element$$1.fromTag('br'));
+ }
+ var position = CaretFinder.prevPosition(toBlock.dom(), CaretPosition$1.before(insertionPoint.dom()));
+ each(extractChildren(fromBlock), function (child$$1) {
+ before(insertionPoint, child$$1);
+ });
+ removeEmptyRoot(rootNode, fromBlock);
+ return position;
+ };
+ var sidelongBlockMerge = function (rootNode, fromBlock, toBlock) {
+ if (Empty.isEmpty(toBlock)) {
+ remove$2(toBlock);
+ if (Empty.isEmpty(fromBlock)) {
+ PaddingBr.fillWithPaddingBr(fromBlock);
+ }
+ return CaretFinder.firstPositionIn(fromBlock.dom());
+ }
+ var position = CaretFinder.lastPositionIn(toBlock.dom());
+ each(extractChildren(fromBlock), function (child$$1) {
+ append(toBlock, child$$1);
+ });
+ removeEmptyRoot(rootNode, fromBlock);
+ return position;
+ };
+ var findInsertionPoint = function (toBlock, block) {
+ var parentsAndSelf = Parents.parentsAndSelf(block, toBlock);
+ return Option.from(parentsAndSelf[parentsAndSelf.length - 1]);
+ };
+ var getInsertionPoint = function (fromBlock, toBlock) {
+ return contains$3(toBlock, fromBlock) ? findInsertionPoint(toBlock, fromBlock) : Option.none();
+ };
+ var trimBr = function (first, block) {
+ CaretFinder.positionIn(first, block.dom()).map(function (position) {
+ return position.getNode();
+ }).map(Element$$1.fromDom).filter(isBr).each(remove$2);
+ };
+ 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 MergeBlocks = { mergeBlocks: mergeBlocks };
+
+ var backspaceDelete = function (editor, forward) {
+ var position;
+ var rootNode = Element$$1.fromDom(editor.getBody());
+ position = BlockMergeBoundary.read(rootNode.dom(), forward, editor.selection.getRng()).bind(function (blockBoundary) {
+ return MergeBlocks.mergeBlocks(rootNode, forward, blockBoundary.from().block(), blockBoundary.to().block());
+ });
+ position.each(function (pos) {
+ editor.selection.setRng(pos.toRange());
+ });
+ return position.isSome();
+ };
+ var BlockBoundaryDelete = { backspaceDelete: backspaceDelete };
+
+ var deleteRangeMergeBlocks = function (rootNode, selection) {
+ var rng = selection.getRng();
+ return liftN([
+ DeleteUtils.getParentBlock(rootNode, Element$$1.fromDom(rng.startContainer)),
+ DeleteUtils.getParentBlock(rootNode, Element$$1.fromDom(rng.endContainer))
+ ], function (block1, block2) {
+ if (eq(block1, block2) === false) {
+ rng.deleteContents();
+ MergeBlocks.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 = Element$$1.fromDom(rawNode);
+ var isRoot = curry(eq, root);
+ return ancestor(node, isTableCell, isRoot).isSome();
+ };
+ var isSelectionInTable = function (root, rng) {
+ return isRawNodeInTable(root, rng.startContainer) || isRawNodeInTable(root, rng.endContainer);
+ };
+ var isEverythingSelected = function (root, rng) {
+ var noPrevious = CaretFinder.prevPosition(root.dom(), CaretPosition$1.fromRangeStart(rng)).isNone();
+ var noNext = CaretFinder.nextPosition(root.dom(), CaretPosition$1.fromRangeEnd(rng)).isNone();
+ return !isSelectionInTable(root, rng) && noPrevious && noNext;
+ };
+ var emptyEditor = function (editor) {
+ editor.setContent('');
+ editor.selection.setCursorLocation();
+ return true;
+ };
+ var deleteRange = function (editor) {
+ var rootNode = Element$$1.fromDom(editor.getBody());
+ var rng = editor.selection.getRng();
+ return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection);
+ };
+ var backspaceDelete$1 = function (editor, forward) {
+ return editor.selection.isCollapsed() ? false : deleteRange(editor);
+ };
+ var BlockRangeDelete = { backspaceDelete: backspaceDelete$1 };
+
+ var generate$1 = 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 argLength = arguments.length;
+ if (argLength !== value.length) {
+ throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);
+ }
+ var args = new Array(argLength);
+ for (var i = 0; i < args.length; i++)
+ args[i] = arguments[i];
+ 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 () {
+ if (arguments.length !== cases.length) {
+ throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);
+ }
+ var target = arguments[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$1 };
+
+ var isBr$5 = function (pos) {
+ return getElementFromPosition(pos).exists(isBr);
+ };
+ var findBr = function (forward, root, pos) {
+ var parentBlocks = filter(Parents.parentsAndSelf(Element$$1.fromDom(pos.container()), root), isBlock);
+ var scope = head(parentBlocks).getOr(root);
+ return CaretFinder.fromPosition(forward, scope.dom(), pos).filter(isBr$5);
+ };
+ var isBeforeBr = function (root, pos) {
+ return getElementFromPosition(pos).exists(isBr) || findBr(true, root, pos).isSome();
+ };
+ var isAfterBr = function (root, pos) {
+ return getElementFromPrevPosition(pos).exists(isBr) || findBr(false, root, pos).isSome();
+ };
+ var findPreviousBr = curry(findBr, false);
+ var findNextBr = curry(findBr, true);
+
+ var isCompoundElement = function (node) {
+ return isTableCell(Element$$1.fromDom(node)) || isListItem(Element$$1.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 NodeType.isElement(elm) && elm.getAttribute('data-mce-caret') === caretLocation;
+ };
+ var isDeleteFromCefDifferentBlocks = function (root, forward, from, to) {
+ var inSameBlock = function (elm) {
+ return isInline(Element$$1.fromDom(elm)) && !isInSameBlock(from, to, root);
+ };
+ return getRelativeCefElm(!forward, from).fold(function () {
+ return getRelativeCefElm(forward, to).fold(constant(false), inSameBlock);
+ }, inSameBlock);
+ };
+ var deleteEmptyBlockOrMoveToCef = function (root, forward, from, to) {
+ var toCefElm = to.getNode(forward === false);
+ return DeleteUtils.getParentBlock(Element$$1.fromDom(root), Element$$1.fromDom(from.getNode())).map(function (blockElm) {
+ return Empty.isEmpty(blockElm) ? DeleteAction.remove(blockElm.dom()) : DeleteAction.moveToElement(toCefElm);
+ }).orThunk(function () {
+ return Option.some(DeleteAction.moveToElement(toCefElm));
+ });
+ };
+ var findCefPosition = function (root, forward, from) {
+ return CaretFinder.fromPosition(forward, root, from).bind(function (to) {
+ if (isCompoundElement(to.getNode())) {
+ return Option.none();
+ } else if (isDeleteFromCefDifferentBlocks(root, forward, from, to)) {
+ return Option.none();
+ } else if (forward && NodeType.isContentEditableFalse(to.getNode())) {
+ return deleteEmptyBlockOrMoveToCef(root, forward, from, to);
+ } else if (forward === false && NodeType.isContentEditableFalse(to.getNode(true))) {
+ return deleteEmptyBlockOrMoveToCef(root, forward, from, to);
+ } else if (forward && isAfterContentEditableFalse(from)) {
+ return Option.some(DeleteAction.moveToPosition(to));
+ } else if (forward === false && isBeforeContentEditableFalse(from)) {
+ return Option.some(DeleteAction.moveToPosition(to));
+ } else {
+ return Option.none();
+ }
+ });
+ };
+ var getContentEditableBlockAction = function (forward, elm) {
+ if (forward && NodeType.isContentEditableFalse(elm.nextSibling)) {
+ return Option.some(DeleteAction.moveToElement(elm.nextSibling));
+ } else if (forward === false && NodeType.isContentEditableFalse(elm.previousSibling)) {
+ return Option.some(DeleteAction.moveToElement(elm.previousSibling));
+ } else {
+ return Option.none();
+ }
+ };
+ var skipMoveToActionFromInlineCefToContent = function (root, from, deleteAction) {
+ return deleteAction.fold(function (elm) {
+ return Option.some(DeleteAction.remove(elm));
+ }, function (elm) {
+ return Option.some(DeleteAction.moveToElement(elm));
+ }, function (to) {
+ if (isInSameBlock(from, to, root)) {
+ return Option.none();
+ } else {
+ return Option.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);
+ }, Option.some);
+ } else {
+ return findCefPosition(root, forward, from).bind(function (deleteAction) {
+ return skipMoveToActionFromInlineCefToContent(root, from, deleteAction);
+ });
+ }
+ };
+ var read$2 = function (root, forward, rng) {
+ var normalizedRange = normalizeRange(forward ? 1 : -1, root, rng);
+ var from = CaretPosition$1.fromRangeStart(normalizedRange);
+ var rootElement = Element$$1.fromDom(root);
+ if (forward === false && isAfterContentEditableFalse(from)) {
+ return Option.some(DeleteAction.remove(from.getNode(true)));
+ } else if (forward && isBeforeContentEditableFalse(from)) {
+ return Option.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 isCollapsibleWhitespace = function (c) {
+ return ' \f\n\r\t\x0B'.indexOf(c) !== -1;
+ };
+ var normalizeContent = function (content, isStartOfContent, isEndOfContent) {
+ var result = foldl(content.split(''), function (acc, c) {
+ if (isCollapsibleWhitespace(c) || c === '\xA0') {
+ if (acc.previousCharIsSpace || acc.str === '' && isStartOfContent || acc.str.length === content.length - 1 && isEndOfContent) {
+ return {
+ previousCharIsSpace: false,
+ str: acc.str + '\xA0'
+ };
+ } 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 whitespace = node.data.slice(offset, offset + count);
+ var isEndOfContent = offset + count >= node.data.length;
+ var isStartOfContent = offset === 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) {
+ var whitespaceOffset = rTrim(prevNode.data).length;
+ prevNode.appendData(nextNode.data);
+ remove$2(Element$$1.fromDom(nextNode));
+ if (normalizeWhitespace) {
+ normalizeWhitespaceAfter(prevNode, whitespaceOffset);
+ }
+ return prevNode;
+ };
+
+ var needsReposition = function (pos, elm) {
+ var container = pos.container();
+ var offset = pos.offset();
+ return CaretPosition$1.isTextPosition(pos) === false && container === elm.parentNode && offset > CaretPosition$1.before(elm).offset();
+ };
+ var reposition = function (elm, pos) {
+ return needsReposition(pos, elm) ? CaretPosition$1(pos.container(), pos.offset() - 1) : pos;
+ };
+ var beforeOrStartOf = function (node) {
+ return NodeType.isText(node) ? CaretPosition$1(node, 0) : CaretPosition$1.before(node);
+ };
+ var afterOrEndOf = function (node) {
+ return NodeType.isText(node) ? CaretPosition$1(node, node.data.length) : CaretPosition$1.after(node);
+ };
+ var getPreviousSiblingCaretPosition = function (elm) {
+ if (isCaretCandidate(elm.previousSibling)) {
+ return Option.some(afterOrEndOf(elm.previousSibling));
+ } else {
+ return elm.previousSibling ? CaretFinder.lastPositionIn(elm.previousSibling) : Option.none();
+ }
+ };
+ var getNextSiblingCaretPosition = function (elm) {
+ if (isCaretCandidate(elm.nextSibling)) {
+ return Option.some(beforeOrStartOf(elm.nextSibling));
+ } else {
+ return elm.nextSibling ? CaretFinder.firstPositionIn(elm.nextSibling) : Option.none();
+ }
+ };
+ var findCaretPositionBackwardsFromElm = function (rootElement, elm) {
+ var startPosition = CaretPosition$1.before(elm.previousSibling ? elm.previousSibling : elm.parentNode);
+ return CaretFinder.prevPosition(rootElement, startPosition).fold(function () {
+ return CaretFinder.nextPosition(rootElement, CaretPosition$1.after(elm));
+ }, Option.some);
+ };
+ var findCaretPositionForwardsFromElm = function (rootElement, elm) {
+ return CaretFinder.nextPosition(rootElement, CaretPosition$1.after(elm)).fold(function () {
+ return CaretFinder.prevPosition(rootElement, CaretPosition$1.before(elm));
+ }, Option.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 && editor.schema.getBlockElements().hasOwnProperty(name(elm));
+ };
+ var paddEmptyBlock = function (elm) {
+ if (Empty.isEmpty(elm)) {
+ var br = Element$$1.fromHtml('
');
+ empty(elm);
+ append(elm, br);
+ return Option.some(CaretPosition$1.before(br.dom()));
+ } else {
+ return Option.none();
+ }
+ };
+ var deleteNormalized = function (elm, afterDeletePosOpt, normalizeWhitespace) {
+ var prevTextOpt = prevSibling(elm).filter(function (e) {
+ return NodeType.isText(e.dom());
+ });
+ var nextTextOpt = nextSibling(elm).filter(function (e) {
+ return NodeType.isText(e.dom());
+ });
+ remove$2(elm);
+ return liftN([
+ 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$1(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, Option.some(paddPos));
+ }
+ });
+ }
+ };
+ var DeleteElement = { deleteElement: deleteElement };
+
+ var deleteElement$1 = function (editor, forward) {
+ return function (element) {
+ editor._selectionOverrides.hideFakeCaret();
+ DeleteElement.deleteElement(editor, forward, Element$$1.fromDom(element));
+ return true;
+ };
+ };
+ var moveToElement = function (editor, forward) {
+ return function (element) {
+ var pos = forward ? CaretPosition$1.before(element) : CaretPosition$1.after(element);
+ editor.selection.setRng(pos.toRange());
+ return true;
+ };
+ };
+ var moveToPosition = function (editor) {
+ return function (pos) {
+ editor.selection.setRng(pos.toRange());
+ return true;
+ };
+ };
+ var backspaceDeleteCaret = function (editor, forward) {
+ var result = read$2(editor.getBody(), forward, editor.selection.getRng()).map(function (deleteAction) {
+ return deleteAction.fold(deleteElement$1(editor, forward), moveToElement(editor, forward), moveToPosition(editor));
+ });
+ return result.getOr(false);
+ };
+ var deleteOffscreenSelection = function (rootElement) {
+ each(descendants$1(rootElement, '.mce-offscreen-selection'), remove$2);
+ };
+ var backspaceDeleteRange = function (editor, forward) {
+ var selectedElement = editor.selection.getNode();
+ if (NodeType.isContentEditableFalse(selectedElement)) {
+ deleteOffscreenSelection(Element$$1.fromDom(editor.getBody()));
+ DeleteElement.deleteElement(editor, forward, Element$$1.fromDom(editor.selection.getNode()));
+ DeleteUtils.paddEmptyBody(editor);
+ return true;
+ } else {
+ return false;
+ }
+ };
+ var getContentEditableRoot = function (root, node) {
+ while (node && node !== root) {
+ if (NodeType.isContentEditableTrue(node) || NodeType.isContentEditableFalse(node)) {
+ return node;
+ }
+ node = node.parentNode;
+ }
+ return null;
+ };
+ var paddEmptyElement = function (editor) {
+ var br;
+ var ceRoot = getContentEditableRoot(editor.getBody(), editor.selection.getNode());
+ if (NodeType.isContentEditableTrue(ceRoot) && editor.dom.isBlock(ceRoot) && editor.dom.isEmpty(ceRoot)) {
+ br = editor.dom.create('br', { 'data-mce-bogus': '1' });
+ editor.dom.setHTML(ceRoot, '');
+ ceRoot.appendChild(br);
+ editor.selection.setRng(CaretPosition$1.before(br).toRange());
+ }
+ return true;
+ };
+ var backspaceDelete$2 = function (editor, forward) {
+ if (editor.selection.isCollapsed()) {
+ return backspaceDeleteCaret(editor, forward);
+ } else {
+ return backspaceDeleteRange(editor, forward);
+ }
+ };
+ var CefDelete = {
+ backspaceDelete: backspaceDelete$2,
+ paddEmptyElement: paddEmptyElement
+ };
+
+ var isText$8 = NodeType.isText;
+ var startsWithCaretContainer$1 = function (node) {
+ return isText$8(node) && node.data[0] === Zwsp.ZWSP;
+ };
+ var endsWithCaretContainer$1 = function (node) {
+ return isText$8(node) && node.data[node.data.length - 1] === Zwsp.ZWSP;
+ };
+ var createZwsp = function (node) {
+ return node.ownerDocument.createTextNode(Zwsp.ZWSP);
+ };
+ var insertBefore$1 = function (node) {
+ if (isText$8(node.previousSibling)) {
+ if (endsWithCaretContainer$1(node.previousSibling)) {
+ return node.previousSibling;
+ } else {
+ node.previousSibling.appendData(Zwsp.ZWSP);
+ return node.previousSibling;
+ }
+ } else if (isText$8(node)) {
+ if (startsWithCaretContainer$1(node)) {
+ return node;
+ } else {
+ node.insertData(0, Zwsp.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.ZWSP);
+ return node.nextSibling;
+ }
+ } else if (isText$8(node)) {
+ if (endsWithCaretContainer$1(node)) {
+ return node;
+ } else {
+ node.appendData(Zwsp.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 (NodeType.isText(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) {
+ CaretContainerRemove.remove(caret.get());
+ var text = insertInlineBefore(element);
+ caret.set(text);
+ return Option.some(CaretPosition$1(text, text.length - 1));
+ }, function (element) {
+ return CaretFinder.firstPositionIn(element).map(function (pos) {
+ if (!isPosCaretContainer(pos, caret)) {
+ CaretContainerRemove.remove(caret.get());
+ var text = insertInlinePos(pos, true);
+ caret.set(text);
+ return CaretPosition$1(text, 1);
+ } else {
+ return CaretPosition$1(caret.get(), 1);
+ }
+ });
+ }, function (element) {
+ return CaretFinder.lastPositionIn(element).map(function (pos) {
+ if (!isPosCaretContainer(pos, caret)) {
+ CaretContainerRemove.remove(caret.get());
+ var text = insertInlinePos(pos, false);
+ caret.set(text);
+ return CaretPosition$1(text, text.length - 1);
+ } else {
+ return CaretPosition$1(caret.get(), caret.get().length - 1);
+ }
+ });
+ }, function (element) {
+ CaretContainerRemove.remove(caret.get());
+ var text = insertInlineAfter(element);
+ caret.set(text);
+ return Option.some(CaretPosition$1(text, 1));
+ });
+ };
+ var BoundaryCaret = { renderCaret: renderCaret };
+
+ 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 Option.none();
+ };
+ var LazyEvaluator = { evaluateUntil: evaluateUntil };
+
+ 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$3 = function (isInlineTarget, rootNode, pos) {
+ var nPos = InlineUtils.normalizeForwards(pos);
+ var scope = rescope(rootNode, nPos.container());
+ return InlineUtils.findRootInline(isInlineTarget, scope, nPos).fold(function () {
+ return CaretFinder.nextPosition(scope, nPos).bind(curry(InlineUtils.findRootInline, isInlineTarget, scope)).map(function (inline) {
+ return Location.before(inline);
+ });
+ }, Option.none);
+ };
+ var isNotInsideFormatCaretContainer = function (rootNode, elm) {
+ return getParentCaretContainer(rootNode, elm) === null;
+ };
+ var findInsideRootInline = function (isInlineTarget, rootNode, pos) {
+ return InlineUtils.findRootInline(isInlineTarget, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode));
+ };
+ var start = function (isInlineTarget, rootNode, pos) {
+ var nPos = InlineUtils.normalizeBackwards(pos);
+ return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {
+ var prevPos = CaretFinder.prevPosition(inline, nPos);
+ return prevPos.isNone() ? Option.some(Location.start(inline)) : Option.none();
+ });
+ };
+ var end = function (isInlineTarget, rootNode, pos) {
+ var nPos = InlineUtils.normalizeForwards(pos);
+ return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {
+ var nextPos = CaretFinder.nextPosition(inline, nPos);
+ return nextPos.isNone() ? Option.some(Location.end(inline)) : Option.none();
+ });
+ };
+ var after$3 = function (isInlineTarget, rootNode, pos) {
+ var nPos = InlineUtils.normalizeBackwards(pos);
+ var scope = rescope(rootNode, nPos.container());
+ return InlineUtils.findRootInline(isInlineTarget, scope, nPos).fold(function () {
+ return CaretFinder.prevPosition(scope, nPos).bind(curry(InlineUtils.findRootInline, isInlineTarget, scope)).map(function (inline) {
+ return Location.after(inline);
+ });
+ }, Option.none);
+ };
+ var isValidLocation = function (location) {
+ return InlineUtils.isRtl(getElement(location)) === false;
+ };
+ var readLocation = function (isInlineTarget, rootNode, pos) {
+ var location = LazyEvaluator.evaluateUntil([
+ before$3,
+ 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$1 = function (location1, location2) {
+ return getName(location1) === getName(location2) && getElement(location1) === getElement(location2);
+ };
+ var betweenInlines = function (forward, isInlineTarget, rootNode, from, to, location) {
+ return liftN([
+ InlineUtils.findRootInline(isInlineTarget, rootNode, from),
+ InlineUtils.findRootInline(isInlineTarget, rootNode, to)
+ ], function (fromInline, toInline) {
+ if (fromInline !== toInline && InlineUtils.hasSameParentBlock(rootNode, fromInline, toInline)) {
+ return Location.after(forward ? fromInline : toInline);
+ } else {
+ return location;
+ }
+ }).getOr(location);
+ };
+ var skipNoMovement = function (fromLocation, toLocation) {
+ return fromLocation.fold(constant(true), function (fromLocation) {
+ return !isEq$1(fromLocation, toLocation);
+ });
+ };
+ var findLocationTraverse = function (forward, isInlineTarget, rootNode, fromLocation, pos) {
+ var from = InlineUtils.normalizePosition(forward, pos);
+ var to = CaretFinder.fromPosition(forward, rootNode, from).map(curry(InlineUtils.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(Option.some, Location.start), Option.none, compose(Option.some, Location.after), Option.none);
+ } else {
+ return location.fold(Option.none, compose(Option.some, Location.before), Option.none, compose(Option.some, Location.end));
+ }
+ };
+ var findLocation = function (forward, isInlineTarget, rootNode, pos) {
+ var from = InlineUtils.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 BoundaryLocation = {
+ readLocation: readLocation,
+ findLocation: findLocation,
+ prevLocation: curry(findLocation, false),
+ nextLocation: curry(findLocation, true),
+ getElement: getElement,
+ outside: outside,
+ inside: inside
+ };
+
+ var hasSelectionModifyApi = function (editor) {
+ return isFunction(editor.selection.getSel().modify);
+ };
+ var moveRel = function (forward, selection, pos) {
+ var delta = forward ? 1 : -1;
+ selection.setRng(CaretPosition$1(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$1.fromRangeEnd(rng) : CaretPosition$1.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 WordSelection = {
+ hasSelectionModifyApi: hasSelectionModifyApi,
+ moveByWord: moveByWord
+ };
+
+ 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 isFeatureEnabled = function (editor) {
+ return editor.settings.inline_boundaries !== false;
+ };
+ 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 BoundaryCaret.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$1.fromRangeStart(editor.selection.getRng());
+ var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);
+ var location = BoundaryLocation.findLocation(forward, isInlineTarget, rootNode, from);
+ return location.bind(function (location) {
+ return renderCaretLocation(editor, caret, location);
+ });
+ };
+ var toggleInlines = function (isInlineTarget, dom, elms) {
+ var selectedInlines = filter(dom.select('*[data-mce-selected="inline-boundary"]'), 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$1.fromRangeStart(editor.selection.getRng());
+ if (CaretPosition$1.isTextPosition(pos) && InlineUtils.isAtZwsp(pos) === false) {
+ setCaretPosition(editor, CaretContainerRemove.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$1.fromRangeStart(editor.selection.getRng());
+ BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), pos).bind(function (location) {
+ return renderCaretLocation(editor, caret, location);
+ });
+ });
+ }
+ };
+ var move = function (editor, caret, forward) {
+ return function () {
+ return isFeatureEnabled(editor) ? findLocation$1(editor, caret, forward).isSome() : false;
+ };
+ };
+ var moveWord = function (forward, editor, caret) {
+ return function () {
+ return isFeatureEnabled(editor) ? WordSelection.moveByWord(forward, editor) : false;
+ };
+ };
+ var setupSelectedState = function (editor) {
+ var caret = Cell(null);
+ var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);
+ editor.on('NodeChange', function (e) {
+ if (isFeatureEnabled(editor)) {
+ toggleInlines(isInlineTarget, editor.dom, e.parents);
+ safeRemoveCaretContainer(editor, caret);
+ renderInsideInlineCaret(isInlineTarget, editor, caret, e.parents);
+ }
+ });
+ return caret;
+ };
+ var moveNextWord = curry(moveWord, true);
+ var movePrevWord = curry(moveWord, false);
+ var BoundarySelection = {
+ move: move,
+ moveNextWord: moveNextWord,
+ movePrevWord: movePrevWord,
+ setupSelectedState: setupSelectedState,
+ setCaretPosition: setCaretPosition
+ };
+
+ var isFeatureEnabled$1 = function (editor) {
+ return editor.settings.inline_boundaries !== 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 liftN([
+ CaretFinder.firstPositionIn(elm),
+ CaretFinder.lastPositionIn(elm)
+ ], function (firstPos, lastPos) {
+ var normalizedFirstPos = InlineUtils.normalizePosition(true, firstPos);
+ var normalizedLastPos = InlineUtils.normalizePosition(false, lastPos);
+ return CaretFinder.nextPosition(elm, normalizedFirstPos).map(function (pos) {
+ return pos.isEqual(normalizedLastPos);
+ }).getOr(true);
+ }).getOr(true);
+ };
+ var setCaretLocation = function (editor, caret) {
+ return function (location$$1) {
+ return BoundaryCaret.renderCaret(caret, location$$1).map(function (pos) {
+ BoundarySelection.setCaretPosition(editor, pos);
+ return true;
+ }).getOr(false);
+ };
+ };
+ var deleteFromTo = function (editor, caret, from, to) {
+ var rootNode = editor.getBody();
+ var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);
+ editor.undoManager.ignore(function () {
+ editor.selection.setRng(rangeFromPositions(from, to));
+ editor.execCommand('Delete');
+ BoundaryLocation.readLocation(isInlineTarget, rootNode, CaretPosition$1.fromRangeStart(editor.selection.getRng())).map(BoundaryLocation.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 = curry(InlineUtils.isInlineTarget, editor);
+ var fromLocation = BoundaryLocation.readLocation(isInlineTarget, rootNode, from);
+ return fromLocation.bind(function (location$$1) {
+ if (forward) {
+ return location$$1.fold(constant(Option.some(BoundaryLocation.inside(location$$1))), Option.none, constant(Option.some(BoundaryLocation.outside(location$$1))), Option.none);
+ } else {
+ return location$$1.fold(Option.none, constant(Option.some(BoundaryLocation.outside(location$$1))), Option.none, constant(Option.some(BoundaryLocation.inside(location$$1))));
+ }
+ }).map(setCaretLocation(editor, caret)).getOrThunk(function () {
+ var toPosition = CaretFinder.navigate(forward, rootNode, from);
+ var toLocation = toPosition.bind(function (pos) {
+ return BoundaryLocation.readLocation(isInlineTarget, rootNode, pos);
+ });
+ if (fromLocation.isSome() && toLocation.isSome()) {
+ return InlineUtils.findRootInline(isInlineTarget, rootNode, from).map(function (elm) {
+ if (hasOnlyTwoOrLessPositionsLeft(elm)) {
+ DeleteElement.deleteElement(editor, forward, Element$$1.fromDom(elm));
+ return true;
+ } else {
+ return false;
+ }
+ }).getOr(false);
+ } else {
+ 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$3 = function (editor, caret, forward) {
+ if (editor.selection.isCollapsed() && isFeatureEnabled$1(editor)) {
+ var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());
+ return backspaceDeleteCollapsed(editor, caret, forward, from);
+ }
+ return false;
+ };
+ var InlineBoundaryDelete = { backspaceDelete: backspaceDelete$3 };
+
+ var tableCellRng = Immutable('start', 'end');
+ var tableSelection = Immutable('rng', 'table', 'cells');
+ var deleteAction = Adt.generate([
+ { removeTable: ['element'] },
+ { emptyCells: ['cells'] }
+ ]);
+ var isRootFromElement = function (root) {
+ return curry(eq, root);
+ };
+ var getClosestCell = function (container, isRoot) {
+ return closest$1(Element$$1.fromDom(container), 'td,th', isRoot);
+ };
+ var getClosestTable = function (cell, isRoot) {
+ return ancestor$1(cell, 'table', isRoot);
+ };
+ var isExpandedCellRng = function (cellRng) {
+ return eq(cellRng.start(), cellRng.end()) === false;
+ };
+ var getTableFromCellRng = function (cellRng, isRoot) {
+ return getClosestTable(cellRng.start(), isRoot).bind(function (startParentTable) {
+ return getClosestTable(cellRng.end(), isRoot).bind(function (endParentTable) {
+ return eq(startParentTable, endParentTable) ? Option.some(startParentTable) : Option.none();
+ });
+ });
+ };
+ var getTableCells = function (table) {
+ return descendants$1(table, 'td,th');
+ };
+ 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 ? Option.none() : liftN([
+ 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) ? Option.none() : getCellRangeFromStartTable(cellRng, isRoot);
+ });
+ };
+ var isWithinSameTable = function (isRoot, cellRng) {
+ return getTableFromCellRng(cellRng, isRoot).isSome();
+ };
+ var getCellRng = function (rng, isRoot) {
+ var startCell = getClosestCell(rng.startContainer, isRoot);
+ var endCell = getClosestCell(rng.endContainer, isRoot);
+ return liftN([
+ startCell,
+ endCell
+ ], tableCellRng).filter(isExpandedCellRng).filter(function (cellRng) {
+ return isWithinSameTable(isRoot, cellRng);
+ }).orThunk(function () {
+ return partialSelection(isRoot, rng);
+ });
+ };
+ var getTableSelectionFromCellRng = function (cellRng, isRoot) {
+ return getTableFromCellRng(cellRng, isRoot).map(function (table) {
+ return tableSelection(cellRng, table, getTableCells(table));
+ });
+ };
+ var getTableSelectionFromRng = function (root, rng) {
+ var isRoot = isRootFromElement(root);
+ return getCellRng(rng, isRoot).bind(function (cellRng) {
+ return getTableSelectionFromCellRng(cellRng, isRoot);
+ });
+ };
+ var getCellIndex = function (cells, cell) {
+ return findIndex(cells, function (x) {
+ return eq(x, cell);
+ });
+ };
+ var getSelectedCells = function (tableSelection) {
+ return liftN([
+ getCellIndex(tableSelection.cells(), tableSelection.rng().start()),
+ getCellIndex(tableSelection.cells(), tableSelection.rng().end())
+ ], function (startIndex, endIndex) {
+ return tableSelection.cells().slice(startIndex, endIndex + 1);
+ });
+ };
+ 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 getActionFromCells = function (cells) {
+ return deleteAction.emptyCells(cells);
+ };
+ var getActionFromRange = function (root, rng) {
+ return getTableSelectionFromRng(root, rng).bind(getAction);
+ };
+ var TableDeleteAction = {
+ getActionFromRange: getActionFromRange,
+ getActionFromCells: getActionFromCells
+ };
+
+ 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$$1) {
+ var node = getSelectedNode(range$$1);
+ return node ? [Element$$1.fromDom(node)] : [];
+ });
+ };
+ var hasMultipleRanges = function (selection) {
+ return getRanges(selection).length > 1;
+ };
+ var MultiRange = {
+ getRanges: getRanges,
+ getSelectedNodes: getSelectedNodes,
+ hasMultipleRanges: hasMultipleRanges
+ };
+
+ var getCellsFromRanges = function (ranges) {
+ return filter(MultiRange.getSelectedNodes(ranges), isTableCell);
+ };
+ var getCellsFromElement = function (elm) {
+ var selectedCells = descendants$1(elm, 'td[data-mce-selected],th[data-mce-selected]');
+ return selectedCells;
+ };
+ var getCellsFromElementOrRanges = function (ranges, element) {
+ var selectedCells = getCellsFromElement(element);
+ var rangeCells = getCellsFromRanges(ranges);
+ return selectedCells.length > 0 ? selectedCells : rangeCells;
+ };
+ var getCellsFromEditor = function (editor) {
+ return getCellsFromElementOrRanges(MultiRange.getRanges(editor.selection.getSel()), Element$$1.fromDom(editor.getBody()));
+ };
+ var TableCellSelection = {
+ getCellsFromRanges: getCellsFromRanges,
+ getCellsFromElement: getCellsFromElement,
+ getCellsFromElementOrRanges: getCellsFromElementOrRanges,
+ getCellsFromEditor: getCellsFromEditor
+ };
+
+ var emptyCells = function (editor, cells) {
+ each(cells, PaddingBr.fillWithPaddingBr);
+ editor.selection.setCursorLocation(cells[0].dom(), 0);
+ return true;
+ };
+ var deleteTableElement = function (editor, table) {
+ DeleteElement.deleteElement(editor, false, table);
+ return true;
+ };
+ var deleteCellRange = function (editor, rootElm, rng) {
+ return TableDeleteAction.getActionFromRange(rootElm, rng).map(function (action) {
+ return action.fold(curry(deleteTableElement, editor), curry(emptyCells, 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$1 = function (editor, startElm) {
+ var rootNode = Element$$1.fromDom(editor.getBody());
+ var rng = editor.selection.getRng();
+ var selectedCells = TableCellSelection.getCellsFromEditor(editor);
+ return selectedCells.length !== 0 ? emptyCells(editor, selectedCells) : deleteTableRange(editor, rootNode, rng, startElm);
+ };
+ var getParentCell = function (rootElm, elm) {
+ return find(Parents.parentsAndSelf(elm, rootElm), isTableCell);
+ };
+ var getParentCaption = function (rootElm, elm) {
+ return find(Parents.parentsAndSelf(elm, rootElm), function (elm) {
+ return name(elm) === 'caption';
+ });
+ };
+ var deleteBetweenCells = function (editor, rootElm, forward, fromCell, from) {
+ return CaretFinder.navigate(forward, editor.getBody(), from).bind(function (to) {
+ return getParentCell(rootElm, Element$$1.fromDom(to.getNode())).map(function (toCell) {
+ return eq(toCell, fromCell) === false;
+ });
+ });
+ };
+ var emptyElement = function (editor, elm) {
+ PaddingBr.fillWithPaddingBr(elm);
+ editor.selection.setCursorLocation(elm.dom(), 0);
+ return Option.some(true);
+ };
+ var isDeleteOfLastCharPos = function (fromCaption, forward, from, to) {
+ return CaretFinder.firstPositionIn(fromCaption.dom()).bind(function (first) {
+ return CaretFinder.lastPositionIn(fromCaption.dom()).map(function (last$$1) {
+ return forward ? from.isEqual(first) && to.isEqual(last$$1) : from.isEqual(last$$1) && to.isEqual(first);
+ });
+ }).getOr(true);
+ };
+ var emptyCaretCaption = function (editor, elm) {
+ return emptyElement(editor, elm);
+ };
+ var validateCaretCaption = function (rootElm, fromCaption, to) {
+ return getParentCaption(rootElm, Element$$1.fromDom(to.getNode())).map(function (toCaption) {
+ return eq(toCaption, fromCaption) === false;
+ });
+ };
+ var deleteCaretInsideCaption = function (editor, rootElm, forward, fromCaption, from) {
+ return CaretFinder.navigate(forward, editor.getBody(), from).bind(function (to) {
+ return isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to);
+ }).or(Option.some(true));
+ };
+ var deleteCaretCells = function (editor, forward, rootElm, startElm) {
+ var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());
+ return getParentCell(rootElm, startElm).bind(function (fromCell) {
+ return Empty.isEmpty(fromCell) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from);
+ });
+ };
+ var deleteCaretCaption = function (editor, forward, rootElm, fromCaption) {
+ var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());
+ return Empty.isEmpty(fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from);
+ };
+ var deleteCaret = function (editor, forward, startElm) {
+ var rootElm = Element$$1.fromDom(editor.getBody());
+ return getParentCaption(rootElm, startElm).fold(function () {
+ return deleteCaretCells(editor, forward, rootElm, startElm);
+ }, function (fromCaption) {
+ return deleteCaretCaption(editor, forward, rootElm, fromCaption);
+ }).getOr(false);
+ };
+ var backspaceDelete$4 = function (editor, forward) {
+ var startElm = Element$$1.fromDom(editor.selection.getStart(true));
+ var cells = TableCellSelection.getCellsFromEditor(editor);
+ return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret(editor, forward, startElm) : deleteRange$1(editor, startElm);
+ };
+ var TableDelete = { backspaceDelete: backspaceDelete$4 };
+
+ var nativeCommand = function (editor, command) {
+ editor.getDoc().execCommand(command, false, null);
+ };
+ var deleteCommand = function (editor) {
+ if (CefDelete.backspaceDelete(editor, false)) {
+ return;
+ } else if (InlineBoundaryDelete.backspaceDelete(editor, false)) {
+ return;
+ } else if (BlockBoundaryDelete.backspaceDelete(editor, false)) {
+ return;
+ } else if (TableDelete.backspaceDelete(editor)) {
+ return;
+ } else if (BlockRangeDelete.backspaceDelete(editor, false)) {
+ return;
+ } else {
+ nativeCommand(editor, 'Delete');
+ DeleteUtils.paddEmptyBody(editor);
+ }
+ };
+ var forwardDeleteCommand = function (editor) {
+ if (CefDelete.backspaceDelete(editor, true)) {
+ return;
+ } else if (InlineBoundaryDelete.backspaceDelete(editor, true)) {
+ return;
+ } else if (BlockBoundaryDelete.backspaceDelete(editor, true)) {
+ return;
+ } else if (TableDelete.backspaceDelete(editor)) {
+ return;
+ } else if (BlockRangeDelete.backspaceDelete(editor, true)) {
+ return;
+ } else {
+ nativeCommand(editor, 'ForwardDelete');
+ }
+ };
+ var DeleteCommands = {
+ deleteCommand: deleteCommand,
+ forwardDeleteCommand: forwardDeleteCommand
+ };
+
+ 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');
+ return block === false ? '' : 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', ''));
+ };
+ var getFontSizeClasses = function (editor) {
+ return Tools.explode(editor.getParam('font_size_classes', ''));
+ };
+ var getImagesDataImgFilter = function (editor) {
+ return editor.getParam('images_dataimg_filter', constant(true), '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 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 Settings = {
+ getIframeAttrs: getIframeAttrs,
+ getDocType: getDocType,
+ getDocumentBaseUrl: getDocumentBaseUrl,
+ getBodyId: getBodyId,
+ getBodyClass: getBodyClass,
+ getContentSecurityPolicy: getContentSecurityPolicy,
+ shouldPutBrInPre: shouldPutBrInPre,
+ getForcedRootBlock: getForcedRootBlock,
+ getForcedRootBlockAttrs: getForcedRootBlockAttrs,
+ getBrNewLineSelector: getBrNewLineSelector,
+ getNoNewLineSelector: getNoNewLineSelector,
+ shouldKeepStyles: shouldKeepStyles,
+ shouldEndContainerOnEmptyBlock: shouldEndContainerOnEmptyBlock,
+ getFontStyleValues: getFontStyleValues,
+ getFontSizeClasses: getFontSizeClasses,
+ getImagesDataImgFilter: getImagesDataImgFilter,
+ isAutomaticUploadsEnabled: isAutomaticUploadsEnabled,
+ shouldReuseFileName: shouldReuseFileName,
+ shouldReplaceBlobUris: shouldReplaceBlobUris,
+ getImageUploadUrl: getImageUploadUrl,
+ getImageUploadBasePath: getImageUploadBasePath,
+ getImagesUploadCredentials: getImagesUploadCredentials,
+ getImagesUploadHandler: getImagesUploadHandler,
+ shouldUseContentCssCors: shouldUseContentCssCors
+ };
+
+ var getSpecifiedFontProp = function (propName, rootElm, elm) {
+ var getProperty = function (elm) {
+ return getRaw(elm, propName);
+ };
+ var isRoot = function (elm) {
+ return eq(Element$$1.fromDom(rootElm), elm);
+ };
+ return closest(Element$$1.fromDom(elm), function (elm) {
+ return getProperty(elm).isSome();
+ }, isRoot).bind(getProperty);
+ };
+ var round$1 = function (number, precision) {
+ var factor = Math.pow(10, precision);
+ return Math.round(number * factor) / factor;
+ };
+ var toPt = function (fontSize, precision) {
+ if (/[0-9.]+px$/.test(fontSize)) {
+ return round$1(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';
+ }
+ return fontSize;
+ };
+ var normalizeFontFamily = function (fontFamily) {
+ return fontFamily.replace(/[\'\"\\]/g, '').replace(/,\s+/g, ',');
+ };
+ var getComputedFontProp = function (propName, elm) {
+ return Option.from(DOMUtils$1.DOM.getStyle(elm, propName, true));
+ };
+ var getFontProp = function (propName) {
+ return function (rootElm, elm) {
+ return Option.from(elm).map(Element$$1.fromDom).filter(isElement).bind(function (element) {
+ return getSpecifiedFontProp(propName, rootElm, element.dom()).or(getComputedFontProp(propName, element.dom()));
+ }).getOr('');
+ };
+ };
+ var FontInfo = {
+ getFontSize: getFontProp('font-size'),
+ getFontFamily: compose(normalizeFontFamily, getFontProp('font-family')),
+ toPt: toPt
+ };
+
+ var findFirstCaretElement = function (editor) {
+ return CaretFinder.firstPositionIn(editor.getBody()).map(function (caret) {
+ var container = caret.container();
+ return NodeType.isText(container) ? container.parentNode : container;
+ });
+ };
+ var isRangeAtStartOfNode = function (rng, root) {
+ return rng.startContainer === root && rng.startOffset === 0;
+ };
+ var getCaretElement = function (editor) {
+ return Option.from(editor.selection.getRng()).bind(function (rng) {
+ var root = editor.getBody();
+ return isRangeAtStartOfNode(rng, root) ? Option.none() : Option.from(editor.selection.getStart(true));
+ });
+ };
+ var fromFontSizeNumber = function (editor, value) {
+ if (/^[0-9\.]+$/.test(value)) {
+ var fontSizeNumber = parseInt(value, 10);
+ if (fontSizeNumber >= 1 && fontSizeNumber <= 7) {
+ var fontSizes = Settings.getFontStyleValues(editor);
+ var fontClasses = Settings.getFontSizeClasses(editor);
+ if (fontClasses) {
+ return fontClasses[fontSizeNumber - 1] || value;
+ } else {
+ return fontSizes[fontSizeNumber - 1] || value;
+ }
+ } else {
+ return value;
+ }
+ } else {
+ return value;
+ }
+ };
+ var fontNameAction = function (editor, value) {
+ editor.formatter.toggle('fontname', { value: fromFontSizeNumber(editor, value) });
+ editor.nodeChanged();
+ };
+ var fontNameQuery = function (editor) {
+ return getCaretElement(editor).fold(function () {
+ return findFirstCaretElement(editor).map(function (caretElement) {
+ return FontInfo.getFontFamily(editor.getBody(), caretElement);
+ }).getOr('');
+ }, function (caretElement) {
+ return FontInfo.getFontFamily(editor.getBody(), caretElement);
+ });
+ };
+ var fontSizeAction = function (editor, value) {
+ editor.formatter.toggle('fontsize', { value: fromFontSizeNumber(editor, value) });
+ editor.nodeChanged();
+ };
+ var fontSizeQuery = function (editor) {
+ return getCaretElement(editor).fold(function () {
+ return findFirstCaretElement(editor).map(function (caretElement) {
+ return FontInfo.getFontSize(editor.getBody(), caretElement);
+ }).getOr('');
+ }, function (caretElement) {
+ return FontInfo.getFontSize(editor.getBody(), caretElement);
+ });
+ };
+
+ var isEq$2 = function (rng1, rng2) {
+ return rng1 && rng2 && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset);
+ };
+ var RangeCompare = { isEq: isEq$2 };
+
+ var findParent = 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(node, rootNode, predicate) !== null;
+ };
+ var hasParentWithName = function (node, rootNode, name) {
+ return hasParent(node, rootNode, function (node) {
+ return node.nodeName === name;
+ });
+ };
+ var isTable$2 = 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 TreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || dom.getRoot());
+ while (node = walker[left ? 'prev' : 'next']()) {
+ if (NodeType.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 (NodeType.isContentEditableFalse(node)) {
+ return true;
+ }
+ node = node.parentNode;
+ }
+ return false;
+ };
+ var findTextNodeRelative = function (dom, isAfterNode, collapsed, left, startNode) {
+ var walker, lastInlineElement, parentBlockContainer;
+ var body = dom.getRoot();
+ var node;
+ var nonEmptyElementsMap = dom.schema.getNonEmptyElements();
+ parentBlockContainer = dom.getParent(startNode.parentNode, dom.isBlock) || body;
+ if (left && NodeType.isBr(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) {
+ return Option.some(CaretPosition(startNode.parentNode, dom.nodeIndex(startNode)));
+ }
+ walker = new TreeWalker(startNode, parentBlockContainer);
+ while (node = walker[left ? 'prev' : 'next']()) {
+ if (dom.getContentEditableParent(node) === 'false' || isCeFalseCaretContainer(node, body)) {
+ return Option.none();
+ }
+ if (NodeType.isText(node) && node.nodeValue.length > 0) {
+ if (hasParentWithName(node, body, 'A') === false) {
+ return Option.some(CaretPosition(node, left ? node.nodeValue.length : 0));
+ }
+ return Option.none();
+ }
+ if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) {
+ return Option.none();
+ }
+ lastInlineElement = node;
+ }
+ if (collapsed && lastInlineElement) {
+ return Option.some(CaretPosition(lastInlineElement, 0));
+ }
+ return Option.none();
+ };
+ var normalizeEndPoint = function (dom, collapsed, start, rng) {
+ var container, offset, walker;
+ var body = dom.getRoot();
+ var node, nonEmptyElementsMap;
+ var directionLeft, isAfterNode, normalized = false;
+ container = rng[(start ? 'start' : 'end') + 'Container'];
+ offset = rng[(start ? 'start' : 'end') + 'Offset'];
+ isAfterNode = NodeType.isElement(container) && offset === container.childNodes.length;
+ nonEmptyElementsMap = dom.schema.getNonEmptyElements();
+ directionLeft = start;
+ if (isCaretContainer(container)) {
+ return Option.none();
+ }
+ if (NodeType.isElement(container) && offset > container.childNodes.length - 1) {
+ directionLeft = false;
+ }
+ if (NodeType.isDocument(container)) {
+ container = body;
+ offset = 0;
+ }
+ if (container === body) {
+ if (directionLeft) {
+ node = container.childNodes[offset > 0 ? offset - 1 : 0];
+ if (node) {
+ if (isCaretContainer(node)) {
+ return Option.none();
+ }
+ if (nonEmptyElementsMap[node.nodeName] || isTable$2(node)) {
+ return Option.none();
+ }
+ }
+ }
+ if (container.hasChildNodes()) {
+ offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1);
+ container = container.childNodes[offset];
+ offset = NodeType.isText(container) && isAfterNode ? container.data.length : 0;
+ if (!collapsed && container === body.lastChild && isTable$2(container)) {
+ return Option.none();
+ }
+ if (hasContentEditableFalseParent(body, container) || isCaretContainer(container)) {
+ return Option.none();
+ }
+ if (container.hasChildNodes() && isTable$2(container) === false) {
+ node = container;
+ walker = new TreeWalker(container, body);
+ do {
+ if (NodeType.isContentEditableFalse(node) || isCaretContainer(node)) {
+ normalized = false;
+ break;
+ }
+ if (NodeType.isText(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 (NodeType.isText(container) && offset === 0) {
+ findTextNodeRelative(dom, isAfterNode, collapsed, true, container).each(function (pos) {
+ container = pos.container();
+ offset = pos.offset();
+ normalized = true;
+ });
+ }
+ if (NodeType.isElement(container)) {
+ node = container.childNodes[offset];
+ if (!node) {
+ node = container.childNodes[offset - 1];
+ }
+ if (node && NodeType.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 && NodeType.isText(container) && offset === container.nodeValue.length) {
+ findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(function (pos) {
+ container = pos.container();
+ offset = pos.offset();
+ normalized = true;
+ });
+ }
+ return normalized ? Option.some(CaretPosition(container, offset)) : Option.none();
+ };
+ var normalize$2 = 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 RangeCompare.isEq(rng, normRng) ? Option.none() : Option.some(normRng);
+ };
+ var NormalizeRange = { normalize: normalize$2 };
+
+ var hasRightSideContent = function (schema, container, parentBlock) {
+ var walker = new TreeWalker(container, parentBlock);
+ var node;
+ var nonEmptyElementsMap = schema.getNonEmptyElements();
+ while (node = walker.next()) {
+ if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || node.length > 0) {
+ return true;
+ }
+ }
+ };
+ var scrollToBr = function (dom, selection, brElm) {
+ var marker = dom.create('span', {}, ' ');
+ brElm.parentNode.insertBefore(marker, brElm);
+ selection.scrollIntoView(marker);
+ dom.remove(marker);
+ };
+ var moveSelectionToBr = function (dom, selection, brElm, extraBr) {
+ var rng = dom.createRng();
+ if (!extraBr) {
+ rng.setStartAfter(brElm);
+ rng.setEndAfter(brElm);
+ } else {
+ rng.setStartBefore(brElm);
+ rng.setEndBefore(brElm);
+ }
+ selection.setRng(rng);
+ };
+ var insertBrAtCaret = function (editor, evt) {
+ var selection = editor.selection, dom = editor.dom;
+ var brElm, extraBr;
+ var rng = selection.getRng();
+ NormalizeRange.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');
+ rng.insertNode(brElm);
+ scrollToBr(dom, selection, brElm);
+ moveSelectionToBr(dom, selection, brElm, extraBr);
+ editor.undoManager.add();
+ };
+ var insertBrBefore = function (editor, inline) {
+ var br = Element$$1.fromTag('br');
+ before(Element$$1.fromDom(inline), br);
+ editor.undoManager.add();
+ };
+ var insertBrAfter = function (editor, inline) {
+ if (!hasBrAfter(editor.getBody(), inline)) {
+ after(Element$$1.fromDom(inline), Element$$1.fromTag('br'));
+ }
+ var br = Element$$1.fromTag('br');
+ after(Element$$1.fromDom(inline), br);
+ scrollToBr(editor.dom, editor.selection, br.dom());
+ moveSelectionToBr(editor.dom, editor.selection, br.dom(), false);
+ editor.undoManager.add();
+ };
+ var isBeforeBr$1 = function (pos) {
+ return NodeType.isBr(pos.getNode());
+ };
+ var hasBrAfter = function (rootNode, startNode) {
+ if (isBeforeBr$1(CaretPosition$1.after(startNode))) {
+ return true;
+ } else {
+ return CaretFinder.nextPosition(rootNode, CaretPosition$1.after(startNode)).map(function (pos) {
+ return NodeType.isBr(pos.getNode());
+ }).getOr(false);
+ }
+ };
+ var isAnchorLink = function (elm) {
+ return elm && elm.nodeName === 'A' && 'href' in elm;
+ };
+ var isInsideAnchor = function (location) {
+ return location.fold(constant(false), isAnchorLink, isAnchorLink, constant(false));
+ };
+ var readInlineAnchorLocation = function (editor) {
+ var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);
+ var position = CaretPosition$1.fromRangeStart(editor.selection.getRng());
+ return BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), position).filter(isInsideAnchor);
+ };
+ var insertBrOutsideAnchor = function (editor, location) {
+ location.fold(noop, curry(insertBrBefore, editor), curry(insertBrAfter, editor), noop);
+ };
+ var insert = function (editor, evt) {
+ var anchorLocation = readInlineAnchorLocation(editor);
+ if (anchorLocation.isSome()) {
+ anchorLocation.each(curry(insertBrOutsideAnchor, editor));
+ } else {
+ insertBrAtCaret(editor, evt);
+ }
+ };
+ var InsertBr = { insert: insert };
+
+ var adt = Adt.generate([
+ { 'before': ['element'] },
+ {
+ 'on': [
+ 'element',
+ 'offset'
+ ]
+ },
+ { after: ['element'] }
+ ]);
+
+ var type$1 = Adt.generate([
+ { domRange: ['rng'] },
+ {
+ relative: [
+ 'startSitu',
+ 'finishSitu'
+ ]
+ },
+ {
+ exact: [
+ 'start',
+ 'soffset',
+ 'finish',
+ 'foffset'
+ ]
+ }
+ ]);
+ var range$1 = Immutable('start', 'soffset', 'finish', 'foffset');
+ var domRange = type$1.domRange;
+ var relative = type$1.relative;
+ var exact = type$1.exact;
+
+ var browser$3 = PlatformDetection$1.detect().browser;
+ var clamp = function (offset, element) {
+ var max = isText(element) ? get$6(element).length : children(element).length + 1;
+ if (offset > max) {
+ return max;
+ } else if (offset < 0) {
+ return 0;
+ }
+ return offset;
+ };
+ var normalizeRng = function (rng) {
+ return range$1(rng.start(), clamp(rng.soffset(), rng.start()), rng.finish(), clamp(rng.foffset(), rng.finish()));
+ };
+ var isOrContains = function (root, elm) {
+ return contains$3(root, elm) || eq(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 range$1(Element$$1.fromDom(r.startContainer), r.startOffset, Element$$1.fromDom(r.endContainer), r.endOffset);
+ };
+ var readRange = function (win) {
+ var selection = win.getSelection();
+ var rng = !selection || selection.rangeCount === 0 ? Option.none() : Option.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 Option.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 Option.some(rng);
+ } catch (_) {
+ return Option.none();
+ }
+ };
+ var store = function (editor) {
+ var newBookmark = shouldStore(editor) ? getBookmark$2(Element$$1.fromDom(editor.getBody())) : Option.none();
+ editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;
+ };
+ var storeNative = function (editor, rng) {
+ var root = Element$$1.fromDom(editor.getBody());
+ var range = shouldStore(editor) ? Option.from(rng) : Option.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 : Option.none();
+ return bookmark.bind(curry(validate, Element$$1.fromDom(editor.getBody()))).bind(bookmarkToNativeRng);
+ };
+ var restore = function (editor) {
+ getRng(editor).each(function (rng) {
+ editor.selection.setRng(rng);
+ });
+ };
+ var SelectionBookmark = {
+ store: store,
+ storeNative: storeNative,
+ readRange: readRange,
+ restore: restore,
+ getRng: getRng,
+ getBookmark: getBookmark$2,
+ validate: validate
+ };
+
+ var indentElement = function (dom, command, useMargin, value, unit, element) {
+ if (dom.getContentEditable(element) === 'false') {
+ return;
+ }
+ var indentStyleName = useMargin ? 'margin' : 'padding';
+ indentStyleName = element.nodeName === 'TABLE' ? 'margin' : indentStyleName;
+ indentStyleName += dom.getStyle(element, 'direction', true) === 'rtl' ? 'Right' : 'Left';
+ if (command === 'outdent') {
+ var styleValue = Math.max(0, parseInt(element.style[indentStyleName] || 0, 10) - value);
+ dom.setStyle(element, indentStyleName, styleValue ? styleValue + unit : '');
+ } else {
+ var styleValue = parseInt(element.style[indentStyleName] || 0, 10) + value + unit;
+ dom.setStyle(element, indentStyleName, styleValue);
+ }
+ };
+ 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(), Element$$1.fromDom), function (el) {
+ return !isListComponent(el) && !parentIsListComponent(el);
+ });
+ };
+ var handle = function (editor, command) {
+ var settings = editor.settings, dom = editor.dom, selection = editor.selection, formatter = editor.formatter;
+ var indentUnit = /[a-z%]+$/i.exec(settings.indentation)[0];
+ var indentValue = parseInt(settings.indentation, 10);
+ var useMargin = editor.getParam('indent_use_margin', false);
+ if (!editor.queryCommandState('InsertUnorderedList') && !editor.queryCommandState('InsertOrderedList')) {
+ if (!settings.forced_root_block && !dom.getParent(selection.getNode(), dom.isBlock)) {
+ formatter.apply('div');
+ }
+ }
+ each(getBlocksToIndent(editor), function (block) {
+ indentElement(dom, command, useMargin, indentValue, indentUnit, block.dom());
+ });
+ };
+
+ var each$a = Tools.each, extend$2 = Tools.extend;
+ var map$3 = Tools.map, inArray$2 = Tools.inArray;
+ function EditorCommands (editor) {
+ var dom, selection, formatter;
+ var commands = {
+ state: {},
+ exec: {},
+ value: {}
+ };
+ var settings = editor.settings, bookmark;
+ editor.on('PreInit', function () {
+ dom = editor.dom;
+ selection = editor.selection;
+ settings = editor.settings;
+ formatter = editor.formatter;
+ });
+ var execCommand = function (command, ui, value, args) {
+ var func, customCommand, state = false;
+ if (editor.removed) {
+ return;
+ }
+ if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(command) && (!args || !args.skip_focus)) {
+ editor.focus();
+ } else {
+ SelectionBookmark.restore(editor);
+ }
+ args = editor.fire('BeforeExecCommand', {
+ command: command,
+ ui: ui,
+ value: value
+ });
+ if (args.isDefaultPrevented()) {
+ return false;
+ }
+ customCommand = command.toLowerCase();
+ if (func = commands.exec[customCommand]) {
+ func(customCommand, ui, value);
+ editor.fire('ExecCommand', {
+ command: command,
+ ui: ui,
+ value: value
+ });
+ return true;
+ }
+ each$a(editor.plugins, function (p) {
+ if (p.execCommand && p.execCommand(command, ui, value)) {
+ editor.fire('ExecCommand', {
+ command: command,
+ ui: ui,
+ value: value
+ });
+ state = true;
+ return false;
+ }
+ });
+ if (state) {
+ return state;
+ }
+ if (editor.theme && editor.theme.execCommand && editor.theme.execCommand(command, ui, value)) {
+ editor.fire('ExecCommand', {
+ command: command,
+ ui: ui,
+ value: value
+ });
+ return true;
+ }
+ try {
+ state = editor.getDoc().execCommand(command, ui, value);
+ } catch (ex) {
+ }
+ if (state) {
+ editor.fire('ExecCommand', {
+ command: command,
+ ui: ui,
+ value: value
+ });
+ return true;
+ }
+ return false;
+ };
+ var queryCommandState = function (command) {
+ var func;
+ if (editor.quirks.isHidden() || editor.removed) {
+ return;
+ }
+ command = command.toLowerCase();
+ if (func = commands.state[command]) {
+ return func(command);
+ }
+ try {
+ return editor.getDoc().queryCommandState(command);
+ } catch (ex) {
+ }
+ return false;
+ };
+ var queryCommandValue = function (command) {
+ var func;
+ if (editor.quirks.isHidden() || editor.removed) {
+ return;
+ }
+ command = command.toLowerCase();
+ if (func = commands.value[command]) {
+ return func(command);
+ }
+ try {
+ return editor.getDoc().queryCommandValue(command);
+ } catch (ex) {
+ }
+ };
+ var addCommands = function (commandList, type) {
+ type = type || 'exec';
+ each$a(commandList, function (callback, command) {
+ each$a(command.toLowerCase().split(','), function (command) {
+ commands[type][command] = callback;
+ });
+ });
+ };
+ var addCommand = function (command, callback, scope) {
+ command = command.toLowerCase();
+ commands.exec[command] = function (command, ui, value, args) {
+ return callback.call(scope || editor, ui, value, args);
+ };
+ };
+ var queryCommandSupported = function (command) {
+ command = command.toLowerCase();
+ if (commands.exec[command]) {
+ return true;
+ }
+ try {
+ return editor.getDoc().queryCommandSupported(command);
+ } catch (ex) {
+ }
+ return false;
+ };
+ var addQueryStateHandler = function (command, callback, scope) {
+ command = command.toLowerCase();
+ commands.state[command] = function () {
+ return callback.call(scope || editor);
+ };
+ };
+ var addQueryValueHandler = function (command, callback, scope) {
+ command = command.toLowerCase();
+ commands.value[command] = function () {
+ return callback.call(scope || editor);
+ };
+ };
+ var hasCustomCommand = function (command) {
+ command = command.toLowerCase();
+ return !!commands.exec[command];
+ };
+ extend$2(this, {
+ execCommand: execCommand,
+ queryCommandState: queryCommandState,
+ queryCommandValue: queryCommandValue,
+ queryCommandSupported: queryCommandSupported,
+ addCommands: addCommands,
+ addCommand: addCommand,
+ addQueryStateHandler: addQueryStateHandler,
+ addQueryValueHandler: addQueryValueHandler,
+ hasCustomCommand: hasCustomCommand
+ });
+ var execNativeCommand = function (command, ui, value) {
+ if (ui === undefined) {
+ ui = false;
+ }
+ if (value === undefined) {
+ value = null;
+ }
+ return editor.getDoc().execCommand(command, ui, value);
+ };
+ var isFormatMatch = function (name) {
+ return formatter.match(name);
+ };
+ var toggleFormat = function (name, value) {
+ formatter.toggle(name, value ? { value: value } : undefined);
+ editor.nodeChanged();
+ };
+ var storeSelection = function (type) {
+ bookmark = selection.getBookmark(type);
+ };
+ var restoreSelection = function () {
+ selection.moveToBookmark(bookmark);
+ };
+ addCommands({
+ 'mceResetDesignMode,mceBeginUndoLevel': function () {
+ },
+ 'mceEndUndoLevel,mceAddUndoLevel': function () {
+ editor.undoManager.add();
+ },
+ 'Cut,Copy,Paste': function (command) {
+ var doc = editor.getDoc();
+ var failed;
+ try {
+ 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 (selection.isCollapsed()) {
+ var elm = editor.dom.getParent(editor.selection.getStart(), 'a');
+ if (elm) {
+ editor.dom.remove(elm, true);
+ }
+ return;
+ }
+ formatter.remove('link');
+ },
+ 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone': function (command) {
+ var align = command.substring(7);
+ if (align === 'full') {
+ align = 'justify';
+ }
+ each$a('left,center,right,justify'.split(','), function (name) {
+ if (align !== name) {
+ formatter.remove('align' + name);
+ }
+ });
+ if (align !== 'none') {
+ toggleFormat('align' + align);
+ }
+ },
+ 'InsertUnorderedList,InsertOrderedList': function (command) {
+ var listElm, listParent;
+ execNativeCommand(command);
+ listElm = dom.getParent(selection.getNode(), 'ol,ul');
+ if (listElm) {
+ listParent = listElm.parentNode;
+ if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {
+ storeSelection();
+ dom.split(listParent, listElm);
+ restoreSelection();
+ }
+ }
+ },
+ 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {
+ toggleFormat(command);
+ },
+ 'ForeColor,HiliteColor': function (command, ui, value) {
+ toggleFormat(command, value);
+ },
+ 'FontName': function (command, ui, value) {
+ fontNameAction(editor, value);
+ },
+ 'FontSize': function (command, ui, value) {
+ fontSizeAction(editor, value);
+ },
+ 'RemoveFormat': function (command) {
+ formatter.remove(command);
+ },
+ 'mceBlockQuote': function () {
+ toggleFormat('blockquote');
+ },
+ 'FormatBlock': function (command, ui, value) {
+ return toggleFormat(value || 'p');
+ },
+ 'mceCleanup': function () {
+ var bookmark = selection.getBookmark();
+ editor.setContent(editor.getContent());
+ selection.moveToBookmark(bookmark);
+ },
+ 'mceRemoveNode': function (command, ui, value) {
+ var node = value || selection.getNode();
+ if (node !== editor.getBody()) {
+ storeSelection();
+ editor.dom.remove(node, true);
+ restoreSelection();
+ }
+ },
+ 'mceSelectNodeDepth': function (command, ui, value) {
+ var counter = 0;
+ dom.getParent(selection.getNode(), function (node) {
+ if (node.nodeType === 1 && counter++ === value) {
+ selection.select(node);
+ return false;
+ }
+ }, editor.getBody());
+ },
+ 'mceSelectNode': function (command, ui, value) {
+ selection.select(value);
+ },
+ 'mceInsertContent': function (command, ui, value) {
+ InsertContent.insertAtCaret(editor, value);
+ },
+ 'mceInsertRawHTML': function (command, ui, value) {
+ selection.setContent('tiny_mce_marker');
+ var content = editor.getContent();
+ editor.setContent(content.replace(/tiny_mce_marker/g, function () {
+ return value;
+ }));
+ },
+ 'mceToggleFormat': function (command, ui, value) {
+ toggleFormat(value);
+ },
+ 'mceSetContent': function (command, ui, value) {
+ editor.setContent(value);
+ },
+ 'Indent,Outdent': function (command) {
+ handle(editor, command);
+ },
+ 'mceRepaint': function () {
+ },
+ '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, selection.getContent({ format: 'text' })));
+ },
+ 'mceInsertLink': function (command, ui, value) {
+ var anchor;
+ if (typeof value === 'string') {
+ value = { href: value };
+ }
+ anchor = dom.getParent(selection.getNode(), 'a');
+ value.href = value.href.replace(' ', '%20');
+ if (!anchor || !value.href) {
+ formatter.remove('link');
+ }
+ if (value.href) {
+ formatter.apply('link', value, anchor);
+ }
+ },
+ 'selectAll': function () {
+ var editingHost = dom.getParent(selection.getStart(), NodeType.isContentEditableTrue);
+ if (editingHost) {
+ var rng = dom.createRng();
+ rng.selectNodeContents(editingHost);
+ selection.setRng(rng);
+ }
+ },
+ 'delete': function () {
+ DeleteCommands.deleteCommand(editor);
+ },
+ 'forwardDelete': function () {
+ DeleteCommands.forwardDeleteCommand(editor);
+ },
+ 'mceNewDocument': function () {
+ editor.setContent('');
+ },
+ 'InsertLineBreak': function (command, ui, value) {
+ InsertBr.insert(editor, value);
+ return true;
+ }
+ });
+ var alignStates = function (name) {
+ return function () {
+ var nodes = selection.isCollapsed() ? [dom.getParent(selection.getNode(), dom.isBlock)] : selection.getSelectedBlocks();
+ var matches = map$3(nodes, function (node) {
+ return !!formatter.matchNode(node, name);
+ });
+ return inArray$2(matches, true) !== -1;
+ };
+ };
+ addCommands({
+ 'JustifyLeft': alignStates('alignleft'),
+ 'JustifyCenter': alignStates('aligncenter'),
+ 'JustifyRight': alignStates('alignright'),
+ 'JustifyFull': alignStates('alignjustify'),
+ 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {
+ return isFormatMatch(command);
+ },
+ 'mceBlockQuote': function () {
+ return isFormatMatch('blockquote');
+ },
+ 'Outdent': function () {
+ var node;
+ if (settings.inline_styles) {
+ if ((node = dom.getParent(selection.getStart(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) {
+ return true;
+ }
+ if ((node = dom.getParent(selection.getEnd(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) {
+ return true;
+ }
+ }
+ return queryCommandState('InsertUnorderedList') || queryCommandState('InsertOrderedList') || !settings.inline_styles && !!dom.getParent(selection.getNode(), 'BLOCKQUOTE');
+ },
+ 'InsertUnorderedList,InsertOrderedList': function (command) {
+ var list = dom.getParent(selection.getNode(), 'ul,ol');
+ return list && (command === 'insertunorderedlist' && list.tagName === 'UL' || command === 'insertorderedlist' && list.tagName === 'OL');
+ }
+ }, 'state');
+ addCommands({
+ Undo: function () {
+ editor.undoManager.undo();
+ },
+ Redo: function () {
+ editor.undoManager.redo();
+ }
+ });
+ addQueryValueHandler('FontName', function () {
+ return fontNameQuery(editor);
+ }, this);
+ addQueryValueHandler('FontSize', function () {
+ return fontSizeQuery(editor);
+ }, this);
+ }
+
+ 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 contextmenu dragstart dragend dragover ' + 'draggesture dragdrop drop drag submit ' + 'compositionstart compositionend compositionupdate touchstart touchmove touchend', ' ');
+ var Dispatcher = function (settings) {
+ var self = this;
+ var scope, bindings = {}, toggleEvent;
+ var returnFalse = function () {
+ return false;
+ };
+ var returnTrue = function () {
+ return true;
+ };
+ settings = settings || {};
+ scope = settings.scope || self;
+ toggleEvent = settings.toggleEvent || returnFalse;
+ var fire = function (name, args) {
+ var handlers, i, l, callback;
+ name = name.toLowerCase();
+ args = args || {};
+ args.type = name;
+ if (!args.target) {
+ args.target = scope;
+ }
+ if (!args.preventDefault) {
+ args.preventDefault = function () {
+ args.isDefaultPrevented = returnTrue;
+ };
+ args.stopPropagation = function () {
+ args.isPropagationStopped = returnTrue;
+ };
+ args.stopImmediatePropagation = function () {
+ args.isImmediatePropagationStopped = returnTrue;
+ };
+ args.isDefaultPrevented = returnFalse;
+ args.isPropagationStopped = returnFalse;
+ args.isImmediatePropagationStopped = returnFalse;
+ }
+ if (settings.beforeFire) {
+ settings.beforeFire(args);
+ }
+ handlers = bindings[name];
+ if (handlers) {
+ for (i = 0, l = handlers.length; i < l; i++) {
+ callback = handlers[i];
+ if (callback.once) {
+ off(name, callback.func);
+ }
+ if (args.isImmediatePropagationStopped()) {
+ args.stopPropagation();
+ return args;
+ }
+ if (callback.func.call(scope, args) === false) {
+ args.preventDefault();
+ return args;
+ }
+ }
+ }
+ return args;
+ };
+ var on = function (name, callback, prepend, extra) {
+ var handlers, names, i;
+ if (callback === false) {
+ callback = returnFalse;
+ }
+ if (callback) {
+ callback = { func: callback };
+ if (extra) {
+ Tools.extend(callback, extra);
+ }
+ names = name.toLowerCase().split(' ');
+ i = names.length;
+ while (i--) {
+ name = names[i];
+ handlers = bindings[name];
+ if (!handlers) {
+ handlers = bindings[name] = [];
+ toggleEvent(name, true);
+ }
+ if (prepend) {
+ handlers.unshift(callback);
+ } else {
+ handlers.push(callback);
+ }
+ }
+ }
+ return self;
+ };
+ var off = function (name, callback) {
+ var i, handlers, bindingName, names, hi;
+ if (name) {
+ names = name.toLowerCase().split(' ');
+ i = names.length;
+ while (i--) {
+ name = names[i];
+ handlers = bindings[name];
+ if (!name) {
+ for (bindingName in bindings) {
+ toggleEvent(bindingName, false);
+ delete bindings[bindingName];
+ }
+ return self;
+ }
+ if (handlers) {
+ if (!callback) {
+ handlers.length = 0;
+ } else {
+ hi = handlers.length;
+ while (hi--) {
+ if (handlers[hi].func === callback) {
+ handlers = handlers.slice(0, hi).concat(handlers.slice(hi + 1));
+ bindings[name] = handlers;
+ }
+ }
+ }
+ if (!handlers.length) {
+ toggleEvent(name, false);
+ delete bindings[name];
+ }
+ }
+ }
+ } else {
+ for (name in bindings) {
+ toggleEvent(name, false);
+ }
+ bindings = {};
+ }
+ return self;
+ };
+ var once = function (name, callback, prepend) {
+ return on(name, callback, prepend, { once: true });
+ };
+ var has = function (name) {
+ name = name.toLowerCase();
+ return !(!bindings[name] || bindings[name].length === 0);
+ };
+ self.fire = fire;
+ self.on = on;
+ self.off = off;
+ self.once = once;
+ self.has = has;
+ };
+ Dispatcher.isNative = function (name) {
+ return !!nativeEvents[name.toLowerCase()];
+ };
+
+ var getEventDispatcher = function (obj) {
+ if (!obj._eventDispatcher) {
+ obj._eventDispatcher = new Dispatcher({
+ scope: obj,
+ toggleEvent: function (name, state) {
+ if (Dispatcher.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') {
+ return args;
+ }
+ args = getEventDispatcher(self).fire(name, args, bubble);
+ if (bubble !== false && self.parent) {
+ var parent = self.parent();
+ while (parent && !args.isPropagationStopped()) {
+ parent.fire(name, args, false);
+ parent = parent.parent();
+ }
+ }
+ return args;
+ },
+ 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 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 fireSwitchMode = function (editor, mode) {
+ return editor.fire('SwitchMode', { mode: mode });
+ };
+ var fireObjectResizeStart = function (editor, target, width, height) {
+ editor.fire('ObjectResizeStart', {
+ target: target,
+ width: width,
+ height: height
+ });
+ };
+ var fireObjectResized = function (editor, target, width, height) {
+ editor.fire('ObjectResized', {
+ target: target,
+ width: width,
+ height: height
+ });
+ };
+ var Events = {
+ firePreProcess: firePreProcess,
+ firePostProcess: firePostProcess,
+ fireRemove: fireRemove,
+ fireSwitchMode: fireSwitchMode,
+ fireObjectResizeStart: fireObjectResizeStart,
+ fireObjectResized: fireObjectResized
+ };
+
+ var setEditorCommandState = function (editor, cmd, state) {
+ try {
+ editor.getDoc().execCommand(cmd, false, state);
+ } catch (ex) {
+ }
+ };
+ var toggleClass = function (elm, cls, state) {
+ if (has$2(elm, cls) && state === false) {
+ remove$5(elm, cls);
+ } else if (state) {
+ add$2(elm, cls);
+ }
+ };
+ var toggleReadOnly = function (editor, state) {
+ toggleClass(Element$$1.fromDom(editor.getBody()), 'mce-content-readonly', state);
+ if (state) {
+ editor.selection.controlSelection.hideResizeRect();
+ editor.readonly = true;
+ editor.getBody().contentEditable = 'false';
+ } else {
+ editor.readonly = false;
+ editor.getBody().contentEditable = 'true';
+ setEditorCommandState(editor, 'StyleWithCSS', false);
+ setEditorCommandState(editor, 'enableInlineTableEditing', false);
+ setEditorCommandState(editor, 'enableObjectResizing', false);
+ editor.focus();
+ editor.nodeChanged();
+ }
+ };
+ var setMode = function (editor, mode) {
+ if (mode === getMode(editor)) {
+ return;
+ }
+ if (editor.initialized) {
+ toggleReadOnly(editor, mode === 'readonly');
+ } else {
+ editor.on('init', function () {
+ toggleReadOnly(editor, mode === 'readonly');
+ });
+ }
+ Events.fireSwitchMode(editor, mode);
+ };
+ var getMode = function (editor) {
+ return editor.readonly ? 'readonly' : 'design';
+ };
+ var isReadOnly = function (editor) {
+ return editor.readonly === true;
+ };
+
+ var DOM$1 = DOMUtils$1.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;
+ }
+ if (editor.settings.event_root) {
+ if (!editor.eventRoot) {
+ editor.eventRoot = DOM$1.select(editor.settings.event_root)[0];
+ }
+ return editor.eventRoot;
+ }
+ return editor.getBody();
+ };
+ var isListening = function (editor) {
+ return !editor.hidden && !editor.readonly;
+ };
+ var fireEvent = function (editor, eventName, e) {
+ if (isListening(editor)) {
+ editor.fire(eventName, e);
+ } else if (isReadOnly(editor)) {
+ e.preventDefault();
+ }
+ };
+ var bindEventDelegate = function (editor, eventName) {
+ var eventRootElm, delegate;
+ if (!editor.delegates) {
+ editor.delegates = {};
+ }
+ if (editor.delegates[eventName] || editor.removed) {
+ return;
+ }
+ eventRootElm = getEventTarget(editor, eventName);
+ if (editor.settings.event_root) {
+ if (!customEventRootDelegates) {
+ customEventRootDelegates = {};
+ editor.editorManager.on('removeEditor', function () {
+ var name;
+ if (!editor.editorManager.activeEditor) {
+ if (customEventRootDelegates) {
+ for (name in customEventRootDelegates) {
+ 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$1.isChildOf(target, body)) {
+ fireEvent(editors[i], eventName, e);
+ }
+ }
+ };
+ customEventRootDelegates[eventName] = delegate;
+ DOM$1.bind(eventRootElm, eventName, delegate);
+ } else {
+ delegate = function (e) {
+ fireEvent(editor, eventName, e);
+ };
+ DOM$1.bind(eventRootElm, eventName, delegate);
+ editor.delegates[eventName] = delegate;
+ }
+ };
+ var EditorObservable = {
+ 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;
+ var name;
+ if (self.delegates) {
+ for (name in self.delegates) {
+ self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);
+ }
+ 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());
+ }
+ }
+ };
+ EditorObservable = Tools.extend({}, Observable, EditorObservable);
+ var EditorObservable$1 = EditorObservable;
+
+ var each$b = Tools.each, explode$2 = Tools.explode;
+ var keyCodeLookup = {
+ f9: 120,
+ f10: 121,
+ f11: 122
+ };
+ var modifierNames = Tools.makeMap('alt,ctrl,shift,meta,access');
+ function Shortcuts (editor) {
+ var self = this;
+ var shortcuts = {};
+ var pendingPatterns = [];
+ var parseShortcut = function (pattern) {
+ var id, key;
+ var shortcut = {};
+ each$b(explode$2(pattern, '+'), 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);
+ }
+ }
+ });
+ 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 createShortcut = function (pattern, desc, cmdFunc, scope) {
+ var shortcuts;
+ shortcuts = Tools.map(explode$2(pattern, '>'), parseShortcut);
+ shortcuts[shortcuts.length - 1] = Tools.extend(shortcuts[shortcuts.length - 1], {
+ func: cmdFunc,
+ scope: scope || editor
+ });
+ return Tools.extend(shortcuts[0], {
+ desc: editor.translate(desc),
+ subpatterns: shortcuts.slice(1)
+ });
+ };
+ var hasModifier = function (e) {
+ return e.altKey || e.ctrlKey || e.metaKey;
+ };
+ var isFunctionKey = function (e) {
+ return e.type === 'keydown' && e.keyCode >= 112 && e.keyCode <= 123;
+ };
+ var 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;
+ };
+ var executeShortcutAction = function (shortcut) {
+ return shortcut.func ? shortcut.func.call(shortcut.scope) : null;
+ };
+ editor.on('keyup keypress keydown', function (e) {
+ if ((hasModifier(e) || isFunctionKey(e)) && !e.isDefaultPrevented()) {
+ each$b(shortcuts, function (shortcut) {
+ if (matchShortcut(e, shortcut)) {
+ pendingPatterns = shortcut.subpatterns.slice(0);
+ if (e.type === 'keydown') {
+ executeShortcutAction(shortcut);
+ }
+ return true;
+ }
+ });
+ if (matchShortcut(e, pendingPatterns[0])) {
+ if (pendingPatterns.length === 1) {
+ if (e.type === 'keydown') {
+ executeShortcutAction(pendingPatterns[0]);
+ }
+ }
+ pendingPatterns.shift();
+ }
+ }
+ });
+ self.add = function (pattern, desc, cmdFunc, scope) {
+ var cmd;
+ cmd = cmdFunc;
+ if (typeof cmdFunc === 'string') {
+ cmdFunc = function () {
+ editor.execCommand(cmd, false, null);
+ };
+ } else if (Tools.isArray(cmd)) {
+ cmdFunc = function () {
+ editor.execCommand(cmd[0], cmd[1], cmd[2]);
+ };
+ }
+ each$b(explode$2(Tools.trim(pattern.toLowerCase())), function (pattern) {
+ var shortcut = createShortcut(pattern, desc, cmdFunc, scope);
+ shortcuts[shortcut.id] = shortcut;
+ });
+ return true;
+ };
+ self.remove = function (pattern) {
+ var shortcut = createShortcut(pattern);
+ if (shortcuts[shortcut.id]) {
+ delete shortcuts[shortcut.id];
+ return true;
+ }
+ return false;
+ };
+ }
+
+ var hasFocus = function (element) {
+ var doc = owner(element).dom();
+ return element.dom() === doc.activeElement;
+ };
+ var active = function (_doc) {
+ var doc = _doc !== undefined ? _doc.dom() : document;
+ return Option.from(doc.activeElement).map(Element$$1.fromDom);
+ };
+ var search = function (element) {
+ return active(owner(element)).filter(function (e) {
+ return element.dom().contains(e.dom());
+ });
+ };
+
+ 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 ? Option.from(getNode(rng.startContainer, rng.startOffset)).map(Element$$1.fromDom) : Option.none();
+ };
+ var getFocusInElement = function (root, rng) {
+ return getCollapsedNode(rng).bind(function (node) {
+ if (isTableSection(node)) {
+ return Option.some(node);
+ } else if (contains$3(root, node) === false) {
+ return Option.some(root);
+ } else {
+ return Option.none();
+ }
+ });
+ };
+ var normalizeSelection = function (editor, rng) {
+ getFocusInElement(Element$$1.fromDom(editor.getBody()), rng).bind(function (elm) {
+ return CaretFinder.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(Element$$1.fromDom(editor.iframeElement));
+ };
+ var hasInlineFocus = function (editor) {
+ var rawBody = editor.getBody();
+ return rawBody && hasElementFocus(Element$$1.fromDom(rawBody));
+ };
+ var hasFocus$1 = function (editor) {
+ return editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);
+ };
+ var focusEditor = function (editor) {
+ var selection = editor.selection, contentEditable = editor.settings.content_editable;
+ var body = editor.getBody();
+ var rng = selection.getRng();
+ editor.quirks.refreshContentEditable();
+ var contentEditableHost = getContentEditableHost(editor, selection.getNode());
+ if (editor.$.contains(body, contentEditableHost)) {
+ focusBody(contentEditableHost);
+ normalizeSelection(editor, rng);
+ activateEditor(editor);
+ return;
+ }
+ if (editor.bookmark !== undefined && hasFocus$1(editor) === false) {
+ SelectionBookmark.getRng(editor).each(function (bookmarkRng) {
+ editor.selection.setRng(bookmarkRng);
+ rng = bookmarkRng;
+ });
+ }
+ if (!contentEditable) {
+ if (!Env.opera) {
+ focusBody(body);
+ }
+ editor.getWin().focus();
+ }
+ if (Env.gecko || contentEditable) {
+ 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 EditorFocus = {
+ focus: focus$1,
+ hasFocus: hasFocus$1
+ };
+
+ var getProp = function (propName, elm) {
+ var rawElm = elm.dom();
+ return rawElm[propName];
+ };
+ var getComputedSizeProp = function (propName, elm) {
+ return parseInt(get$2(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 = Element$$1.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 Option.from(node).map(Element$$1.fromDom);
+ };
+ var isEditorAttachedToDom = function (editor) {
+ var rawContainer = editor.inline ? editor.getBody() : editor.getContentAreaContainer();
+ return fromDomSafe(rawContainer).map(function (container) {
+ return contains$3(owner(container), container);
+ }).getOr(false);
+ };
+ var EditorView = {
+ isXYInContentArea: isXYInContentArea,
+ isEditorAttachedToDom: isEditorAttachedToDom
+ };
+
+ function NotificationManagerImpl () {
+ var unimplemented = function () {
+ throw new Error('Theme did not provide a NotificationManager implementation.');
+ };
+ return {
+ open: unimplemented,
+ close: unimplemented,
+ reposition: unimplemented,
+ getArgs: unimplemented
+ };
+ }
+
+ function NotificationManager (editor) {
+ var notifications = [];
+ var getImplementation = function () {
+ var theme = editor.theme;
+ return theme && theme.getNotificationManagerImpl ? theme.getNotificationManagerImpl() : NotificationManagerImpl();
+ };
+ var getTopNotification = function () {
+ return Option.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 (args) {
+ if (editor.removed || !EditorView.isEditorAttachedToDom(editor)) {
+ return;
+ }
+ return find(notifications, function (notification) {
+ return isEqual(getImplementation().getArgs(notification), args);
+ }).getOrThunk(function () {
+ editor.editorManager.setActive(editor);
+ var notification = getImplementation().open(args, function () {
+ closeNotification(notification);
+ reposition();
+ });
+ addNotification(notification);
+ reposition();
+ 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 = editor.settings.service_message;
+ if (serviceMessage) {
+ open({
+ text: serviceMessage,
+ type: 'warning',
+ timeout: 0,
+ icon: ''
+ });
+ }
+ });
+ editor.on('ResizeEditor ResizeWindow', 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
+ };
+ }
+
+ function WindowManagerImpl () {
+ var unimplemented = function () {
+ throw new Error('Theme did not provide a WindowManager implementation.');
+ };
+ return {
+ open: unimplemented,
+ alert: unimplemented,
+ confirm: unimplemented,
+ close: unimplemented,
+ getParams: unimplemented,
+ setParams: unimplemented
+ };
+ }
+
+ function WindowManager (editor) {
+ var windows = [];
+ var getImplementation = function () {
+ var theme = editor.theme;
+ return theme && theme.getWindowManagerImpl ? theme.getWindowManagerImpl() : WindowManagerImpl();
+ };
+ var funcBind = function (scope, f) {
+ return function () {
+ return f ? f.apply(scope, arguments) : undefined;
+ };
+ };
+ var fireOpenEvent = function (win) {
+ editor.fire('OpenWindow', { win: win });
+ };
+ var fireCloseEvent = function (win) {
+ editor.fire('CloseWindow', { win: win });
+ };
+ var addWindow = function (win) {
+ windows.push(win);
+ fireOpenEvent(win);
+ };
+ var closeWindow = function (win) {
+ findIndex(windows, function (otherWindow) {
+ return otherWindow === win;
+ }).each(function (index) {
+ windows.splice(index, 1);
+ fireCloseEvent(win);
+ if (windows.length === 0) {
+ editor.focus();
+ }
+ });
+ };
+ var getTopWindow = function () {
+ return Option.from(windows[windows.length - 1]);
+ };
+ var open = function (args, params) {
+ editor.editorManager.setActive(editor);
+ SelectionBookmark.store(editor);
+ var win = getImplementation().open(args, params, closeWindow);
+ addWindow(win);
+ return win;
+ };
+ var alert = function (message, callback, scope) {
+ var win = getImplementation().alert(message, funcBind(scope ? scope : this, callback), closeWindow);
+ addWindow(win);
+ };
+ var confirm = function (message, callback, scope) {
+ var win = getImplementation().confirm(message, funcBind(scope ? scope : this, callback), closeWindow);
+ addWindow(win);
+ };
+ var close = function () {
+ getTopWindow().each(function (win) {
+ getImplementation().close(win);
+ closeWindow(win);
+ });
+ };
+ var getParams = function () {
+ return getTopWindow().map(getImplementation().getParams).getOr(null);
+ };
+ var setParams = function (params) {
+ getTopWindow().each(function (win) {
+ getImplementation().setParams(win, params);
+ });
+ };
+ var getWindows = function () {
+ return windows;
+ };
+ editor.on('remove', function () {
+ each(windows.slice(0), function (win) {
+ getImplementation().close(win);
+ });
+ });
+ return {
+ windows: windows,
+ open: open,
+ alert: alert,
+ confirm: confirm,
+ close: close,
+ getParams: getParams,
+ setParams: setParams,
+ getWindows: getWindows
+ };
+ }
+
+ var PluginManager = AddOnManager.PluginManager;
+ var resolvePluginName = function (targetUrl, suffix) {
+ for (var name$$1 in PluginManager.urls) {
+ var matchUrl = PluginManager.urls[name$$1] + '/plugin' + suffix + '.js';
+ if (matchUrl === targetUrl) {
+ return name$$1;
+ }
+ }
+ return null;
+ };
+ var pluginUrlToMessage = function (editor, url) {
+ var plugin = resolvePluginName(url, editor.suffix);
+ return plugin ? 'Failed to load plugin: ' + plugin + ' from url ' + url : 'Failed to load plugin url: ' + url;
+ };
+ 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, 'Failed to upload image: ' + message);
+ };
+ var pluginLoadError = function (editor, url) {
+ displayError(editor, pluginUrlToMessage(editor, url));
+ };
+ var initError = function (message) {
+ var x = [];
+ for (var _i = 1; _i < arguments.length; _i++) {
+ x[_i - 1] = arguments[_i];
+ }
+ var console$$1 = window.console;
+ if (console$$1) {
+ if (console$$1.error) {
+ console$$1.error.apply(console$$1, arguments);
+ } else {
+ console$$1.log.apply(console$$1, arguments);
+ }
+ }
+ };
+ var ErrorReporter = {
+ pluginLoadError: pluginLoadError,
+ uploadError: uploadError,
+ displayError: displayError,
+ initError: initError
+ };
+
+ var PluginManager$1 = AddOnManager.PluginManager;
+
+ var ThemeManager = AddOnManager.ThemeManager;
+
+ function XMLHttpRequest () {
+ var f = Global$1.getOrDie('XMLHttpRequest');
+ return new f();
+ }
+
+ function Uploader (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, formData;
+ xhr = 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 () {
+ var json;
+ if (xhr.status < 200 || xhr.status >= 300) {
+ failure('HTTP Error: ' + xhr.status);
+ return;
+ }
+ json = JSON.parse(xhr.responseText);
+ if (!json || typeof json.location !== 'string') {
+ failure('Invalid JSON: ' + xhr.responseText);
+ return;
+ }
+ success(pathJoin(settings.basePath, json.location));
+ };
+ 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, error) {
+ return {
+ url: '',
+ blobInfo: blobInfo,
+ status: false,
+ error: error
+ };
+ };
+ 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;
+ var noop = function () {
+ };
+ 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) {
+ closeNotification_1();
+ uploadStatus.removeFailed(blobInfo.blobUri());
+ resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, error));
+ resolve(handlerFailure(blobInfo, error));
+ };
+ progress = function (percent) {
+ if (percent < 0 || percent > 100) {
+ return;
+ }
+ if (!notification) {
+ notification = openNotification();
+ }
+ notification.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 };
+ }
+
+ function FileReader () {
+ var f = Global$1.getOrDie('FileReader');
+ return new f();
+ }
+
+ function Uint8Array (arr) {
+ var f = Global$1.getOrDie('Uint8Array');
+ return new f(arr);
+ }
+
+ var requestAnimationFrame$1 = function (callback) {
+ var f = Global$1.getOrDie('requestAnimationFrame');
+ f(callback);
+ };
+ var atob = function (base64) {
+ var f = Global$1.getOrDie('atob');
+ return f(base64);
+ };
+ var Window = {
+ atob: atob,
+ requestAnimationFrame: requestAnimationFrame$1
+ };
+
+ 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 = XMLHttpRequest();
+ xhr.open('GET', url, true);
+ xhr.responseType = 'blob';
+ xhr.onload = function () {
+ if (this.status === 200) {
+ resolve(this.response);
+ } else {
+ rejectWithError();
+ }
+ };
+ xhr.onerror = rejectWithError;
+ xhr.send();
+ } catch (ex) {
+ rejectWithError();
+ }
+ });
+ };
+ var parseDataUri = function (uri) {
+ var type, matches;
+ var uriParts = decodeURIComponent(uri).split(',');
+ matches = /data:([^;]+)/.exec(uriParts[0]);
+ if (matches) {
+ type = matches[1];
+ }
+ return {
+ type: type,
+ data: uriParts[1]
+ };
+ };
+ var dataUriToBlob = function (uri) {
+ return new promiseObj(function (resolve) {
+ var str, arr, i;
+ var uriParts = parseDataUri(uri);
+ try {
+ str = Window.atob(uriParts.data);
+ } catch (e) {
+ resolve(new Blob([]));
+ return;
+ }
+ arr = Uint8Array(str.length);
+ for (i = 0; i < arr.length; i++) {
+ arr[i] = str.charCodeAt(i);
+ }
+ resolve(new Blob([arr], { type: uriParts.type }));
+ });
+ };
+ 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 = FileReader();
+ reader.onloadend = function () {
+ resolve(reader.result);
+ };
+ reader.readAsDataURL(blob);
+ });
+ };
+ var Conversions = {
+ uriToBlob: uriToBlob,
+ blobToDataUri: blobToDataUri,
+ parseDataUri: parseDataUri
+ };
+
+ 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 {
+ Conversions.uriToBlob(img.src).then(function (blob) {
+ Conversions.blobToDataUri(blob).then(function (dataUri) {
+ base64 = Conversions.parseDataUri(dataUri).data;
+ blobInfo = blobCache.create(uniqueId(), blob, base64);
+ blobCache.add(blobInfo);
+ resolve({
+ image: img,
+ blobInfo: blobInfo
+ });
+ });
+ }, function (err) {
+ reject(err);
+ });
+ }
+ return;
+ }
+ base64 = Conversions.parseDataUri(img.src).data;
+ blobInfo = blobCache.findFirst(function (cachedBlobInfo) {
+ return cachedBlobInfo.base64() === base64;
+ });
+ if (blobInfo) {
+ resolve({
+ image: img,
+ blobInfo: blobInfo
+ });
+ } else {
+ Conversions.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')) : [];
+ };
+ function ImageScanner (uploadStatus, blobCache) {
+ var cachedPromises = {};
+ var findAll = function (elm, predicate) {
+ var images;
+ if (!predicate) {
+ predicate = constant(true);
+ }
+ 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]) {
+ 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 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 Uuid = { uuid: uuid };
+
+ function BlobCache () {
+ var cache = [];
+ var mimeToExt = function (mime) {
+ var mimes = {
+ 'image/jpeg': 'jpg',
+ 'image/jpg': 'jpg',
+ 'image/gif': 'gif',
+ 'image/png': 'png'
+ };
+ return mimes[mime.toLowerCase()] || 'dat';
+ };
+ var create = function (o, blob, base64, filename) {
+ if (isString(o)) {
+ var id = o;
+ return toBlobInfo({
+ id: id,
+ name: filename,
+ blob: blob,
+ base64: base64
+ });
+ } else if (isObject(o)) {
+ return toBlobInfo(o);
+ } else {
+ throw new Error('Unknown input type');
+ }
+ };
+ var toBlobInfo = function (o) {
+ var id, name;
+ if (!o.blob || !o.base64) {
+ throw new Error('blob and base64 representations of the image are required for BlobInfo to be created');
+ }
+ id = o.id || Uuid.uuid('blobid');
+ name = o.name || id;
+ return {
+ id: constant(id),
+ name: constant(name),
+ filename: constant(name + '.' + mimeToExt(o.blob.type)),
+ blob: constant(o.blob),
+ base64: constant(o.base64),
+ blobUri: constant(o.blobUri || URL.createObjectURL(o.blob)),
+ uri: constant(o.uri)
+ };
+ };
+ var add = function (blobInfo) {
+ if (!get(blobInfo.id())) {
+ cache.push(blobInfo);
+ }
+ };
+ var get = function (id) {
+ return findFirst(function (cachedBlobInfo) {
+ return cachedBlobInfo.id() === id;
+ });
+ };
+ var findFirst = function (predicate) {
+ return filter(cache, predicate)[0];
+ };
+ var getByUri = function (blobUri) {
+ return findFirst(function (blobInfo) {
+ return blobInfo.blobUri() === blobUri;
+ });
+ };
+ 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,
+ findFirst: findFirst,
+ removeByUri: removeByUri,
+ destroy: destroy
+ };
+ }
+
+ function UploadStatus () {
+ 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
+ };
+ }
+
+ function EditorUpload (editor) {
+ var blobCache = BlobCache();
+ var uploader, imageScanner;
+ var uploadStatus = UploadStatus();
+ var urlFilters = [];
+ var aliveGuard = function (callback) {
+ return function (result) {
+ if (editor.selection) {
+ return callback(result);
+ }
+ return [];
+ };
+ };
+ var cacheInvalidator = function () {
+ return '?' + 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) {
+ content = replaceString(content, 'src="' + targetUrl + '"', 'src="' + replacementUrl + '"');
+ 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 openNotification = function () {
+ return editor.notificationManager.open({
+ text: editor.translate('Image uploading...'),
+ type: 'info',
+ timeout: -1,
+ progressBar: true
+ });
+ };
+ var replaceImageUri = function (image, resultUri) {
+ blobCache.removeByUri(image.src);
+ replaceUrlInUndoStack(image.src, resultUri);
+ editor.$(image).attr({
+ 'src': Settings.shouldReuseFileName(editor) ? resultUri + cacheInvalidator() : resultUri,
+ 'data-mce-src': editor.convertURL(resultUri, 'src')
+ });
+ };
+ var uploadImages = function (callback) {
+ if (!uploader) {
+ uploader = Uploader(uploadStatus, {
+ url: Settings.getImageUploadUrl(editor),
+ basePath: Settings.getImageUploadBasePath(editor),
+ credentials: Settings.getImagesUploadCredentials(editor),
+ handler: Settings.getImagesUploadHandler(editor)
+ });
+ }
+ return scanForImages().then(aliveGuard(function (imageInfos) {
+ var blobInfos;
+ blobInfos = map(imageInfos, function (imageInfo) {
+ return imageInfo.blobInfo;
+ });
+ return uploader.upload(blobInfos, openNotification).then(aliveGuard(function (result) {
+ var filteredResult = map(result, function (uploadInfo, index) {
+ var image = imageInfos[index].image;
+ if (uploadInfo.status && Settings.shouldReplaceBlobUris(editor)) {
+ replaceImageUri(image, uploadInfo.url);
+ } else if (uploadInfo.error) {
+ ErrorReporter.uploadError(editor, uploadInfo.error);
+ }
+ return {
+ element: image,
+ status: uploadInfo.status
+ };
+ });
+ if (callback) {
+ callback(filteredResult);
+ }
+ return filteredResult;
+ }));
+ }));
+ };
+ var uploadImagesAuto = function (callback) {
+ if (Settings.isAutomaticUploadsEnabled(editor)) {
+ return uploadImages(callback);
+ }
+ };
+ var isValidDataUriImage = function (imgElm) {
+ if (forall(urlFilters, function (filter$$1) {
+ return filter$$1(imgElm);
+ }) === false) {
+ return false;
+ }
+ if (imgElm.getAttribute('src').indexOf('data:') === 0) {
+ var dataImgFilter = Settings.getImagesDataImgFilter(editor);
+ return dataImgFilter(imgElm);
+ }
+ return true;
+ };
+ var addFilter = function (filter$$1) {
+ urlFilters.push(filter$$1);
+ };
+ 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') {
+ ErrorReporter.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 (Settings.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') {
+ 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 isBlockElement = function (blockElements, node) {
+ return blockElements.hasOwnProperty(node.nodeName);
+ };
+ var isValidTarget = function (blockElements, node) {
+ if (NodeType.isText(node)) {
+ return true;
+ } else if (NodeType.isElement(node)) {
+ return !isBlockElement(blockElements, node) && !Bookmarks.isBookmarkNode(node);
+ } else {
+ return false;
+ }
+ };
+ var hasBlockParent = function (blockElements, root, node) {
+ return exists(Parents.parents(Element$$1.fromDom(node), Element$$1.fromDom(root)), function (elm) {
+ return isBlockElement(blockElements, elm.dom());
+ });
+ };
+ var shouldRemoveTextNode = function (blockElements, node) {
+ if (NodeType.isText(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 settings = editor.settings, dom = editor.dom, selection = editor.selection;
+ var schema = editor.schema, blockElements = schema.getBlockElements();
+ var node = selection.getStart();
+ var rootNode = editor.getBody();
+ var rng;
+ var startContainer, startOffset, endContainer, endOffset, rootBlockNode;
+ var tempNode, wrapped, restoreSelection;
+ var rootNodeName, forcedRootBlock;
+ forcedRootBlock = settings.forced_root_block;
+ if (!node || !NodeType.isElement(node) || !forcedRootBlock) {
+ return;
+ }
+ rootNodeName = rootNode.nodeName.toLowerCase();
+ if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, node)) {
+ return;
+ }
+ rng = selection.getRng();
+ startContainer = rng.startContainer;
+ startOffset = rng.startOffset;
+ endContainer = rng.endContainer;
+ endOffset = rng.endOffset;
+ restoreSelection = EditorFocus.hasFocus(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, editor.settings.forced_root_block_attrs);
+ 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$2 = function (editor) {
+ if (editor.settings.forced_root_block) {
+ editor.on('NodeChange', curry(addRootBlocks, editor));
+ }
+ };
+ var ForceBlocks = { setup: setup$2 };
+
+ var getStartNode = function (rng) {
+ var sc = rng.startContainer, so = rng.startOffset;
+ if (NodeType.isText(sc)) {
+ return so === 0 ? Option.some(Element$$1.fromDom(sc)) : Option.none();
+ } else {
+ return Option.from(sc.childNodes[so]).map(Element$$1.fromDom);
+ }
+ };
+ var getEndNode = function (rng) {
+ var ec = rng.endContainer, eo = rng.endOffset;
+ if (NodeType.isText(ec)) {
+ return eo === ec.data.length ? Option.some(Element$$1.fromDom(ec)) : Option.none();
+ } else {
+ return Option.from(ec.childNodes[eo - 1]).map(Element$$1.fromDom);
+ }
+ };
+ var getFirstChildren = function (node) {
+ return firstChild(node).fold(constant([node]), function (child$$1) {
+ return [node].concat(getFirstChildren(child$$1));
+ });
+ };
+ var getLastChildren$1 = function (node) {
+ return lastChild(node).fold(constant([node]), function (child$$1) {
+ if (name(child$$1) === 'br') {
+ return prevSibling(child$$1).map(function (sibling) {
+ return [node].concat(getLastChildren$1(sibling));
+ }).getOr([]);
+ } else {
+ return [node].concat(getLastChildren$1(child$$1));
+ }
+ });
+ };
+ var hasAllContentsSelected = function (elm, rng) {
+ return liftN([
+ getStartNode(rng),
+ getEndNode(rng)
+ ], function (startNode, endNode) {
+ var start = find(getFirstChildren(elm), curry(eq, startNode));
+ var end = find(getLastChildren$1(elm), curry(eq, endNode));
+ return start.isSome() && end.isSome();
+ }).getOr(false);
+ };
+ var moveEndPoint$1 = function (dom, rng, node, start) {
+ var root = node, walker = new TreeWalker(node, root);
+ var nonEmptyElementsMap = dom.schema.getNonEmptyElements();
+ do {
+ if (node.nodeType === 3 && Tools.trim(node.nodeValue).length !== 0) {
+ if (start) {
+ rng.setStart(node, 0);
+ } else {
+ rng.setEnd(node, node.nodeValue.length);
+ }
+ return;
+ }
+ if (nonEmptyElementsMap[node.nodeName] && !/^(TD|TH)$/.test(node.nodeName)) {
+ if (start) {
+ rng.setStartBefore(node);
+ } else {
+ if (node.nodeName === 'BR') {
+ rng.setEndBefore(node);
+ } else {
+ rng.setEndAfter(node);
+ }
+ }
+ return;
+ }
+ if (Env.ie && Env.ie < 11 && dom.isBlock(node) && dom.isEmpty(node)) {
+ if (start) {
+ rng.setStart(node, 0);
+ } else {
+ rng.setEnd(node, 0);
+ }
+ 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;
+ };
+
+ function NodeChange (editor) {
+ var lastRng, lastPath = [];
+ var isSameElementPath = function (startElm) {
+ var i, currentPath;
+ currentPath = editor.$(startElm).parentsUntil(editor.getBody()).add(startElm);
+ if (currentPath.length === lastPath.length) {
+ for (i = currentPath.length; i >= 0; i--) {
+ if (currentPath[i] !== lastPath[i]) {
+ break;
+ }
+ }
+ if (i === -1) {
+ lastPath = currentPath;
+ return true;
+ }
+ }
+ lastPath = currentPath;
+ return false;
+ };
+ if (!('onselectionchange' in editor.getDoc())) {
+ editor.on('NodeChange Click MouseUp KeyUp Focus', function (e) {
+ var nativeRng, fakeRng;
+ nativeRng = editor.selection.getRng();
+ fakeRng = {
+ startContainer: nativeRng.startContainer,
+ startOffset: nativeRng.startOffset,
+ endContainer: nativeRng.endContainer,
+ endOffset: nativeRng.endOffset
+ };
+ if (e.type === 'nodechange' || !RangeCompare.isEq(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) && !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();
+ }
+ }
+ });
+ this.nodeChanged = function (args) {
+ var selection = editor.selection;
+ var node, parents, root;
+ if (editor.initialized && selection && !editor.settings.disable_nodechange && !editor.readonly) {
+ root = editor.getBody();
+ node = selection.getStart(true) || root;
+ if (node.ownerDocument !== editor.getDoc() || !editor.dom.isChildOf(node, root)) {
+ node = root;
+ }
+ parents = [];
+ editor.dom.getParent(node, function (node) {
+ if (node === root) {
+ return true;
+ }
+ parents.push(node);
+ });
+ args = args || {};
+ args.element = node;
+ args.parents = parents;
+ editor.fire('NodeChange', args);
+ }
+ };
+ }
+
+ var getAbsolutePosition = function (elm) {
+ var doc, docElem, win, clientRect;
+ clientRect = elm.getBoundingClientRect();
+ doc = elm.ownerDocument;
+ docElem = doc.documentElement;
+ 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 MousePosition = { calc: calc };
+
+ var isContentEditableFalse$6 = NodeType.isContentEditableFalse, isContentEditableTrue$3 = NodeType.isContentEditableTrue;
+ var isDraggable = function (rootElm, elm) {
+ return isContentEditableFalse$6(elm) && elm !== rootElm;
+ };
+ var isValidDropTarget = function (editor, targetElement, dragElement) {
+ if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) {
+ return false;
+ }
+ if (isContentEditableFalse$6(targetElement)) {
+ return false;
+ }
+ return true;
+ };
+ var cloneElement = function (elm) {
+ var cloneElm = elm.cloneNode(true);
+ cloneElm.removeAttribute('data-mce-selected');
+ return cloneElm;
+ };
+ var createGhost = function (editor, elm, width, height) {
+ var clonedElm = elm.cloneNode(true);
+ editor.dom.setStyles(clonedElm, {
+ width: width,
+ height: height
+ });
+ editor.dom.setAttrib(clonedElm, 'data-mce-selected', null);
+ var ghostElm = editor.dom.create('div', {
+ 'class': 'mce-drag-container',
+ 'data-mce-bogus': 'all',
+ 'unselectable': 'on',
+ 'contenteditable': 'false'
+ });
+ editor.dom.setStyles(ghostElm, {
+ position: 'absolute',
+ opacity: 0.5,
+ overflow: 'hidden',
+ border: 0,
+ padding: 0,
+ margin: 0,
+ width: width,
+ height: height
+ });
+ editor.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 hasDraggableElement = function (state) {
+ return state.element;
+ };
+ 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), Predicate.or(isContentEditableFalse$6, 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.element = ceElm;
+ state.screenX = e.screenX;
+ state.screenY = e.screenY;
+ state.maxX = (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2;
+ state.maxY = (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2;
+ state.relX = e.pageX - elmPos.x;
+ state.relY = e.pageY - elmPos.y;
+ state.width = ceElm.offsetWidth;
+ state.height = ceElm.offsetHeight;
+ state.ghost = createGhost(editor, ceElm, state.width, state.height);
+ }
+ }
+ };
+ };
+ var move$1 = function (state, editor) {
+ var throttledPlaceCaretAt = Delay.throttle(function (clientX, clientY) {
+ editor._selectionOverrides.hideFakeCaret();
+ editor.selection.placeCaretAt(clientX, clientY);
+ }, 0);
+ return function (e) {
+ var movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY));
+ if (hasDraggableElement(state) && !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, MousePosition.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) {
+ if (state.dragging) {
+ if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) {
+ var targetClone_1 = cloneElement(state.element);
+ var args = editor.fire('drop', {
+ targetClone: targetClone_1,
+ clientX: e.clientX,
+ clientY: e.clientY
+ });
+ if (!args.isDefaultPrevented()) {
+ targetClone_1 = args.targetClone;
+ editor.undoManager.transact(function () {
+ removeElement(state.element);
+ editor.insertContent(editor.dom.getOuterHTML(targetClone_1));
+ editor._selectionOverrides.hideFakeCaret();
+ });
+ }
+ }
+ }
+ removeDragState(state);
+ };
+ };
+ var stop$$1 = function (state, editor) {
+ return function () {
+ if (state.dragging) {
+ editor.fire('dragend');
+ }
+ removeDragState(state);
+ };
+ };
+ var removeDragState = function (state) {
+ state.dragging = false;
+ state.element = null;
+ removeElement(state.ghost);
+ };
+ var bindFakeDragEvents = function (editor) {
+ var state = {};
+ var pageDom, dragStartHandler, dragHandler, dropHandler, dragEndHandler, rootDocument;
+ pageDom = DOMUtils$1.DOM;
+ rootDocument = document;
+ dragStartHandler = start$1(state, editor);
+ dragHandler = move$1(state, editor);
+ dropHandler = drop(state, editor);
+ dragEndHandler = stop$$1(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$6(realTarget) || isContentEditableFalse$6(editor.dom.getContentEditableParent(realTarget))) {
+ e.preventDefault();
+ }
+ });
+ };
+ var init = function (editor) {
+ bindFakeDragEvents(editor);
+ blockIeDrop(editor);
+ };
+ var DragDropOverrides = { init: init };
+
+ var getNodeClientRects = function (node) {
+ var toArrayWithNode = function (clientRects) {
+ return map(clientRects, function (clientRect) {
+ clientRect = clone$2(clientRect);
+ clientRect.node = node;
+ return clientRect;
+ });
+ };
+ if (NodeType.isElement(node)) {
+ return toArrayWithNode(node.getClientRects());
+ }
+ if (NodeType.isText(node)) {
+ var rng = node.ownerDocument.createRange();
+ rng.setStart(node, 0);
+ rng.setEnd(node, node.data.length);
+ return toArrayWithNode(rng.getClientRects());
+ }
+ };
+ var getClientRects = function (node) {
+ return foldl(node, function (result, node) {
+ return result.concat(getNodeClientRects(node));
+ }, []);
+ };
+
+ var VDirection;
+ (function (VDirection) {
+ VDirection[VDirection['Up'] = -1] = 'Up';
+ VDirection[VDirection['Down'] = 1] = 'Down';
+ }(VDirection || (VDirection = {})));
+ var findUntil = 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, node;
+ var result = [];
+ var targetClientRect;
+ 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, ArrUtils.last(result))) {
+ line++;
+ }
+ clientRect.line = line;
+ if (predicateFn(clientRect)) {
+ return true;
+ }
+ result.push(clientRect);
+ }
+ };
+ targetClientRect = ArrUtils.last(caretPosition.getClientRects());
+ if (!targetClientRect) {
+ return result;
+ }
+ node = caretPosition.getNode();
+ add(node);
+ findUntil(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, targetClientRect;
+ var getClientRect = function (caretPosition) {
+ if (direction === 1) {
+ return ArrUtils.last(caretPosition.getClientRects());
+ }
+ return ArrUtils.last(caretPosition.getClientRects());
+ };
+ if (direction === 1) {
+ walkFn = caretWalker.next;
+ isBelowFn = isBelow;
+ isAboveFn = isAbove;
+ caretPosition = CaretPosition$1.after(node);
+ } else {
+ walkFn = caretWalker.prev;
+ isBelowFn = isAbove;
+ isAboveFn = isBelow;
+ caretPosition = CaretPosition$1.before(node);
+ }
+ targetClientRect = getClientRect(caretPosition);
+ do {
+ if (!caretPosition.isVisible()) {
+ continue;
+ }
+ clientRect = getClientRect(caretPosition);
+ if (isAboveFn(clientRect, targetClientRect)) {
+ continue;
+ }
+ if (result.length > 0 && isBelowFn(clientRect, ArrUtils.last(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$7 = NodeType.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 isInside = function (clientX, clientRect) {
+ return clientX >= clientRect.left && clientX <= clientRect.right;
+ };
+ var findClosestClientRect = function (clientRects, clientX) {
+ return ArrUtils.reduce(clientRects, function (oldClientRect, clientRect) {
+ var oldDistance, newDistance;
+ oldDistance = Math.min(distanceToRectLeft(oldClientRect, clientX), distanceToRectRight(oldClientRect, clientX));
+ newDistance = Math.min(distanceToRectLeft(clientRect, clientX), distanceToRectRight(clientRect, clientX));
+ if (isInside(clientX, clientRect)) {
+ return clientRect;
+ }
+ if (isInside(clientX, oldClientRect)) {
+ return oldClientRect;
+ }
+ if (newDistance === oldDistance && isContentEditableFalse$7(clientRect.node)) {
+ return clientRect;
+ }
+ if (newDistance < oldDistance) {
+ return clientRect;
+ }
+ return oldClientRect;
+ });
+ };
+ var walkUntil$1 = function (direction, root, predicateFn, node) {
+ while (node = findNode$1(node, direction, isEditableCaretCandidate, root)) {
+ if (predicateFn(node)) {
+ return;
+ }
+ }
+ };
+ var findLineNodeRects = function (root, targetNodeRect) {
+ var clientRects = [];
+ var collect = function (checkPosFn, node) {
+ var lineRects;
+ 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);
+ walkUntil$1(VDirection.Down, root, curry(collect, isBelow), targetNodeRect.node);
+ 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 closestCaret = function (root, clientX, clientY) {
+ var closestNodeRect;
+ var contentEditableFalseNodeRects = getClientRects(getFakeCaretTargets(root));
+ var targetNodeRects = filter(contentEditableFalseNodeRects, function (rect) {
+ return clientY >= rect.top && clientY <= rect.bottom;
+ });
+ closestNodeRect = findClosestClientRect(targetNodeRects, clientX);
+ if (closestNodeRect) {
+ closestNodeRect = findClosestClientRect(findLineNodeRects(root, closestNodeRect), clientX);
+ if (closestNodeRect && isFakeCaretTarget(closestNodeRect.node)) {
+ return caretInfo(closestNodeRect, clientX);
+ }
+ }
+ return null;
+ };
+
+ var isXYWithinRange = function (clientX, clientY, range$$1) {
+ if (range$$1.collapsed) {
+ return false;
+ }
+ return foldl(range$$1.getClientRects(), function (state, rect) {
+ return state || containsXY(rect, clientX, clientY);
+ }, false);
+ };
+ var RangePoint = { isXYWithinRange: isXYWithinRange };
+
+ var isContentEditableTrue$4 = NodeType.isContentEditableTrue;
+ var isContentEditableFalse$8 = NodeType.isContentEditableFalse;
+ var showCaret = function (direction, editor, node, before, scrollIntoView) {
+ return 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 null;
+ }
+ return getNodeRange(node);
+ };
+ var renderCaretAtRange = function (editor, range, scrollIntoView) {
+ var normalizedRange = normalizeRange(1, editor.getBody(), range);
+ var caretPosition = CaretPosition$1.fromRangeStart(normalizedRange);
+ var caretPositionNode = caretPosition.getNode();
+ if (isContentEditableFalse$8(caretPositionNode)) {
+ return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);
+ }
+ var caretPositionBeforeNode = caretPosition.getNode(true);
+ if (isContentEditableFalse$8(caretPositionBeforeNode)) {
+ return showCaret(1, editor, caretPositionBeforeNode, false, false);
+ }
+ var ceRoot = editor.dom.getParent(caretPosition.getNode(), function (node) {
+ return isContentEditableFalse$8(node) || isContentEditableTrue$4(node);
+ });
+ if (isContentEditableFalse$8(ceRoot)) {
+ return showCaret(1, editor, ceRoot, false, scrollIntoView);
+ }
+ return null;
+ };
+ var renderRangeCaret = function (editor, range, scrollIntoView) {
+ if (!range || !range.collapsed) {
+ return range;
+ }
+ var caretRange = renderCaretAtRange(editor, range, scrollIntoView);
+ if (caretRange) {
+ return caretRange;
+ }
+ return range;
+ };
+
+ var setup$3 = function (editor) {
+ var renderFocusCaret = first$1(function () {
+ if (!editor.removed) {
+ var rng = editor.selection.getRng();
+ if (rng.collapsed) {
+ var caretRange = renderRangeCaret(editor, editor.selection.getRng(), false);
+ editor.selection.setRng(caretRange);
+ }
+ }
+ }, 0);
+ editor.on('focus', function () {
+ renderFocusCaret.throttle();
+ });
+ editor.on('blur', function () {
+ renderFocusCaret.cancel();
+ });
+ };
+ var CefFocus = { setup: setup$3 };
+
+ var VK = {
+ BACKSPACE: 8,
+ DELETE: 46,
+ DOWN: 40,
+ ENTER: 13,
+ LEFT: 37,
+ RIGHT: 39,
+ SPACEBAR: 32,
+ TAB: 9,
+ UP: 38,
+ modifierPressed: function (e) {
+ return e.shiftKey || e.ctrlKey || e.altKey || this.metaKeyPressed(e);
+ },
+ metaKeyPressed: function (e) {
+ return Env.mac ? e.metaKey : e.ctrlKey && !e.altKey;
+ }
+ };
+
+ var isContentEditableTrue$5 = NodeType.isContentEditableTrue;
+ var isContentEditableFalse$9 = NodeType.isContentEditableFalse;
+ var isAfterContentEditableFalse$1 = isAfterContentEditableFalse;
+ var isBeforeContentEditableFalse$1 = isBeforeContentEditableFalse;
+ var getContentEditableRoot$1 = function (editor, node) {
+ var root = editor.getBody();
+ while (node && node !== root) {
+ if (isContentEditableTrue$5(node) || isContentEditableFalse$9(node)) {
+ return node;
+ }
+ node = node.parentNode;
+ }
+ return null;
+ };
+ var SelectionOverrides = function (editor) {
+ var isBlock = function (node) {
+ return editor.dom.isBlock(node);
+ };
+ var rootNode = editor.getBody();
+ var fakeCaret = FakeCaret(editor.getBody(), isBlock, function () {
+ return EditorFocus.hasFocus(editor);
+ });
+ var realSelectionId = 'sel-' + editor.dom.uniqueId();
+ var selectedContentEditableNode;
+ var isFakeSelectionElement = function (elm) {
+ return editor.dom.hasClass(elm, 'mce-offscreen-selection');
+ };
+ var getRealSelectionElement = function () {
+ var container = editor.dom.get(realSelectionId);
+ return container ? container.getElementsByTagName('*')[0] : container;
+ };
+ var setRange = function (range$$1) {
+ if (range$$1) {
+ editor.selection.setRng(range$$1);
+ }
+ };
+ var getRange = function () {
+ return editor.selection.getRng();
+ };
+ var showCaret$$1 = function (direction, node, before, scrollIntoView) {
+ if (scrollIntoView === void 0) {
+ scrollIntoView = true;
+ }
+ var e;
+ e = editor.fire('ShowCaret', {
+ target: node,
+ direction: direction,
+ before: before
+ });
+ if (e.isDefaultPrevented()) {
+ return null;
+ }
+ if (scrollIntoView) {
+ editor.selection.scrollIntoView(node, direction === -1);
+ }
+ return fakeCaret.show(before, node);
+ };
+ var getNormalizedRangeEndPoint$$1 = function (direction, range$$1) {
+ range$$1 = normalizeRange(direction, rootNode, range$$1);
+ if (direction === -1) {
+ return CaretPosition$1.fromRangeStart(range$$1);
+ }
+ return CaretPosition$1.fromRangeEnd(range$$1);
+ };
+ var showBlockCaretContainer = function (blockCaretContainer) {
+ if (blockCaretContainer.hasAttribute('data-mce-caret')) {
+ showCaretContainerBlock(blockCaretContainer);
+ setRange(getRange());
+ editor.selection.scrollIntoView(blockCaretContainer[0]);
+ }
+ };
+ var registerEvents = function () {
+ editor.on('mouseup', function (e) {
+ var range$$1 = getRange();
+ if (range$$1.collapsed && EditorView.isXYInContentArea(editor, e.clientX, e.clientY)) {
+ setRange(renderCaretAtRange(editor, range$$1, false));
+ }
+ });
+ editor.on('click', function (e) {
+ var contentEditableRoot;
+ contentEditableRoot = getContentEditableRoot$1(editor, e.target);
+ if (contentEditableRoot) {
+ if (isContentEditableFalse$9(contentEditableRoot)) {
+ e.preventDefault();
+ editor.focus();
+ }
+ if (isContentEditableTrue$5(contentEditableRoot)) {
+ if (editor.dom.isChildOf(contentEditableRoot, editor.selection.getNode())) {
+ removeContentEditableSelection();
+ }
+ }
+ }
+ });
+ editor.on('blur NewBlock', function () {
+ removeContentEditableSelection();
+ });
+ editor.on('ResizeWindow FullscreenStateChanged', function () {
+ return fakeCaret.reposition();
+ });
+ var handleTouchSelect = function (editor) {
+ var moved = false;
+ editor.on('touchstart', function () {
+ moved = false;
+ });
+ editor.on('touchmove', function () {
+ moved = true;
+ });
+ editor.on('touchend', function (e) {
+ var contentEditableRoot = getContentEditableRoot$1(editor, e.target);
+ if (isContentEditableFalse$9(contentEditableRoot)) {
+ if (!moved) {
+ e.preventDefault();
+ setContentEditableSelection(selectNode(editor, contentEditableRoot));
+ }
+ }
+ });
+ };
+ var hasNormalCaretPosition = function (elm) {
+ var caretWalker = CaretWalker(elm);
+ if (!elm.firstChild) {
+ return false;
+ }
+ var startPos = CaretPosition$1.before(elm.firstChild);
+ var newPos = caretWalker.next(startPos);
+ return newPos && !isBeforeContentEditableFalse$1(newPos) && !isAfterContentEditableFalse$1(newPos);
+ };
+ var isInSameBlock$$1 = function (node1, node2) {
+ var block1 = editor.dom.getParent(node1, editor.dom.isBlock);
+ var block2 = editor.dom.getParent(node2, editor.dom.isBlock);
+ return block1 === block2;
+ };
+ var hasBetterMouseTarget = function (targetNode, caretNode) {
+ var targetBlock = editor.dom.getParent(targetNode, editor.dom.isBlock);
+ var caretBlock = editor.dom.getParent(caretNode, editor.dom.isBlock);
+ if (targetBlock && editor.dom.isChildOf(targetBlock, caretBlock) && isContentEditableFalse$9(getContentEditableRoot$1(editor, targetBlock)) === false) {
+ return true;
+ }
+ return targetBlock && !isInSameBlock$$1(targetBlock, caretBlock) && hasNormalCaretPosition(targetBlock);
+ };
+ handleTouchSelect(editor);
+ editor.on('mousedown', function (e) {
+ var contentEditableRoot;
+ var targetElm = e.target;
+ if (targetElm !== rootNode && targetElm.nodeName !== 'HTML' && !editor.dom.isChildOf(targetElm, rootNode)) {
+ return;
+ }
+ if (EditorView.isXYInContentArea(editor, e.clientX, e.clientY) === false) {
+ return;
+ }
+ contentEditableRoot = getContentEditableRoot$1(editor, targetElm);
+ if (contentEditableRoot) {
+ if (isContentEditableFalse$9(contentEditableRoot)) {
+ e.preventDefault();
+ setContentEditableSelection(selectNode(editor, contentEditableRoot));
+ } else {
+ removeContentEditableSelection();
+ if (!(isContentEditableTrue$5(contentEditableRoot) && e.shiftKey) && !RangePoint.isXYWithinRange(e.clientX, e.clientY, editor.selection.getRng())) {
+ hideFakeCaret();
+ editor.selection.placeCaretAt(e.clientX, e.clientY);
+ }
+ }
+ } else if (isFakeCaretTarget(targetElm) === false) {
+ removeContentEditableSelection();
+ hideFakeCaret();
+ var caretInfo = closestCaret(rootNode, e.clientX, e.clientY);
+ if (caretInfo) {
+ if (!hasBetterMouseTarget(e.target, caretInfo.node)) {
+ e.preventDefault();
+ var range$$1 = showCaret$$1(1, caretInfo.node, caretInfo.before, false);
+ editor.getBody().focus();
+ setRange(range$$1);
+ }
+ }
+ }
+ });
+ editor.on('keypress', function (e) {
+ if (VK.modifierPressed(e)) {
+ return;
+ }
+ switch (e.keyCode) {
+ default:
+ if (isContentEditableFalse$9(editor.selection.getNode())) {
+ e.preventDefault();
+ }
+ break;
+ }
+ });
+ editor.on('getSelectionRange', function (e) {
+ var rng = e.range;
+ if (selectedContentEditableNode) {
+ if (!selectedContentEditableNode.parentNode) {
+ selectedContentEditableNode = null;
+ return;
+ }
+ rng = rng.cloneRange();
+ rng.selectNode(selectedContentEditableNode);
+ e.range = rng;
+ }
+ });
+ editor.on('setSelectionRange', function (e) {
+ var rng;
+ rng = setContentEditableSelection(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;
+ if (!isRangeInCaretContainer(rng) && !isPasteBin(rng.startContainer.parentNode)) {
+ hideFakeCaret();
+ }
+ if (!isFakeSelectionElement(rng.startContainer.parentNode)) {
+ removeContentEditableSelection();
+ }
+ });
+ 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);
+ }
+ }
+ });
+ DragDropOverrides.init(editor);
+ CefFocus.setup(editor);
+ };
+ var addCss = function () {
+ var styles = editor.contentStyles, rootClass = '.mce-content-body';
+ styles.push(fakeCaret.getCss());
+ styles.push(rootClass + ' .mce-offscreen-selection {' + 'position: absolute;' + 'left: -9999999999px;' + 'max-width: 1000000px;' + '}' + rootClass + ' *[contentEditable=false] {' + 'cursor: default;' + '}' + rootClass + ' *[contentEditable=true] {' + 'cursor: text;' + '}');
+ };
+ var isWithinCaretContainer = function (node) {
+ return isCaretContainer(node) || startsWithCaretContainer(node) || endsWithCaretContainer(node);
+ };
+ var isRangeInCaretContainer = function (rng) {
+ return isWithinCaretContainer(rng.startContainer) || isWithinCaretContainer(rng.endContainer);
+ };
+ var setContentEditableSelection = function (range$$1, forward) {
+ var node;
+ var $ = editor.$;
+ var dom = editor.dom;
+ var $realSelectionContainer, sel, startContainer, startOffset, endOffset, e, caretPosition, targetClone, origTargetClone;
+ if (!range$$1) {
+ return null;
+ }
+ if (range$$1.collapsed) {
+ if (!isRangeInCaretContainer(range$$1)) {
+ if (forward === false) {
+ caretPosition = getNormalizedRangeEndPoint$$1(-1, range$$1);
+ if (isFakeCaretTarget(caretPosition.getNode(true))) {
+ return showCaret$$1(-1, caretPosition.getNode(true), false, false);
+ }
+ if (isFakeCaretTarget(caretPosition.getNode())) {
+ return showCaret$$1(-1, caretPosition.getNode(), !caretPosition.isAtEnd(), false);
+ }
+ } else {
+ caretPosition = getNormalizedRangeEndPoint$$1(1, range$$1);
+ if (isFakeCaretTarget(caretPosition.getNode())) {
+ return showCaret$$1(1, caretPosition.getNode(), !caretPosition.isAtEnd(), false);
+ }
+ if (isFakeCaretTarget(caretPosition.getNode(true))) {
+ return showCaret$$1(1, caretPosition.getNode(true), false, false);
+ }
+ }
+ }
+ return null;
+ }
+ startContainer = range$$1.startContainer;
+ startOffset = range$$1.startOffset;
+ endOffset = range$$1.endOffset;
+ if (startContainer.nodeType === 3 && startOffset === 0 && isContentEditableFalse$9(startContainer.parentNode)) {
+ startContainer = startContainer.parentNode;
+ startOffset = dom.nodeIndex(startContainer);
+ startContainer = startContainer.parentNode;
+ }
+ if (startContainer.nodeType !== 1) {
+ return null;
+ }
+ if (endOffset === startOffset + 1) {
+ node = startContainer.childNodes[startOffset];
+ }
+ if (!isContentEditableFalse$9(node)) {
+ return null;
+ }
+ targetClone = origTargetClone = node.cloneNode(true);
+ e = editor.fire('ObjectSelected', {
+ target: node,
+ targetClone: targetClone
+ });
+ if (e.isDefaultPrevented()) {
+ return null;
+ }
+ $realSelectionContainer = descendant$1(Element$$1.fromDom(editor.getBody()), '#' + realSelectionId).fold(function () {
+ return $([]);
+ }, function (elm) {
+ return $([elm.dom()]);
+ });
+ targetClone = e.targetClone;
+ if ($realSelectionContainer.length === 0) {
+ $realSelectionContainer = $('').attr('id', realSelectionId);
+ $realSelectionContainer.appendTo(editor.getBody());
+ }
+ range$$1 = editor.dom.createRng();
+ if (targetClone === origTargetClone && Env.ie) {
+ $realSelectionContainer.empty().append('\xA0
').append(targetClone);
+ range$$1.setStartAfter($realSelectionContainer[0].firstChild.firstChild);
+ range$$1.setEndAfter(targetClone);
+ } else {
+ $realSelectionContainer.empty().append('\xA0').append(targetClone).append('\xA0');
+ range$$1.setStart($realSelectionContainer[0].firstChild, 1);
+ range$$1.setEnd($realSelectionContainer[0].lastChild, 0);
+ }
+ $realSelectionContainer.css({ top: dom.getPos(node, editor.getBody()).y });
+ $realSelectionContainer[0].focus();
+ sel = editor.selection.getSel();
+ sel.removeAllRanges();
+ sel.addRange(range$$1);
+ each(descendants$1(Element$$1.fromDom(editor.getBody()), '*[data-mce-selected]'), function (elm) {
+ remove(elm, 'data-mce-selected');
+ });
+ node.setAttribute('data-mce-selected', '1');
+ selectedContentEditableNode = node;
+ hideFakeCaret();
+ return range$$1;
+ };
+ var removeContentEditableSelection = function () {
+ if (selectedContentEditableNode) {
+ selectedContentEditableNode.removeAttribute('data-mce-selected');
+ descendant$1(Element$$1.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$2);
+ selectedContentEditableNode = null;
+ }
+ descendant$1(Element$$1.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$2);
+ selectedContentEditableNode = null;
+ };
+ var destroy = function () {
+ fakeCaret.destroy();
+ selectedContentEditableNode = null;
+ };
+ var hideFakeCaret = function () {
+ fakeCaret.hide();
+ };
+ if (Env.ceFalse) {
+ registerEvents();
+ addCss();
+ }
+ return {
+ showCaret: showCaret$$1,
+ showBlockCaretContainer: showBlockCaretContainer,
+ hideFakeCaret: hideFakeCaret,
+ destroy: destroy
+ };
+ };
+
+ var isValidPrefixAttrName = function (name) {
+ return name.indexOf('data-') === 0 || name.indexOf('aria-') === 0;
+ };
+ var trimComments = function (text) {
+ return text.replace(//g, '');
+ };
+ var isInvalidUri = function (settings, uri) {
+ if (settings.allow_html_data_urls) {
+ return false;
+ } else if (/^data:image\//i.test(uri)) {
+ return settings.allow_svg_data_urls === false && /^data:image\/svg\+xml/i.test(uri);
+ } else {
+ return /^data:/i.test(uri);
+ }
+ };
+ var findEndTagIndex = function (schema, html, startIndex) {
+ var count = 1, index, matches, tokenRegExp, shortEndedElements;
+ shortEndedElements = schema.getShortEndedElements();
+ 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;
+ };
+ function SaxParser(settings, schema) {
+ if (schema === void 0) {
+ schema = Schema();
+ }
+ var noop = function () {
+ };
+ 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 parse = function (html) {
+ var matches, index = 0, value, endRegExp;
+ var stack = [];
+ var attrList, i, textData, name;
+ var isInternalElement, removeInternalElements, shortEndedElements, fillAttrsMap, isShortEnded;
+ var validate, elementRule, isValidElement, attr, attribsValue, validAttributesMap, validAttributePatterns;
+ var attributesRequired, attributesDefault, attributesForced, processHtml;
+ var anyAttributesRequired, selfClosing, tokenRegExp, attrRegExp, specialElements, attrValue, idCount = 0;
+ var decode = Entities.decode;
+ var fixSelfClosing;
+ var filteredUrlAttrs = Tools.makeMap('src,href,data,background,formaction,poster,xlink:href');
+ var scriptUriRegExp = /((java|vb)script|mhtml):/i;
+ 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 parseAttribute = function (match, name, value, val2, val3) {
+ var attrRule, i;
+ var trimRegExp = /[\s\u0000-\u001F]+/g;
+ name = name.toLowerCase();
+ value = 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)) {
+ return;
+ }
+ }
+ if (isInternalElement && (name in filteredUrlAttrs || name.indexOf('on') === 0)) {
+ return;
+ }
+ attrList.map[name] = value;
+ attrList.push({
+ name: name,
+ value: value
+ });
+ };
+ tokenRegExp = new RegExp('<(?:' + '(?:!--([\\w\\W]*?)-->)|' + '(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|' + '(?:!DOCTYPE([\\w\\W]*?)>)|' + '(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|' + '(?:\\/([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)>)|' + '(?:([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)((?:\\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\\/|\\s+)>)' + ')', 'g');
+ attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g;
+ shortEndedElements = schema.getShortEndedElements();
+ selfClosing = settings.self_closing_elements || schema.getSelfClosingElements();
+ fillAttrsMap = schema.getBoolAttrs();
+ validate = settings.validate;
+ removeInternalElements = settings.remove_internals;
+ fixSelfClosing = settings.fix_self_closing;
+ specialElements = schema.getSpecialElements();
+ processHtml = html + '>';
+ while (matches = tokenRegExp.exec(processHtml)) {
+ if (index < matches.index) {
+ text(decode(html.substr(index, matches.index - index)));
+ }
+ if (value = matches[6]) {
+ value = value.toLowerCase();
+ if (value.charAt(0) === ':') {
+ value = value.substr(1);
+ }
+ processEndTag(value);
+ } else if (value = matches[7]) {
+ if (matches.index + matches[0].length > html.length) {
+ text(decode(html.substr(matches.index)));
+ index = matches.index + matches[0].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);
+ }
+ if (!validate || (elementRule = schema.getElementRule(value))) {
+ isValidElement = true;
+ if (validate) {
+ validAttributesMap = elementRule.attributes;
+ validAttributePatterns = elementRule.attributePatterns;
+ }
+ if (attribsValue = matches[8]) {
+ isInternalElement = attribsValue.indexOf('data-mce-type') !== -1;
+ if (isInternalElement && removeInternalElements) {
+ isValidElement = false;
+ }
+ attrList = [];
+ attrList.map = {};
+ attribsValue.replace(attrRegExp, parseAttribute);
+ } 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 + matches[0].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) {
+ text(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]) {
+ if (value.charAt(0) === '>') {
+ value = ' ' + value;
+ }
+ if (!settings.allow_conditional_comments && value.substr(0, 3).toLowerCase() === '[if') {
+ value = ' ' + value;
+ }
+ comment(value);
+ } else if (value = matches[2]) {
+ cdata(trimComments(value));
+ } else if (value = matches[3]) {
+ doctype(value);
+ } else if (value = matches[4]) {
+ pi(value, matches[5]);
+ }
+ index = matches.index + matches[0].length;
+ }
+ if (index < html.length) {
+ text(decode(html.substr(index)));
+ }
+ for (i = stack.length - 1; i >= 0; i--) {
+ value = stack[i];
+ if (value.valid) {
+ end(value.name);
+ }
+ }
+ };
+ return { parse: parse };
+ }
+ (function (SaxParser) {
+ SaxParser.findEndTag = findEndTagIndex;
+ }(SaxParser || (SaxParser = {})));
+ var SaxParser$1 = SaxParser;
+
+ 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, shortEndedElements;
+ var schema = serializer.schema;
+ content = trimHtml(serializer.getTempAttrs(), content);
+ shortEndedElements = schema.getShortEndedElements();
+ while (matches = bogusAllRegExp.exec(content)) {
+ index = bogusAllRegExp.lastIndex;
+ matchLength = matches[0].length;
+ if (shortEndedElements[matches[1]]) {
+ endTagIndex = index;
+ } else {
+ endTagIndex = SaxParser$1.findEndTag(schema, content, index);
+ }
+ content = content.substring(0, index - matchLength) + content.substring(endTagIndex);
+ bogusAllRegExp.lastIndex = index - matchLength;
+ }
+ return Zwsp.trim(content);
+ };
+ var trimExternal = trimInternal;
+ var TrimHtml = {
+ trimExternal: trimExternal,
+ trimInternal: trimInternal
+ };
+
+ 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 Diff = {
+ KEEP: KEEP,
+ DELETE: DELETE,
+ INSERT: INSERT,
+ diff: diff
+ };
+
+ var getOuterHtml = function (elm) {
+ if (NodeType.isElement(elm)) {
+ return elm.outerHTML;
+ } else if (NodeType.isText(elm)) {
+ return Entities.encodeRaw(elm.data, false);
+ } else if (NodeType.isComment(elm)) {
+ return '';
+ }
+ return '';
+ };
+ var createFragment$1 = function (html) {
+ var frag, node, container;
+ container = document.createElement('div');
+ 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] === Diff.KEEP) {
+ index++;
+ } else if (action[0] === Diff.INSERT) {
+ insertAt(elm, action[1], index);
+ index++;
+ } else if (action[0] === Diff.DELETE) {
+ removeAt(elm, index);
+ }
+ });
+ };
+ var read$3 = 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.diff(currentFragments, fragments), elm);
+ return elm;
+ };
+ var Fragments = {
+ read: read$3,
+ write: write
+ };
+
+ var undoLevelDocument = Cell(Option.none());
+ var lazyTempDocument = function () {
+ return undoLevelDocument.get().getOrThunk(function () {
+ var doc = document.implementation.createHTMLDocument('undo');
+ undoLevelDocument.set(Option.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, content, trimmedFragments;
+ fragments = Fragments.read(editor.getBody());
+ trimmedFragments = bind(fragments, function (html) {
+ var trimmed = TrimHtml.trimInternal(editor.serializer, html);
+ return trimmed.length > 0 ? [trimmed] : [];
+ });
+ content = trimmedFragments.join('');
+ return hasIframes(content) ? createFragmentedLevel(trimmedFragments) : createCompleteLevel(content);
+ };
+ var applyToEditor = function (editor, level, before) {
+ if (level.type === 'fragmented') {
+ Fragments.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 = Element$$1.fromTag('body', lazyTempDocument());
+ set$2(elm, getLevelContent(level));
+ each(descendants$1(elm, '*[data-mce-bogus]'), unwrap);
+ return get$5(elm);
+ };
+ var hasEqualContent = function (level1, level2) {
+ return getLevelContent(level1) === getLevelContent(level2);
+ };
+ var hasEqualCleanedContent = function (level1, level2) {
+ return getCleanLevelContent(level1) === getCleanLevelContent(level2);
+ };
+ var isEq$3 = function (level1, level2) {
+ if (!level1 || !level2) {
+ return false;
+ } else if (hasEqualContent(level1, level2)) {
+ return true;
+ } else {
+ return hasEqualCleanedContent(level1, level2);
+ }
+ };
+ var Levels = {
+ createFragmentedLevel: createFragmentedLevel,
+ createCompleteLevel: createCompleteLevel,
+ createFromEditor: createFromEditor,
+ applyToEditor: applyToEditor,
+ isEq: isEq$3
+ };
+
+ function UndoManager (editor) {
+ var self = this, index = 0, data = [], beforeBookmark, isFirstTypedCharacter, locks = 0;
+ var isUnlocked = function () {
+ return locks === 0;
+ };
+ var setTyping = function (typing) {
+ if (isUnlocked()) {
+ self.typing = typing;
+ }
+ };
+ var setDirty = function (state) {
+ editor.setDirty(state);
+ };
+ var addNonTypingUndoLevel = function (e) {
+ setTyping(false);
+ self.add({}, e);
+ };
+ var endTyping = function () {
+ if (self.typing) {
+ setTyping(false);
+ self.add();
+ }
+ };
+ editor.on('init', function () {
+ self.add();
+ });
+ editor.on('BeforeExecCommand', function (e) {
+ var cmd = e.command;
+ if (cmd !== 'Undo' && cmd !== 'Redo' && cmd !== 'mceRepaint') {
+ endTyping();
+ self.beforeChange();
+ }
+ });
+ editor.on('ExecCommand', function (e) {
+ var cmd = e.command;
+ if (cmd !== 'Undo' && cmd !== 'Redo' && cmd !== 'mceRepaint') {
+ addNonTypingUndoLevel(e);
+ }
+ });
+ editor.on('ObjectResizeStart Cut', function () {
+ self.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 && self.typing && Levels.isEq(Levels.createFromEditor(editor), data[0]) === false) {
+ if (editor.isDirty() === false) {
+ setDirty(true);
+ editor.fire('change', {
+ level: data[0],
+ lastLevel: null
+ });
+ }
+ editor.fire('TypingUndo');
+ isFirstTypedCharacter = 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 (self.typing) {
+ addNonTypingUndoLevel(e);
+ }
+ return;
+ }
+ var modKey = e.ctrlKey && !e.altKey || e.metaKey;
+ if ((keyCode < 16 || keyCode > 20) && keyCode !== 224 && keyCode !== 91 && !self.typing && !modKey) {
+ self.beforeChange();
+ setTyping(true);
+ self.add({}, e);
+ isFirstTypedCharacter = true;
+ }
+ });
+ editor.on('MouseDown', function (e) {
+ if (self.typing) {
+ addNonTypingUndoLevel(e);
+ }
+ });
+ var isInsertReplacementText = function (event) {
+ return event.inputType === 'insertReplacementText';
+ };
+ var isInsertTextDataNull = function (event) {
+ return event.inputType === 'insertText' && event.data === null;
+ };
+ editor.on('input', function (e) {
+ if (e.inputType && (isInsertReplacementText(e) || isInsertTextDataNull(e))) {
+ addNonTypingUndoLevel(e);
+ }
+ });
+ editor.addShortcut('meta+z', '', 'Undo');
+ editor.addShortcut('meta+y,meta+shift+z', '', 'Redo');
+ editor.on('AddUndo Undo Redo ClearUndos', function (e) {
+ if (!e.isDefaultPrevented()) {
+ editor.nodeChanged();
+ }
+ });
+ self = {
+ data: data,
+ typing: false,
+ beforeChange: function () {
+ if (isUnlocked()) {
+ beforeBookmark = GetBookmark.getUndoBookmark(editor.selection);
+ }
+ },
+ add: function (level, event) {
+ var i;
+ var settings = editor.settings;
+ var lastLevel, currentLevel;
+ currentLevel = Levels.createFromEditor(editor);
+ level = level || {};
+ level = Tools.extend(level, currentLevel);
+ if (isUnlocked() === false || editor.removed) {
+ return null;
+ }
+ lastLevel = data[index];
+ if (editor.fire('BeforeAddUndo', {
+ level: level,
+ lastLevel: lastLevel,
+ originalEvent: event
+ }).isDefaultPrevented()) {
+ return null;
+ }
+ if (lastLevel && Levels.isEq(lastLevel, level)) {
+ return null;
+ }
+ if (data[index]) {
+ data[index].beforeBookmark = beforeBookmark;
+ }
+ if (settings.custom_undo_redo_levels) {
+ if (data.length > settings.custom_undo_redo_levels) {
+ for (i = 0; i < data.length - 1; i++) {
+ data[i] = data[i + 1];
+ }
+ data.length--;
+ index = data.length;
+ }
+ }
+ level.bookmark = GetBookmark.getUndoBookmark(editor.selection);
+ if (index < data.length - 1) {
+ data.length = index + 1;
+ }
+ data.push(level);
+ index = data.length - 1;
+ var args = {
+ level: level,
+ lastLevel: lastLevel,
+ originalEvent: event
+ };
+ editor.fire('AddUndo', args);
+ if (index > 0) {
+ setDirty(true);
+ editor.fire('change', args);
+ }
+ return level;
+ },
+ undo: function () {
+ var level;
+ if (self.typing) {
+ self.add();
+ self.typing = false;
+ setTyping(false);
+ }
+ if (index > 0) {
+ level = data[--index];
+ Levels.applyToEditor(editor, level, true);
+ setDirty(true);
+ editor.fire('undo', { level: level });
+ }
+ return level;
+ },
+ redo: function () {
+ var level;
+ if (index < data.length - 1) {
+ level = data[++index];
+ Levels.applyToEditor(editor, level, false);
+ setDirty(true);
+ editor.fire('redo', { level: level });
+ }
+ return level;
+ },
+ clear: function () {
+ data = [];
+ index = 0;
+ self.typing = false;
+ self.data = data;
+ editor.fire('ClearUndos');
+ },
+ hasUndo: function () {
+ return index > 0 || self.typing && data[0] && !Levels.isEq(Levels.createFromEditor(editor), data[0]);
+ },
+ hasRedo: function () {
+ return index < data.length - 1 && !self.typing;
+ },
+ transact: function (callback) {
+ endTyping();
+ self.beforeChange();
+ self.ignore(callback);
+ return self.add();
+ },
+ ignore: function (callback) {
+ try {
+ locks++;
+ callback();
+ } finally {
+ locks--;
+ }
+ },
+ extra: function (callback1, callback2) {
+ var lastLevel, bookmark;
+ if (self.transact(callback1)) {
+ bookmark = data[index].bookmark;
+ lastLevel = data[index - 1];
+ Levels.applyToEditor(editor, lastLevel, true);
+ if (self.transact(callback2)) {
+ data[index - 1].beforeBookmark = bookmark;
+ }
+ }
+ }
+ };
+ return self;
+ }
+
+ var isEq$4 = FormatUtils.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$4(node, format.inline)) {
+ return true;
+ }
+ if (isEq$4(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 = FormatUtils.getStyle(dom, node, key);
+ }
+ if (similar && !value && !format.exact) {
+ return;
+ }
+ if ((!similar || format.exact) && !isEq$4(value, FormatUtils.normalizeStyleValue(dom, FormatUtils.replaceVars(items[key], vars), key))) {
+ return;
+ }
+ }
+ }
+ } else {
+ for (i = 0; i < items.length; i++) {
+ if (itemName === 'attributes' ? dom.getAttrib(node, items[i]) : FormatUtils.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, classes[x])) {
+ return;
+ }
+ }
+ }
+ return format;
+ }
+ }
+ }
+ };
+ var match = function (editor, name, vars, node) {
+ var startNode;
+ if (node) {
+ return matchParents(editor, node, name, vars);
+ }
+ node = editor.selection.getNode();
+ if (matchParents(editor, node, name, vars)) {
+ return true;
+ }
+ startNode = editor.selection.getStart();
+ if (startNode !== node) {
+ if (matchParents(editor, startNode, name, vars)) {
+ return true;
+ }
+ }
+ return false;
+ };
+ var matchAll = function (editor, names, vars) {
+ var startElement;
+ var matchedFormatNames = [];
+ var checkedMap = {};
+ startElement = editor.selection.getStart();
+ editor.dom.getParent(startElement, function (node) {
+ var i, name;
+ for (i = 0; i < names.length; i++) {
+ name = names[i];
+ if (!checkedMap[name] && matchNode(editor, node, name, vars)) {
+ checkedMap[name] = true;
+ matchedFormatNames.push(name);
+ }
+ }
+ }, editor.dom.getRoot());
+ return matchedFormatNames;
+ };
+ 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 = FormatUtils.getParents(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 MatchFormat = {
+ matchNode: matchNode,
+ matchName: matchName,
+ match: match,
+ matchAll: matchAll,
+ canApply: canApply,
+ matchesUnInheritedFormatSelector: matchesUnInheritedFormatSelector
+ };
+
+ 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 && NodeType.isText(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 (NodeType.isText(startContainer) && startOffset > 0 && startOffset < startContainer.nodeValue.length) {
+ startContainer = splitText(startContainer, startOffset);
+ startOffset = 0;
+ }
+ if (NodeType.isText(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 SplitRange = { split: split$1 };
+
+ var ZWSP$1 = Zwsp.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) {
+ var walker;
+ if (node) {
+ walker = new TreeWalker(node, node);
+ for (node = walker.current(); node; node = walker.next()) {
+ if (node.nodeType === 3) {
+ return node;
+ }
+ }
+ }
+ return null;
+ };
+ var createCaretContainer = function (fill) {
+ var caretContainer = Element$$1.fromTag('span');
+ setAll(caretContainer, {
+ 'id': CARET_ID$1,
+ 'data-mce-bogus': '1',
+ 'data-mce-type': 'format-caret'
+ });
+ if (fill) {
+ append(caretContainer, Element$$1.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.deleteElement(editor, false, Element$$1.fromDom(node), moveCaret);
+ } else {
+ var rng = selection.getRng();
+ var block = dom.getParent(node, dom.isBlock);
+ var textNode = trimZwspFromCaretContainer(node);
+ if (rng.startContainer === textNode && rng.startOffset > 0) {
+ rng.setStart(textNode, rng.startOffset - 1);
+ }
+ if (rng.endContainer === textNode && rng.endOffset > 0) {
+ rng.setEnd(textNode, rng.endOffset - 1);
+ }
+ dom.remove(node, true);
+ if (block && dom.isEmpty(block)) {
+ PaddingBr.fillWithPaddingBr(Element$$1.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(FormatUtils.isTextBlock, editor));
+ if (block && dom.isEmpty(block)) {
+ formatNode.parentNode.replaceChild(caretContainer, formatNode);
+ } else {
+ PaddingBr.removeTrailingBr(Element$$1.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 applyCaretFormat = function (editor, name$$1, vars) {
+ var rng, caretContainer, textNode, offset, bookmark, container, text;
+ var selection = editor.selection;
+ rng = selection.getRng(true);
+ offset = rng.startOffset;
+ container = rng.startContainer;
+ 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))) {
+ bookmark = selection.getBookmark();
+ rng.collapse(true);
+ rng = ExpandRange.expandRng(editor, rng, editor.formatter.get(name$$1));
+ rng = SplitRange.split(rng);
+ editor.formatter.apply(name$$1, vars, rng);
+ selection.moveToBookmark(bookmark);
+ } else {
+ if (!caretContainer || textNode.nodeValue !== ZWSP$1) {
+ caretContainer = importNode(editor.getDoc(), createCaretContainer(true).dom());
+ textNode = caretContainer.firstChild;
+ rng.insertNode(caretContainer);
+ offset = 1;
+ editor.formatter.apply(name$$1, vars, caretContainer);
+ } else {
+ editor.formatter.apply(name$$1, vars, caretContainer);
+ }
+ selection.setCursorLocation(textNode, offset);
+ }
+ };
+ var removeCaretFormat = function (editor, name$$1, vars, similar) {
+ var dom = editor.dom, selection = editor.selection;
+ var container, offset, bookmark;
+ var hasContentAfter, node, formatNode;
+ var parents = [], rng = selection.getRng();
+ var caretContainer;
+ container = rng.startContainer;
+ offset = rng.startOffset;
+ node = container;
+ if (container.nodeType === 3) {
+ if (offset !== container.nodeValue.length) {
+ hasContentAfter = true;
+ }
+ node = node.parentNode;
+ }
+ while (node) {
+ if (MatchFormat.matchNode(editor, node, name$$1, vars, similar)) {
+ formatNode = node;
+ break;
+ }
+ if (node.nextSibling) {
+ hasContentAfter = true;
+ }
+ parents.push(node);
+ node = node.parentNode;
+ }
+ if (!formatNode) {
+ return;
+ }
+ if (hasContentAfter) {
+ bookmark = selection.getBookmark();
+ rng.collapse(true);
+ var expandedRng = ExpandRange.expandRng(editor, rng, editor.formatter.get(name$$1), true);
+ expandedRng = SplitRange.split(expandedRng);
+ editor.formatter.remove(name$$1, vars, expandedRng);
+ selection.moveToBookmark(bookmark);
+ } else {
+ caretContainer = getParentCaretContainer(editor.getBody(), formatNode);
+ var newCaretContainer = createCaretContainer(false).dom();
+ var caretNode = insertFormatNodesIntoCaretContainer(parents, newCaretContainer);
+ if (caretContainer) {
+ insertCaretContainerNode(editor, newCaretContainer, caretContainer);
+ } else {
+ insertCaretContainerNode(editor, newCaretContainer, formatNode);
+ }
+ removeCaretContainerNode(editor, caretContainer, false);
+ selection.setCursorLocation(caretNode, 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$4 = 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(Element$$1.fromDom(targetNode), caretContainer);
+ remove$2(Element$$1.fromDom(targetNode));
+ return CaretPosition$1(innerMost, 0);
+ };
+ var isFormatElement = function (editor, element) {
+ var inlineElements = editor.schema.getTextInlineElements();
+ return inlineElements.hasOwnProperty(name(element)) && !isCaretNode(element.dom()) && !NodeType.isBogus(element.dom());
+ };
+ var isEmptyCaretFormatElement = function (element) {
+ return isCaretNode(element.dom()) && isCaretContainerEmpty(element.dom());
+ };
+
+ var postProcessHooks = {}, filter$2 = ArrUtils.filter, each$c = ArrUtils.each;
+ var addPostProcessHook = function (name, hook) {
+ var hooks = postProcessHooks[name];
+ if (!hooks) {
+ postProcessHooks[name] = hooks = [];
+ }
+ postProcessHooks[name].push(hook);
+ };
+ var postProcess = function (name, editor) {
+ each$c(postProcessHooks[name], function (hook) {
+ hook(editor);
+ });
+ };
+ addPostProcessHook('pre', function (editor) {
+ var rng = editor.selection.getRng();
+ var isPre, blocks;
+ var hasPreSibling = function (pre) {
+ return isPre(pre.previousSibling) && ArrUtils.indexOf(blocks, pre.previousSibling) !== -1;
+ };
+ var joinPre = function (pre1, pre2) {
+ DomQuery(pre2).remove();
+ DomQuery(pre1).append('
').append(pre2.childNodes);
+ };
+ isPre = NodeType.matchNodeNames('pre');
+ if (!rng.collapsed) {
+ blocks = editor.selection.getSelectedBlocks();
+ each$c(filter$2(filter$2(blocks, isPre), hasPreSibling), function (pre) {
+ joinPre(pre.previousSibling, pre);
+ });
+ }
+ });
+ var Hooks = { postProcess: postProcess };
+
+ var MCE_ATTR_RE = /^(src|href|style)$/;
+ var each$d = Tools.each;
+ var isEq$5 = FormatUtils.isEq;
+ var isTableCell$4 = function (node) {
+ return /^(TH|TD)$/.test(node.nodeName);
+ };
+ var isChildOfInlineParent = function (dom, node, parent$$1) {
+ return dom.isChildOf(node, parent$$1) && node !== parent$$1 && !dom.isBlock(parent$$1);
+ };
+ var getContainer = function (ed, rng, start) {
+ var container, offset, lastIdx;
+ container = rng[start ? 'startContainer' : 'endContainer'];
+ offset = rng[start ? 'startOffset' : 'endOffset'];
+ if (NodeType.isElement(container)) {
+ lastIdx = container.childNodes.length - 1;
+ if (!start && offset) {
+ offset--;
+ }
+ container = container.childNodes[offset > lastIdx ? lastIdx : offset];
+ }
+ if (NodeType.isText(container) && start && offset >= container.nodeValue.length) {
+ container = new TreeWalker(container, ed.getBody()).next() || container;
+ }
+ if (NodeType.isText(container) && !start && offset === 0) {
+ container = new TreeWalker(container, ed.getBody()).prev() || container;
+ }
+ return container;
+ };
+ 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 = Element$$1.fromDom(node);
+ var wrapper = Element$$1.fromDom(dom.create(name, attrs));
+ var siblings$$1 = next ? nextSiblings(start) : prevSiblings(start);
+ append$1(wrapper, siblings$$1);
+ 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$5(node, format.inline)) {
+ return true;
+ }
+ if (isEq$5(node, format.block)) {
+ return true;
+ }
+ if (format.selector) {
+ return NodeType.isElement(node) && dom.is(node, format.selector);
+ }
+ };
+ var isColorFormatAndAnchor = function (node, format) {
+ return format.links && node.tagName === 'A';
+ };
+ var find$4 = function (dom, node, next, inc) {
+ node = FormatUtils.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 = ed.settings.forced_root_block;
+ if (format.block) {
+ if (!forcedRootBlock) {
+ if (dom.isBlock(node) && !dom.isBlock(parentNode)) {
+ if (!find$4(dom, node, false) && !find$4(dom, node.firstChild, true, 1)) {
+ node.insertBefore(dom.create('br'), node.firstChild);
+ }
+ if (!find$4(dom, node, true) && !find$4(dom, node.lastChild, false, 1)) {
+ node.appendChild(dom.create('br'));
+ }
+ }
+ } else {
+ if (parentNode === dom.getRoot()) {
+ if (!format.list_block || !isEq$5(node, format.list_block)) {
+ each$d(Tools.grep(node.childNodes), function (node) {
+ if (FormatUtils.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$5(format.inline, node)) {
+ return;
+ }
+ dom.remove(node, 1);
+ };
+ var removeFormat = function (ed, format, vars, node, compareNode) {
+ var i, attrs, stylesModified;
+ var dom = ed.dom;
+ if (!matchName$1(dom, node, format) && !isColorFormatAndAnchor(node, format)) {
+ return false;
+ }
+ if (format.remove !== 'all') {
+ each$d(format.styles, function (value, name) {
+ value = FormatUtils.normalizeStyleValue(dom, FormatUtils.replaceVars(value, vars), name);
+ if (typeof name === 'number') {
+ name = value;
+ compareNode = 0;
+ }
+ if (format.remove_similar || (!compareNode || isEq$5(FormatUtils.getStyle(dom, compareNode, name), value))) {
+ dom.setStyle(node, name, '');
+ }
+ stylesModified = 1;
+ });
+ if (stylesModified && dom.getAttrib(node, 'style') === '') {
+ node.removeAttribute('style');
+ node.removeAttribute('data-mce-style');
+ }
+ each$d(format.attributes, function (value, name) {
+ var valueOut;
+ value = FormatUtils.replaceVars(value, vars);
+ if (typeof name === 'number') {
+ name = value;
+ compareNode = 0;
+ }
+ if (!compareNode || isEq$5(dom.getAttrib(compareNode, name), value)) {
+ if (name === 'class') {
+ value = dom.getAttrib(node, name);
+ if (value) {
+ valueOut = '';
+ each$d(value.split(/\s+/), function (cls) {
+ if (/mce\-\w+/.test(cls)) {
+ valueOut += (valueOut ? ' ' : '') + cls;
+ }
+ });
+ if (valueOut) {
+ dom.setAttrib(node, name, valueOut);
+ return;
+ }
+ }
+ }
+ if (name === 'class') {
+ node.removeAttribute('className');
+ }
+ if (MCE_ATTR_RE.test(name)) {
+ node.removeAttribute('data-mce-' + name);
+ }
+ node.removeAttribute(name);
+ }
+ });
+ each$d(format.classes, function (value) {
+ value = FormatUtils.replaceVars(value, vars);
+ if (!compareNode || dom.hasClass(compareNode, value)) {
+ dom.removeClass(node, value);
+ }
+ });
+ attrs = dom.getAttribs(node);
+ for (i = 0; i < attrs.length; i++) {
+ var attrName = attrs[i].nodeName;
+ if (attrName.indexOf('_') !== 0 && attrName.indexOf('data-') !== 0) {
+ return false;
+ }
+ }
+ }
+ if (format.remove !== 'none') {
+ removeNode$1(ed, node, format);
+ return true;
+ }
+ };
+ var findFormatRoot = function (editor, container, name, vars, similar) {
+ var formatRoot;
+ each$d(FormatUtils.getParents(editor.dom, container.parentNode).reverse(), function (parent$$1) {
+ var format;
+ if (!formatRoot && parent$$1.id !== '_start' && parent$$1.id !== '_end') {
+ format = MatchFormat.matchNode(editor, parent$$1, name, vars, similar);
+ if (format && format.split !== false) {
+ formatRoot = parent$$1;
+ }
+ }
+ });
+ return formatRoot;
+ };
+ var wrapAndSplit = function (editor, formatList, formatRoot, container, target, split, format, vars) {
+ var parent$$1, clone, lastClone, firstClone, i, formatRootParent;
+ var dom = editor.dom;
+ if (formatRoot) {
+ formatRootParent = formatRoot.parentNode;
+ for (parent$$1 = container.parentNode; parent$$1 && parent$$1 !== formatRootParent; parent$$1 = parent$$1.parentNode) {
+ clone = dom.clone(parent$$1, false);
+ for (i = 0; i < formatList.length; i++) {
+ if (removeFormat(editor, formatList[i], vars, clone, clone)) {
+ clone = 0;
+ 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);
+ }
+ }
+ return container;
+ };
+ var remove$8 = function (ed, name, vars, node, similar) {
+ var formatList = ed.formatter.get(name), format = formatList[0];
+ var bookmark, rng, 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 Bookmarks.isBookmarkNode(node) && NodeType.isElement(node) && (node.id === '_start' || node.id === '_end');
+ };
+ var process = function (node) {
+ var children$$1, i, l, lastContentEditable, hasContentEditableState;
+ if (NodeType.isElement(node) && dom.getContentEditable(node)) {
+ lastContentEditable = contentEditable;
+ contentEditable = dom.getContentEditable(node) === 'true';
+ hasContentEditableState = true;
+ }
+ children$$1 = Tools.grep(node.childNodes);
+ if (contentEditable && !hasContentEditableState) {
+ for (i = 0, l = formatList.length; i < l; i++) {
+ if (removeFormat(ed, formatList[i], vars, node, node)) {
+ break;
+ }
+ }
+ }
+ if (format.deep) {
+ if (children$$1.length) {
+ for (i = 0, l = children$$1.length; i < l; i++) {
+ process(children$$1[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 (NodeType.isText(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 commonAncestorContainer = rng.commonAncestorContainer;
+ rng = ExpandRange.expandRng(ed, rng, formatList, true);
+ if (format.split) {
+ rng = SplitRange.split(rng);
+ startContainer = getContainer(ed, rng, true);
+ endContainer = getContainer(ed, rng);
+ if (startContainer !== endContainer) {
+ if (/^(TR|TH|TD)$/.test(startContainer.nodeName) && startContainer.firstChild) {
+ if (startContainer.nodeName === 'TR') {
+ startContainer = startContainer.firstChild.firstChild || startContainer;
+ } else {
+ startContainer = startContainer.firstChild || startContainer;
+ }
+ }
+ if (commonAncestorContainer && /^T(HEAD|BODY|FOOT|R)$/.test(commonAncestorContainer.nodeName) && isTableCell$4(endContainer) && endContainer.firstChild) {
+ endContainer = endContainer.firstChild || endContainer;
+ }
+ if (isChildOfInlineParent(dom, startContainer, endContainer)) {
+ var marker = Option.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 = Option.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'
+ });
+ splitToFormatRoot(startContainer);
+ splitToFormatRoot(endContainer);
+ startContainer = unwrap(true);
+ endContainer = unwrap();
+ } else {
+ startContainer = endContainer = splitToFormatRoot(startContainer);
+ }
+ rng.startContainer = startContainer.parentNode ? startContainer.parentNode : startContainer;
+ rng.startOffset = dom.nodeIndex(startContainer);
+ rng.endContainer = endContainer.parentNode ? endContainer.parentNode : endContainer;
+ rng.endOffset = dom.nodeIndex(endContainer) + 1;
+ }
+ RangeWalk.walk(dom, rng, function (nodes) {
+ each$d(nodes, function (node) {
+ process(node);
+ if (NodeType.isElement(node) && ed.dom.getStyle(node, 'text-decoration') === 'underline' && node.parentNode && FormatUtils.getTextDecoration(dom, node.parentNode) === 'underline') {
+ removeFormat(ed, {
+ deep: false,
+ exact: true,
+ inline: 'span',
+ styles: { textDecoration: 'underline' }
+ }, null, node);
+ }
+ });
+ });
+ };
+ if (node) {
+ if (node.nodeType) {
+ 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, l = formatList.length; i < l; i++) {
+ if (formatList[i].ceFalseOverride) {
+ if (removeFormat(ed, formatList[i], vars, node, node)) {
+ break;
+ }
+ }
+ }
+ return;
+ }
+ if (!selection.isCollapsed() || !format.inline || dom.select('td[data-mce-selected],th[data-mce-selected]').length) {
+ bookmark = GetBookmark.getPersistentBookmark(ed.selection, true);
+ removeRngStyle(selection.getRng());
+ selection.moveToBookmark(bookmark);
+ if (format.inline && MatchFormat.match(ed, name, vars, selection.getStart())) {
+ FormatUtils.moveStart(dom, selection, selection.getRng());
+ }
+ ed.nodeChanged();
+ } else {
+ removeCaretFormat(ed, name, vars, similar);
+ }
+ };
+ var RemoveFormat = {
+ removeFormat: removeFormat,
+ remove: remove$8
+ };
+
+ var each$e = Tools.each;
+ var isElementNode = function (node) {
+ return node && node.nodeType === 1 && !Bookmarks.isBookmarkNode(node) && !isCaretNode(node) && !NodeType.isBogus(node);
+ };
+ var findElementSibling = function (node, siblingName) {
+ var sibling;
+ for (sibling = node; sibling; sibling = sibling[siblingName]) {
+ if (sibling.nodeType === 3 && sibling.nodeValue.length !== 0) {
+ return node;
+ }
+ if (sibling.nodeType === 1 && !Bookmarks.isBookmarkNode(sibling)) {
+ return sibling;
+ }
+ }
+ return node;
+ };
+ var mergeSiblingsNodes = function (dom, prev, next) {
+ var sibling, tmpSibling;
+ var elementUtils = new 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 processChildElements = function (node, filter, process) {
+ each$e(node.childNodes, function (node) {
+ if (isElementNode(node)) {
+ if (filter(node)) {
+ process(node);
+ }
+ if (node.hasChildNodes()) {
+ processChildElements(node, filter, process);
+ }
+ }
+ });
+ };
+ var hasStyle = function (dom, name) {
+ return curry(function (name, node) {
+ return !!(node && FormatUtils.getStyle(dom, node, name));
+ }, name);
+ };
+ var applyStyle = function (dom, name, value) {
+ return curry(function (name, value, node) {
+ dom.setStyle(node, name, value);
+ if (node.getAttribute('style') === '') {
+ node.removeAttribute('style');
+ }
+ unwrapEmptySpan(dom, node);
+ }, name, value);
+ };
+ var unwrapEmptySpan = function (dom, node) {
+ if (node.nodeName === 'SPAN' && dom.getAttribs(node).length === 0) {
+ dom.remove(node, true);
+ }
+ };
+ var processUnderlineAndColor = function (dom, node) {
+ var textDecoration;
+ if (node.nodeType === 1 && node.parentNode && node.parentNode.nodeType === 1) {
+ textDecoration = FormatUtils.getTextDecoration(dom, node.parentNode);
+ if (dom.getStyle(node, 'color') && textDecoration) {
+ dom.setStyle(node, 'text-decoration', textDecoration);
+ } else if (dom.getStyle(node, 'text-decoration') === textDecoration) {
+ dom.setStyle(node, 'text-decoration', null);
+ }
+ }
+ };
+ var mergeUnderlineAndColor = function (dom, format, vars, node) {
+ if (format.styles.color || format.styles.textDecoration) {
+ Tools.walk(node, curry(processUnderlineAndColor, dom), 'childNodes');
+ processUnderlineAndColor(dom, node);
+ }
+ };
+ var mergeBackgroundColorAndFontSize = function (dom, format, vars, node) {
+ if (format.styles && format.styles.backgroundColor) {
+ processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'backgroundColor', FormatUtils.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 mergeSiblings = function (dom, format, vars, node) {
+ if (node && format.merge_siblings !== false) {
+ node = mergeSiblingsNodes(dom, FormatUtils.getNonWhiteSpaceSibling(node), node);
+ node = mergeSiblingsNodes(dom, node, FormatUtils.getNonWhiteSpaceSibling(node, true));
+ }
+ };
+ var clearChildStyles = function (dom, format, node) {
+ if (format.clear_child_styles) {
+ var selector = format.links ? '*:not(a)' : '*';
+ each$e(dom.select(selector, node), function (node) {
+ if (isElementNode(node)) {
+ each$e(format.styles, function (value, name) {
+ dom.setStyle(node, name, '');
+ });
+ }
+ });
+ }
+ };
+ var mergeWithChildren = function (editor, formatList, vars, node) {
+ each$e(formatList, function (format) {
+ each$e(editor.dom.select(format.inline, node), function (child) {
+ if (!isElementNode(child)) {
+ return;
+ }
+ RemoveFormat.removeFormat(editor, format, vars, child, format.exact ? child : null);
+ });
+ clearChildStyles(editor.dom, format, node);
+ });
+ };
+ var mergeWithParents = function (editor, format, name, vars, node) {
+ if (MatchFormat.matchNode(editor, node.parentNode, name, vars)) {
+ if (RemoveFormat.removeFormat(editor, format, vars, node)) {
+ return;
+ }
+ }
+ if (format.merge_with_parents) {
+ editor.dom.getParent(node.parentNode, function (parent) {
+ if (MatchFormat.matchNode(editor, parent, name, vars)) {
+ RemoveFormat.removeFormat(editor, format, vars, node);
+ return true;
+ }
+ });
+ }
+ };
+ var MergeFormats = {
+ mergeWithChildren: mergeWithChildren,
+ mergeUnderlineAndColor: mergeUnderlineAndColor,
+ mergeBackgroundColorAndFontSize: mergeBackgroundColorAndFontSize,
+ mergeSubSup: mergeSubSup,
+ mergeSiblings: mergeSiblings,
+ mergeWithParents: mergeWithParents
+ };
+
+ var each$f = Tools.each;
+ var isElementNode$1 = function (node) {
+ return node && node.nodeType === 1 && !Bookmarks.isBookmarkNode(node) && !isCaretNode(node) && !NodeType.isBogus(node);
+ };
+ var applyFormat = function (ed, name, vars, node) {
+ var formatList = ed.formatter.get(name);
+ var format = formatList[0];
+ var bookmark, rng;
+ var isCollapsed = !node && ed.selection.isCollapsed();
+ var dom = ed.dom, selection = ed.selection;
+ var setElementFormat = function (elm, fmt) {
+ fmt = fmt || format;
+ if (elm) {
+ if (fmt.onformat) {
+ fmt.onformat(elm, fmt, vars, node);
+ }
+ each$f(fmt.styles, function (value, name) {
+ dom.setStyle(elm, name, FormatUtils.replaceVars(value, vars));
+ });
+ if (fmt.styles) {
+ var styleVal = dom.getAttrib(elm, 'style');
+ if (styleVal) {
+ elm.setAttribute('data-mce-style', styleVal);
+ }
+ }
+ each$f(fmt.attributes, function (value, name) {
+ dom.setAttrib(elm, name, FormatUtils.replaceVars(value, vars));
+ });
+ each$f(fmt.classes, function (value) {
+ value = FormatUtils.replaceVars(value, vars);
+ if (!dom.hasClass(elm, value)) {
+ dom.addClass(elm, value);
+ }
+ });
+ }
+ };
+ var applyNodeStyle = function (formatList, node) {
+ var found = false;
+ if (!format.selector) {
+ return false;
+ }
+ each$f(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 wrapName, wrapElm, contentEditable = true;
+ wrapName = format.inline || format.block;
+ wrapElm = dom.create(wrapName);
+ setElementFormat(wrapElm);
+ RangeWalk.walk(dom, rng, function (nodes) {
+ var currentWrapElm;
+ var process = function (node) {
+ var nodeName, parentName, hasContentEditableState, lastContentEditable;
+ lastContentEditable = contentEditable;
+ nodeName = node.nodeName.toLowerCase();
+ parentName = node.parentNode.nodeName.toLowerCase();
+ if (node.nodeType === 1 && dom.getContentEditable(node)) {
+ lastContentEditable = contentEditable;
+ contentEditable = dom.getContentEditable(node) === 'true';
+ hasContentEditableState = true;
+ }
+ if (FormatUtils.isEq(nodeName, 'br')) {
+ currentWrapElm = 0;
+ if (format.block) {
+ dom.remove(node);
+ }
+ return;
+ }
+ if (format.wrapper && MatchFormat.matchNode(ed, node, name, vars)) {
+ currentWrapElm = 0;
+ return;
+ }
+ if (contentEditable && !hasContentEditableState && format.block && !format.wrapper && FormatUtils.isTextBlock(ed, nodeName) && FormatUtils.isValid(ed, parentName, wrapName)) {
+ node = dom.rename(node, wrapName);
+ setElementFormat(node);
+ newWrappers.push(node);
+ currentWrapElm = 0;
+ return;
+ }
+ if (format.selector) {
+ var found = applyNodeStyle(formatList, node);
+ if (!format.inline || found) {
+ currentWrapElm = 0;
+ return;
+ }
+ }
+ if (contentEditable && !hasContentEditableState && FormatUtils.isValid(ed, wrapName, nodeName) && FormatUtils.isValid(ed, parentName, wrapName) && !(!nodeSpecific && node.nodeType === 3 && node.nodeValue.length === 1 && node.nodeValue.charCodeAt(0) === 65279) && !isCaretNode(node) && (!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 = 0;
+ each$f(Tools.grep(node.childNodes), process);
+ if (hasContentEditableState) {
+ contentEditable = lastContentEditable;
+ }
+ currentWrapElm = 0;
+ }
+ };
+ each$f(nodes, process);
+ });
+ if (format.links === true) {
+ each$f(newWrappers, function (node) {
+ var process = function (node) {
+ if (node.nodeName === 'A') {
+ setElementFormat(node, format);
+ }
+ each$f(Tools.grep(node.childNodes), process);
+ };
+ process(node);
+ });
+ }
+ each$f(newWrappers, function (node) {
+ var childCount;
+ var getChildCount = function (node) {
+ var count = 0;
+ each$f(node.childNodes, function (node) {
+ if (!FormatUtils.isWhiteSpaceNode(node) && !Bookmarks.isBookmarkNode(node)) {
+ count++;
+ }
+ });
+ return count;
+ };
+ var getChildElementNode = function (root) {
+ var child = false;
+ each$f(root.childNodes, function (node) {
+ if (isElementNode$1(node)) {
+ child = node;
+ return false;
+ }
+ });
+ return child;
+ };
+ var mergeStyles = function (node) {
+ var child, clone;
+ child = getChildElementNode(node);
+ if (child && !Bookmarks.isBookmarkNode(child) && MatchFormat.matchName(dom, child, format)) {
+ clone = dom.clone(child, false);
+ setElementFormat(clone);
+ dom.replace(clone, node, true);
+ dom.remove(child, 1);
+ }
+ return clone || node;
+ };
+ childCount = getChildCount(node);
+ if ((newWrappers.length > 1 || !dom.isBlock(node)) && childCount === 0) {
+ dom.remove(node, 1);
+ return;
+ }
+ if (format.inline || format.wrapper) {
+ if (!format.exact && childCount === 1) {
+ node = mergeStyles(node);
+ }
+ MergeFormats.mergeWithChildren(ed, formatList, vars, node);
+ MergeFormats.mergeWithParents(ed, format, name, vars, node);
+ MergeFormats.mergeBackgroundColorAndFontSize(dom, format, vars, node);
+ MergeFormats.mergeSubSup(dom, format, vars, node);
+ MergeFormats.mergeSiblings(dom, format, vars, node);
+ }
+ });
+ };
+ if (dom.getContentEditable(selection.getNode()) === 'false') {
+ node = selection.getNode();
+ for (var i = 0, l = formatList.length; i < l; i++) {
+ if (formatList[i].ceFalseOverride && dom.is(node, formatList[i].selector)) {
+ setElementFormat(node, formatList[i]);
+ return;
+ }
+ }
+ return;
+ }
+ if (format) {
+ if (node) {
+ if (node.nodeType) {
+ if (!applyNodeStyle(formatList, node)) {
+ rng = dom.createRng();
+ rng.setStartBefore(node);
+ rng.setEndAfter(node);
+ applyRngStyle(dom, ExpandRange.expandRng(ed, rng, formatList), null, true);
+ }
+ } else {
+ applyRngStyle(dom, node, null, true);
+ }
+ } else {
+ if (!isCollapsed || !format.inline || dom.select('td[data-mce-selected],th[data-mce-selected]').length) {
+ var curSelNode = ed.selection.getNode();
+ if (!ed.settings.forced_root_block && formatList[0].defaultBlock && !dom.getParent(curSelNode, dom.isBlock)) {
+ applyFormat(ed, formatList[0].defaultBlock);
+ }
+ ed.selection.setRng(RangeNormalizer.normalize(ed.selection.getRng()));
+ bookmark = GetBookmark.getPersistentBookmark(ed.selection, true);
+ applyRngStyle(dom, ExpandRange.expandRng(ed, selection.getRng(), formatList), bookmark);
+ if (format.styles) {
+ MergeFormats.mergeUnderlineAndColor(dom, format, vars, curSelNode);
+ }
+ selection.moveToBookmark(bookmark);
+ FormatUtils.moveStart(dom, selection, selection.getRng());
+ ed.nodeChanged();
+ } else {
+ applyCaretFormat(ed, name, vars);
+ }
+ }
+ Hooks.postProcess(name, ed);
+ }
+ };
+ var ApplyFormat = { applyFormat: applyFormat };
+
+ var each$g = Tools.each;
+ var setup$5 = function (formatChangeData, editor) {
+ var currentFormats = {};
+ formatChangeData.set({});
+ editor.on('NodeChange', function (e) {
+ var parents = FormatUtils.getParents(editor.dom, e.element);
+ var matchedFormats = {};
+ parents = Tools.grep(parents, function (node) {
+ return node.nodeType === 1 && !node.getAttribute('data-mce-bogus');
+ });
+ each$g(formatChangeData.get(), function (callbacks, format) {
+ each$g(parents, function (node) {
+ if (editor.formatter.matchNode(node, format, {}, callbacks.similar)) {
+ if (!currentFormats[format]) {
+ each$g(callbacks, function (callback) {
+ callback(true, {
+ node: node,
+ format: format,
+ parents: parents
+ });
+ });
+ currentFormats[format] = callbacks;
+ }
+ matchedFormats[format] = callbacks;
+ return false;
+ }
+ if (MatchFormat.matchesUnInheritedFormatSelector(editor, node, format)) {
+ return false;
+ }
+ });
+ });
+ each$g(currentFormats, function (callbacks, format) {
+ if (!matchedFormats[format]) {
+ delete currentFormats[format];
+ each$g(callbacks, function (callback) {
+ callback(false, {
+ node: e.element,
+ format: format,
+ parents: parents
+ });
+ });
+ }
+ });
+ });
+ };
+ var addListeners = function (formatChangeData, formats, callback, similar) {
+ var formatChangeItems = formatChangeData.get();
+ each$g(formats.split(','), function (format) {
+ if (!formatChangeItems[format]) {
+ formatChangeItems[format] = [];
+ formatChangeItems[format].similar = similar;
+ }
+ formatChangeItems[format].push(callback);
+ });
+ formatChangeData.set(formatChangeItems);
+ };
+ var formatChanged = function (editor, formatChangeState, formats, callback, similar) {
+ if (formatChangeState.get() === null) {
+ setup$5(formatChangeState, editor);
+ }
+ addListeners(formatChangeState, formats, callback, similar);
+ };
+ var FormatChanged = { formatChanged: formatChanged };
+
+ var get$8 = 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',
+ 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',
+ 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',
+ 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'
+ },
+ {
+ inline: 'span',
+ styles: { fontWeight: 'bold' }
+ },
+ {
+ inline: 'b',
+ remove: 'all'
+ }
+ ],
+ italic: [
+ {
+ inline: 'em',
+ remove: 'all'
+ },
+ {
+ inline: 'span',
+ styles: { fontStyle: 'italic' }
+ },
+ {
+ inline: 'i',
+ remove: 'all'
+ }
+ ],
+ underline: [
+ {
+ inline: 'span',
+ styles: { textDecoration: 'underline' },
+ exact: true
+ },
+ {
+ inline: 'u',
+ remove: 'all'
+ }
+ ],
+ strikethrough: [
+ {
+ inline: 'span',
+ styles: { textDecoration: 'line-through' },
+ exact: true
+ },
+ {
+ inline: 'strike',
+ remove: 'all'
+ }
+ ],
+ 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
+ },
+ fontsize_class: {
+ inline: 'span',
+ attributes: { class: '%value' }
+ },
+ blockquote: {
+ block: 'blockquote',
+ wrapper: 1,
+ remove: 'all'
+ },
+ subscript: { inline: 'sub' },
+ superscript: { inline: 'sup' },
+ code: { inline: 'code' },
+ link: {
+ inline: 'a',
+ selector: 'a',
+ remove: 'all',
+ split: true,
+ deep: true,
+ onmatch: function () {
+ return true;
+ },
+ 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,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins',
+ 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 div dt dd samp'.split(/\s/), function (name) {
+ formats[name] = {
+ block: name,
+ remove: 'all'
+ };
+ });
+ return formats;
+ };
+ var DefaultFormats = { get: get$8 };
+
+ function FormatRegistry (editor) {
+ var formats = {};
+ var get = function (name) {
+ return name ? formats[name] : formats;
+ };
+ var register = function (name, format) {
+ if (name) {
+ if (typeof name !== 'string') {
+ Tools.each(name, function (format, name) {
+ register(name, format);
+ });
+ } else {
+ format = format.length ? 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(DefaultFormats.get(editor.dom));
+ register(editor.settings.formats);
+ return {
+ get: get,
+ register: register,
+ unregister: unregister
+ };
+ }
+
+ var each$h = Tools.each;
+ var dom = DOMUtils$1.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) {
+ var elm;
+ item = typeof sItem === 'string' ? {
+ name: sItem,
+ classes: [],
+ attrs: {}
+ } : sItem;
+ 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, parentRequired;
+ var ancestor = ancestry.length > 0 && ancestry[0];
+ var ancestorName = ancestor && ancestor.name;
+ 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 selectorToHtml = function (selector, editor) {
+ return parsedSelectorToHtml(parseSelector(selector), editor);
+ };
+ 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, previewElm, items;
+ var previewCss = '', parentFontSize, previewStyles;
+ previewStyles = editor.settings.preview_styles;
+ if (previewStyles === false) {
+ return '';
+ }
+ if (typeof previewStyles !== 'string') {
+ previewStyles = 'font-family font-size font-weight font-style text-decoration ' + 'text-transform color background-color border border-radius outline text-shadow';
+ }
+ 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) {
+ previewStyles = format.preview;
+ if (previewStyles === false) {
+ return '';
+ }
+ }
+ name = format.block || format.inline || 'span';
+ 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);
+ }
+ previewElm = dom.select(name, previewFrag)[0] || previewFrag.firstChild;
+ each$h(format.styles, function (value, name) {
+ value = removeVars(value);
+ if (value) {
+ dom.setStyle(previewElm, name, value);
+ }
+ });
+ each$h(format.attributes, function (value, name) {
+ value = removeVars(value);
+ if (value) {
+ dom.setAttrib(previewElm, name, value);
+ }
+ });
+ each$h(format.classes, function (value) {
+ value = removeVars(value);
+ if (!dom.hasClass(previewElm, value)) {
+ dom.addClass(previewElm, value);
+ }
+ });
+ 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$h(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 Preview = {
+ getCssText: getCssText,
+ parseSelector: parseSelector,
+ selectorToHtml: selectorToHtml
+ };
+
+ var toggle$3 = function (editor, formats, name, vars, node) {
+ var fmt = formats.get(name);
+ if (MatchFormat.match(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) {
+ RemoveFormat.remove(editor, name, vars, node);
+ } else {
+ ApplyFormat.applyFormat(editor, name, vars, node);
+ }
+ };
+ var ToggleFormat = { toggle: toggle$3 };
+
+ 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 FormatShortcuts = { setup: setup$6 };
+
+ function Formatter (editor) {
+ var formats = FormatRegistry(editor);
+ var formatChangeState = Cell(null);
+ FormatShortcuts.setup(editor);
+ setup$4(editor);
+ return {
+ get: formats.get,
+ register: formats.register,
+ unregister: formats.unregister,
+ apply: curry(ApplyFormat.applyFormat, editor),
+ remove: curry(RemoveFormat.remove, editor),
+ toggle: curry(ToggleFormat.toggle, editor, formats),
+ match: curry(MatchFormat.match, editor),
+ matchAll: curry(MatchFormat.matchAll, editor),
+ matchNode: curry(MatchFormat.matchNode, editor),
+ canApply: curry(MatchFormat.canApply, editor),
+ formatChanged: curry(FormatChanged.formatChanged, editor, formatChangeState),
+ getCssText: curry(Preview.getCssText, editor)
+ };
+ }
+
+ var hasOwnProperty$2 = Object.prototype.hasOwnProperty;
+ var shallow$1 = function (old, nu) {
+ return nu;
+ };
+ var baseMerge = function (merger) {
+ return function () {
+ var objects = new Array(arguments.length);
+ for (var i = 0; i < objects.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 merge = baseMerge(shallow$1);
+
+ var register = 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.attributes.map['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.attributes.map[internalName];
+ if (value !== undefined) {
+ node.attr(name, value.length > 0 ? value : null);
+ node.attr(internalName, null);
+ } else {
+ value = node.attributes.map[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.attributes.map['data-mce-type'] === 'bookmark' && !args.cleanup) {
+ 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 (node.value.indexOf('[CDATA[') === 0) {
+ node.name = '#cdata';
+ node.type = 4;
+ node.value = 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' && !('type' in node.attributes.map)) {
+ 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', function (nodes, name) {
+ var i = nodes.length;
+ while (i--) {
+ nodes[i].attr(name, null);
+ }
+ });
+ };
+ var trimTrailingBr = function (rootNode) {
+ var brNode1, brNode2;
+ var isBr = function (node) {
+ return node && node.name === 'br';
+ };
+ brNode1 = rootNode.lastChild;
+ if (isBr(brNode1)) {
+ brNode2 = brNode1.prev;
+ if (isBr(brNode2)) {
+ brNode1.remove();
+ brNode2.remove();
+ }
+ }
+ };
+ var DomSerializerFilters = {
+ register: register,
+ trimTrailingBr: trimTrailingBr
+ };
+
+ var preProcess = function (editor, node, args) {
+ var impl, doc, oldDoc;
+ var dom = editor.dom;
+ node = node.cloneNode(true);
+ 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;
+ }
+ Events.firePreProcess(editor, merge(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 DomSerializerPreProcess = { process: process };
+
+ 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 LegacyFilter = { register: register$1 };
+
+ var whiteSpaceRegExp$3 = /^[ \t\r\n]*$/;
+ var typeLookup = {
+ '#text': 3,
+ '#comment': 8,
+ '#cdata': 4,
+ '#pi': 7,
+ '#doctype': 10,
+ '#document-fragment': 11
+ };
+ var walk$2 = function (node, root, prev) {
+ var sibling;
+ var parent;
+ var startName = prev ? 'lastChild' : 'firstChild';
+ var siblingName = prev ? 'prev' : 'next';
+ if (node[startName]) {
+ return node[startName];
+ }
+ if (node !== root) {
+ sibling = node[siblingName];
+ if (sibling) {
+ return sibling;
+ }
+ for (parent = node.parent; parent && parent !== root; parent = parent.parent) {
+ sibling = parent[siblingName];
+ if (sibling) {
+ return sibling;
+ }
+ }
+ }
+ };
+ var Node$2 = function () {
+ function Node(name, type) {
+ this.name = name;
+ this.type = type;
+ if (type === 1) {
+ this.attributes = [];
+ this.attributes.map = {};
+ }
+ }
+ Node.create = function (name, attrs) {
+ var node, attrName;
+ node = new Node(name, typeLookup[name] || 1);
+ if (attrs) {
+ for (attrName in attrs) {
+ node.attr(attrName, attrs[attrName]);
+ }
+ }
+ return node;
+ };
+ Node.prototype.replace = function (node) {
+ var self = this;
+ if (node.parent) {
+ node.remove();
+ }
+ self.insert(node, self);
+ self.remove();
+ return self;
+ };
+ Node.prototype.attr = function (name, value) {
+ var self = this;
+ var attrs, i;
+ if (typeof name !== 'string') {
+ for (i in name) {
+ self.attr(i, name[i]);
+ }
+ return self;
+ }
+ if (attrs = self.attributes) {
+ if (value !== undefined) {
+ if (value === null) {
+ if (name in attrs.map) {
+ delete attrs.map[name];
+ i = attrs.length;
+ while (i--) {
+ if (attrs[i].name === name) {
+ attrs = attrs.splice(i, 1);
+ return self;
+ }
+ }
+ }
+ return self;
+ }
+ if (name in attrs.map) {
+ 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];
+ }
+ };
+ Node.prototype.clone = function () {
+ var self = this;
+ var clone = new Node(self.name, self.type);
+ var i, l, selfAttrs, selfAttr, cloneAttrs;
+ if (selfAttrs = self.attributes) {
+ cloneAttrs = [];
+ cloneAttrs.map = {};
+ for (i = 0, l = selfAttrs.length; i < l; i++) {
+ 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;
+ };
+ Node.prototype.wrap = function (wrapper) {
+ var self = this;
+ self.parent.insert(wrapper, self);
+ wrapper.append(self);
+ return self;
+ };
+ Node.prototype.unwrap = function () {
+ var self = this;
+ var node, next;
+ for (node = self.firstChild; node;) {
+ next = node.next;
+ self.insert(node, self, true);
+ node = next;
+ }
+ self.remove();
+ };
+ Node.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;
+ };
+ Node.prototype.append = function (node) {
+ var self = this;
+ var last;
+ if (node.parent) {
+ node.remove();
+ }
+ 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;
+ };
+ Node.prototype.insert = function (node, refNode, before) {
+ var parent;
+ if (node.parent) {
+ node.remove();
+ }
+ 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;
+ };
+ Node.prototype.getAll = function (name) {
+ var self = this;
+ var node;
+ var collection = [];
+ for (node = self.firstChild; node; node = walk$2(node, self)) {
+ if (node.name === name) {
+ collection.push(node);
+ }
+ }
+ return collection;
+ };
+ Node.prototype.empty = function () {
+ var self = this;
+ var nodes, i, node;
+ if (self.firstChild) {
+ nodes = [];
+ for (node = self.firstChild; node; node = walk$2(node, self)) {
+ nodes.push(node);
+ }
+ i = nodes.length;
+ while (i--) {
+ node = nodes[i];
+ node.parent = node.firstChild = node.lastChild = node.next = node.prev = null;
+ }
+ }
+ self.firstChild = self.lastChild = null;
+ return self;
+ };
+ Node.prototype.isEmpty = function (elements, whitespace, predicate) {
+ var self = this;
+ var node = self.firstChild, i, name;
+ whitespace = whitespace || {};
+ if (node) {
+ do {
+ if (node.type === 1) {
+ if (node.attributes.map['data-mce-bogus']) {
+ continue;
+ }
+ if (elements[node.name]) {
+ return false;
+ }
+ i = node.attributes.length;
+ while (i--) {
+ name = node.attributes[i].name;
+ if (name === 'name' || name.indexOf('data-mce-bookmark') === 0) {
+ return false;
+ }
+ }
+ }
+ if (node.type === 8) {
+ return false;
+ }
+ if (node.type === 3 && !whiteSpaceRegExp$3.test(node.value)) {
+ return false;
+ }
+ if (node.type === 3 && node.parent && whitespace[node.parent.name] && whiteSpaceRegExp$3.test(node.value)) {
+ return false;
+ }
+ if (predicate && predicate(node)) {
+ return false;
+ }
+ } while (node = walk$2(node, self));
+ }
+ return true;
+ };
+ Node.prototype.walk = function (prev) {
+ return walk$2(this, null, prev);
+ };
+ return Node;
+ }();
+
+ 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 Node$2('br', 1)).shortEnded = true;
+ } else {
+ node.empty().append(new Node$2('#text', 3)).value = '\xA0';
+ }
+ };
+ var isPaddedWithNbsp = function (node) {
+ return hasOnlyChild(node, '#text') && node.firstChild.value === '\xA0';
+ };
+ 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 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.getNonEmptyElements();
+ 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') {
+ break;
+ }
+ 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 Node$2('#text', 3);
+ textNode.value = '\xA0';
+ node.replace(textNode);
+ }
+ }
+ }
+ });
+ }
+ parser.addAttributeFilter('href', function (nodes) {
+ var i = nodes.length, node;
+ 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--) {
+ 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 Node$2('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);
+ }
+ });
+ }
+ };
+
+ var makeMap$4 = Tools.makeMap, each$i = Tools.each, explode$3 = Tools.explode, extend$3 = Tools.extend;
+ function DomParser (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 nonEmptyElements, whitespaceElements, nonSplitableElements, textBlockElements, specialElements, sibling, nextNode;
+ nonSplitableElements = makeMap$4('tr,td,th,tbody,thead,tfoot,table');
+ nonEmptyElements = schema.getNonEmptyElements();
+ whitespaceElements = schema.getWhiteSpaceElements();
+ textBlockElements = schema.getTextBlockElements();
+ 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 === 'ul')) {
+ sibling.append(node);
+ continue;
+ }
+ sibling = node.next;
+ if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {
+ sibling.insert(node, sibling.firstChild, true);
+ continue;
+ }
+ node.wrap(filterNode(new Node$2('ul', 1)));
+ continue;
+ }
+ if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {
+ node.wrap(filterNode(new Node$2('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$i(explode$3(name), function (name) {
+ var list = nodeFilters[name];
+ if (!list) {
+ nodeFilters[name] = list = [];
+ }
+ list.push(callback);
+ });
+ };
+ var getNodeFilters = function () {
+ var out = [];
+ for (var name in nodeFilters) {
+ if (nodeFilters.hasOwnProperty(name)) {
+ out.push({
+ name: name,
+ callbacks: nodeFilters[name]
+ });
+ }
+ }
+ return out;
+ };
+ var addAttributeFilter = function (name, callback) {
+ each$i(explode$3(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 parser, nodes, i, l, fi, fl, list, name;
+ var blockElements;
+ var invalidChildren = [];
+ var isInWhiteSpacePreservedElement;
+ var node;
+ args = args || {};
+ matchedNodes = {};
+ matchedAttributes = {};
+ blockElements = extend$3(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 rootBlockName = 'forced_root_block' in args ? args.forced_root_block : settings.forced_root_block;
+ 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 Node$2(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;
+ };
+ parser = SaxParser$1({
+ validate: validate,
+ allow_script_urls: settings.allow_script_urls,
+ allow_conditional_comments: settings.allow_conditional_comments,
+ 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;
+ newNode = node.append(createNode('#doctype', 10));
+ newNode.value = text;
+ removeWhitespaceBefore(node);
+ },
+ start: function (name, attrs, empty) {
+ var newNode, attrFiltersLen, elementRule, attrName, parent;
+ 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, elementRule, text, sibling, tempNode;
+ 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)) {
+ if (!node.attributes.map.name && !node.attr('id')) {
+ 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 Node$2(args.context || settings.root_name, 11);
+ parser.parse(html);
+ 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) {
+ 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);
+ LegacyFilter.register(exports, settings);
+ return exports;
+ }
+
+ 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 = Events.firePostProcess(editor, merge(args, { content: content }));
+ return outArgs.content;
+ } else {
+ return content;
+ }
+ };
+ var getHtmlFromNode = function (dom, node, args) {
+ var html = Zwsp.trim(args.getInner ? node.innerHTML : dom.getOuterHTML(node));
+ return args.selection || isWsPreserveElement(Element$$1.fromDom(node)) ? html : Tools.trim(html);
+ };
+ var parseHtml = function (htmlParser, html, args) {
+ var parserArgs = args.selection ? merge({ forced_root_block: false }, args) : args;
+ var rootNode = htmlParser.parse(html, parserArgs);
+ DomSerializerFilters.trimTrailingBr(rootNode);
+ return rootNode;
+ };
+ var serializeNode = function (settings, schema, node) {
+ var htmlSerializer = Serializer(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);
+ };
+ function DomSerializer (settings, editor) {
+ var dom, schema, htmlParser;
+ var tempAttrs = ['data-mce-selected'];
+ dom = editor && editor.dom ? editor.dom : DOMUtils$1.DOM;
+ 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;
+ htmlParser = DomParser(settings, schema);
+ DomSerializerFilters.register(htmlParser, settings, dom);
+ var serialize = function (node, parserArgs) {
+ var args = merge({ format: 'html' }, parserArgs ? parserArgs : {});
+ var targetNode = DomSerializerPreProcess.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: function () {
+ return tempAttrs;
+ }
+ };
+ }
+
+ function Serializer$1 (settings, editor) {
+ var domSerializer = DomSerializer(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
+ };
+ }
+
+ function BookmarkManager(selection) {
+ return {
+ getBookmark: curry(Bookmarks.getBookmark, selection),
+ moveToBookmark: curry(Bookmarks.moveToBookmark, selection)
+ };
+ }
+ (function (BookmarkManager) {
+ BookmarkManager.isBookmarkNode = Bookmarks.isBookmarkNode;
+ }(BookmarkManager || (BookmarkManager = {})));
+ var BookmarkManager$1 = BookmarkManager;
+
+ var isContentEditableFalse$a = NodeType.isContentEditableFalse;
+ var isContentEditableTrue$6 = NodeType.isContentEditableTrue;
+ var getContentEditableRoot$2 = function (root, node) {
+ while (node && node !== root) {
+ if (isContentEditableTrue$6(node) || isContentEditableFalse$a(node)) {
+ return node;
+ }
+ node = node.parentNode;
+ }
+ return null;
+ };
+ var ControlSelection = function (selection, editor) {
+ var dom = editor.dom, each = Tools.each;
+ var selectedElm, selectedElmGhost, resizeHelper, resizeHandles, selectedHandle;
+ 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;
+ resizeHandles = {
+ nw: [
+ 0,
+ 0,
+ -1,
+ -1
+ ],
+ ne: [
+ 1,
+ 0,
+ 1,
+ -1
+ ],
+ se: [
+ 1,
+ 1,
+ 1,
+ 1
+ ],
+ sw: [
+ 0,
+ 1,
+ -1,
+ 1
+ ]
+ };
+ var rootClass = '.mce-content-body';
+ editor.contentStyles.push(rootClass + ' div.mce-resizehandle {' + 'position: absolute;' + 'border: 1px solid black;' + 'box-sizing: content-box;' + 'background: #FFF;' + 'width: 7px;' + 'height: 7px;' + 'z-index: 10000' + '}' + rootClass + ' .mce-resizehandle:hover {' + 'background: #000' + '}' + rootClass + ' img[data-mce-selected],' + rootClass + ' hr[data-mce-selected] {' + 'outline: 1px solid black;' + 'resize: none' + '}' + rootClass + ' .mce-clonedresizable {' + 'position: absolute;' + (Env.gecko ? '' : 'outline: 1px dashed black;') + 'opacity: .5;' + 'filter: alpha(opacity=50);' + 'z-index: 10000' + '}' + rootClass + ' .mce-resize-helper {' + 'background: #555;' + 'background: rgba(0,0,0,0.75);' + 'border-radius: 3px;' + 'border: 1px;' + 'color: white;' + 'display: none;' + 'font-family: sans-serif;' + 'font-size: 12px;' + 'white-space: nowrap;' + 'line-height: 14px;' + 'margin: 5px 10px;' + 'padding: 5px;' + 'position: absolute;' + 'z-index: 10001' + '}');
+ var isImage = function (elm) {
+ return elm && (elm.nodeName === 'IMG' || editor.dom.is(elm, 'figure.image'));
+ };
+ var isEventOnImageOutsideRange = function (evt, range) {
+ return isImage(evt.target) && !RangePoint.isXYWithinRange(evt.clientX, evt.clientY, range);
+ };
+ var contextMenuSelectImage = function (evt) {
+ var target = evt.target;
+ if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {
+ evt.preventDefault();
+ editor.selection.select(target);
+ }
+ };
+ var getResizeTarget = function (elm) {
+ return editor.dom.is(elm, 'figure.image') ? elm.querySelector('img') : elm;
+ };
+ var isResizable = function (elm) {
+ var selector = editor.settings.object_resizing;
+ if (selector === false || Env.iOS) {
+ return false;
+ }
+ if (typeof selector !== 'string') {
+ selector = 'table,img,figure.image,div';
+ }
+ if (elm.getAttribute('data-mce-resize') === 'false') {
+ return false;
+ }
+ if (elm === editor.getBody()) {
+ return false;
+ }
+ return is$1(Element$$1.fromDom(elm), selector);
+ };
+ 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) && editor.settings.resize_img_proportional !== false) {
+ proportional = !VK.modifierPressed(e);
+ } else {
+ proportional = VK.modifierPressed(e) || isImage(selectedElm) && selectedHandle[2] * selectedHandle[3] !== 0;
+ }
+ if (proportional) {
+ if (abs(deltaX) > abs(deltaY)) {
+ height = round(width * ratio);
+ width = round(height / ratio);
+ } else {
+ width = round(height / ratio);
+ height = round(width * ratio);
+ }
+ }
+ dom.setStyles(getResizeTarget(selectedElmGhost), {
+ width: width,
+ height: 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) {
+ Events.fireObjectResizeStart(editor, selectedElm, startW, startH);
+ resizeStarted = true;
+ }
+ };
+ var endGhostResize = function () {
+ resizeStarted = false;
+ var setSizeProp = function (name$$1, value) {
+ if (value) {
+ if (selectedElm.style[name$$1] || !editor.schema.isValid(selectedElm.nodeName.toLowerCase(), name$$1)) {
+ dom.setStyle(getResizeTarget(selectedElm), name$$1, value);
+ } else {
+ dom.setAttrib(getResizeTarget(selectedElm), name$$1, value);
+ }
+ }
+ };
+ setSizeProp('width', width);
+ setSizeProp('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);
+ showResizeRect(selectedElm);
+ Events.fireObjectResized(editor, selectedElm, width, height);
+ dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style'));
+ editor.nodeChanged();
+ };
+ var showResizeRect = function (targetElm) {
+ var position, targetWidth, targetHeight, e, rect;
+ hideResizeRect();
+ unbindResizeHandleEvents();
+ position = dom.getPos(targetElm, rootElement);
+ selectedElmX = position.x;
+ selectedElmY = position.y;
+ rect = targetElm.getBoundingClientRect();
+ targetWidth = rect.width || rect.right - rect.left;
+ targetHeight = rect.height || rect.bottom - rect.top;
+ if (selectedElm !== targetElm) {
+ selectedElm = targetElm;
+ width = height = 0;
+ }
+ e = editor.fire('ObjectSelected', { target: targetElm });
+ if (isResizable(targetElm) && !e.isDefaultPrevented()) {
+ each(resizeHandles, function (handle, name$$1) {
+ var handleElm;
+ var startDrag = function (e) {
+ startX = e.screenX;
+ startY = e.screenY;
+ startW = getResizeTarget(selectedElm).clientWidth;
+ startH = getResizeTarget(selectedElm).clientHeight;
+ ratio = startH / startW;
+ selectedHandle = handle;
+ handle.startPos = {
+ x: targetWidth * handle[0] + selectedElmX,
+ y: targetHeight * handle[1] + selectedElmY
+ };
+ startScrollWidth = rootElement.scrollWidth;
+ startScrollHeight = rootElement.scrollHeight;
+ selectedElmGhost = selectedElm.cloneNode(true);
+ dom.addClass(selectedElmGhost, 'mce-clonedresizable');
+ dom.setAttrib(selectedElmGhost, 'data-mce-bogus', 'all');
+ selectedElmGhost.contentEditable = false;
+ selectedElmGhost.unSelectabe = true;
+ dom.setStyles(selectedElmGhost, {
+ left: selectedElmX,
+ top: selectedElmY,
+ margin: 0
+ });
+ selectedElmGhost.removeAttribute('data-mce-selected');
+ 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$$1);
+ if (handleElm) {
+ dom.remove(handleElm);
+ }
+ handleElm = dom.add(rootElement, 'div', {
+ 'id': 'mceResizeHandle' + name$$1,
+ 'data-mce-bogus': 'all',
+ 'class': 'mce-resizehandle',
+ 'unselectable': true,
+ 'style': 'cursor:' + name$$1 + '-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();
+ }
+ selectedElm.setAttribute('data-mce-selected', '1');
+ };
+ var hideResizeRect = function () {
+ var name$$1, handleElm;
+ unbindResizeHandleEvents();
+ if (selectedElm) {
+ selectedElm.removeAttribute('data-mce-selected');
+ }
+ for (name$$1 in resizeHandles) {
+ handleElm = dom.get('mceResizeHandle' + name$$1);
+ if (handleElm) {
+ dom.unbind(handleElm);
+ dom.remove(handleElm);
+ }
+ }
+ };
+ var updateResizeRect = function (e) {
+ var startElm, controlElm;
+ var isChildOrEqual = function (node, parent$$1) {
+ if (node) {
+ do {
+ if (node === parent$$1) {
+ return true;
+ }
+ } while (node = node.parentNode);
+ }
+ };
+ if (resizeStarted || editor.removed) {
+ return;
+ }
+ each(dom.select('img[data-mce-selected],hr[data-mce-selected]'), function (img) {
+ img.removeAttribute('data-mce-selected');
+ });
+ controlElm = e.type === 'mousedown' ? e.target : selection.getNode();
+ controlElm = dom.$(controlElm).closest('table,img,figure.image,hr')[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$a(getContentEditableRoot$2(editor.getBody(), elm));
+ };
+ var unbindResizeHandleEvents = function () {
+ for (var name$$1 in resizeHandles) {
+ var handle = resizeHandles[name$$1];
+ 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.ie && Env.ie >= 11) {
+ 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();
+ }
+ }
+ });
+ editor.dom.bind(rootElement, 'mscontrolselect', function (e) {
+ var delayedSelect = function (node) {
+ Delay.setEditorTimeout(editor, function () {
+ editor.selection.select(node);
+ });
+ };
+ if (isWithinContentEditableFalse(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);
+ }
+ }
+ });
+ }
+ var throttledUpdateResizeRect = Delay.throttle(function (e) {
+ if (!editor.composing) {
+ updateResizeRect(e);
+ }
+ });
+ editor.on('nodechange ResizeEditor ResizeWindow drop FullscreenStateChanged', throttledUpdateResizeRect);
+ editor.on('keyup compositionend', function (e) {
+ if (selectedElm && selectedElm.nodeName === 'TABLE') {
+ throttledUpdateResizeRect(e);
+ }
+ });
+ editor.on('hide blur', hideResizeRect);
+ editor.on('contextmenu', contextMenuSelectImage);
+ });
+ editor.on('remove', unbindResizeHandleEvents);
+ var destroy = function () {
+ selectedElm = selectedElmGhost = null;
+ };
+ return {
+ isResizable: isResizable,
+ showResizeRect: showResizeRect,
+ hideResizeRect: hideResizeRect,
+ updateResizeRect: updateResizeRect,
+ destroy: destroy
+ };
+ };
+
+ var getPos$1 = function (elm) {
+ var x = 0, y = 0;
+ var offsetParent = elm;
+ while (offsetParent && offsetParent.nodeType) {
+ x += offsetParent.offsetLeft || 0;
+ y += offsetParent.offsetTop || 0;
+ offsetParent = offsetParent.offsetParent;
+ }
+ return {
+ x: x,
+ y: y
+ };
+ };
+ var fireScrollIntoViewEvent = function (editor, elm, alignToTop) {
+ var scrollEvent = {
+ elm: elm,
+ alignToTop: alignToTop
+ };
+ editor.fire('scrollIntoView', scrollEvent);
+ return scrollEvent.isDefaultPrevented();
+ };
+ var scrollElementIntoView = function (editor, elm, alignToTop) {
+ var y, viewPort;
+ var dom = editor.dom;
+ var root = dom.getRoot();
+ var viewPortY, viewPortH, offsetY = 0;
+ if (fireScrollIntoViewEvent(editor, elm, alignToTop)) {
+ return;
+ }
+ if (!NodeType.isElement(elm)) {
+ return;
+ }
+ if (alignToTop === false) {
+ offsetY = elm.offsetHeight;
+ }
+ if (root.nodeName !== 'BODY') {
+ var scrollContainer = editor.selection.getScrollContainer();
+ if (scrollContainer) {
+ y = getPos$1(elm).y - getPos$1(scrollContainer).y + offsetY;
+ viewPortH = scrollContainer.clientHeight;
+ viewPortY = scrollContainer.scrollTop;
+ if (y < viewPortY || y + 25 > viewPortY + viewPortH) {
+ scrollContainer.scrollTop = y < viewPortY ? y : y - viewPortH + 25;
+ }
+ return;
+ }
+ }
+ viewPort = dom.getViewPort(editor.getWin());
+ y = dom.getPos(elm).y + offsetY;
+ viewPortY = viewPort.y;
+ viewPortH = viewPort.h;
+ if (y < viewPort.y || y + 25 > viewPortY + viewPortH) {
+ editor.getWin().scrollTo(0, y < viewPortY ? y : y - viewPortH + 25);
+ }
+ };
+ var getViewPortRect = function (editor) {
+ if (editor.inline) {
+ return editor.getBody().getBoundingClientRect();
+ } else {
+ var win = editor.getWin();
+ return {
+ left: 0,
+ right: win.innerWidth,
+ top: 0,
+ bottom: win.innerHeight,
+ width: win.innerWidth,
+ height: win.innerHeight
+ };
+ }
+ };
+ var scrollBy = function (editor, dx, dy) {
+ if (editor.inline) {
+ editor.getBody().scrollLeft += dx;
+ editor.getBody().scrollTop += dy;
+ } else {
+ editor.getWin().scrollBy(dx, dy);
+ }
+ };
+ var scrollRangeIntoView = function (editor, rng) {
+ head(CaretPosition.fromRangeStart(rng).getClientRects()).each(function (rngRect) {
+ var bodyRect = getViewPortRect(editor);
+ var overflow = getOverflow(bodyRect, rngRect);
+ var margin = 4;
+ var dx = overflow.x > 0 ? overflow.x + margin : overflow.x - margin;
+ var dy = overflow.y > 0 ? overflow.y + margin : overflow.y - margin;
+ scrollBy(editor, overflow.x !== 0 ? dx : 0, overflow.y !== 0 ? dy : 0);
+ });
+ };
+ var ScrollIntoView = {
+ scrollElementIntoView: scrollElementIntoView,
+ scrollRangeIntoView: scrollRangeIntoView
+ };
+
+ var hasCeProperty = function (node) {
+ return NodeType.isContentEditableTrue(node) || NodeType.isContentEditableFalse(node);
+ };
+ var findParent$1 = 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 element, rng, rects;
+ element = doc.elementFromPoint(clientX, clientY);
+ 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 NodeType.isContentEditableFalse(findParent$1(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 CaretRangeFromPoint = { fromPoint: fromPoint$1 };
+
+ var processRanges = function (editor, ranges) {
+ return map(ranges, function (range$$1) {
+ var evt = editor.fire('GetSelectionRange', { range: range$$1 });
+ return evt.range !== range$$1 ? evt.range : range$$1;
+ });
+ };
+ var EventProcessRanges = { processRanges: processRanges };
+
+ var fromElements = function (elements, scope) {
+ var doc = scope || document;
+ var fragment = doc.createDocumentFragment();
+ each(elements, function (element) {
+ fragment.appendChild(element.dom());
+ });
+ return Element$$1.fromDom(fragment);
+ };
+
+ var tableModel = Immutable('element', 'width', 'rows');
+ var tableRow = Immutable('element', 'cells');
+ var cellPosition = Immutable('x', 'y');
+ var getSpan = function (td, key) {
+ var value = parseInt(get$1(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(cells[x], element)) {
+ return Option.some(cellPosition(x, y));
+ }
+ }
+ }
+ return Option.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 = Element$$1.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(td, 'colspan');
+ remove(td, 'rowspan');
+ return td;
+ });
+ var tr = shallow(row.element());
+ append$1(tr, cells);
+ return tr;
+ });
+ };
+ var fromDom$2 = 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 SimpleTableModel = {
+ fromDom: fromDom$2,
+ toDom: toDom,
+ subsection: subsection
+ };
+
+ var findParentListContainer = function (parents$$1) {
+ return find(parents$$1, function (elm) {
+ return name(elm) === 'ul' || name(elm) === 'ol';
+ });
+ };
+ var getFullySelectedListWrappers = function (parents$$1, rng) {
+ return find(parents$$1, function (elm) {
+ return name(elm) === 'li' && hasAllContentsSelected(elm, rng);
+ }).fold(constant([]), function (li) {
+ return findParentListContainer(parents$$1).map(function (listCont) {
+ return [
+ Element$$1.fromTag('li'),
+ Element$$1.fromTag(name(listCont))
+ ];
+ }).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 = Element$$1.fromDom(rng.commonAncestorContainer);
+ var parents$$1 = Parents.parentsAndSelf(commonAnchorContainer, rootNode);
+ var wrapElements = filter(parents$$1, function (elm) {
+ return isInline(elm) || isHeading(elm);
+ });
+ var listWrappers = getFullySelectedListWrappers(parents$$1, 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(Element$$1.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng));
+ };
+ var getParentTable = function (rootElm, cell) {
+ return ancestor$1(cell, 'table', curry(eq, 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 = SimpleTableModel.fromDom(tableElm);
+ return SimpleTableModel.subsection(fullTableModel, firstCell, lastCell).map(function (sectionedTableModel) {
+ return fromElements([SimpleTableModel.toDom(sectionedTableModel)]);
+ });
+ }).getOrThunk(emptyFragment);
+ };
+ var getSelectionFragment = function (rootNode, ranges) {
+ return ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0]);
+ };
+ var read$4 = function (rootNode, ranges) {
+ var selectedCells = TableCellSelection.getCellsFromElementOrRanges(ranges, rootNode);
+ return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges);
+ };
+ var FragmentReader = { read: read$4 };
+
+ var getTextContent = function (editor) {
+ return Option.from(editor.selection.getRng()).map(function (r) {
+ return Zwsp.trim(r.toString());
+ }).getOr('');
+ };
+ var getHtmlContent = function (editor, args) {
+ var rng = editor.selection.getRng(), tmpElm = editor.dom.create('body');
+ var sel = editor.selection.getSel();
+ var fragment;
+ var ranges = EventProcessRanges.processRanges(editor, MultiRange.getRanges(sel));
+ if (rng.cloneContents) {
+ fragment = args.contextual ? FragmentReader.read(Element$$1.fromDom(editor.getBody()), ranges).dom() : rng.cloneContents();
+ if (fragment) {
+ tmpElm.appendChild(fragment);
+ }
+ } else {
+ tmpElm.innerHTML = rng.toString();
+ }
+ return editor.selection.serializer.serialize(tmpElm, args);
+ };
+ var getContent = function (editor, args) {
+ if (args === void 0) {
+ args = {};
+ }
+ args.get = true;
+ args.format = args.format || 'html';
+ 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 = getHtmlContent(editor, args);
+ if (args.format === 'tree') {
+ return content;
+ } else {
+ args.content = editor.selection.isCollapsed() ? '' : content;
+ editor.fire('GetContent', args);
+ return args.content;
+ }
+ }
+ };
+ var GetSelectionContent = { getContent: getContent };
+
+ var setContent = function (editor, content, args) {
+ var rng = editor.selection.getRng(), caretNode;
+ var doc = editor.getDoc();
+ var frag, temp;
+ args = args || { format: 'html' };
+ args.set = true;
+ args.selection = true;
+ args.content = content;
+ if (!args.no_events) {
+ args = editor.fire('BeforeSetContent', args);
+ if (args.isDefaultPrevented()) {
+ editor.fire('SetContent', args);
+ return;
+ }
+ }
+ content = args.content;
+ if (rng.insertNode) {
+ content += '_';
+ if (rng.startContainer === doc && rng.endContainer === doc) {
+ doc.body.innerHTML = content;
+ } else {
+ rng.deleteContents();
+ if (doc.body.childNodes.length === 0) {
+ doc.body.innerHTML = content;
+ } else {
+ if (rng.createContextualFragment) {
+ rng.insertNode(rng.createContextualFragment(content));
+ } else {
+ frag = doc.createDocumentFragment();
+ temp = doc.createElement('div');
+ frag.appendChild(temp);
+ temp.outerHTML = content;
+ rng.insertNode(frag);
+ }
+ }
+ }
+ caretNode = editor.dom.get('__caret');
+ rng = doc.createRange();
+ rng.setStartBefore(caretNode);
+ rng.setEndBefore(caretNode);
+ editor.selection.setRng(rng);
+ editor.dom.remove('__caret');
+ try {
+ editor.selection.setRng(rng);
+ } catch (ex) {
+ }
+ } else {
+ if (rng.item) {
+ doc.execCommand('Delete', false, null);
+ rng = editor.getRng();
+ }
+ if (/^\s+/.test(content)) {
+ rng.pasteHTML('_' + content);
+ editor.dom.remove('__mce_tmp');
+ } else {
+ rng.pasteHTML(content);
+ }
+ }
+ if (!args.no_events) {
+ editor.fire('SetContent', args);
+ }
+ };
+ var SetSelectionContent = { setContent: setContent };
+
+ var getEndpointElement = function (root, rng, start, real, resolve) {
+ var container = start ? rng.startContainer : rng.endContainer;
+ var offset = start ? rng.startOffset : rng.endOffset;
+ return Option.from(container).map(Element$$1.fromDom).map(function (elm) {
+ return !real || !rng.collapsed ? child(elm, resolve(elm, offset)).getOr(elm) : elm;
+ }).bind(function (elm) {
+ return isElement(elm) ? Option.some(elm) : parent(elm);
+ }).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 && NodeType.isText(node) && node.length === 0) {
+ node = forwards ? node.nextSibling : node.previousSibling;
+ }
+ return node || orig;
+ };
+ var getNode$1 = function (root, rng) {
+ var elm, startContainer, endContainer, startOffset, endOffset;
+ if (!rng) {
+ return root;
+ }
+ startContainer = rng.startContainer;
+ endContainer = rng.endContainer;
+ startOffset = rng.startOffset;
+ 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, root;
+ var selectedBlocks = [];
+ 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 TreeWalker(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 Option.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 each$j = Tools.each;
+ var isNativeIeSelection = function (rng) {
+ return !!rng.select;
+ };
+ var isAttachedToDom = function (node) {
+ return !!(node && node.ownerDocument) && contains$3(Element$$1.fromDom(node.ownerDocument), Element$$1.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 Selection = function (dom, win, serializer, editor) {
+ var bookmarkManager, controlSelection;
+ var selectedRange, explicitRange, selectorChangedData;
+ var setCursorLocation = function (node, offset) {
+ var rng = dom.createRng();
+ if (!node) {
+ moveEndPoint$1(dom, rng, editor.getBody(), true);
+ setRng(rng);
+ } else {
+ rng.setStart(node, offset);
+ rng.setEnd(node, offset);
+ setRng(rng);
+ collapse(false);
+ }
+ };
+ var getContent = function (args) {
+ return GetSelectionContent.getContent(editor, args);
+ };
+ var setContent = function (content, args) {
+ return SetSelectionContent.setContent(editor, content, args);
+ };
+ var getStart = function (real) {
+ return getStart$2(editor.getBody(), getRng(), real);
+ };
+ var getEnd$$1 = function (real) {
+ return getEnd(editor.getBody(), getRng(), 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(), 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();
+ rng.collapse(!!toStart);
+ setRng(rng);
+ };
+ var getSel = function () {
+ return win.getSelection ? win.getSelection() : win.document.selection;
+ };
+ var getRng = function () {
+ var selection, rng, elm, doc;
+ var tryCompareBoundaryPoints = function (how, sourceRange, destinationRange) {
+ try {
+ return sourceRange.compareBoundaryPoints(how, destinationRange);
+ } catch (ex) {
+ return -1;
+ }
+ };
+ if (!win) {
+ return null;
+ }
+ doc = win.document;
+ if (typeof doc === 'undefined' || doc === null) {
+ return null;
+ }
+ if (editor.bookmark !== undefined && EditorFocus.hasFocus(editor) === false) {
+ var bookmark = SelectionBookmark.getRng(editor);
+ if (bookmark.isSome()) {
+ return bookmark.map(function (r) {
+ return EventProcessRanges.processRanges(editor, [r])[0];
+ }).getOr(doc.createRange());
+ }
+ }
+ try {
+ if (selection = getSel()) {
+ if (selection.rangeCount > 0) {
+ rng = selection.getRangeAt(0);
+ } else {
+ rng = selection.createRange ? selection.createRange() : doc.createRange();
+ }
+ }
+ } catch (ex) {
+ }
+ rng = EventProcessRanges.processRanges(editor, [rng])[0];
+ 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 sel, node, evt;
+ if (!isValidRange(rng)) {
+ return;
+ }
+ var ieRange = isNativeIeSelection(rng) ? rng : null;
+ if (ieRange) {
+ explicitRange = null;
+ try {
+ ieRange.select();
+ } catch (ex) {
+ }
+ return;
+ }
+ sel = getSel();
+ 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());
+ };
+ var getSelectedBlocks$$1 = function (startElm, endElm) {
+ return getSelectedBlocks(dom, getRng(), startElm, endElm);
+ };
+ var isForward = function () {
+ var sel = getSel();
+ var anchorRange, focusRange;
+ if (!sel || !sel.anchorNode || !sel.focusNode) {
+ return true;
+ }
+ anchorRange = dom.createRng();
+ anchorRange.setStart(sel.anchorNode, sel.anchorOffset);
+ anchorRange.collapse(true);
+ focusRange = dom.createRng();
+ focusRange.setStart(sel.focusNode, sel.focusOffset);
+ focusRange.collapse(true);
+ return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;
+ };
+ var normalize = function () {
+ var rng = getRng();
+ var sel = getSel();
+ if (!MultiRange.hasMultipleRanges(sel) && hasAnyRanges(editor)) {
+ var normRng = NormalizeRange.normalize(dom, rng);
+ normRng.each(function (normRng) {
+ setRng(normRng, isForward());
+ });
+ return normRng.getOr(rng);
+ }
+ return rng;
+ };
+ var selectorChanged = function (selector, callback) {
+ var currentSelectors;
+ if (!selectorChangedData) {
+ selectorChangedData = {};
+ currentSelectors = {};
+ editor.on('NodeChange', function (e) {
+ var node = e.element, parents = dom.getParents(node, null, dom.getRoot()), matchedSelectors = {};
+ each$j(selectorChangedData, function (callbacks, selector) {
+ each$j(parents, function (node) {
+ if (dom.is(node, selector)) {
+ if (!currentSelectors[selector]) {
+ each$j(callbacks, function (callback) {
+ callback(true, {
+ node: node,
+ selector: selector,
+ parents: parents
+ });
+ });
+ currentSelectors[selector] = callbacks;
+ }
+ matchedSelectors[selector] = callbacks;
+ return false;
+ }
+ });
+ });
+ each$j(currentSelectors, function (callbacks, selector) {
+ if (!matchedSelectors[selector]) {
+ delete currentSelectors[selector];
+ each$j(callbacks, function (callback) {
+ callback(false, {
+ node: node,
+ selector: selector,
+ parents: parents
+ });
+ });
+ }
+ });
+ });
+ }
+ if (!selectorChangedData[selector]) {
+ selectorChangedData[selector] = [];
+ }
+ selectorChangedData[selector].push(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 ScrollIntoView.scrollElementIntoView(editor, elm, alignToTop);
+ };
+ var placeCaretAt = function (clientX, clientY) {
+ return setRng(CaretRangeFromPoint.fromPoint(clientX, clientY, editor.getDoc()));
+ };
+ var getBoundingClientRect = function () {
+ var rng = getRng();
+ return rng.collapsed ? CaretPosition$1.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,
+ getStart: getStart,
+ getEnd: getEnd$$1,
+ getSelectedBlocks: getSelectedBlocks$$1,
+ normalize: normalize,
+ selectorChanged: selectorChanged,
+ getScrollContainer: getScrollContainer,
+ scrollIntoView: scrollIntoView,
+ placeCaretAt: placeCaretAt,
+ getBoundingClientRect: getBoundingClientRect,
+ destroy: destroy
+ };
+ bookmarkManager = BookmarkManager$1(exports);
+ controlSelection = ControlSelection(exports, editor);
+ exports.bookmarkManager = bookmarkManager;
+ exports.controlSelection = controlSelection;
+ return exports;
+ };
+
+ var isContentEditableFalse$b = NodeType.isContentEditableFalse;
+ var getSelectedNode$1 = getSelectedNode;
+ var isAfterContentEditableFalse$2 = isAfterContentEditableFalse;
+ var isBeforeContentEditableFalse$2 = isBeforeContentEditableFalse;
+ 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 && NodeType.isBr(from.getNode())) {
+ return true;
+ }
+ return inSameBlock;
+ };
+ var moveToCeFalseHorizontally = function (direction, editor, getNextPosFn, range$$1) {
+ var node, caretPosition, peekCaretPosition, rangeIsInContainerBlock;
+ var forwards = direction === HDirection.Forwards;
+ var isBeforeContentEditableFalseFn = forwards ? isBeforeContentEditableFalse$2 : isAfterContentEditableFalse$2;
+ if (!range$$1.collapsed) {
+ node = getSelectedNode$1(range$$1);
+ if (isContentEditableFalse$b(node)) {
+ return showCaret(direction, editor, node, direction === HDirection.Backwards, true);
+ }
+ }
+ rangeIsInContainerBlock = isRangeInCaretContainerBlock(range$$1);
+ caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range$$1);
+ if (isBeforeContentEditableFalseFn(caretPosition)) {
+ return selectNode(editor, caretPosition.getNode(!forwards));
+ }
+ caretPosition = getNextPosFn(caretPosition);
+ if (!caretPosition) {
+ if (rangeIsInContainerBlock) {
+ return range$$1;
+ }
+ return null;
+ }
+ if (isBeforeContentEditableFalseFn(caretPosition)) {
+ return showCaret(direction, editor, caretPosition.getNode(!forwards), forwards, true);
+ }
+ peekCaretPosition = getNextPosFn(caretPosition);
+ if (isBeforeContentEditableFalseFn(peekCaretPosition)) {
+ if (isMoveInsideSameBlock(caretPosition, peekCaretPosition)) {
+ return showCaret(direction, editor, peekCaretPosition.getNode(!forwards), forwards, true);
+ }
+ }
+ if (rangeIsInContainerBlock) {
+ return renderRangeCaret(editor, caretPosition.toRange(), true);
+ }
+ return null;
+ };
+ var moveToCeFalseVertically = function (direction, editor, walkerFn, range$$1) {
+ var caretPosition, linePositions, nextLinePositions;
+ var closestNextLineRect, caretClientRect, clientX;
+ var dist1, dist2, contentEditableFalseNode;
+ contentEditableFalseNode = getSelectedNode$1(range$$1);
+ caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range$$1);
+ linePositions = walkerFn(editor.getBody(), isAboveLine(1), caretPosition);
+ nextLinePositions = filter(linePositions, isLine(1));
+ caretClientRect = ArrUtils.last(caretPosition.getClientRects());
+ if (isBeforeContentEditableFalse$2(caretPosition) || isBeforeTable(caretPosition)) {
+ contentEditableFalseNode = caretPosition.getNode();
+ }
+ if (isAfterContentEditableFalse$2(caretPosition) || isAfterTable(caretPosition)) {
+ contentEditableFalseNode = caretPosition.getNode(true);
+ }
+ if (!caretClientRect) {
+ return null;
+ }
+ clientX = caretClientRect.left;
+ closestNextLineRect = findClosestClientRect(nextLinePositions, clientX);
+ if (closestNextLineRect) {
+ if (isContentEditableFalse$b(closestNextLineRect.node)) {
+ dist1 = Math.abs(clientX - closestNextLineRect.left);
+ dist2 = Math.abs(clientX - closestNextLineRect.right);
+ return showCaret(direction, editor, closestNextLineRect.node, dist1 < dist2, true);
+ }
+ }
+ if (contentEditableFalseNode) {
+ var caretPositions = positionsUntil(direction, editor.getBody(), isAboveLine(1), contentEditableFalseNode);
+ closestNextLineRect = findClosestClientRect(filter(caretPositions, isLine(1)), clientX);
+ if (closestNextLineRect) {
+ return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true);
+ }
+ closestNextLineRect = ArrUtils.last(filter(caretPositions, isLine(0)));
+ if (closestNextLineRect) {
+ return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true);
+ }
+ }
+ };
+ var createTextBlock = function (editor) {
+ var textBlock = editor.dom.create(editor.settings.forced_root_block);
+ if (!Env.ie || Env.ie >= 11) {
+ textBlock.innerHTML = '
';
+ }
+ return textBlock;
+ };
+ var exitPreBlock = function (editor, direction, range$$1) {
+ var pre, caretPos, newBlock;
+ var caretWalker = CaretWalker(editor.getBody());
+ var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);
+ var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);
+ if (range$$1.collapsed && editor.settings.forced_root_block) {
+ pre = editor.dom.getParent(range$$1.startContainer, 'PRE');
+ if (!pre) {
+ return;
+ }
+ if (direction === 1) {
+ caretPos = getNextVisualCaretPosition(CaretPosition$1.fromRangeStart(range$$1));
+ } else {
+ caretPos = getPrevVisualCaretPosition(CaretPosition$1.fromRangeStart(range$$1));
+ }
+ if (!caretPos) {
+ 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 caretWalker = CaretWalker(editor.getBody());
+ var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);
+ var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);
+ var newRange;
+ var direction = forward ? HDirection.Forwards : HDirection.Backwards;
+ var getNextPosFn = forward ? getNextVisualCaretPosition : getPrevVisualCaretPosition;
+ var range$$1 = editor.selection.getRng();
+ newRange = moveToCeFalseHorizontally(direction, editor, getNextPosFn, range$$1);
+ if (newRange) {
+ return newRange;
+ }
+ newRange = exitPreBlock(editor, direction, range$$1);
+ if (newRange) {
+ return newRange;
+ }
+ return null;
+ };
+ var getVerticalRange = function (editor, down) {
+ var newRange;
+ var direction = down ? 1 : -1;
+ var walkerFn = down ? downUntil : upUntil;
+ var range$$1 = editor.selection.getRng();
+ newRange = moveToCeFalseVertically(direction, editor, walkerFn, range$$1);
+ if (newRange) {
+ return newRange;
+ }
+ newRange = exitPreBlock(editor, direction, range$$1);
+ if (newRange) {
+ return newRange;
+ }
+ return null;
+ };
+ var moveH = function (editor, forward) {
+ return function () {
+ var newRng = getHorizontalRange(editor, forward);
+ if (newRng) {
+ editor.selection.setRng(newRng);
+ return true;
+ } else {
+ return false;
+ }
+ };
+ };
+ var moveV = function (editor, down) {
+ return function () {
+ var newRng = getVerticalRange(editor, down);
+ if (newRng) {
+ editor.selection.setRng(newRng);
+ return true;
+ } 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 ? positions.reverse() : 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 (NodeType.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 (NodeType.isBr(nextPos.getNode(false))) {
+ if (direction === HDirection.Forwards) {
+ return {
+ positions: flip(direction, positions).concat([nextPos]),
+ breakType: BreakType.Br,
+ breakAt: Option.some(nextPos)
+ };
+ } else {
+ return {
+ positions: flip(direction, positions),
+ breakType: BreakType.Br,
+ breakAt: Option.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: Option.some(nextPos)
+ };
+ }
+ positions.push(nextPos);
+ currentPos = nextPos;
+ }
+ return {
+ positions: flip(direction, positions),
+ breakType: BreakType.Eol,
+ breakAt: Option.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 Option.some(newPos);
+ }, function (lastPos) {
+ return liftN([
+ 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);
+ });
+ }, Option.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 CaretFinder.firstPositionIn(scope).map(function (pos) {
+ return [pos].concat(getPositionsUntilNextLine(scope, pos).positions);
+ }).getOr([]);
+ };
+ var getLastLinePositions = function (scope) {
+ return CaretFinder.lastPositionIn(scope).map(function (pos) {
+ return getPositionsUntilPreviousLine(scope, pos).positions.concat(pos);
+ }).getOr([]);
+ };
+
+ 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 Option.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 Option.some(newDist < oldDist ? newCorner : oldCorner);
+ });
+ }, Option.none());
+ };
+ var getClosestCell$1 = function (getYAxisValue, isTargetCorner, table, x, y) {
+ var cells = descendants$1(Element$$1.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 moveToRange = function (editor, rng) {
+ editor.selection.setRng(rng);
+ ScrollIntoView.scrollRangeIntoView(editor, rng);
+ };
+ var hasNextBreak = function (getPositionsUntil, scope, lineInfo) {
+ return lineInfo.breakAt.map(function (breakPos) {
+ return getPositionsUntil(scope, breakPos).breakAt.isSome();
+ }).getOr(false);
+ };
+ 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) || !NodeType.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$1.fromRangeStart(rng);
+ return CaretFinder.positionIn(!forward, table).map(function (pos) {
+ return pos.isEqual(caretPos);
+ }).getOr(false);
+ };
+ var navigateHorizontally = function (editor, forward, table, td) {
+ var rng = editor.selection.getRng();
+ var direction = forward ? 1 : -1;
+ if (isFakeCaretTableBrowser() && isCaretAtStartOrEndOfTable(forward, rng, table)) {
+ var newRng = showCaret(direction, editor, table, !forward, true);
+ 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$1.before(table)), rect.left);
+ });
+ }).getOr(CaretPosition$1.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$1.after(table)), rect.left);
+ });
+ }).getOr(CaretPosition$1.after(table));
+ };
+ var getTable = function (previous, pos) {
+ var node = pos.getNode(previous);
+ return NodeType.isElement(node) && node.nodeName === 'TABLE' ? Option.some(node) : Option.none();
+ };
+ var renderBlock = function (down, editor, table, pos) {
+ var forcedRootBlock = Settings.getForcedRootBlock(editor);
+ if (forcedRootBlock) {
+ editor.undoManager.transact(function () {
+ var element = Element$$1.fromTag(forcedRootBlock);
+ setAll(element, Settings.getForcedRootBlockAttrs(editor));
+ append(element, Element$$1.fromTag('br'));
+ if (down) {
+ after(Element$$1.fromDom(table), element);
+ } else {
+ before(Element$$1.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$$1 = down === false;
+ table.fold(function () {
+ return moveToRange(editor, pos.toRange());
+ }, function (table) {
+ return CaretFinder.positionIn(last$$1, 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$1.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 moveH$1 = function (editor, forward) {
+ return function () {
+ return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {
+ return Option.from(editor.dom.getParent(td, 'table')).map(function (table) {
+ return navigateHorizontally(editor, forward, table, td);
+ });
+ }).getOr(false);
+ };
+ };
+ var moveV$1 = function (editor, forward) {
+ return function () {
+ return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {
+ return Option.from(editor.dom.getParent(td, 'table')).map(function (table) {
+ return navigateVertically(editor, forward, table, td);
+ });
+ }).getOr(false);
+ };
+ };
+
+ 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 = Element$$1.fromTag('br');
+ insertElement(root, br, forward);
+ return rangeBefore(br);
+ };
+ var insertBlock$1 = function (root, forward, blockName, attrs) {
+ var block = Element$$1.fromTag(blockName);
+ var br = Element$$1.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, root);
+ return closest(Element$$1.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 = Element$$1.fromDom(editor.getBody());
+ var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());
+ var rootBlock = Settings.getForcedRootBlock(editor);
+ var rootBlockAttrs = Settings.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$2 = function (editor, forward) {
+ return function () {
+ if (editor.selection.isCollapsed()) {
+ return moveCaretToNewEmptyLine(editor, forward);
+ } else {
+ return false;
+ }
+ };
+ };
+
+ var defaultPatterns = function (patterns) {
+ return map(patterns, function (pattern) {
+ return merge({
+ 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];
+ }
+ var args = Array.prototype.slice.call(arguments, 1);
+ return function () {
+ return f.apply(null, args);
+ };
+ };
+ var execute = function (patterns, evt) {
+ return find(match$1(patterns, evt), function (pattern) {
+ return pattern.action();
+ });
+ };
+ var MatchKeys = {
+ match: match$1,
+ action: action,
+ execute: execute
+ };
+
+ var executeKeydownOverride = function (editor, caret, evt) {
+ var os = PlatformDetection$1.detect().os;
+ MatchKeys.execute([
+ {
+ keyCode: VK.RIGHT,
+ action: moveH(editor, true)
+ },
+ {
+ keyCode: VK.LEFT,
+ action: moveH(editor, false)
+ },
+ {
+ keyCode: VK.UP,
+ action: moveV(editor, false)
+ },
+ {
+ keyCode: VK.DOWN,
+ action: moveV(editor, true)
+ },
+ {
+ keyCode: VK.RIGHT,
+ action: moveH$1(editor, true)
+ },
+ {
+ keyCode: VK.LEFT,
+ action: moveH$1(editor, false)
+ },
+ {
+ keyCode: VK.UP,
+ action: moveV$1(editor, false)
+ },
+ {
+ keyCode: VK.DOWN,
+ action: moveV$1(editor, true)
+ },
+ {
+ keyCode: VK.RIGHT,
+ action: BoundarySelection.move(editor, caret, true)
+ },
+ {
+ keyCode: VK.LEFT,
+ action: BoundarySelection.move(editor, caret, false)
+ },
+ {
+ keyCode: VK.RIGHT,
+ ctrlKey: !os.isOSX(),
+ altKey: os.isOSX(),
+ action: BoundarySelection.moveNextWord(editor, caret)
+ },
+ {
+ keyCode: VK.LEFT,
+ ctrlKey: !os.isOSX(),
+ altKey: os.isOSX(),
+ action: BoundarySelection.movePrevWord(editor, caret)
+ },
+ {
+ keyCode: VK.UP,
+ action: moveV$2(editor, false)
+ },
+ {
+ keyCode: VK.DOWN,
+ action: moveV$2(editor, true)
+ }
+ ], evt).each(function (_) {
+ evt.preventDefault();
+ });
+ };
+ var setup$7 = function (editor, caret) {
+ editor.on('keydown', function (evt) {
+ if (evt.isDefaultPrevented() === false) {
+ executeKeydownOverride(editor, caret, evt);
+ }
+ });
+ };
+ var ArrowKeys = { setup: setup$7 };
+
+ var getParentInlines = function (rootElm, startElm) {
+ var parents$$1 = Parents.parentsAndSelf(startElm, rootElm);
+ return findIndex(parents$$1, isBlock).fold(constant(parents$$1), function (index) {
+ return parents$$1.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.deleteElement(editor, forward, target);
+ } else {
+ var pos = replaceWithCaretFormat(target.dom(), formatNodes);
+ editor.selection.setRng(pos.toRange());
+ }
+ };
+ var deleteCaret$1 = function (editor, forward) {
+ var rootElm = Element$$1.fromDom(editor.getBody());
+ var startElm = Element$$1.fromDom(editor.selection.getStart());
+ var parentInlines = filter(getParentInlines(rootElm, startElm), hasOnlyOneChild$1);
+ return last(parentInlines).map(function (target) {
+ var fromPos = CaretPosition$1.fromRangeStart(editor.selection.getRng());
+ if (DeleteUtils.willDeleteLastPositionInElement(forward, fromPos, target.dom()) && !isEmptyCaretFormatElement(target)) {
+ deleteLastPosition(forward, editor, target, parentInlines);
+ return true;
+ } else {
+ return false;
+ }
+ }).getOr(false);
+ };
+ var backspaceDelete$5 = function (editor, forward) {
+ return editor.selection.isCollapsed() ? deleteCaret$1(editor, forward) : false;
+ };
+ var InlineFormatDelete = { backspaceDelete: backspaceDelete$5 };
+
+ var executeKeydownOverride$1 = function (editor, caret, evt) {
+ MatchKeys.execute([
+ {
+ keyCode: VK.BACKSPACE,
+ action: MatchKeys.action(CefDelete.backspaceDelete, editor, false)
+ },
+ {
+ keyCode: VK.DELETE,
+ action: MatchKeys.action(CefDelete.backspaceDelete, editor, true)
+ },
+ {
+ keyCode: VK.BACKSPACE,
+ action: MatchKeys.action(InlineBoundaryDelete.backspaceDelete, editor, caret, false)
+ },
+ {
+ keyCode: VK.DELETE,
+ action: MatchKeys.action(InlineBoundaryDelete.backspaceDelete, editor, caret, true)
+ },
+ {
+ keyCode: VK.BACKSPACE,
+ action: MatchKeys.action(TableDelete.backspaceDelete, editor, false)
+ },
+ {
+ keyCode: VK.DELETE,
+ action: MatchKeys.action(TableDelete.backspaceDelete, editor, true)
+ },
+ {
+ keyCode: VK.BACKSPACE,
+ action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, false)
+ },
+ {
+ keyCode: VK.DELETE,
+ action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, true)
+ },
+ {
+ keyCode: VK.BACKSPACE,
+ action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, false)
+ },
+ {
+ keyCode: VK.DELETE,
+ action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, true)
+ },
+ {
+ keyCode: VK.BACKSPACE,
+ action: MatchKeys.action(InlineFormatDelete.backspaceDelete, editor, false)
+ },
+ {
+ keyCode: VK.DELETE,
+ action: MatchKeys.action(InlineFormatDelete.backspaceDelete, editor, true)
+ }
+ ], evt).each(function (_) {
+ evt.preventDefault();
+ });
+ };
+ var executeKeyupOverride = function (editor, evt) {
+ MatchKeys.execute([
+ {
+ keyCode: VK.BACKSPACE,
+ action: MatchKeys.action(CefDelete.paddEmptyElement, editor)
+ },
+ {
+ keyCode: VK.DELETE,
+ action: MatchKeys.action(CefDelete.paddEmptyElement, editor)
+ }
+ ], evt);
+ };
+ var setup$8 = 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 DeleteBackspaceKeys = { setup: setup$8 };
+
+ 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 walker, node, rng, lastNode = root, tempElm;
+ 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('\xA0'), root.firstChild);
+ }
+ }
+ rng = dom.createRng();
+ root.normalize();
+ if (root.hasChildNodes()) {
+ walker = new TreeWalker(root, root);
+ while (node = walker.current()) {
+ if (NodeType.isText(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 (NodeType.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);
+ dom.remove(tempElm);
+ editor.selection.scrollIntoView(root);
+ };
+ 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 Option.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(Element$$1.fromDom(elm));
+ }).isSome();
+ };
+ var NewLineUtils = {
+ moveToCaretPosition: moveToCaretPosition,
+ getEditableRoot: getEditableRoot,
+ getParentBlock: getParentBlock$2,
+ getParentBlockName: getParentBlockName,
+ isListItemParentBlock: isListItemParentBlock
+ };
+
+ var hasFirstChild = function (elm, name) {
+ return elm.firstChild && elm.firstChild.nodeName === name;
+ };
+ 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 (NodeType.isElement(node)) {
+ break;
+ }
+ node = node[first ? 'nextSibling' : 'previousSibling'];
+ }
+ return node === parentBlock;
+ };
+ var insert$1 = 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')) {
+ dom.insertAfter(newBlock, getContainerBlock(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);
+ }
+ } else if (isFirstOrLastLi(containerBlock, parentBlock, false)) {
+ dom.insertAfter(newBlock, getContainerBlock(containerBlock));
+ } 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);
+ NewLineUtils.moveToCaretPosition(editor, newBlock);
+ };
+ var InsertLi = { insert: insert$1 };
+
+ var trimZwsp = function (fragment) {
+ each(descendants(Element$$1.fromDom(fragment), isText), function (text) {
+ var rawNode = text.dom();
+ rawNode.nodeValue = Zwsp.trim(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 (NodeType.isElement(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 (NodeType.isText(container) === false) {
+ return offset;
+ } else if (start) {
+ return offset === 1 && container.data.charAt(offset - 1) === Zwsp.ZWSP ? 0 : offset;
+ } else {
+ return offset === container.data.length - 1 && container.data.charAt(offset) === Zwsp.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 (NodeType.isText(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 setForcedBlockAttrs = function (editor, node) {
+ var forcedRootBlockName = Settings.getForcedRootBlock(editor);
+ if (forcedRootBlockName && forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {
+ editor.dom.setAttribs(node, Settings.getForcedRootBlockAttrs(editor));
+ }
+ };
+ 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) {
+ var lastChild;
+ block.normalize();
+ lastChild = block.lastChild;
+ if (!lastChild || /^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true))) {
+ dom.add(block, 'br');
+ }
+ };
+ var insert$2 = function (editor, evt) {
+ var tmpRng, editableRoot, container, offset, parentBlock, shiftKey;
+ var newBlock, fragment, containerBlock, parentBlockName, containerBlockName, newBlockName, isAfterLastNodeInContainer;
+ var dom = editor.dom;
+ var schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements();
+ var rng = editor.selection.getRng();
+ var createNewBlock = function (name$$1) {
+ var node = container, block, clonedNode, caretNode;
+ var textInlineElements = schema.getTextInlineElements();
+ if (name$$1 || parentBlockName === 'TABLE' || parentBlockName === 'HR') {
+ block = dom.create(name$$1 || newBlockName);
+ setForcedBlockAttrs(editor, block);
+ } else {
+ block = parentBlock.cloneNode(false);
+ }
+ caretNode = block;
+ if (Settings.shouldKeepStyles(editor) === false) {
+ dom.setAttrib(block, 'style', null);
+ dom.setAttrib(block, 'class', null);
+ } else {
+ do {
+ if (textInlineElements[node.nodeName]) {
+ if (isCaretNode(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);
+ }
+ emptyBlock(caretNode);
+ return block;
+ };
+ var isCaretAtStartOrEndOfBlock = function (start) {
+ var walker, node, name$$1, normalizedOffset;
+ normalizedOffset = normalizeZwspOffset(start, container, offset);
+ if (NodeType.isText(container) && (start ? normalizedOffset > 0 : normalizedOffset < container.nodeValue.length)) {
+ return false;
+ }
+ if (container.parentNode === parentBlock && isAfterLastNodeInContainer && !start) {
+ return true;
+ }
+ if (start && NodeType.isElement(container) && container === parentBlock.firstChild) {
+ return true;
+ }
+ if (containerAndSiblingName(container, 'TABLE') || containerAndSiblingName(container, 'HR')) {
+ return isAfterLastNodeInContainer && !start || !isAfterLastNodeInContainer && start;
+ }
+ walker = new TreeWalker(container, parentBlock);
+ if (NodeType.isText(container)) {
+ if (start && normalizedOffset === 0) {
+ walker.prev();
+ } else if (!start && normalizedOffset === container.nodeValue.length) {
+ walker.next();
+ }
+ }
+ while (node = walker.current()) {
+ if (NodeType.isElement(node)) {
+ if (!node.getAttribute('data-mce-bogus')) {
+ name$$1 = node.nodeName.toLowerCase();
+ if (nonEmptyElementsMap[name$$1] && name$$1 !== 'br') {
+ return false;
+ }
+ }
+ } else if (NodeType.isText(node) && !/^[ \t\r\n]*$/.test(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 (Settings.shouldEndContainerOnEmptyBlock(editor) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock)) {
+ newBlock = dom.split(containerBlock, parentBlock);
+ } else {
+ dom.insertAfter(newBlock, parentBlock);
+ }
+ NewLineUtils.moveToCaretPosition(editor, newBlock);
+ };
+ NormalizeRange.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 = Settings.getForcedRootBlock(editor);
+ shiftKey = evt.shiftKey;
+ if (NodeType.isElement(container) && container.hasChildNodes()) {
+ isAfterLastNodeInContainer = offset > container.childNodes.length - 1;
+ container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;
+ if (isAfterLastNodeInContainer && NodeType.isText(container)) {
+ offset = container.nodeValue.length;
+ } else {
+ offset = 0;
+ }
+ }
+ 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() : '';
+ containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';
+ if (containerBlockName === 'LI' && !evt.ctrlKey) {
+ parentBlock = containerBlock;
+ containerBlock = containerBlock.parentNode;
+ parentBlockName = containerBlockName;
+ }
+ if (/^(LI|DT|DD)$/.test(parentBlockName)) {
+ if (dom.isEmpty(parentBlock)) {
+ InsertLi.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);
+ }
+ NewLineUtils.moveToCaretPosition(editor, newBlock);
+ } else if (isCaretAtStartOrEndOfBlock()) {
+ insertNewBlockAfter();
+ } else if (isCaretAtStartOrEndOfBlock(true)) {
+ newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock);
+ NewLineUtils.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 {
+ NewLineUtils.moveToCaretPosition(editor, newBlock);
+ }
+ }
+ dom.setAttrib(newBlock, 'id', '');
+ editor.fire('NewBlock', { newBlock: newBlock });
+ };
+ var InsertBlock = { insert: insert$2 };
+
+ var matchesSelector = function (editor, selector) {
+ return NewLineUtils.getParentBlock(editor).filter(function (parentBlock) {
+ return selector.length > 0 && is$1(Element$$1.fromDom(parentBlock), selector);
+ }).isSome();
+ };
+ var shouldInsertBr = function (editor) {
+ return matchesSelector(editor, Settings.getBrNewLineSelector(editor));
+ };
+ var shouldBlockNewLine = function (editor) {
+ return matchesSelector(editor, Settings.getNoNewLineSelector(editor));
+ };
+ var ContextSelectors = {
+ shouldInsertBr: shouldInsertBr,
+ shouldBlockNewLine: shouldBlockNewLine
+ };
+
+ var newLineAction = Adt.generate([
+ { br: [] },
+ { block: [] },
+ { none: [] }
+ ]);
+ var shouldBlockNewLine$1 = function (editor, shiftKey) {
+ return ContextSelectors.shouldBlockNewLine(editor);
+ };
+ var isBrMode = function (requiredState) {
+ return function (editor, shiftKey) {
+ var brMode = Settings.getForcedRootBlock(editor) === '';
+ return brMode === requiredState;
+ };
+ };
+ var inListBlock = function (requiredState) {
+ return function (editor, shiftKey) {
+ return NewLineUtils.isListItemParentBlock(editor) === requiredState;
+ };
+ };
+ var inBlock = function (blockName, requiredState) {
+ return function (editor, shiftKey) {
+ var state = NewLineUtils.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 Settings.shouldPutBrInPre(editor) === requiredState;
+ };
+ };
+ var inBrContext = function (editor, shiftKey) {
+ return ContextSelectors.shouldInsertBr(editor);
+ };
+ var hasShiftKey = function (editor, shiftKey) {
+ return shiftKey;
+ };
+ var canInsertIntoEditableRoot = function (editor) {
+ var forcedRootBlock = Settings.getForcedRootBlock(editor);
+ var rootEditable = NewLineUtils.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 ? Option.some(action) : Option.none();
+ };
+ };
+ var getAction$1 = function (editor, evt) {
+ return LazyEvaluator.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.shiftKey
+ ]).getOr(newLineAction.none());
+ };
+ var NewLineAction = { getAction: getAction$1 };
+
+ var insert$3 = function (editor, evt) {
+ NewLineAction.getAction(editor, evt).fold(function () {
+ InsertBr.insert(editor, evt);
+ }, function () {
+ InsertBlock.insert(editor, evt);
+ }, noop);
+ };
+ var InsertNewLine = { insert: insert$3 };
+
+ var endTypingLevel = function (undoManager) {
+ if (undoManager.typing) {
+ undoManager.typing = false;
+ undoManager.add();
+ }
+ };
+ var handleEnterKeyEvent = function (editor, event) {
+ if (event.isDefaultPrevented()) {
+ return;
+ }
+ event.preventDefault();
+ endTypingLevel(editor.undoManager);
+ editor.undoManager.transact(function () {
+ if (editor.selection.isCollapsed() === false) {
+ editor.execCommand('Delete');
+ }
+ InsertNewLine.insert(editor, event);
+ });
+ };
+ var setup$9 = function (editor) {
+ editor.on('keydown', function (event) {
+ if (event.keyCode === VK.ENTER) {
+ handleEnterKeyEvent(editor, event);
+ }
+ });
+ };
+ var EnterKey = { setup: setup$9 };
+
+ var insertTextAtPosition = function (text, pos) {
+ var container = pos.container();
+ var offset = pos.offset();
+ if (NodeType.isText(container)) {
+ container.insertData(offset, text);
+ return Option.some(CaretPosition(container, offset + text.length));
+ } else {
+ return getElementFromPosition(pos).map(function (elm) {
+ var textNode = Element$$1.fromText(text);
+ if (pos.isAtEnd()) {
+ after(elm, textNode);
+ } else {
+ before(elm, textNode);
+ }
+ return CaretPosition(textNode.dom(), text.length);
+ });
+ }
+ };
+ var insertNbspAtPosition = curry(insertTextAtPosition, '\xA0');
+ var insertSpaceAtPosition = curry(insertTextAtPosition, ' ');
+
+ var isAtBlockBoundary = function (forward, root, pos) {
+ var parentBlocks = filter(Parents.parentsAndSelf(Element$$1.fromDom(pos.container()), root), isBlock);
+ return head(parentBlocks).fold(function () {
+ return CaretFinder.navigate(forward, root.dom(), pos).forall(function (newPos) {
+ return isInSameBlock(newPos, pos, root.dom()) === false;
+ });
+ }, function (parent) {
+ return CaretFinder.navigate(forward, parent.dom(), pos).isNone();
+ });
+ };
+ var isAtStartOfBlock = curry(isAtBlockBoundary, false);
+ var isAtEndOfBlock = curry(isAtBlockBoundary, true);
+
+ var nbsp = '\xA0';
+ var isInMiddleOfText = function (pos) {
+ return CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd();
+ };
+ var getClosestBlock = function (root, pos) {
+ var parentBlocks = filter(Parents.parentsAndSelf(Element$$1.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) || CaretFinder.prevPosition(getClosestBlock(root, pos).dom(), pos).exists(isAfterSpace);
+ }
+ };
+ var hasSpaceAfter = function (root, pos) {
+ if (isInMiddleOfText(pos)) {
+ return isBeforeSpace(pos);
+ } else {
+ return isBeforeSpace(pos) || CaretFinder.nextPosition(getClosestBlock(root, pos).dom(), pos).exists(isBeforeSpace);
+ }
+ };
+ var isPreValue = function (value$$1) {
+ return contains([
+ 'pre',
+ 'pre-line',
+ 'pre-wrap'
+ ], value$$1);
+ };
+ var isInPre = function (pos) {
+ return getElementFromPosition(pos).bind(function (elm) {
+ return closest(elm, isElement);
+ }).exists(function (elm) {
+ return isPreValue(get$2(elm, 'white-space'));
+ });
+ };
+ var isAtBeginningOfBody = function (root, pos) {
+ return CaretFinder.prevPosition(root.dom(), pos).isNone();
+ };
+ var isAtEndOfBody = function (root, pos) {
+ return CaretFinder.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) || isAfterBr(root, pos) || hasSpaceBefore(root, pos);
+ }
+ };
+ var needsToBeNbspRight = function (root, pos) {
+ if (isInPre(pos)) {
+ return false;
+ } else {
+ return isAtEndOfBlock(root, pos) || isBeforeBr(root, pos) || hasSpaceAfter(root, pos);
+ }
+ };
+ var isNbspAt = function (text, offset) {
+ return isNbsp(text.charAt(offset));
+ };
+ var hasNbsp = function (pos) {
+ var container = pos.container();
+ return NodeType.isText(container) && contains$2(container.data, nbsp);
+ };
+ var normalizeNbspAtStart = function (root, node, text) {
+ var firstPos = CaretPosition(node, 0);
+ if (isNbspAt(text, 0) && !needsToBeNbspLeft(root, firstPos)) {
+ return ' ' + text.slice(1);
+ } else {
+ return text;
+ }
+ };
+ var normalizeNbspMiddle = function (text) {
+ return map(text.split(''), function (chr, i, chars) {
+ if (isNbsp(chr) && i > 0 && i < chars.length - 1 && isContent(chars[i - 1]) && isContent(chars[i + 1])) {
+ return ' ';
+ } else {
+ return chr;
+ }
+ }).join('');
+ };
+ var normalizeNbspAtEnd = function (root, node, text) {
+ var lastPos = CaretPosition(node, text.length);
+ if (isNbspAt(text, text.length - 1) && !needsToBeNbspRight(root, lastPos)) {
+ return text.slice(0, -1) + ' ';
+ } else {
+ return text;
+ }
+ };
+ var normalizeNbsps = function (root, pos) {
+ return Option.some(pos).filter(hasNbsp).bind(function (pos) {
+ var container = pos.container();
+ var text = container.nodeValue;
+ var newText = normalizeNbspAtStart(root, container, normalizeNbspMiddle(normalizeNbspAtEnd(root, container, text)));
+ if (text !== newText) {
+ pos.container().nodeValue = newText;
+ return Option.some(pos);
+ } else {
+ return Option.none();
+ }
+ });
+ };
+ var normalizeNbspsInEditor = function (editor) {
+ var root = Element$$1.fromDom(editor.getBody());
+ if (editor.selection.isCollapsed()) {
+ normalizeNbsps(root, CaretPosition.fromRangeStart(editor.selection.getRng())).each(function (pos) {
+ editor.selection.setRng(pos.toRange());
+ });
+ }
+ };
+
+ var locationToCaretPosition = function (root) {
+ return function (location) {
+ return location.fold(function (element) {
+ return CaretFinder.prevPosition(root.dom(), CaretPosition$1.before(element));
+ }, function (element) {
+ return CaretFinder.firstPositionIn(element);
+ }, function (element) {
+ return CaretFinder.lastPositionIn(element);
+ }, function (element) {
+ return CaretFinder.nextPosition(root.dom(), CaretPosition$1.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$1.fromRangeStart(editor.selection.getRng());
+ var root = Element$$1.fromDom(editor.getBody());
+ if (editor.selection.isCollapsed()) {
+ var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);
+ var caretPosition = CaretPosition$1.fromRangeStart(editor.selection.getRng());
+ return BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), caretPosition).bind(locationToCaretPosition(root)).bind(insertInlineBoundarySpaceOrNbsp(root, pos)).exists(setSelection$1(editor));
+ } else {
+ return false;
+ }
+ };
+
+ var executeKeydownOverride$2 = function (editor, evt) {
+ MatchKeys.execute([{
+ keyCode: VK.SPACEBAR,
+ action: MatchKeys.action(insertSpaceOrNbspAtSelection, editor)
+ }], evt).each(function (_) {
+ evt.preventDefault();
+ });
+ };
+ var setup$a = function (editor) {
+ editor.on('keydown', function (evt) {
+ if (evt.isDefaultPrevented() === false) {
+ executeKeydownOverride$2(editor, evt);
+ }
+ });
+ };
+ var SpaceKey = { setup: setup$a };
+
+ var findBlockCaretContainer = function (editor) {
+ return descendant$1(Element$$1.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 CaretContainerInput = { setup: setup$b };
+
+ var browser$4 = PlatformDetection$1.detect().browser;
+ var setupIeInput = function (editor) {
+ var keypressThrotter = first$1(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$c = function (editor) {
+ setupIeInput(editor);
+ editor.on('input', function (e) {
+ if (e.isComposing === false) {
+ normalizeNbspsInEditor(editor);
+ }
+ });
+ };
+
+ var setup$d = function (editor) {
+ var caret = BoundarySelection.setupSelectedState(editor);
+ CaretContainerInput.setup(editor);
+ ArrowKeys.setup(editor, caret);
+ DeleteBackspaceKeys.setup(editor, caret);
+ EnterKey.setup(editor);
+ SpaceKey.setup(editor);
+ setup$c(editor);
+ };
+ var KeyboardOverrides = { setup: setup$d };
+
+ function Quirks (editor) {
+ var each = Tools.each;
+ var BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, settings = editor.settings, 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.settings.content_editable) {
+ 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, container, offset, root, parent$$1;
+ if (isDefaultPrevented(e) || e.keyCode !== VK.BACKSPACE) {
+ return;
+ }
+ rng = selection.getRng();
+ container = rng.startContainer;
+ offset = rng.startOffset;
+ root = dom.getRoot();
+ parent$$1 = container;
+ if (!rng.collapsed || offset !== 0) {
+ return;
+ }
+ while (parent$$1 && parent$$1.parentNode && parent$$1.parentNode.firstChild === parent$$1 && parent$$1.parentNode !== root) {
+ parent$$1 = parent$$1.parentNode;
+ }
+ if (parent$$1.tagName === 'BLOCKQUOTE') {
+ editor.formatter.toggle('blockquote', null, parent$$1);
+ 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 (!settings.object_resizing) {
+ setEditorCommandState('enableObjectResizing', false);
+ }
+ };
+ if (!settings.readonly) {
+ 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 (settings.forced_root_block) {
+ editor.on('init', function () {
+ setEditorCommandState('DefaultParagraphSeparator', settings.forced_root_block);
+ });
+ }
+ };
+ 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();
+ editor.selection.getSel().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 = CaretRangeFromPoint.fromPoint(e.x, e.y, editor.getDoc());
+ selection.setRng(rng);
+ insertClipboardContents(internalContent.html, true);
+ }
+ }
+ });
+ };
+ var refreshContentEditable = function () {
+ };
+ var isHidden = function () {
+ var sel;
+ if (!isGecko || editor.removed) {
+ return 0;
+ }
+ sel = editor.selection.getSel();
+ return !sel || !sel.rangeCount || sel.rangeCount === 0;
+ };
+ 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();
+ }
+ return {
+ refreshContentEditable: refreshContentEditable,
+ isHidden: isHidden
+ };
+ }
+
+ var isTextBlockNode = function (node) {
+ return NodeType.isElement(node) && isTextBlock(Element$$1.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)) {
+ CaretFinder.firstPositionIn(container).each(function (pos) {
+ return rng.setStart(pos.container(), pos.offset());
+ });
+ }
+ }
+ if (CaretPosition.isElementPosition(endPos)) {
+ var container = startPos.container();
+ if (isTextBlockNode(container)) {
+ CaretFinder.lastPositionIn(container).each(function (pos) {
+ return rng.setEnd(pos.container(), pos.offset());
+ });
+ }
+ }
+ editor.selection.setRng(RangeNormalizer.normalize(rng));
+ };
+ var setup$e = function (editor) {
+ editor.on('click', function (e) {
+ if (e.detail >= 3) {
+ normalizeSelection$1(editor);
+ }
+ });
+ };
+
+ 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$f = function (editor) {
+ preventSummaryToggle(editor);
+ filterDetails(editor);
+ };
+
+ var DOM$2 = DOMUtils$1.DOM;
+ var appendStyle = function (editor, text) {
+ var head = Element$$1.fromDom(editor.getDoc().head);
+ var tag = Element$$1.fromTag('style');
+ set(tag, 'type', 'text/css');
+ append(tag, Element$$1.fromText(text));
+ append(head, tag);
+ };
+ var createParser = function (editor) {
+ var parser = DomParser(editor.settings, editor.schema);
+ parser.addAttributeFilter('src,href,style,tabindex', function (nodes, name$$1) {
+ var i = nodes.length, node;
+ var dom = editor.dom;
+ var value, internalName;
+ while (i--) {
+ node = nodes[i];
+ value = node.attr(name$$1);
+ internalName = 'data-mce-' + name$$1;
+ if (!node.attributes.map[internalName]) {
+ if (value.indexOf('data:') === 0 || value.indexOf('blob:') === 0) {
+ continue;
+ }
+ if (name$$1 === 'style') {
+ value = dom.serializeStyle(dom.parseStyle(value), node.name);
+ if (!value.length) {
+ value = null;
+ }
+ node.attr(internalName, value);
+ node.attr(name$$1, value);
+ } else if (name$$1 === 'tabindex') {
+ node.attr(internalName, value);
+ node.attr(name$$1, null);
+ } else {
+ node.attr(internalName, editor.convertURL(value, name$$1, node.name));
+ }
+ }
+ }
+ });
+ parser.addNodeFilter('script', function (nodes) {
+ var i = nodes.length, node, type;
+ while (i--) {
+ node = nodes[i];
+ type = node.attr('type') || 'no/type';
+ if (type.indexOf('mce-') !== 0) {
+ node.attr('type', 'mce-' + type);
+ }
+ }
+ });
+ parser.addNodeFilter('#cdata', function (nodes) {
+ var i = nodes.length, node;
+ while (i--) {
+ node = nodes[i];
+ node.type = 8;
+ node.name = '#comment';
+ node.value = '[CDATA[' + node.value + ']]';
+ }
+ });
+ parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function (nodes) {
+ var i = nodes.length, node;
+ var nonEmptyElements = editor.schema.getNonEmptyElements();
+ while (i--) {
+ node = nodes[i];
+ if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) {
+ node.append(new Node$2('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 initEditor = function (editor) {
+ editor.bindPendingEventDelegates();
+ editor.initialized = true;
+ editor.fire('init');
+ editor.focus(true);
+ editor.nodeChanged({ initial: true });
+ editor.execCallback('init_instance_callback', editor);
+ autoFocus(editor);
+ };
+ var getStyleSheetLoader = function (editor) {
+ return editor.inline ? DOM$2.styleSheetLoader : editor.dom.styleSheetLoader;
+ };
+ var initContentBody = function (editor, skipWrite) {
+ var settings = editor.settings;
+ var targetElm = editor.getElement();
+ var doc = editor.getDoc(), body, contentCssText;
+ if (!settings.inline) {
+ editor.getElement().style.visibility = editor.orgVisibility;
+ }
+ if (!skipWrite && !settings.content_editable) {
+ doc.open();
+ doc.write(editor.iframeHTML);
+ doc.close();
+ }
+ if (settings.content_editable) {
+ editor.on('remove', function () {
+ var bodyEl = this.getBody();
+ DOM$2.removeClass(bodyEl, 'mce-content-body');
+ DOM$2.removeClass(bodyEl, 'mce-edit-focus');
+ DOM$2.setAttrib(bodyEl, 'contentEditable', null);
+ });
+ DOM$2.addClass(targetElm, 'mce-content-body');
+ editor.contentDocument = doc = settings.content_document || document;
+ editor.contentWindow = settings.content_window || window;
+ editor.bodyElement = targetElm;
+ settings.content_document = settings.content_window = null;
+ settings.root_name = targetElm.nodeName.toLowerCase();
+ }
+ body = editor.getBody();
+ body.disabled = true;
+ editor.readonly = settings.readonly;
+ if (!editor.readonly) {
+ if (editor.inline && DOM$2.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$1(doc, {
+ keep_values: true,
+ url_converter: editor.convertURL,
+ url_converter_scope: editor,
+ hex_colors: settings.force_hex_style_colors,
+ class_filter: settings.class_filter,
+ update_styles: true,
+ root_element: editor.inline ? editor.getBody() : null,
+ collect: settings.content_editable,
+ schema: editor.schema,
+ contentCssCors: Settings.shouldUseContentCssCors(editor),
+ onSetAttrib: function (e) {
+ editor.fire('SetAttrib', e);
+ }
+ });
+ editor.parser = createParser(editor);
+ editor.serializer = Serializer$1(settings, editor);
+ editor.selection = Selection(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$f(editor);
+ setup$e(editor);
+ KeyboardOverrides.setup(editor);
+ ForceBlocks.setup(editor);
+ editor.fire('PreInit');
+ if (!settings.browser_spellcheck && !settings.gecko_spellcheck) {
+ doc.body.spellcheck = false;
+ DOM$2.setAttrib(body, 'spellcheck', 'false');
+ }
+ editor.quirks = Quirks(editor);
+ editor.fire('PostRender');
+ if (settings.directionality) {
+ body.dir = settings.directionality;
+ }
+ if (settings.nowrap) {
+ body.style.whiteSpace = 'nowrap';
+ }
+ 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());
+ });
+ 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) {
+ contentCssText = '';
+ Tools.each(editor.contentStyles, function (style) {
+ contentCssText += style + '\r\n';
+ });
+ editor.dom.addStyle(contentCssText);
+ }
+ getStyleSheetLoader(editor).loadAll(editor.contentCSS, function (_) {
+ initEditor(editor);
+ }, function (urls) {
+ initEditor(editor);
+ });
+ if (settings.content_style) {
+ appendStyle(editor, settings.content_style);
+ }
+ };
+ var InitContentBody = { initContentBody: initContentBody };
+
+ var DOM$3 = DOMUtils$1.DOM;
+ var relaxDomain = function (editor, ifr) {
+ if (document.domain !== window.location.hostname && Env.ie && Env.ie < 12) {
+ var bodyUuid = Uuid.uuid('mce');
+ editor[bodyUuid] = function () {
+ InitContentBody.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$3.setAttrib(ifr, 'src', domainRelaxUrl);
+ return true;
+ }
+ return false;
+ };
+ var normalizeHeight = function (height) {
+ var normalizedHeight = typeof height === 'number' ? height + 'px' : height;
+ return normalizedHeight ? normalizedHeight : '';
+ };
+ var createIframeElement = function (id, title, height, customAttrs) {
+ var iframe = Element$$1.fromTag('iframe');
+ setAll(iframe, customAttrs);
+ setAll(iframe, {
+ id: id + '_ifr',
+ frameBorder: '0',
+ allowTransparency: 'true',
+ title: title
+ });
+ setAll$1(iframe, {
+ width: '100%',
+ height: normalizeHeight(height),
+ display: 'block'
+ });
+ return iframe;
+ };
+ var getIframeHtml = function (editor) {
+ var bodyId, bodyClass, iframeHTML;
+ iframeHTML = Settings.getDocType(editor) + '';
+ if (Settings.getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {
+ iframeHTML += '';
+ }
+ iframeHTML += '';
+ bodyId = Settings.getBodyId(editor);
+ bodyClass = Settings.getBodyClass(editor);
+ if (Settings.getContentSecurityPolicy(editor)) {
+ iframeHTML += '';
+ }
+ iframeHTML += '
';
+ return iframeHTML;
+ };
+ var createIframe = function (editor, o) {
+ var title = editor.editorManager.translate('Rich Text Area. Press ALT-F9 for menu. ' + 'Press ALT-F10 for toolbar. Press ALT-0 for help');
+ var ifr = createIframeElement(editor.id, title, o.height, Settings.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$3.add(o.iframeContainer, ifr);
+ return isDomainRelaxed;
+ };
+ var init$1 = function (editor, boxInfo) {
+ var isDomainRelaxed = createIframe(editor, boxInfo);
+ if (boxInfo.editorContainer) {
+ DOM$3.get(boxInfo.editorContainer).style.display = editor.orgDisplay;
+ editor.hidden = DOM$3.isHidden(boxInfo.editorContainer);
+ }
+ editor.getElement().style.display = 'none';
+ DOM$3.setAttrib(editor.id, 'aria-hidden', 'true');
+ if (!isDomainRelaxed) {
+ InitContentBody.initContentBody(editor);
+ }
+ };
+ var InitIframe = { init: init$1 };
+
+ var DOM$4 = DOMUtils$1.DOM;
+ var initPlugin = function (editor, initializedPlugins, plugin) {
+ var Plugin = PluginManager$1.get(plugin);
+ var pluginUrl, pluginInstance;
+ pluginUrl = PluginManager$1.urls[plugin] || editor.documentBaseUrl.replace(/\/$/, '');
+ plugin = Tools.trim(plugin);
+ if (Plugin && Tools.inArray(initializedPlugins, plugin) === -1) {
+ Tools.each(PluginManager$1.dependencies(plugin), function (dep) {
+ initPlugin(editor, initializedPlugins, dep);
+ });
+ if (editor.plugins[plugin]) {
+ return;
+ }
+ pluginInstance = new Plugin(editor, pluginUrl, editor.$);
+ editor.plugins[plugin] = pluginInstance;
+ if (pluginInstance.init) {
+ pluginInstance.init(editor, pluginUrl);
+ initializedPlugins.push(plugin);
+ }
+ }
+ };
+ var trimLegacyPrefix = function (name) {
+ return name.replace(/^\-/, '');
+ };
+ var initPlugins = function (editor) {
+ var initializedPlugins = [];
+ Tools.each(editor.settings.plugins.split(/[ ,]/), function (name) {
+ initPlugin(editor, initializedPlugins, trimLegacyPrefix(name));
+ });
+ };
+ var initTheme = function (editor) {
+ var Theme;
+ var theme = editor.settings.theme;
+ if (isString(theme)) {
+ editor.settings.theme = trimLegacyPrefix(theme);
+ 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) {
+ var w, h, minHeight, re, info;
+ var settings = editor.settings;
+ var elm = editor.getElement();
+ w = settings.width || DOM$4.getStyle(elm, 'width') || '100%';
+ h = settings.height || DOM$4.getStyle(elm, 'height') || elm.offsetHeight;
+ minHeight = settings.min_height || 100;
+ re = /^[0-9\.]+(|px)$/i;
+ if (re.test('' + w)) {
+ w = Math.max(parseInt(w, 10), 100);
+ }
+ if (re.test('' + h)) {
+ h = Math.max(parseInt(h, 10), minHeight);
+ }
+ info = editor.theme.renderUI({
+ targetNode: elm,
+ width: w,
+ height: h,
+ deltaWidth: settings.delta_width,
+ deltaHeight: settings.delta_height
+ });
+ if (!settings.content_editable) {
+ h = (info.iframeHeight || h) + (typeof h === 'number' ? info.deltaHeight || 0 : '');
+ if (h < minHeight) {
+ h = minHeight;
+ }
+ }
+ info.height = h;
+ return info;
+ };
+ var renderFromThemeFunc = function (editor) {
+ var info;
+ var elm = editor.getElement();
+ info = editor.settings.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
+ };
+ };
+ var renderThemeFalseIframe = function (targetElement) {
+ var iframeContainer = DOM$4.create('div');
+ DOM$4.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 settings = editor.settings, elm = editor.getElement();
+ editor.orgDisplay = elm.style.display;
+ if (isString(settings.theme)) {
+ return renderFromLoadedTheme(editor);
+ } else if (isFunction(settings.theme)) {
+ return renderFromThemeFunc(editor);
+ } else {
+ return renderThemeFalse(editor);
+ }
+ };
+ var init$2 = function (editor) {
+ var settings = editor.settings;
+ var elm = editor.getElement();
+ var boxInfo;
+ editor.rtl = settings.rtl_ui || editor.editorManager.i18n.rtl;
+ editor.editorManager.i18n.setCode(settings.language);
+ settings.aria_label = settings.aria_label || DOM$4.getAttrib(elm, 'aria-label', editor.getLang('aria.rich_text_area'));
+ editor.fire('ScriptsLoaded');
+ initTheme(editor);
+ initPlugins(editor);
+ boxInfo = renderThemeUi(editor);
+ editor.editorContainer = boxInfo.editorContainer ? boxInfo.editorContainer : null;
+ if (settings.content_css) {
+ Tools.each(Tools.explode(settings.content_css), function (u) {
+ editor.contentCSS.push(editor.documentBaseURI.toAbsolute(u));
+ });
+ }
+ if (settings.content_editable) {
+ return InitContentBody.initContentBody(editor);
+ } else {
+ return InitIframe.init(editor, boxInfo);
+ }
+ };
+ var Init = { init: init$2 };
+
+ var DOM$5 = DOMUtils$1.DOM;
+ var hasSkipLoadPrefix = function (name$$1) {
+ return name$$1.charAt(0) === '-';
+ };
+ var loadLanguage = function (scriptLoader, editor) {
+ var settings = editor.settings;
+ if (settings.language && settings.language !== 'en' && !settings.language_url) {
+ settings.language_url = editor.editorManager.baseURL + '/langs/' + settings.language + '.js';
+ }
+ if (settings.language_url && !editor.editorManager.i18n.data[settings.language]) {
+ scriptLoader.add(settings.language_url);
+ }
+ };
+ var loadTheme = function (scriptLoader, editor, suffix, callback) {
+ var settings = editor.settings, theme = settings.theme;
+ if (isString(theme)) {
+ if (!hasSkipLoadPrefix(theme) && !ThemeManager.urls.hasOwnProperty(theme)) {
+ var themeUrl = settings.theme_url;
+ 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 loadPlugins = function (settings, suffix) {
+ if (Tools.isArray(settings.plugins)) {
+ settings.plugins = settings.plugins.join(' ');
+ }
+ Tools.each(settings.external_plugins, function (url, name$$1) {
+ PluginManager$1.load(name$$1, url);
+ settings.plugins += ' ' + name$$1;
+ });
+ Tools.each(settings.plugins.split(/[ ,]/), function (plugin) {
+ plugin = Tools.trim(plugin);
+ if (plugin && !PluginManager$1.urls[plugin]) {
+ if (hasSkipLoadPrefix(plugin)) {
+ plugin = plugin.substr(1, plugin.length);
+ var dependencies = PluginManager$1.dependencies(plugin);
+ Tools.each(dependencies, function (dep) {
+ var defaultSettings = {
+ prefix: 'plugins/',
+ resource: dep,
+ suffix: '/plugin' + suffix + '.js'
+ };
+ dep = PluginManager$1.createUrl(defaultSettings, dep);
+ PluginManager$1.load(dep.resource, dep);
+ });
+ } else {
+ PluginManager$1.load(plugin, {
+ prefix: 'plugins/',
+ resource: plugin,
+ suffix: '/plugin' + suffix + '.js'
+ });
+ }
+ }
+ });
+ };
+ var loadScripts = function (editor, suffix) {
+ var scriptLoader = ScriptLoader.ScriptLoader;
+ loadTheme(scriptLoader, editor, suffix, function () {
+ loadLanguage(scriptLoader, editor);
+ loadPlugins(editor.settings, suffix);
+ scriptLoader.loadQueue(function () {
+ if (!editor.removed) {
+ Init.init(editor);
+ }
+ }, editor, function (urls) {
+ ErrorReporter.pluginLoadError(editor, urls[0]);
+ if (!editor.removed) {
+ Init.init(editor);
+ }
+ });
+ });
+ };
+ var render = function (editor) {
+ var settings = editor.settings, id = editor.id;
+ var readyHandler = function () {
+ DOM$5.unbind(window, 'ready', readyHandler);
+ editor.render();
+ };
+ if (!EventUtils.Event.domLoaded) {
+ DOM$5.bind(window, 'ready', readyHandler);
+ return;
+ }
+ if (!editor.getElement()) {
+ return;
+ }
+ if (!Env.contentEditable) {
+ return;
+ }
+ if (!settings.inline) {
+ editor.orgVisibility = editor.getElement().style.visibility;
+ editor.getElement().style.visibility = 'hidden';
+ } else {
+ editor.inline = true;
+ }
+ var form = editor.getElement().form || DOM$5.getParent(id, 'form');
+ if (form) {
+ editor.formElement = form;
+ if (settings.hidden_input && !/TEXTAREA|INPUT/i.test(editor.getElement().nodeName)) {
+ DOM$5.insertAfter(DOM$5.create('input', {
+ type: 'hidden',
+ name: id
+ }), id);
+ editor.hasHiddenInput = true;
+ }
+ editor.formEventDelegate = function (e) {
+ editor.fire(e.type, e);
+ };
+ DOM$5.bind(form, 'submit reset', editor.formEventDelegate);
+ editor.on('reset', function () {
+ editor.setContent(editor.startContent, { format: 'raw' });
+ });
+ if (settings.submit_patch && !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 (settings.encoding === 'xml') {
+ editor.on('GetContent', function (e) {
+ if (e.save) {
+ e.content = DOM$5.encode(e.content);
+ }
+ });
+ }
+ if (settings.add_form_submit_trigger) {
+ editor.on('submit', function () {
+ if (editor.initialized) {
+ editor.save();
+ }
+ });
+ }
+ if (settings.add_unload_trigger) {
+ 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 Render = { render: render };
+
+ var add$4 = function (editor, name, settings) {
+ var sidebars = editor.sidebars ? editor.sidebars : [];
+ sidebars.push({
+ name: name,
+ settings: settings
+ });
+ editor.sidebars = sidebars;
+ };
+ var Sidebar = { add: add$4 };
+
+ var each$k = 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 (url, settings) {
+ var self$$1 = this;
+ var baseUri, baseUrl;
+ url = trim$4(url);
+ settings = self$$1.settings = settings || {};
+ baseUri = settings.base_uri;
+ if (/^([\w\-]+):([^\/]{2})/i.test(url) || /^\s*#/.test(url)) {
+ self$$1.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)) {
+ baseUrl = settings.base_uri ? settings.base_uri.path : new URI(document.location.href).directory;
+ if (settings.base_uri.protocol == '') {
+ url = '//mce_host' + self$$1.toAbsPath(baseUrl, url);
+ } else {
+ url = /([^#?]*)([#?]?.*)/.exec(url);
+ url = (baseUri && baseUri.protocol || 'http') + '://mce_host' + self$$1.toAbsPath(baseUrl, url[1]) + url[2];
+ }
+ }
+ url = url.replace(/@@/g, '(mce_at)');
+ url = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(url);
+ each$k(queryParts, function (v, i) {
+ var part = url[i];
+ if (part) {
+ part = part.replace(/\(mce_at\)/g, '@@');
+ }
+ self$$1[v] = part;
+ });
+ if (baseUri) {
+ if (!self$$1.protocol) {
+ self$$1.protocol = baseUri.protocol;
+ }
+ if (!self$$1.userInfo) {
+ self$$1.userInfo = baseUri.userInfo;
+ }
+ if (!self$$1.port && self$$1.host === 'mce_host') {
+ self$$1.port = baseUri.port;
+ }
+ if (!self$$1.host || self$$1.host === 'mce_host') {
+ self$$1.host = baseUri.host;
+ }
+ self$$1.source = '';
+ }
+ if (isProtocolRelative) {
+ self$$1.protocol = '';
+ }
+ };
+ URI.prototype = {
+ setPath: function (path) {
+ var self$$1 = this;
+ path = /^(.*?)\/?(\w+)?$/.exec(path);
+ self$$1.path = path[0];
+ self$$1.directory = path[1];
+ self$$1.file = path[2];
+ self$$1.source = '';
+ self$$1.getURI();
+ },
+ toRelative: function (uri) {
+ var self$$1 = this;
+ var output;
+ if (uri === './') {
+ return uri;
+ }
+ uri = new URI(uri, { base_uri: self$$1 });
+ if (uri.host !== 'mce_host' && self$$1.host !== uri.host && uri.host || self$$1.port !== uri.port || self$$1.protocol !== uri.protocol && uri.protocol !== '') {
+ return uri.getURI();
+ }
+ var tu = self$$1.getURI(), uu = uri.getURI();
+ if (tu === uu || tu.charAt(tu.length - 1) === '/' && tu.substr(0, tu.length - 1) === uu) {
+ return tu;
+ }
+ output = self$$1.toRelPath(self$$1.path, uri.path);
+ if (uri.query) {
+ output += '?' + uri.query;
+ }
+ if (uri.anchor) {
+ output += '#' + uri.anchor;
+ }
+ return output;
+ },
+ toAbsolute: function (uri, noHost) {
+ uri = new URI(uri, { base_uri: this });
+ return uri.getURI(noHost && this.isSameOrigin(uri));
+ },
+ 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;
+ },
+ toRelPath: function (base, path) {
+ var items, breakPoint = 0, out = '', i, l;
+ base = base.substring(0, base.lastIndexOf('/'));
+ base = base.split('/');
+ items = path.split('/');
+ if (base.length >= items.length) {
+ for (i = 0, l = base.length; i < l; i++) {
+ if (i >= items.length || base[i] !== items[i]) {
+ breakPoint = i + 1;
+ break;
+ }
+ }
+ }
+ if (base.length < items.length) {
+ for (i = 0, l = items.length; i < l; i++) {
+ if (i >= base.length || base[i] !== items[i]) {
+ breakPoint = i + 1;
+ break;
+ }
+ }
+ }
+ if (breakPoint === 1) {
+ return path;
+ }
+ for (i = 0, l = base.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;
+ },
+ toAbsPath: function (base, path) {
+ var i, nb = 0, o = [], tr, outPath;
+ tr = /\/$/.test(path) ? '/' : '';
+ base = base.split('/');
+ path = path.split('/');
+ each$k(base, function (k) {
+ if (k) {
+ o.push(k);
+ }
+ });
+ base = o;
+ for (i = path.length - 1, o = []; i >= 0; i--) {
+ if (path[i].length === 0 || path[i] === '.') {
+ continue;
+ }
+ if (path[i] === '..') {
+ nb++;
+ continue;
+ }
+ if (nb > 0) {
+ nb--;
+ continue;
+ }
+ o.push(path[i]);
+ }
+ i = base.length - nb;
+ if (i <= 0) {
+ outPath = o.reverse().join('/');
+ } else {
+ outPath = base.slice(0, i).join('/') + '/' + o.reverse().join('/');
+ }
+ if (outPath.indexOf('/') !== 0) {
+ outPath = '/' + outPath;
+ }
+ if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) {
+ outPath += tr;
+ }
+ return outPath;
+ },
+ getURI: function (noProtoHost) {
+ var s;
+ var self$$1 = this;
+ if (!self$$1.source || noProtoHost) {
+ s = '';
+ if (!noProtoHost) {
+ if (self$$1.protocol) {
+ s += self$$1.protocol + '://';
+ } else {
+ s += '//';
+ }
+ if (self$$1.userInfo) {
+ s += self$$1.userInfo + '@';
+ }
+ if (self$$1.host) {
+ s += self$$1.host;
+ }
+ if (self$$1.port) {
+ s += ':' + self$$1.port;
+ }
+ }
+ if (self$$1.path) {
+ s += self$$1.path;
+ }
+ if (self$$1.query) {
+ s += '?' + self$$1.query;
+ }
+ if (self$$1.anchor) {
+ s += '#' + self$$1.anchor;
+ }
+ self$$1.source = s;
+ }
+ return self$$1.source;
+ }
+ };
+ URI.parseDataUri = function (uri) {
+ var type, matches;
+ uri = decodeURIComponent(uri).split(',');
+ matches = /data:([^;]+)/.exec(uri[0]);
+ if (matches) {
+ type = matches[1];
+ }
+ return {
+ type: type,
+ data: uri[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;
+ };
+
+ var defaultFormat = 'html';
+ var trimEmptyContents = function (editor, html) {
+ var blockName = Settings.getForcedRootBlock(editor);
+ var emptyRegExp = new RegExp('^(<' + blockName + '[^>]*>( | |\\s|\xA0|
|)<\\/' + blockName + '>[\r\n]*|
[\r\n]*)$');
+ return html.replace(emptyRegExp, '');
+ };
+ var getContentFromBody = function (editor, args, body) {
+ var content;
+ args.format = args.format ? args.format : defaultFormat;
+ args.get = true;
+ args.getInner = true;
+ if (!args.no_events) {
+ editor.fire('BeforeGetContent', args);
+ }
+ if (args.format === 'raw') {
+ content = Tools.trim(TrimHtml.trimExternal(editor.serializer, body.innerHTML));
+ } else if (args.format === 'text') {
+ content = Zwsp.trim(body.innerText || body.textContent);
+ } else if (args.format === 'tree') {
+ return editor.serializer.serialize(body, args);
+ } else {
+ content = trimEmptyContents(editor, editor.serializer.serialize(body, args));
+ }
+ if (args.format !== 'text' && !isWsPreserveElement(Element$$1.fromDom(body))) {
+ args.content = Tools.trim(content);
+ } else {
+ args.content = content;
+ }
+ if (!args.no_events) {
+ editor.fire('GetContent', args);
+ }
+ return args.content;
+ };
+ var getContent$1 = function (editor, args) {
+ if (args === void 0) {
+ args = {};
+ }
+ return Option.from(editor.getBody()).fold(constant(args.format === 'tree' ? new Node$2('body', 11) : ''), function (body) {
+ return getContentFromBody(editor, args, body);
+ });
+ };
+
+ 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$$1) {
+ if (filter$$1.name === node.name) {
+ if (nodeMatches[filter$$1.name]) {
+ nodeMatches[filter$$1.name].nodes.push(node);
+ } else {
+ nodeMatches[filter$$1.name] = {
+ filter: filter$$1,
+ nodes: [node]
+ };
+ }
+ }
+ });
+ each(attributeFilters, function (filter$$1) {
+ if (typeof node.attr(filter$$1.name) === 'string') {
+ if (attrMatches[filter$$1.name]) {
+ attrMatches[filter$$1.name].nodes.push(node);
+ } else {
+ attrMatches[filter$$1.name] = {
+ filter: filter$$1,
+ nodes: [node]
+ };
+ }
+ }
+ });
+ });
+ }
+ for (var name in nodeMatches) {
+ if (nodeMatches.hasOwnProperty(name)) {
+ matches.push(nodeMatches[name]);
+ }
+ }
+ for (var name in attrMatches) {
+ if (attrMatches.hasOwnProperty(name)) {
+ matches.push(attrMatches[name]);
+ }
+ }
+ 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$1 = 'html';
+ var isTreeNode = function (content) {
+ return content instanceof Node$2;
+ };
+ var moveSelection = function (editor) {
+ if (EditorFocus.hasFocus(editor)) {
+ CaretFinder.firstPositionIn(editor.getBody()).each(function (pos) {
+ var node = pos.getNode();
+ var caretPos = NodeType.isTable(node) ? CaretFinder.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 = Settings.getForcedRootBlock(editor);
+ if (forcedRootBlockName && editor.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) {
+ content = padd;
+ content = editor.dom.createHTML(forcedRootBlockName, editor.settings.forced_root_block_attrs, content);
+ } else if (!content) {
+ content = '
';
+ }
+ setEditorHtml(editor, content);
+ editor.fire('SetContent', args);
+ } else {
+ if (args.format !== 'raw') {
+ content = Serializer({ validate: editor.validate }, editor.schema).serialize(editor.parser.parse(content, {
+ isRootContent: true,
+ insert: true
+ }));
+ }
+ args.content = isWsPreserveElement(Element$$1.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 = Serializer({ validate: editor.validate }, editor.schema).serialize(content);
+ args.content = isWsPreserveElement(Element$$1.fromDom(body)) ? html : Tools.trim(html);
+ setEditorHtml(editor, args.content);
+ if (!args.no_events) {
+ editor.fire('SetContent', args);
+ }
+ return content;
+ };
+ var setContent$1 = function (editor, content, args) {
+ if (args === void 0) {
+ args = {};
+ }
+ args.format = args.format ? args.format : defaultFormat$1;
+ args.set = true;
+ args.content = isTreeNode(content) ? '' : content;
+ if (!isTreeNode(content) && !args.no_events) {
+ editor.fire('BeforeSetContent', args);
+ content = args.content;
+ }
+ return Option.from(editor.getBody()).fold(constant(content), function (body) {
+ return isTreeNode(content) ? setContentTree(editor, body, content, args) : setContentString(editor, body, content, args);
+ });
+ };
+
+ var DOM$6 = DOMUtils$1.DOM;
+ var restoreOriginalStyles = function (editor) {
+ DOM$6.setStyle(editor.id, 'display', editor.orgDisplay);
+ };
+ var safeDestroy = function (x) {
+ return Option.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$6.unbind(form, 'submit reset', editor.formEventDelegate);
+ }
+ };
+ var remove$9 = 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$6.remove(element.nextSibling);
+ }
+ if (!editor.inline && body) {
+ restoreOriginalStyles(editor);
+ }
+ Events.fireRemove(editor);
+ editor.editorManager.remove(editor);
+ DOM$6.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 DOM$7 = DOMUtils$1.DOM;
+ var extend$4 = Tools.extend, each$l = Tools.each;
+ var resolve$4 = Tools.resolve;
+ var ie$2 = Env.ie;
+ var Editor = function (id, settings, editorManager) {
+ var self = this;
+ var documentBaseUrl = self.documentBaseUrl = editorManager.documentBaseURL;
+ var baseUri = editorManager.baseURI;
+ settings = getEditorSettings(self, id, documentBaseUrl, editorManager.defaultSettings, settings);
+ self.settings = settings;
+ AddOnManager.language = settings.language || 'en';
+ AddOnManager.languageLoad = settings.language_load;
+ AddOnManager.baseURL = editorManager.baseURL;
+ self.id = id;
+ self.setDirty(false);
+ self.plugins = {};
+ self.documentBaseURI = new URI(settings.document_base_url, { base_uri: baseUri });
+ self.baseURI = baseUri;
+ self.contentCSS = [];
+ self.contentStyles = [];
+ self.shortcuts = new Shortcuts(self);
+ self.loadedCSS = {};
+ self.editorCommands = new EditorCommands(self);
+ self.suffix = editorManager.suffix;
+ self.editorManager = editorManager;
+ self.inline = settings.inline;
+ self.buttons = {};
+ self.menuItems = {};
+ if (settings.cache_suffix) {
+ Env.cacheSuffix = settings.cache_suffix.replace(/^[\?\&]+/, '');
+ }
+ if (settings.override_viewport === false) {
+ Env.overrideViewPort = false;
+ }
+ editorManager.fire('SetupEditor', { editor: self });
+ self.execCallback('setup', self);
+ self.$ = DomQuery.overrideDefaults(function () {
+ return {
+ context: self.inline ? self.getBody() : self.getDoc(),
+ element: self.getBody()
+ };
+ });
+ };
+ Editor.prototype = {
+ render: function () {
+ Render.render(this);
+ },
+ focus: function (skipFocus) {
+ EditorFocus.focus(this, skipFocus);
+ },
+ hasFocus: function () {
+ return EditorFocus.hasFocus(this);
+ },
+ 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$4(scope) : 0;
+ callback = resolve$4(callback);
+ self.callbackLookup = self.callbackLookup || {};
+ self.callbackLookup[name] = {
+ func: callback,
+ scope: scope
+ };
+ }
+ return callback.apply(scope || self, Array.prototype.slice.call(arguments, 1));
+ },
+ translate: function (text) {
+ if (text && Tools.is(text, 'string')) {
+ var lang_1 = this.settings.language || 'en', i18n_1 = this.editorManager.i18n;
+ text = i18n_1.data[lang_1 + '.' + text] || text.replace(/\{\#([^\}]+)\}/g, function (a, b) {
+ return i18n_1.data[lang_1 + '.' + b] || '{#' + b + '}';
+ });
+ }
+ return this.editorManager.translate(text);
+ },
+ getLang: function (name, defaultVal) {
+ return this.editorManager.i18n.data[(this.settings.language || 'en') + '.' + name] || (defaultVal !== undefined ? defaultVal : '{#' + name + '}');
+ },
+ getParam: function (name, defaultVal, type) {
+ return getParam(this, name, defaultVal, type);
+ },
+ nodeChanged: function (args) {
+ this._nodeChangeDispatcher.nodeChanged(args);
+ },
+ addButton: function (name, settings) {
+ var self = this;
+ if (settings.cmd) {
+ settings.onclick = function () {
+ self.execCommand(settings.cmd);
+ };
+ }
+ if (settings.stateSelector && typeof settings.active === 'undefined') {
+ settings.active = false;
+ }
+ if (!settings.text && !settings.icon) {
+ settings.icon = name;
+ }
+ settings.tooltip = settings.tooltip || settings.title;
+ self.buttons[name] = settings;
+ },
+ addSidebar: function (name, settings) {
+ return Sidebar.add(this, name, settings);
+ },
+ addMenuItem: function (name, settings) {
+ var self = this;
+ if (settings.cmd) {
+ settings.onclick = function () {
+ self.execCommand(settings.cmd);
+ };
+ }
+ self.menuItems[name] = settings;
+ },
+ addContextToolbar: function (predicate, items) {
+ var self = this;
+ var selector;
+ self.contextToolbars = self.contextToolbars || [];
+ if (typeof predicate === 'string') {
+ selector = predicate;
+ predicate = function (elm) {
+ return self.dom.is(elm, selector);
+ };
+ }
+ self.contextToolbars.push({
+ id: Uuid.uuid('mcet'),
+ predicate: predicate,
+ items: items
+ });
+ },
+ addCommand: function (name, callback, scope) {
+ this.editorCommands.addCommand(name, callback, scope);
+ },
+ addQueryStateHandler: function (name, callback, scope) {
+ this.editorCommands.addQueryStateHandler(name, callback, scope);
+ },
+ addQueryValueHandler: function (name, callback, scope) {
+ this.editorCommands.addQueryValueHandler(name, callback, scope);
+ },
+ addShortcut: function (pattern, desc, cmdFunc, scope) {
+ this.shortcuts.add(pattern, desc, cmdFunc, scope);
+ },
+ execCommand: function (cmd, ui, value, args) {
+ return this.editorCommands.execCommand(cmd, ui, value, args);
+ },
+ queryCommandState: function (cmd) {
+ return this.editorCommands.queryCommandState(cmd);
+ },
+ queryCommandValue: function (cmd) {
+ return this.editorCommands.queryCommandValue(cmd);
+ },
+ queryCommandSupported: function (cmd) {
+ return this.editorCommands.queryCommandSupported(cmd);
+ },
+ show: function () {
+ var self = this;
+ if (self.hidden) {
+ self.hidden = false;
+ if (self.inline) {
+ self.getBody().contentEditable = true;
+ } else {
+ DOM$7.show(self.getContainer());
+ DOM$7.hide(self.id);
+ }
+ self.load();
+ self.fire('show');
+ }
+ },
+ hide: function () {
+ var self = this, doc = self.getDoc();
+ if (!self.hidden) {
+ if (ie$2 && 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$7.hide(self.getContainer());
+ DOM$7.setStyle(self.id, 'display', self.orgDisplay);
+ }
+ self.hidden = true;
+ self.fire('hide');
+ }
+ },
+ isHidden: function () {
+ return !!this.hidden;
+ },
+ setProgressState: function (state, time) {
+ this.fire('ProgressState', {
+ state: state,
+ time: time
+ });
+ },
+ load: function (args) {
+ var self = this;
+ var elm = self.getElement(), html;
+ if (self.removed) {
+ return '';
+ }
+ if (elm) {
+ args = args || {};
+ args.load = true;
+ html = self.setContent(elm.value !== undefined ? elm.value : elm.innerHTML, args);
+ args.element = elm;
+ if (!args.no_events) {
+ self.fire('LoadContent', args);
+ }
+ args.element = elm = null;
+ return html;
+ }
+ },
+ 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 (!/TEXTAREA|INPUT/i.test(elm.nodeName)) {
+ if (args.is_removing || !self.inline) {
+ elm.innerHTML = html;
+ }
+ if (form = DOM$7.getParent(self.id, 'form')) {
+ each$l(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;
+ },
+ setContent: function (content, args) {
+ return setContent$1(this, content, args);
+ },
+ getContent: function (args) {
+ return getContent$1(this, args);
+ },
+ insertContent: function (content, args) {
+ if (args) {
+ content = extend$4({ content: content }, args);
+ }
+ this.execCommand('mceInsertContent', false, content);
+ },
+ isDirty: function () {
+ return !this.isNotDirty;
+ },
+ setDirty: function (state) {
+ var oldState = !this.isNotDirty;
+ this.isNotDirty = !state;
+ if (state && state !== oldState) {
+ this.fire('dirty');
+ }
+ },
+ setMode: function (mode) {
+ setMode(this, mode);
+ },
+ getContainer: function () {
+ var self = this;
+ if (!self.container) {
+ self.container = DOM$7.get(self.editorContainer || self.id + '_parent');
+ }
+ return self.container;
+ },
+ getContentAreaContainer: function () {
+ return this.contentAreaContainer;
+ },
+ getElement: function () {
+ if (!this.targetElm) {
+ this.targetElm = DOM$7.get(this.id);
+ }
+ return this.targetElm;
+ },
+ getWin: function () {
+ var self = this;
+ var elm;
+ if (!self.contentWindow) {
+ elm = self.iframeElement;
+ if (elm) {
+ self.contentWindow = elm.contentWindow;
+ }
+ }
+ return self.contentWindow;
+ },
+ getDoc: function () {
+ var self = this;
+ var win;
+ if (!self.contentDocument) {
+ win = self.getWin();
+ if (win) {
+ self.contentDocument = win.document;
+ }
+ }
+ return self.contentDocument;
+ },
+ getBody: function () {
+ var doc = this.getDoc();
+ return this.bodyElement || (doc ? doc.body : null);
+ },
+ 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;
+ },
+ addVisual: function (elm) {
+ var self = this;
+ var settings = self.settings;
+ var dom = self.dom;
+ var cls;
+ elm = elm || self.getBody();
+ if (self.hasVisual === undefined) {
+ self.hasVisual = settings.visual;
+ }
+ each$l(dom.select('table,a', elm), function (elm) {
+ var value;
+ switch (elm.nodeName) {
+ case 'TABLE':
+ cls = settings.visual_table_class || 'mce-item-table';
+ value = dom.getAttrib(elm, 'border');
+ if ((!value || value === '0') && self.hasVisual) {
+ dom.addClass(elm, cls);
+ } else {
+ dom.removeClass(elm, cls);
+ }
+ return;
+ case 'A':
+ if (!dom.getAttrib(elm, 'href')) {
+ value = dom.getAttrib(elm, 'name') || elm.id;
+ cls = settings.visual_anchor_class || 'mce-item-anchor';
+ if (value && self.hasVisual) {
+ dom.addClass(elm, cls);
+ } else {
+ dom.removeClass(elm, cls);
+ }
+ }
+ return;
+ }
+ });
+ self.fire('VisualAid', {
+ element: elm,
+ hasVisual: self.hasVisual
+ });
+ },
+ remove: function () {
+ remove$9(this);
+ },
+ destroy: function (automatic) {
+ destroy(this, automatic);
+ },
+ uploadImages: function (callback) {
+ return this.editorUpload.uploadImages(callback);
+ },
+ _scanForImages: function () {
+ return this.editorUpload.scanForImages();
+ }
+ };
+ extend$4(Editor.prototype, EditorObservable$1);
+
+ var isEditorUIElement = function (elm) {
+ return elm.className.toString().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$1.DOM.bind(document, 'mouseup', mouseUpPage);
+ editor.on('remove', function () {
+ DOMUtils$1.DOM.unbind(document, 'mouseup', mouseUpPage);
+ });
+ };
+ var registerFocusOut = function (editor) {
+ editor.on('focusout', function () {
+ SelectionBookmark.store(editor);
+ });
+ };
+ var registerMouseUp = function (editor, throttledStore) {
+ editor.on('mouseup touchend', function (e) {
+ throttledStore.throttle();
+ });
+ };
+ var registerEditorEvents = function (editor, throttledStore) {
+ var browser = PlatformDetection$1.detect().browser;
+ if (browser.isIE()) {
+ registerFocusOut(editor);
+ } else {
+ registerMouseUp(editor, throttledStore);
+ }
+ editor.on('keyup nodechange', function (e) {
+ if (!isManualNodeChange(e)) {
+ SelectionBookmark.store(editor);
+ }
+ });
+ };
+ var register$3 = function (editor) {
+ var throttledStore = first$1(function () {
+ SelectionBookmark.store(editor);
+ }, 0);
+ if (editor.inline) {
+ registerPageMouseUp(editor, throttledStore);
+ }
+ editor.on('init', function () {
+ registerEditorEvents(editor, throttledStore);
+ });
+ editor.on('remove', function () {
+ throttledStore.cancel();
+ });
+ };
+ var SelectionRestore = { register: register$3 };
+
+ var documentFocusInHandler;
+ var DOM$8 = DOMUtils$1.DOM;
+ var isEditorUIElement$1 = function (elm) {
+ return FocusManager.isEditorUIElement(elm);
+ };
+ var isUIElement = function (editor, elm) {
+ var customSelector = editor ? editor.settings.custom_ui_selector : '';
+ var parent$$1 = DOM$8.getParent(elm, function (elm) {
+ return isEditorUIElement$1(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false);
+ });
+ return parent$$1 !== null;
+ };
+ var getActiveElement = function () {
+ try {
+ return document.activeElement;
+ } catch (ex) {
+ return document.body;
+ }
+ };
+ var registerEvents = function (editorManager, e) {
+ var editor = e.editor;
+ SelectionRestore.register(editor);
+ editor.on('focusin', function () {
+ var self$$1 = this;
+ var focusedEditor = editorManager.focusedEditor;
+ if (focusedEditor !== self$$1) {
+ if (focusedEditor) {
+ focusedEditor.fire('blur', { focusedEditor: self$$1 });
+ }
+ editorManager.setActive(self$$1);
+ editorManager.focusedEditor = self$$1;
+ self$$1.fire('focus', { blurredEditor: focusedEditor });
+ self$$1.focus(true);
+ }
+ });
+ editor.on('focusout', function () {
+ var self$$1 = this;
+ Delay.setEditorTimeout(self$$1, function () {
+ var focusedEditor = editorManager.focusedEditor;
+ if (!isUIElement(self$$1, getActiveElement()) && focusedEditor === self$$1) {
+ self$$1.fire('blur', { focusedEditor: null });
+ editorManager.focusedEditor = null;
+ }
+ });
+ });
+ if (!documentFocusInHandler) {
+ documentFocusInHandler = function (e) {
+ var activeEditor = editorManager.activeEditor;
+ var target;
+ target = e.target;
+ if (activeEditor && target.ownerDocument === document) {
+ if (target !== document.body && !isUIElement(activeEditor, target) && editorManager.focusedEditor === activeEditor) {
+ activeEditor.fire('blur', { focusedEditor: null });
+ editorManager.focusedEditor = null;
+ }
+ }
+ };
+ DOM$8.bind(document, 'focusin', documentFocusInHandler);
+ }
+ };
+ var unregisterDocumentEvents = function (editorManager, e) {
+ if (editorManager.focusedEditor === e.editor) {
+ editorManager.focusedEditor = null;
+ }
+ if (!editorManager.activeEditor) {
+ DOM$8.unbind(document, 'focusin', documentFocusInHandler);
+ documentFocusInHandler = null;
+ }
+ };
+ var setup$g = function (editorManager) {
+ editorManager.on('AddEditor', curry(registerEvents, editorManager));
+ editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager));
+ };
+ var FocusController = {
+ setup: setup$g,
+ isEditorUIElement: isEditorUIElement$1,
+ isUIElement: isUIElement
+ };
+
+ var data = {};
+ var code = 'en';
+ var I18n = {
+ setCode: function (newCode) {
+ if (newCode) {
+ code = newCode;
+ this.rtl = this.data[newCode] ? this.data[newCode]._dir === 'rtl' : false;
+ }
+ },
+ getCode: function () {
+ return code;
+ },
+ rtl: false,
+ add: function (code, items) {
+ var langData = data[code];
+ if (!langData) {
+ data[code] = langData = {};
+ }
+ for (var name in items) {
+ langData[name] = items[name];
+ }
+ this.setCode(code);
+ },
+ translate: function (text) {
+ var langData = data[code] || {};
+ var toString = function (obj) {
+ if (Tools.is(obj, 'function')) {
+ return Object.prototype.toString.call(obj);
+ }
+ return !isEmpty(obj) ? '' + obj : '';
+ };
+ var isEmpty = function (text) {
+ return text === '' || text === null || Tools.is(text, 'undefined');
+ };
+ var getLangData = function (text) {
+ text = toString(text);
+ return Tools.hasOwn(langData, text) ? toString(langData[text]) : text;
+ };
+ if (isEmpty(text)) {
+ return '';
+ }
+ if (Tools.is(text, 'object') && Tools.hasOwn(text, 'raw')) {
+ return toString(text.raw);
+ }
+ if (Tools.is(text, 'array')) {
+ var values_1 = text.slice(1);
+ text = getLangData(text[0]).replace(/\{([0-9]+)\}/g, function ($1, $2) {
+ return Tools.hasOwn(values_1, $2) ? toString(values_1[$2]) : $1;
+ });
+ }
+ return getLangData(text).replace(/{context:\w+}$/, '');
+ },
+ data: data
+ };
+
+ var DOM$9 = DOMUtils$1.DOM;
+ var explode$4 = Tools.explode, each$m = Tools.each, extend$5 = Tools.extend;
+ var instanceCounter = 0, beforeUnloadDelegate, EditorManager, boundGlobalEvents = false;
+ var legacyEditors = [];
+ var editors = [];
+ var isValidLegacyKey = function (id) {
+ return id !== 'length';
+ };
+ var globalEventDelegate = function (e) {
+ each$m(EditorManager.get(), function (editor) {
+ if (e.type === 'scroll') {
+ editor.fire('ScrollWindow', e);
+ } else {
+ editor.fire('ResizeWindow', e);
+ }
+ });
+ };
+ 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;
+ };
+ EditorManager = {
+ defaultSettings: {},
+ $: DomQuery,
+ majorVersion: '4',
+ minorVersion: '9.2',
+ releaseDate: '2018-12-17',
+ editors: legacyEditors,
+ i18n: I18n,
+ activeEditor: null,
+ settings: {},
+ setup: function () {
+ var self$$1 = this;
+ var baseURL, documentBaseURL, suffix = '', preInit, src;
+ documentBaseURL = URI.getDocumentBaseUrl(document.location);
+ if (/^[^:]+:\/\/\/?[^\/]+\//.test(documentBaseURL)) {
+ documentBaseURL = documentBaseURL.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, '');
+ if (!/[\/\\]$/.test(documentBaseURL)) {
+ documentBaseURL += '/';
+ }
+ }
+ 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++) {
+ src = scripts[i].src;
+ 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) {
+ src = document.currentScript.src;
+ if (src.indexOf('.min') !== -1) {
+ suffix = '.min';
+ }
+ baseURL = src.substring(0, src.lastIndexOf('/'));
+ }
+ }
+ self$$1.baseURL = new URI(documentBaseURL).toAbsolute(baseURL);
+ self$$1.documentBaseURL = documentBaseURL;
+ self$$1.baseURI = new URI(self$$1.baseURL);
+ self$$1.suffix = suffix;
+ FocusController.setup(self$$1);
+ },
+ overrideDefaults: function (defaultSettings) {
+ var baseUrl, suffix;
+ baseUrl = defaultSettings.base_url;
+ if (baseUrl) {
+ this.baseURL = new URI(this.documentBaseURL).toAbsolute(baseUrl.replace(/\/+$/, ''));
+ this.baseURI = new URI(this.baseURL);
+ }
+ suffix = defaultSettings.suffix;
+ if (defaultSettings.suffix) {
+ this.suffix = suffix;
+ }
+ this.defaultSettings = defaultSettings;
+ var pluginBaseUrls = defaultSettings.plugin_base_urls;
+ for (var name$$1 in pluginBaseUrls) {
+ AddOnManager.PluginManager.urls[name$$1] = pluginBaseUrls[name$$1];
+ }
+ },
+ init: function (settings) {
+ var self$$1 = this;
+ var result, invalidInlineTargets;
+ invalidInlineTargets = Tools.makeMap('area base basefont br col frame hr img input isindex link meta param embed source wbr track ' + 'colgroup option tbody tfoot thead tr 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 = elm.name;
+ if (id && !DOM$9.get(id)) {
+ id = elm.name;
+ } else {
+ id = DOM$9.uniqueId();
+ }
+ elm.setAttribute('id', id);
+ }
+ return id;
+ };
+ var execCallback = function (name$$1) {
+ var callback = settings[name$$1];
+ if (!callback) {
+ return;
+ }
+ return callback.apply(self$$1, Array.prototype.slice.call(arguments, 2));
+ };
+ var hasClass = function (elm, className) {
+ return className.constructor === RegExp ? className.test(elm.className) : DOM$9.hasClass(elm, className);
+ };
+ var findTargets = function (settings) {
+ var l, targets = [];
+ if (Env.ie && Env.ie < 11) {
+ ErrorReporter.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 [];
+ }
+ if (settings.types) {
+ each$m(settings.types, function (type) {
+ targets = targets.concat(DOM$9.select(type.selector));
+ });
+ return targets;
+ } else if (settings.selector) {
+ return DOM$9.select(settings.selector);
+ } else if (settings.target) {
+ return [settings.target];
+ }
+ switch (settings.mode) {
+ case 'exact':
+ l = settings.elements || '';
+ if (l.length > 0) {
+ each$m(explode$4(l), function (id) {
+ var elm;
+ if (elm = DOM$9.get(id)) {
+ targets.push(elm);
+ } else {
+ each$m(document.forms, function (f) {
+ each$m(f.elements, function (e) {
+ if (e.name === id) {
+ id = 'mce_editor_' + instanceCounter++;
+ DOM$9.setAttrib(e, 'id', id);
+ targets.push(e);
+ }
+ });
+ });
+ }
+ });
+ }
+ break;
+ case 'textareas':
+ case 'specific_textareas':
+ each$m(DOM$9.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$$1);
+ editors.push(editor);
+ editor.on('init', function () {
+ if (++initCount === targets.length) {
+ provideResults(editors);
+ }
+ });
+ editor.targetElm = editor.targetElm || targetElm;
+ editor.render();
+ };
+ DOM$9.unbind(window, 'ready', initEditors);
+ execCallback('onpageload');
+ targets = DomQuery.unique(findTargets(settings));
+ if (settings.types) {
+ each$m(settings.types, function (type) {
+ Tools.each(targets, function (elm) {
+ if (DOM$9.is(elm, type.selector)) {
+ createEditor(createId(elm), extend$5({}, settings, type), elm);
+ return false;
+ }
+ return true;
+ });
+ });
+ return;
+ }
+ Tools.each(targets, function (elm) {
+ purgeDestroyedEditor(self$$1.get(elm.id));
+ });
+ targets = Tools.grep(targets, function (elm) {
+ return !self$$1.get(elm.id);
+ });
+ if (targets.length === 0) {
+ provideResults([]);
+ } else {
+ each$m(targets, function (elm) {
+ if (isInvalidInlineTarget(settings, elm)) {
+ ErrorReporter.initError('Could not initialize inline editor on invalid inline target element', elm);
+ } else {
+ createEditor(createId(elm), settings, elm);
+ }
+ });
+ }
+ };
+ self$$1.settings = settings;
+ DOM$9.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$$1 = this;
+ var existingEditor;
+ existingEditor = legacyEditors[editor.id];
+ if (existingEditor === editor) {
+ return editor;
+ }
+ if (self$$1.get(editor.id) === null) {
+ if (isValidLegacyKey(editor.id)) {
+ legacyEditors[editor.id] = editor;
+ }
+ legacyEditors.push(editor);
+ editors.push(editor);
+ }
+ toggleGlobalEvents(true);
+ self$$1.activeEditor = editor;
+ self$$1.fire('AddEditor', { editor: editor });
+ if (!beforeUnloadDelegate) {
+ beforeUnloadDelegate = function () {
+ self$$1.fire('BeforeUnload');
+ };
+ DOM$9.bind(window, 'beforeunload', beforeUnloadDelegate);
+ }
+ return editor;
+ },
+ createEditor: function (id, settings) {
+ return this.add(new Editor(id, settings, this));
+ },
+ remove: function (selector) {
+ var self$$1 = this;
+ var i, editor;
+ if (!selector) {
+ for (i = editors.length - 1; i >= 0; i--) {
+ self$$1.remove(editors[i]);
+ }
+ return;
+ }
+ if (isString(selector)) {
+ each$m(DOM$9.select(selector), function (elm) {
+ editor = self$$1.get(elm.id);
+ if (editor) {
+ self$$1.remove(editor);
+ }
+ });
+ return;
+ }
+ editor = selector;
+ if (isNull(self$$1.get(editor.id))) {
+ return null;
+ }
+ if (removeEditorFromList(editor)) {
+ self$$1.fire('RemoveEditor', { editor: editor });
+ }
+ if (editors.length === 0) {
+ DOM$9.unbind(window, 'beforeunload', beforeUnloadDelegate);
+ }
+ editor.remove();
+ toggleGlobalEvents(editors.length > 0);
+ return editor;
+ },
+ execCommand: function (cmd, ui, value) {
+ var self$$1 = this, editor = self$$1.get(value);
+ switch (cmd) {
+ case 'mceAddEditor':
+ if (!self$$1.get(value)) {
+ new Editor(value, self$$1.settings, self$$1).render();
+ }
+ return true;
+ case 'mceRemoveEditor':
+ if (editor) {
+ editor.remove();
+ }
+ return true;
+ case 'mceToggleEditor':
+ if (!editor) {
+ self$$1.execCommand('mceAddEditor', 0, value);
+ return true;
+ }
+ if (editor.isHidden()) {
+ editor.show();
+ } else {
+ editor.hide();
+ }
+ return true;
+ }
+ if (self$$1.activeEditor) {
+ return self$$1.activeEditor.execCommand(cmd, ui, value);
+ }
+ return false;
+ },
+ triggerSave: function () {
+ each$m(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;
+ }
+ };
+ extend$5(EditorManager, Observable);
+ EditorManager.setup();
+ var EditorManager$1 = EditorManager;
+
+ function RangeUtils(dom) {
+ var walk = function (rng, callback) {
+ return RangeWalk.walk(dom, rng, callback);
+ };
+ var split = SplitRange.split;
+ var normalize = function (rng) {
+ return NormalizeRange.normalize(dom, rng).fold(constant(false), function (normalizedRng) {
+ rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset);
+ rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset);
+ return true;
+ });
+ };
+ return {
+ walk: walk,
+ split: split,
+ normalize: normalize
+ };
+ }
+ (function (RangeUtils) {
+ RangeUtils.compareRanges = RangeCompare.isEq;
+ RangeUtils.getCaretRangeFromPoint = CaretRangeFromPoint.fromPoint;
+ RangeUtils.getSelectedNode = getSelectedNode;
+ RangeUtils.getNode = getNode;
+ }(RangeUtils || (RangeUtils = {})));
+ var RangeUtils$1 = RangeUtils;
+
+ var min = Math.min, max = Math.max, round$2 = Math.round;
+ var relativePosition = function (rect, targetRect, rel) {
+ var x, y, w, h, targetW, targetH;
+ x = targetRect.x;
+ y = targetRect.y;
+ w = rect.w;
+ h = rect.h;
+ targetW = targetRect.w;
+ targetH = targetRect.h;
+ rel = (rel || '').split('');
+ if (rel[0] === 'b') {
+ y += targetH;
+ }
+ if (rel[1] === 'r') {
+ x += targetW;
+ }
+ if (rel[0] === 'c') {
+ y += round$2(targetH / 2);
+ }
+ if (rel[1] === 'c') {
+ x += round$2(targetW / 2);
+ }
+ if (rel[3] === 'b') {
+ y -= h;
+ }
+ if (rel[4] === 'r') {
+ x -= w;
+ }
+ if (rel[3] === 'c') {
+ y -= round$2(h / 2);
+ }
+ if (rel[4] === 'c') {
+ x -= round$2(w / 2);
+ }
+ return create$3(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$3(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2);
+ };
+ var intersect = function (rect, cropRect) {
+ var x1, y1, x2, y2;
+ x1 = max(rect.x, cropRect.x);
+ y1 = max(rect.y, cropRect.y);
+ x2 = min(rect.x + rect.w, cropRect.x + cropRect.w);
+ y2 = min(rect.y + rect.h, cropRect.y + cropRect.h);
+ if (x2 - x1 < 0 || y2 - y1 < 0) {
+ return null;
+ }
+ return create$3(x1, y1, x2 - x1, y2 - y1);
+ };
+ var clamp$1 = function (rect, clampRect, fixedSize) {
+ var underflowX1, underflowY1, overflowX2, overflowY2, x1, y1, x2, y2, cx2, cy2;
+ x1 = rect.x;
+ y1 = rect.y;
+ x2 = rect.x + rect.w;
+ y2 = rect.y + rect.h;
+ cx2 = clampRect.x + clampRect.w;
+ cy2 = clampRect.y + clampRect.h;
+ underflowX1 = max(0, clampRect.x - x1);
+ underflowY1 = max(0, clampRect.y - y1);
+ overflowX2 = max(0, x2 - cx2);
+ 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$3(x1, y1, x2 - x1, y2 - y1);
+ };
+ var create$3 = function (x, y, w, h) {
+ return {
+ x: x,
+ y: y,
+ w: w,
+ h: h
+ };
+ };
+ var fromClientRect = function (clientRect) {
+ return create$3(clientRect.left, clientRect.top, clientRect.width, clientRect.height);
+ };
+ var Rect = {
+ inflate: inflate,
+ relativePosition: relativePosition,
+ findBestRelativePosition: findBestRelativePosition,
+ intersect: intersect,
+ clamp: clamp$1,
+ create: create$3,
+ fromClientRect: fromClientRect
+ };
+
+ var types = {};
+ var Factory = {
+ add: function (type, typeClass) {
+ types[type.toLowerCase()] = typeClass;
+ },
+ has: function (type) {
+ return !!types[type.toLowerCase()];
+ },
+ get: function (type) {
+ var lctype = type.toLowerCase();
+ var controlType = types.hasOwnProperty(lctype) ? types[lctype] : null;
+ if (controlType === null) {
+ throw new Error('Could not find module for type: ' + type);
+ }
+ return controlType;
+ },
+ create: function (type, settings) {
+ var ControlType;
+ if (typeof type === 'string') {
+ settings = settings || {};
+ settings.type = type;
+ } else {
+ settings = type;
+ type = settings.type;
+ }
+ type = type.toLowerCase();
+ ControlType = types[type];
+ if (!ControlType) {
+ throw new Error('Could not find control by type: ' + type);
+ }
+ ControlType = new ControlType(settings);
+ ControlType.type = type;
+ return ControlType;
+ }
+ };
+
+ var each$n = Tools.each, extend$6 = Tools.extend;
+ var extendClass, initializing;
+ var Class = function () {
+ };
+ Class.extend = extendClass = function (prop) {
+ var self = this;
+ var _super = self.prototype;
+ var prototype, name, member;
+ 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;
+ var ret;
+ self._super = _super[name];
+ ret = fn.apply(self, arguments);
+ self._super = tmp;
+ return ret;
+ };
+ };
+ initializing = true;
+ prototype = new self();
+ initializing = false;
+ if (prop.Mixins) {
+ each$n(prop.Mixins, function (mixin) {
+ for (var name_1 in mixin) {
+ if (name_1 !== 'init') {
+ prop[name_1] = mixin[name_1];
+ }
+ }
+ });
+ if (_super.Mixins) {
+ prop.Mixins = _super.Mixins.concat(prop.Mixins);
+ }
+ }
+ if (prop.Methods) {
+ each$n(prop.Methods.split(','), function (name) {
+ prop[name] = dummy;
+ });
+ }
+ if (prop.Properties) {
+ each$n(prop.Properties.split(','), function (name) {
+ var fieldName = '_' + name;
+ prop[name] = function (value) {
+ var self = this;
+ if (value !== undefined) {
+ self[fieldName] = value;
+ return self;
+ }
+ return self[fieldName];
+ };
+ });
+ }
+ if (prop.Statics) {
+ each$n(prop.Statics, function (func, name) {
+ Class[name] = func;
+ });
+ }
+ if (prop.Defaults && _super.Defaults) {
+ prop.Defaults = extend$6({}, _super.Defaults, prop.Defaults);
+ }
+ for (name in prop) {
+ member = prop[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$3 = 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, d, minRGB, maxRGB;
+ h = 0;
+ s = 0;
+ v = 0;
+ r = r / 255;
+ g = g / 255;
+ b = b / 255;
+ minRGB = min$1(r, min$1(g, b));
+ maxRGB = max$1(r, max$1(g, b));
+ if (minRGB === maxRGB) {
+ v = minRGB;
+ return {
+ h: 0,
+ s: 0,
+ v: v * 100
+ };
+ }
+ 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$3(h),
+ s: round$3(s * 100),
+ v: round$3(v * 100)
+ };
+ };
+ var hsvToRgb = function (hue, saturation, brightness) {
+ var side, chroma, x, match;
+ 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$3(255 * brightness);
+ return;
+ }
+ side = hue / 60;
+ chroma = brightness * saturation;
+ x = chroma * (1 - Math.abs(side % 2 - 1));
+ 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$3(255 * (r + match));
+ g = round$3(255 * (g + match));
+ b = round$3(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 (o, quote) {
+ var i, v, t, name;
+ quote = quote || '"';
+ if (o === null) {
+ return 'null';
+ }
+ t = typeof o;
+ if (t === 'string') {
+ v = '\bb\tt\nn\ff\rr""\'\'\\\\';
+ return quote + o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g, function (a, b) {
+ if (quote === '"' && a === '\'') {
+ return a;
+ }
+ i = v.indexOf(b);
+ if (i + 1) {
+ return '\\' + v.charAt(i + 1);
+ }
+ a = b.charCodeAt().toString(16);
+ return '\\u' + '0000'.substring(a.length) + a;
+ }) + quote;
+ }
+ if (t === 'object') {
+ if (o.hasOwnProperty && Object.prototype.toString.call(o) === '[object Array]') {
+ for (i = 0, v = '['; i < o.length; i++) {
+ v += (i > 0 ? ',' : '') + serialize(o[i], quote);
+ }
+ return v + ']';
+ }
+ v = '{';
+ for (name in o) {
+ if (o.hasOwnProperty(name)) {
+ v += typeof o[name] !== 'function' ? (v.length > 1 ? ',' + quote : quote) + name + quote + ':' + serialize(o[name], quote) : '';
+ }
+ }
+ return v + '}';
+ }
+ return '' + o;
+ };
+ var JSON$1 = {
+ 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$1.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 = {
+ 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 {
+ 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 ? false : true;
+ settings.data = settings.data || '';
+ XHR.fire('beforeInitialize', { settings: settings });
+ xhr = XMLHttpRequest();
+ if (xhr) {
+ 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();
+ }
+ setTimeout(ready, 10);
+ }
+ }
+ };
+ Tools.extend(XHR, Observable);
+
+ var extend$7 = Tools.extend;
+ var JSONRequest = function (settings) {
+ this.settings = extend$7({}, 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;
+ args = extend$7(this.settings, args);
+ args.success = function (c, x) {
+ c = JSON$1.parse(c);
+ if (typeof c === 'undefined') {
+ c = { error: 'JSON Parse error.' };
+ }
+ if (c.error) {
+ ecb.call(args.error_scope || args.scope, c.error, x);
+ } else {
+ scb.call(args.success_scope || args.scope, c.result);
+ }
+ };
+ args.error = function (ty, x) {
+ if (ecb) {
+ ecb.call(args.error_scope || args.scope, ty, x);
+ }
+ };
+ args.data = JSON$1.serialize({
+ id: args.id || 'c' + this.count++,
+ method: args.method,
+ params: args.params
+ });
+ args.content_type = 'application/json';
+ XHR.send(args);
+ }
+ };
+
+ var create$4 = 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$$1;
+ try {
+ localStorage$$1 = window.localStorage;
+ } catch (e) {
+ localStorage$$1 = create$4();
+ }
+ var LocalStorage = localStorage$$1;
+
+ var tinymce = EditorManager$1;
+ var publicApi = {
+ geom: { Rect: Rect },
+ util: {
+ Promise: promiseObj,
+ Delay: Delay,
+ Tools: Tools,
+ VK: VK,
+ URI: URI,
+ Class: Class,
+ EventDispatcher: Dispatcher,
+ Observable: Observable,
+ I18n: I18n,
+ XHR: XHR,
+ JSON: JSON$1,
+ JSONRequest: JSONRequest,
+ JSONP: JSONP,
+ LocalStorage: LocalStorage,
+ Color: Color
+ },
+ dom: {
+ EventUtils: EventUtils,
+ Sizzle: Sizzle,
+ DomQuery: DomQuery,
+ TreeWalker: TreeWalker,
+ DOMUtils: DOMUtils$1,
+ ScriptLoader: ScriptLoader,
+ RangeUtils: RangeUtils$1,
+ Serializer: Serializer$1,
+ ControlSelection: ControlSelection,
+ BookmarkManager: BookmarkManager$1,
+ Selection: Selection,
+ Event: EventUtils.Event
+ },
+ html: {
+ Styles: Styles,
+ Entities: Entities,
+ Node: Node$2,
+ Schema: Schema,
+ SaxParser: SaxParser$1,
+ DomParser: DomParser,
+ Writer: Writer,
+ Serializer: Serializer
+ },
+ ui: { Factory: Factory },
+ Env: Env,
+ AddOnManager: AddOnManager,
+ Annotator: Annotator,
+ Formatter: Formatter,
+ UndoManager: UndoManager,
+ EditorCommands: EditorCommands,
+ WindowManager: WindowManager,
+ NotificationManager: NotificationManager,
+ EditorObservable: EditorObservable$1,
+ Shortcuts: Shortcuts,
+ Editor: Editor,
+ FocusManager: FocusManager,
+ EditorManager: EditorManager$1,
+ DOM: DOMUtils$1.DOM,
+ ScriptLoader: ScriptLoader.ScriptLoader,
+ PluginManager: AddOnManager.PluginManager,
+ ThemeManager: AddOnManager.ThemeManager,
+ 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
+ };
+ tinymce = Tools.extend(tinymce, publicApi);
+ var Tinymce = tinymce;
+
+ 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/tinymce-31850548e5497145232118f93e5f8e31f1655790c0bfbd2ca754f0d4587deaaa.js.gz b/public/assets/tinymce/tinymce-31850548e5497145232118f93e5f8e31f1655790c0bfbd2ca754f0d4587deaaa.js.gz
new file mode 100644
index 00000000..1238cad0
Binary files /dev/null and b/public/assets/tinymce/tinymce-31850548e5497145232118f93e5f8e31f1655790c0bfbd2ca754f0d4587deaaa.js.gz differ
diff --git a/public/assets/tinymce/tinymce.js b/public/assets/tinymce/tinymce.js
index 556ed8f3..032b8e1e 120000
--- a/public/assets/tinymce/tinymce.js
+++ b/public/assets/tinymce/tinymce.js
@@ -1 +1 @@
-tinymce-1098dd3a232d42146ff7bf2cdffed0f7358ac2cf1798aa209abc7ab367ff59f4.js
\ No newline at end of file
+tinymce-31850548e5497145232118f93e5f8e31f1655790c0bfbd2ca754f0d4587deaaa.js
\ No newline at end of file
diff --git a/public/assets/tinymce/tinymce.js.gz b/public/assets/tinymce/tinymce.js.gz
index 9904abf6..7cfa9a5f 120000
--- a/public/assets/tinymce/tinymce.js.gz
+++ b/public/assets/tinymce/tinymce.js.gz
@@ -1 +1 @@
-tinymce-1098dd3a232d42146ff7bf2cdffed0f7358ac2cf1798aa209abc7ab367ff59f4.js.gz
\ No newline at end of file
+tinymce-31850548e5497145232118f93e5f8e31f1655790c0bfbd2ca754f0d4587deaaa.js.gz
\ No newline at end of file